Реализация C2DM PHP-кода - PullRequest
       19

Реализация C2DM PHP-кода

22 голосов
/ 08 ноября 2010

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

Есть ли что-нибудь, что нужно серверу с устройства Android для отправки сообщений?

Ответы [ 5 ]

45 голосов
/ 08 марта 2011

Чтобы зарегистрировать свою собственную серверную систему и получить авторизационные токены (это то, что предложил руководитель 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;
        }
7 голосов
/ 22 ноября 2010

В своем блоге я создал пример работы с 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/

С уважением,

Mike

3 голосов
/ 08 ноября 2010

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

2 голосов
/ 09 июля 2013

Поскольку C2DM официально объявлен устаревшим ( google c2dm )

Я рекомендую использовать новый API GCM, как описано в следующей ссылке: Реализация GCM Php

0 голосов
/ 05 июля 2012

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

Я нашел этот код в по следующей ссылке

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

...