一个设备上有两个注册ID

时间:2015-12-25 12:27:33

标签: google-cloud-messaging

我的应用程序在Nexus 5(Marshmallow)上运行,它有2个有效的注册ID。只是想通过GCM行为知道这是否正常?

以下是它给我带来麻烦的方法:

Android M提出了群组权限 - 这意味着用户选择是否希望该应用访问其设备标识符(Android ID)。让我们假设他否认它,我无法识别设备。我的应用程序的功能是用户可以从多个设备登录,所有设备都保持同步。由于用户可以使用多个设备,因此我必须处理多个注册ID以发送推送消息(我无法确定用户所在的设备数量,因为他们可以拒绝提供设备标识符)。这意味着我无法删除/更新服务器端的任何注册ID,但只会将每个推送消息发送给用户的所有记录ID,希望该特定用户登录的所有设备都将收到消息。

因为我的设备有两个有效的注册ID,所以我收到了2个通知。

在客户端,我们注意到注册ID的频繁更改,我们有一个不断生成注册ID和更新服务器的类。

1 个答案:

答案 0 :(得分:0)

拥有多个registration ID可能是客户端应用中的一个错误(您必须处理)。

确保每个设备只发送一个通知的唯一方法是在服务器端实现规范ID。它作为" canonical_ids"包含在web服务响应中。

  

规范ID

     

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

     

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

     

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

这是一个相关问题 android GCM get original id of canonical id解决了规范ID在实际代码中的工作原理