没有从推送到服务器端的推送通知

时间:2015-08-14 06:21:19

标签: php google-cloud-messaging

我通过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"
    }
]
}

1 个答案:

答案 0 :(得分:2)

使用Canonical Ids的两个设备已经用新的注册ID替换了旧的注册ID。 Canonical Id是一个新的,您应该用它来在将来的请求中发送通知。

来自官方文档:

  

[...]规范注册ID是客户端应用程序请求的最后一次注册的注册令牌。这是服务器在向设备发送消息时应使用的ID。

     

如果您尝试使用旧的注册令牌发送邮件, GCM将照常处理该请求,但它会在响应的registration_id字段中包含规范ID。 (这就是为什么显示&#34;成功&#34;适用于您的所有设备)确保使用此规范ID替换存储在您服务器中的注册令牌,因为最终是旧注册令牌将停止工作

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