Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 未从推送服务器端获取推送通知_Php_Google Cloud Messaging - Fatal编程技术网

Php 未从推送服务器端获取推送通知

Php 未从推送服务器端获取推送通知,php,google-cloud-messaging,Php,Google Cloud Messaging,我通过php代码从服务器端推送消息,总共有6个android设备,当我通过php脚本从服务器端推送消息时,我得到下面的响应,我在4个设备中收到通知,但在2个设备中没有收到任何通知,我看到“成功”:6,这两个android设备id打印在结果JSON响应中,“规范id”:2 PHP脚本: <?php $registatoin_ids = array("XXXXXXX","XXXXXXX","XXXXXXX","XXXXXXX","XXXXXXX","XXXXXXX","XXXXXXX") d

我通过php代码从服务器端推送消息,总共有6个android设备,当我通过php脚本从服务器端推送消息时,我得到下面的响应,我在4个设备中收到通知,但在2个设备中没有收到任何通知,我看到“成功”:6,这两个android设备id打印在结果JSON响应中,“规范id”: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;
?>

具有规范ID的两个设备已将其旧注册ID替换为新注册ID。规范Id是这个新Id,您应该使用它在将来的请求中发送通知

从官方文件:

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

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


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

首先,对问题进行更详细的描述,并进行相应的标记。说到问题,它的设备的问题,假设你在所有设备上运行相同的代码。因为没有谷歌的错误响应。考虑到我们完全不知道你所说的“设备”或“服务器”或“推送”系统。这需要更多的澄清之前,任何人都可以说任何关于它。嗨Deceze然后为重播你,你能请审查我的代码。希望你能再次给我回复谢谢。非常感谢s.schmid,我的问题现在解决了,我正在更改GMC id。@Rajududrejiya如果你的问题解决了,请接受答案,这样问题就被标记为关闭。
{
"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"
    }
]
}