Android C2DM отсутствует ошибка регистрации?

Я реализовал клиент C2DM, который запрашивает идентификатор регистрации с сервера C2DM. Как только приложение получает регистрационный идентификатор, приложения сохраняют идентификатор устройства и регистрационный идентификатор в базе данных сервера. Я реализовал PHP-сервер, но когда я пытаюсь отправить сообщение, я получаю Error = MissingRegistration.

Код сервера PHP

 $url = 'https://www.google.com/accounts/ClientLogin';

$body = '[email protected]&Passwd=password&accountType=GOOGLE&source=MyLittleExample&service=ac2dm';
$c = curl_init ($url);
curl_setopt ($c, CURLOPT_POST, true);
curl_setopt ($c, CURLOPT_POSTFIELDS, $body);
curl_setopt ($c, CURLOPT_RETURNTRANSFER, true);
$page = curl_exec ($c);
$p = explode("Auth=",$page);
curl_close ($c);

$url = 'https://android.apis.google.com/c2dm/send';

$param = // Get Registration id from my sql
$mtype = 'important';
$msg = 'Hello';

$len = strlen($param);
echo $len;
function sendMessageToPhone($authCode, $deviceRegistrationId, $msgType, $messageText) {

        $headers = array('Content-length:300','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;
    }
$data = sendMessageToPhone($p[1],$param,$mtype,$msg);
var_dump($data);

Согласно документу Error = MissingRegistration возникает, если в почтовом запросе нет параметра registration_id. Я даже пытался запустить приложение, жестко запрограммировав регистрационный идентификатор. Любая помощь очень ценится. Спасибо.


person Raghav    schedule 18.02.2012    source источник
comment
Хорошо структурированный и четкий вопрос. Я даже не знаю php и все равно мог все понять. Заслуживает +1. Тем не менее, все еще ищу проблему.   -  person Boris Strandjev    schedule 18.02.2012


Ответы (1)


Ага! И вот возможное решение (взятое из потока об уведомлениях на другом языке, который я не знаю): https://stackoverflow.com/a/8339611/1108032. Пожалуйста, прочтите, что он сказал, решив его проблему. Мне кажется, что что-то подобное должно вас подводить, потому что с точки зрения кода ваш код кажется нормальным.

person Boris Strandjev    schedule 18.02.2012
comment
@ Спасибо, bt все еще борется :( - person Raghav; 18.02.2012
comment
Что вы пробовали из этого поста? Вы пытались снова зарегистрировать свое устройство, чтобы обновить registeration_id? - person Boris Strandjev; 18.02.2012
comment
да, я попробовал, на самом деле после попытки я обнаружил ошибку, т.е. если я установил заголовок в curl, параметры сообщения не отправляются на сервер. Еще раз спасибо :) - person Raghav; 18.02.2012