FCM:iOS设备注册了两个不同的工作令牌

时间:2017-06-29 09:12:16

标签: ios firebase firebase-cloud-messaging

我们正在使用Firebase云消息传递提供推送通知。

最近,我开始看到推送通知两次发送到同一台设备。

当我深入挖掘时,我发现在我们的后端有一个设备注册了2个firebase令牌。他们两个都在工作。因此,iOS提供的设备令牌不得更改。

根据GCM documentation,这可能是由于客户端中的错误而发生的:

  

Canonical ID

     

如果客户端应用中的错误触发了同一设备的多次注册,则可能很难协调状态,而客户端应用最终可能会出现重复消息。

     

实施规范ID可以帮助您更轻松地从这些情况中恢复。规范注册ID是客户端应用程序请求的最后一次注册的注册令牌。这是服务器在向设备发送消息时应使用的ID。

     

如果您尝试使用旧的注册令牌发送消息,GCM将照常处理请求,但它将在响应的registration_id字段中包含规范ID。确保使用此规范ID替换存储在服务器中的注册令牌,因为最终旧注册令牌将停止工作。

因此,如果我们向旧令牌发送推送通知,我们应该在其中获得包含registration_id键值对的响应。

FCM documentation更详细地描述了这个案例:

  

如果设置了message_id,请检查registration_id

     

如果设置了registration_id,请将原始ID替换为服务器数据库中的新值(规范ID)。请注意,原始ID不是结果的一部分,因此您需要从请求中传递的registration_ids列表中获取它(使用相同的索引)。

但是,当使用两个工作令牌中的任何一个时,响应中没有registration_id因此,似乎FCM不知道该设备已注册多个令牌,因此不会在回复中加入registration_id

响应如下:

{
    "multicast_id": 9087190295926530487,
    "success": 1,
    "failure": 0,
    "canonical_ids": 0,
    "results": [{
        "message_id": "0:1498726709849471%10726fcd10726fcd"
    }]
}

我的问题是:有什么方法可以为在FCM中注册并拥有多个令牌的所有设备获取规范ID吗?或者修复这样的问题的推荐方法是什么?

0 个答案:

没有答案