2010-11-08 18 views
22

Estoy creando la aplicación Android donde se usa la notificación push C2DM. Pero tengo un problema al crear el código php para usar c2dm para enviar mensajes. por favor, guíame sobre cómo usar el código php para enviar los mensajes. En realidad, hay un problema al respecto de cómo obtener el token de autenticación del cliente. He visto la url http://code.google.com/android/c2dm/index.html#server, pero de acuerdo con esto he creado la aplicación de Android y también obtuve la identificación de registro y también la envío al usuario, pero cómo el servidor la usa para enviar la aplicación.Implementación C2DM Código PHP

¿hay algo necesario para que el servidor del dispositivo Android envíe los mensajes ?.

Respuesta

45

Para registrar su propio sistema de servidor y obtener los tokens autorice (esto es lo que Cpt Ohlund propuso.):

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

para enviar un mensaje a un teléfono:

// $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

La sesión usa cookies, ¿no es así? ¿Cómo funciona eso para un script de servidor? –

+0

Sí, la sesión usa cookies en general. Aquí la sesión se usa ÚNICAMENTE para omitir la solicitud de autenticación innecesaria, si se conoce auth token. Eso es todo. Si llama a este script desde otro script este mecanismo no es necesario ya que su script sabe si ya posee un token de autenticación, ¿no es así? – Yar

+0

Si ejecuto el script desde cron, necesito una forma de almacenar el token de autenticación. Supongo que no será sesión. –

3

Mira esto: http://www.toppa.com/2010/google-clientlogin-php-example/ De lo contrario, me pondré en contacto contigo, ya que intentaré C2DM a finales de esta semana.

+0

quiero pedir a 1 cosa nueva que desde donde token es que sea generado desde un dispositivo Android o desde un servidor de aplicaciones. aquí el dispositivo Android se usa para recibir solo mensajes enviados por el servidor de aplicaciones. No quiero enviar mensajes desde el dispositivo Android –

+0

Hola Por favor, dime quién enviará la solicitud de authtoken desde la aplicación de Android o el servidor de fin de mes. –

0

He intentado utilizar el código php que se aceptó como la respuesta correcta, pero no está funcionando. Recibo el código http de respuesta como "0".

me encontré con el mismo código en el following link

necesitan la ayuda de los expertos aquí.