【问题标题】:Not getting push notification from push to server-side没有从推送到服务器端收到推送通知
【发布时间】:2015-08-14 06:21:19
【问题描述】:

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

【问题讨论】:

  • 首先,对问题进行更多描述,并进行相关标记。来到这个问题,它的设备的问题,假设你在所有运行相同的代码。因为谷歌没有错误响应。
  • 请考虑我们完全不知道您所说的“设备”或“服务器”或“推送”系统是什么类型的。在任何人能够对此发表任何看法之前,这需要进一步澄清。
  • 嗨,Deceze,请您重播,请您查看我的代码。并希望您能再次给我回复谢谢。

标签: php google-cloud-messaging


【解决方案1】:

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

来自官方文档:

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

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

所以通常情况下,如果您尝试使用两个新 ID 再次发送通知,设备应该会像往常一样收到通知。

【讨论】:

  • 非常感谢 s.schmid,我的问题现在解决了,我正在更改 GMC id。
  • @RajuDudhrejiya 如果您的问题已解决,请接受答案,以便将问题标记为已关闭。
猜你喜欢
  • 1970-01-01
  • 2017-11-18
  • 2014-10-22
  • 1970-01-01
  • 2020-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多