2010-11-08 6 views
22

Je crée l'application Android où la notification push C2DM est utilisée. Mais j'ai un problème en créant le code php pour utiliser c2dm pour envoyer des messages. s'il vous plaît guidez-moi comment utiliser le code php pour envoyer les messages. En fait, il y a un problème à ce propos: comment obtenir un jeton d'authentification client. J'ai vu l'URL http://code.google.com/android/c2dm/index.html#server mais selon ce que j'ai créé l'application android et j'ai reçu l'id d'enregistrement aussi et j'envoie aussi à l'utilisateur mais comment le serveur utilise ceci pour envoyer l'application.Implémentation de C2DM Code PHP

Y at-il quelque chose de nécessaire pour le serveur de l'appareil Android pour envoyer les messages ?.

Répondre

45

Pour enregistrer votre propre système de serveur et obtenir les Authorize Tokens (ce que Cpt Ohlund proposé.):

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


     session_start(); 
     if(isset($_SESSION['google_auth_id']) && $_SESSION['google_auth_id'] != null) 
      return $_SESSION['google_auth_id']; 

     // get an authorization token 
     $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); 

     // for debugging the request 
     //curl_setopt($ch, CURLINFO_HEADER_OUT, true); // for debugging the request 

     $response = curl_exec($ch); 

     //var_dump(curl_getinfo($ch)); //for debugging the request 
     //var_dump($response); 

     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; 
     } 

     $_SESSION['google_auth_id'] = $matches[2]; 
     return $matches[2]; 
    } 

pour envoyer un message à un téléphone:

// $msgType: all messages with same type may be "collapsed": if multiple are sent, 
// only the last will be received by phone. 
function sendMessageToPhone($authCode, $deviceRegistrationId, $msgType, $messageText) { 

      $headers = array('Authorization: GoogleLogin auth=' . $authCode); 
      $data = array(
       'registration_id' => $deviceRegistrationId, 
       'collapse_key' => $msgType, 
       'data.message' => $messageText //TODO Add more params with just simple data instead   
      ); 

      $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; 
     } 
+1

Session utilise des cookies, n'est-ce pas? Comment cela fonctionne-t-il pour un script de serveur? –

+0

Oui, la session utilise des cookies en général. Ici, la session est utilisée UNIQUEMENT pour omettre une demande d'authentification inutile si le jeton d'authentification est connu. C'est tout. Si vous appelez ce script depuis un autre script, ce mécanisme n'est pas nécessaire car votre script sait s'il possède déjà un jeton d'authentification, n'est-ce pas? – Yar

+0

Si je lance le script à partir de cron, j'ai besoin d'un moyen de stocker le jeton auth. Je suppose que ce ne sera pas la session. –

3

Check out out: http://www.toppa.com/2010/google-clientlogin-php-example/ Sinon, je reviendrai vers vous, car j'essaierai C2DM plus tard cette semaine.

+0

je veux demander 1 nouvelle chose que d'où jeton est d'être généré à partir de l'appareil Android ou du serveur d'application. ici périphérique android est utilisé pour recevoir uniquement les messages envoyés par le serveur d'application. Je ne veux pas envoyer de messages à partir de l'appareil Android –

+0

Salut S'il vous plaît dites-moi qui va envoyer la demande pour authtoken son de l'application android ou endserver. –

0

J'ai essayé d'utiliser le code php qui a été accepté comme réponse correcte mais cela ne fonctionne pas. Je reçois le code http de réponse comme "0".

J'ai trouvé le même code dans le following link

Besoin d'aide des experts ici.