2011-06-20 25 views
0

AndroidでC2DMを実装しようとしています。 C2DM Serverに登録した後、登録コードを取得することができます。しかし、サードパーティのサーバーからメッセージを送信すると、メッセージ "メッセージ送信"とエラーコード200がログに表示されます。これは、サードパーティのサーバーがメッセージを正常に送信したことを意味します。私の問題は、私はデバイスでメッセージを受信することができないことです。AndroidでC2DMを実装する方法

答えて

0
function googleAuthenticate($username, $password, $source="Company-AppName-Version", $service="ac2dm"){ 

     $ch = curl_init(); 
     if(!$ch){ 
      return false; 
     } 
     curl_setopt($ch, CURLOPT_URL, "https://www.google.com/accounts/ClientLogin"); 
     $post_fields = "accountType=" . urlencode('HOSTED_OR_GOOGLE') 
     . "&Email=" . urlencode($username) 
     . "&Passwd=" . urlencode($password) 
     . "&source=" . urlencode($source) 
     . "&service=" . urlencode($service); 
     curl_setopt($ch, CURLOPT_HEADER, true); 
     curl_setopt($ch, CURLOPT_POST, true); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
     curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);  
     curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
     $response = curl_exec($ch); 
     curl_close($ch); 
     if (strpos($response, '200 OK') === false) { 
     return false; 
     } 
     // find the auth code 
     preg_match("/(Auth=)([\w|-]+)/", $response, $matches); 

     if (!$matches[2]) { 
     return false; 
     } 
     return $matches[2]; 
    } 

    // send message to android, The message size limit is 1024 bytes in android 

    function c2dmSendMessageToPhone($authCode, $deviceRegistrationId, $msgType, $messageText,$extraArr) { 
      $headers = array('Authorization: GoogleLogin auth=' . $authCode); 
      $data1 = array(
        'registration_id' => $deviceRegistrationId, 
        'collapse_key' => $msgType, 
        'data.msg' => $messageText   
        ); 
      $data2 = array(); 
      // append 'data' string in key of the array 
      if(!empty($extraArr)){ 
        foreach($extraArr as $k => $v){ 
         $data2['data.'.$k] = $v; 
         unset($extraArr[$k]); 
        } 
      } 

      $data = array_merge($data1,$data2); 
      $ch = curl_init(); 
      curl_setopt($ch, CURLOPT_URL, "https://android.apis.google.com/c2dm/send"); 
      if ($headers) 
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
      curl_setopt($ch, CURLOPT_POST, true); 
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
      curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 

      $response = curl_exec($ch); 
      curl_close($ch); 
      return $response; 
    } 
0

誰もがGoogleの変化に注意する必要があります。

C2DMが廃止されており、Google Cloud Messaging for Android (GCM)に置き換えられました。 Googleの声明:

Important: C2DM has been officially deprecated as of June 26, 2012. 
This means that C2DM has stopped accepting new users and quota requests. 
No new features will be added to C2DM. However, apps using C2DM will continue to work. 
Existing C2DM developers are encouraged to migrate to the new version of C2DM, 
called Google Cloud Messaging for Android (GCM). 
See the C2DM-to-GCM Migration document for more information. 
Developers must use GCM for new development. 

C2DMからmigrationためdemo app tutorial for GCMもがあります。

関連する問題