关于 GCM 中的规范 ID(谷歌云消息传递)

Posted

技术标签:

【中文标题】关于 GCM 中的规范 ID(谷歌云消息传递)【英文标题】:regarding canonical id's in GCM (google cloud messaging) 【发布时间】:2014-11-09 09:34:59 【问题描述】:

我们最近为推送通知应用程序设置了 GCM。服务器 api 在 Node.js 中,所以我使用节点模块 node-gcm 将通知推送到 gcm 服务器。

我们注意到有时数据包没有传递给最终用户。在做了一些搜索之后,我调整了一些设置,这对提高可靠性有很大帮助

我将旧设置更改为以下新设置:

delayWhileIdle 标志从真到假,

collapseKey 到一天中的时间而不是“演示”

timeToLive 到 7200 而不是 3

我还阅读了有关规范 ID 的信息。 The google's page "规范注册 ID 定义为您的应用程序请求的最后一次注册的 ID。这是服务器在向设备发送消息时应使用的 ID。"

我在发送消息时记录了结果。结果中的规范 id 为 0。这是什么意思?结果如下:

 
  multicast_id: 9180653668551804000,
  success: 1,
  failure: 0,
  canonical_ids: 0,
  results: [  message_id: '0:1415521804106240%0209acc19067cebd'  ] 

The post here on *** 建议将注册 id 替换为规范 id。我不清楚何时更换,何时不更换。

在安装应用程序并将用户记录存储在数据库中时,会在我的服务器的数据库中请求 reg_id。结果中的message_id和multicast_id这些字段又是什么?

【问题讨论】:

【参考方案1】:

    canonical id = 0表示你的推送服务器使用的注册id是可以的,不应该被canonical id代替,即通常GCM服务器会响应canonical_id = 0。如果由于某些原因您的服务器发送非实际注册 ID 的推送 GCM 服务器的响应将是:

    GCM HTTP 状态:200 GCM 响应正文:

    
        "multicast_id": 7036866281258904189,
        "success": 1,
        "failure": 0,
        "canonical_ids": 1,
        "results": [
            
                "registration_id": "APA91bH88lV-u5XNdJoF5p0W2d0F_z_7AM6_cjx1e62s83bvDZYcdU_lkmRaFdnkZ5PPUBdYssfpB2QygMW5V0kTqVpV4atCyKpnBEkVnd_YTY0qr4V9oHSyYpv_HIDGNzpfHyGfXz5fWCKnlnACHr37y1zT91JcrHyUMR6DB15WzwjAE1QtloI",
                "message_id": "0:1415529915241995%64ac3713f9fd7ecd"
            
        ]
    
    

现在,cannonical_ids = 1 这意味着您的服务器必须将现有的注册 ID 替换为您在响应中看到的新值。如果用户重新安装您的客户端应用程序,这种情况很容易重现,但您的推送服务器不知道它,GCM 服务器将在响应中传递新的注册 ID。你可以在我的test push server上测试这种情况

    @mandeep_m91 关于 message_id 和 multicast_id 我只是建议你阅读documentation。在实践中,我还没有使用过这个字段

【讨论】:

以上是关于关于 GCM 中的规范 ID(谷歌云消息传递)的主要内容,如果未能解决你的问题,请参考以下文章

谷歌云消息不返回规范 ID

谷歌云消息传递 GCM 可靠吗?

GCM 是如何工作的? (适用于 Android 的谷歌云消息传递)

用户之间的 Android 谷歌云消息传递

规范注册 id gcm

谷歌云消息安全