2010-11-08 2 views
22

Я создаю приложение для Android, в котором используется уведомление C2DM push. Но у меня проблема с созданием PHP-кода для использования c2dm для отправки сообщений. пожалуйста, расскажите мне, как использовать php-код для отправки сообщений. На самом деле существует проблема, связанная с этим, как получить токен клиента. Я видел URL-адрес http://code.google.com/android/c2dm/index.html#server, но в соответствии с этим я создал приложение для Android, и я получил идентификатор регистрации, и я также отправляю пользователю, но как сервер использует это для отправки приложения.C2DM реализация PHP-код

есть ли что-нибудь необходимое для сервера с устройства Android для отправки сообщений ?.

ответ

45

Чтобы зарегистрировать свою собственную систему сервера и получить Авторизовать лексем (это то, что предложил кап Ohlund.):

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

чтобы отправить сообщение на телефон:

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

Сессия использует куки-файлы, не так ли? Как это работает для сценария сервера? –

+0

Да, сеанс использует файлы cookie в целом. Здесь сеанс используется ТОЛЬКО для исключения ненужного запроса на аутентификацию, если известен токен аутентификации. Вот и все. Если вы вызываете этот скрипт из другого скрипта, этот механизм не нужен, так как ваш скрипт знает, имеет ли он уже аутентификационный токен, не так ли? – Yar

+0

Если я запускаю скрипт из cron, мне нужен способ хранения токена auth. Думаю, это не будет сессия. –

3

Отметьте: http://www.toppa.com/2010/google-clientlogin-php-example/ В противном случае я вернусь к вам, так как я попробую C2DM позже на этой неделе.

+0

я хочу спросить 1 новую вещь, что от того, где маркер должен быть созданный с устройства Android или сервера приложений. здесь устройство Android используется для приема только сообщений, отправленных сервером приложений. Я не хочу отправлять сообщения с устройства Android. –

+0

Привет, Пожалуйста, скажите мне, кто отправит запрос на authtoken из приложения android. –

7

Я создал пример в своем блоге в работе с Android C2DM. Я использую Zend Framework и пользовательский компонент, который я написал. Он должен предоставить вам основную информацию, которая вам понадобится для обработки вашей реализации Android C2DM в PHP.

Android C2DM PHP ж/Zend Framework: http://blog.digitalstruct.com/2010/11/21/android-c2dm-with-php-and-zend-framework/

С уважением,

Майк

0

Я пробовал использовать PHP-код, который был принят как правильный ответ, но он не работает. Я получаю код http-ответа как «0».

я нашел один и тот же код в following link

Нужна помощь от экспертов здесь.