http://code.google.com/intl/ko/android/c2dm/index.html

구글의 예제에 있는 코드는

안드로이드 앱에 의해 통제가 됩니다.

앱에서 신호를 보내고, 다시 앱으로 받죠.

다시 설명하자면,

앱-구글서버-다시 앱

의 구조로 되어있거든요.

이걸 조금 응용해서 서버에서 메세지를 던져 앱으로 받을수 있게 만들었습니다.

C2DM의 특성상 어플을 구동할때마다 다른 인증키가 나옵니다.

이것과, 개발자로그인 할때 나오는 인증키와 조합해야 push가 됩니다.

먼저 서버쪽 코드부터 보겠습니다.

언어는 PHP입니다.


01<!--?
02    //구글에서 Auth 값 얻어오기
03    $data "&accountType=HOSTED_OR_GOOGLE&Email=******@gmail.com&Passwd=********&service=ac2dm&source=test-1.0";
04 
05    $host "www.google.com";
06 
07    $path "/accounts/ClientLogin";
08     
09     
10    $fp fsockopen("ssl://".$host, 443, $errno$errstr, 30);
11 
12    if($fp)
13    {
14        fputs($fp"POST $path HTTP/1.0\r\n");
15        fputs($fp"Host: $host\r\n");
16        fputs($fp"User-Agent: PHP Script\r\n");
17        fputs($fp"Content-Type: application/x-www-form-urlencoded\r\n");
18        fputs($fp"Content-Length: " strlen($data) . "\r\n");
19        fputs($fp"Connection: close\r\n\r\n");
20        fputs($fp$data "\r\n\r\n");
21        $data '';
22        while (!feof($fp)) {
23            $data .= fgets($fp);
24        }
25        fclose($fp);
26    else {
27    //error
28        echo "$errstr ($errno)\n";
29        return 0;
30    }
31     
32    $response = split("\r\n\r\n"$data);
33    $header $response[0];
34    $responsecontent $response[1];
35    if(!(strpos($header,"Transfer-Encoding: chunked")===false)){
36        $aux=split("\r\n",$responsecontent);
37        for($i=0;$i<count($aux);$i++)
38            if($i==0 || ($i%2==0))
39                $aux[$i]="";
40        $responsecontent=implode("",$aux);
41    }
42     
43     
44    $tmp = split("Auth=",$responsecontent);
45    $result $tmp[1];
46     
47    //얻어온 Auth 값 토대로 Device에 PUSH하기
48    $auth "APA91bFl0a2gh963rI0y3Tu2vtF8PV*************************************OIWawTL6JvDwzpToDjtA1WSjXLh8IYrsI";
49    $data "®istration_id=".$auth."&collapse_key=1&data.msg=data";
50 
51    $host "android.apis.google.com";
52 
53    $path "/c2dm/send";
54 
55     
56    $fp fsockopen("ssl://".$host, 443, $errno$errstr, 30);
57 
58    if($fp)
59    {