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

Man*_*ngh 2 node.js google-cloud-messaging

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

我们注意到有时数据包没有交付给最终用户.在做了一些搜索后,我调整了一些有助于提高可靠性的设置

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

  • delayWhileIdle标志从true到false,

  • collapseKey到时间而不是'demo'

  • timeToLive到7200而不是3

我还读到了关于规范id的内容.谷歌的页面 "规范注册ID被定义为您的应用程序请求的最后一次注册的ID.这是服务器在向设备发送消息时应使用的ID."

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

{ 
  multicast_id: 9180653668551804000,
  success: 1,
  failure: 0,
  canonical_ids: 0,
  results: [ { message_id: '0:1415521804106240%0209acc19067cebd' } ] 
}
Run Code Online (Sandbox Code Playgroud)

stackoverflow上的帖子建议用规范id替换注册ID.我不知道何时更换以及何时更换.

在我的服务器数据库中,在安装应用程序时请求reg_id,并将其与用户在数据库中的记录一起存储.另外,结果中的message_id和multicast_id等字段是什么?

Sam*_*mik 11

  1. 规范id = 0意味着您的推送服务器使用的注册ID是正常的,不应该被规范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"
            }
        ]
    }
    
    Run Code Online (Sandbox Code Playgroud)

现在,cannonical_ids = 1,这意味着您的服务器必须替换您在响应中看到的新值的现有注册ID.如果用户重新安装您的客户端应用程序,但是您的推送服务器不知道它并且GCM服务器将通过响应新注册ID,则此情况很容易重现.您可以在我的测试推送服务器上测试这种情况

  1. @ mandeep_m91至于message_id和multicast_id我建议你阅读文档.在实践中,我还没有使用这个领域