Я могу подключиться к серверу, но не могу прочитать сообщения-подтверждения, отправленные сервером gcm. Я хочу знать, как получить XML, отправленный сервером gcm.
Вот мой код:
<?php
require 'jaxl/jaxl.php';
$sender = 'sender id';
$client = new \JAXL(array(
'jid'=>$sender,
'pass'=>'pass',
'auth_type'=>'PLAIN',
'host' => 'gcm.googleapis.com',
'port' => '5235',
'force_tls' => true,
'strict' => FALSE,
'ssl' => TRUE,
'log_level' => JAXL_DEBUG,
'log_path'=> 'ex.txt'
));
$client->add_cb('on_message_stanza', function($msg) {
echo 'now what!!';
});
$client->add_cb('on_auth_success', function() {
echo 'it should';
global $client;
global $sender;
$namespace = 'google:mobile:data';
$arr=array("hello"=>"world");
$json_data=json_encode($arr,JSON_UNESCAPED_SLASHES);
$arr = array('to'=>'server','message_id'=>'123','data'=>$arr);
$json = json_encode($arr);
$xml = new JAXLXml('gcm',$namespace,array(),$json);
$msg = new JAXLXml('message','',array('id'=>'123'),'');
$msg->cnode($xml);
$client->send($msg);
});
$client->add_cb('on_error_message',function()
{
global $client;
echo 'error<br/>';
_info('got on_error_message cb jid'.$client->full_jid->to_string());
});
В обратном вызове «on_auth_success» я отправляю сообщение на сервер gcm, направленное на идентификатор моего сервера, оно отправляет отрицательное подтверждение «nack», которое я вижу в журнале, но я не знаю, как получить это в php код.
XML, полученный gcm согласно журналу:
<message>
<data:gcm xmlns:data="google:mobile:data">{"message_id":"123","from":"someid",
"error_description":"","error":"BAD_REGISTRATION",
"message_type":"nack"}</data:gcm></message>
О, я понял, так как ответное сообщение не имело никакого типа, я должен добавить обратный вызов ‘on__message’ с двумя подчеркиваниями, потому что среднее значение — это значение атрибута типа сообщения, которого у ответа нет ,
Для ACK вы можете использовать тип сообщения ‘normal’, поэтому cb будет выглядеть следующим образом (я просто регистрирую ответ):
$client->add_cb('on_normal_message', function($stanza) {
global $client;
// echo back incoming message stanza
//$stanza->to = $stanza->from;
//$stanza->from = $client->full_jid->to_string();
//$client->send($stanza);
_info('Received response******'.$stanza->to_string());
});
Также: в примере нужно добавить
$client->start();
Для нас новички.
Тогда он отлично работает с GCM.