如果用户在卸载后立即再次安装app,GCM是否会删除旧的注册ID?

Pra*_*ran 6 android push-notification google-cloud-messaging

我发现当GCM无法发送下一个推送通知时,GCM会将注册ID标记为删除.

但在我的情况下,我的用户发生了以下情况.

场景:

1)我的用户安装了应用程序,他的设备已在GCM注册.

2)同一用户卸载并立即再次安装应用程序.第二次生成新的注册ID.

3)这两个注册ID存储在我的数据库中.

4)现在这个特定用户正在获得两个推送通知.

现在我有以下问题:

问题:

  1. GCM会在一段时间后删除旧的注册ID吗?
  2. 请建议我如何处理这种情况?

Bar*_*kar 6

从官方文档:

卸载的客户端应用程序取消注册的工作原理

卸载后,客户端应用程序可以自动取消注册.但是,此过程不会立即发生.在这种情况下会发生什么:

  1. 最终用户卸载客户端应用程序.
  2. 应用服务器向GCM连接服务器发送消息.
  3. GCM连接服务器将消息发送到设备上的GCM客户端.
  4. 设备上的GCM客户端接收消息并检测到客户端应用程序已卸载; 检测详细信息取决于运行客户端应用程序的平台.
  5. 设备上的GCM客户端通知GCM连接服务器已卸载客户端应用程序.
  6. GCM连接服务器将注册令牌标记为删除.
  7. 应用服务器向GCM发送消息.
  8. GCM向应用服务器返回NotRegistered错误消息.
  9. 应用服务器应删除注册令牌.

请注意,注册令牌可能需要一段时间才能从GCM中完全删除.因此,即使消息不会被传递到客户端应用程序,上面步骤7中发送的消息也可能获得有效的消息ID作为响应.最终,注册令牌将被删除,服务器将收到NotRegistered错误,而无需从应用服务器进行任何进一步操作.

但是,显然您可能仍会收到旧注册ID的通知,因为用户在其他问题中说明:

对于此问题,有一个称为"规范ID"的功能:

规范ID

如果客户端应用程序中的错误触发同一设备的多个注册,则可能难以协调状态,并且客户端应用程序可能最终会出现重复消息.

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

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