Не удается прочитать ответ сервера GCM с использованием библиотеки JAXL php

Я могу подключиться к серверу, но не могу прочитать сообщения-подтверждения, отправленные сервером 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>

2 ответа

Решение

О, я понял, так как ответное сообщение не имело никакого типа, я должен добавить обратный вызов '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.

Другие вопросы по тегам