我通过php代码从服务器端推送消息,总共我有6个android设备,当我从我的PHP脚本推送消息然后我得到以下响应,我在4设备得到通知但在2没有任何通知,我看到“成功”:6,这两个android设备id在结果JSON响应中打印,并且“canonical_ids”:2 PHP SCRIPT:
<?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 :(得分:2)
使用Canonical Ids的两个设备已经用新的注册ID替换了旧的注册ID。 Canonical Id是一个新的,您应该用它来在将来的请求中发送通知。
来自官方文档:
[...]规范注册ID是客户端应用程序请求的最后一次注册的注册令牌。这是服务器在向设备发送消息时应使用的ID。
如果您尝试使用旧的注册令牌发送邮件, GCM将照常处理该请求,但它会在响应的registration_id字段中包含规范ID。 (这就是为什么显示&#34;成功&#34;适用于您的所有设备)确保使用此规范ID替换存储在您服务器中的注册令牌,因为最终是旧注册令牌将停止工作。
通常情况下,如果您尝试使用两个新ID再次发送通知,则设备应照常接收通知。