2015-08-14 127 views
0

我通过php代码从服务器端推消息,总共有6个android设备,当我通过我的php脚本推送消息,然后我得到下面的响应,我得到通知4设备,但在2我以前不得到任何通知,我看到了 “成功”:6,在结果JSON响应另外这两个Android设备ID打印,而 “canonical_ids”:2 PHP脚本:没有从推到服务器端的推送通知

<?php 
$registatoin_ids = array("XXXXXXX","XXXXXXX","XXXXXXX","XXXXXXX","XXXXXXX","XXXXXXX","XXXXXXX") 
define('API_ACCESS_KEY', 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'); 
        $message = array("notification_status"=>1,"message"=>"Hello Android"); // Response for android 

        $fields = array 
        (
         'registration_ids' => $registatoin_ids, 
         'data'    => array("price" => $message) 
        ); 
        $headers = array 
        (
         'Authorization: key=' . API_ACCESS_KEY, 
         'Content-Type: application/json' 
        ); 
        $ch = curl_init(); 
        curl_setopt($ch,CURLOPT_URL, 'https://android.googleapis.com/gcm/send'); 
        curl_setopt($ch,CURLOPT_POST, true); 
        curl_setopt($ch,CURLOPT_HTTPHEADER, $headers); 
        curl_setopt($ch,CURLOPT_RETURNTRANSFER, true); 
        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false); 
        curl_setopt($ch,CURLOPT_POSTFIELDS, json_encode($fields)); 
        $result = curl_exec($ch); 
        curl_close($ch); 
        echo $result; 
?> 

响应:

{ 
"multicast_id": 5091283388403222000, 
"success": 6, 
"failure": 0, 
"canonical_ids": 2, 
"results": [ 
    { 
     "registration_id": "XXXXXXXXXXXXXXXXXXXXXXXXXXX", 
     "message_id": "0:1439532747953065%12153c37f9fd7ecd" 
    }, 
    { 
     "registration_id": "XXXXXXXXXXXXXXXXXXXXXXXXXXX", 
     "message_id": "0:1439532747954730%12153c37f9fd7ecd" 
    }, 
    { 
     "message_id": "0:1439532747954278%12153c37f9fd7ecd" 
    }, 
    { 
     "message_id": "0:1439532747963956%12153c37f9fd7ecd" 
    }, 
    { 
     "message_id": "0:1439532747953665%12153c37f9fd7ecd" 
    }, 
    { 
     "message_id": "0:1439532747954836%12153c37f9fd7ecd" 
    } 
] 
} 
+0

首先,对问题和标签进行更具描述性的描述。 即将到来的问题,其设备的问题,假设你运行相同的代码。因为谷歌没有错误回应。 – Raja

+0

想象一下,我们有**绝对不知道你在谈论什么样的“设备”或“服务器”或“推”系统。在任何人能够对此事进行任何说明之前,这需要更多的澄清。 – deceze

+0

嗨Deceze然后让你重播,你可以请检阅我的代码。并希望你能再次给我答复,谢谢。 –

回答

2

带有规范ID的两个设备已将其替换为旧的注册ID与新的注册ID。规范ID是这个新的,你应该用它来发送未来请求中的通知。

从官方文档:

[...]甲规范登记ID是由客户端应用程序所请求的上次登记的登记令牌。这是服务器在向设备发送消息时应使用的ID。

如果您尝试使用旧的注册令牌发送消息,GCM将像往常一样处理请求,但它会在响应的registration_id字段中包含规范ID。 (这是为什么显示所有设备“成功”)请确保使用此规范ID替换存储在服务器中的注册令牌,因为最终旧注册令牌将停止工作

因此,通常情况下,如果您尝试使用两个新ID再次发送通知,设备应该照常接收通知。

+0

非常感谢s.schmid,我的问题现在解决了,我改变了GMC id。 –

+0

@RajuDudhrejiya如果您的问题已解决,请接受答案,以便将问题标记为已关闭。 – sschmid