应用程序在重新安装后使用GCM收到重复通知

KaH*_*HeL 8 android google-cloud-messaging

我目前正在尝试使用GCM向用户发送通知,目前我还在研究如何最大化它.现在我只使用此处文档中提供的示例项目,并使用gcm-client示例来处理它.

现在使用Git中的这个项目我尝试使用应用程序创建的注册ID来推送消息,是的,它成功传递了消息.

现在问题是我卸载应用程序后.重新安装后,它将生成一个新的注册ID,其中我将它与前一个一起存储在服务器上,但我无法将之前的注册ID标记为不接收任何进一步的消息,因为当用户没有互联网时可能会发生卸载连接.之后,我发送消息到两个注册ID,这是卸载应用程序之前的ID和重新安装应用程序后的ID.发生了什么事情,我收到两个推送消息,尽管我预计它只会得到一个,因为应用程序已经更改了注册ID.

我希望应用程序可能会收到两个或更多重复的应用程序,如果我还更新了应用程序,因为正如文档中所述,注册ID可能会在更新时更改.

我可以做任何解决方法来处理这些重复的消息?

Bar*_*kar 3

来自官方文档:

已卸载的客户端应用程序注销的工作原理

客户端应用程序卸载后可以自动注销。然而,这个过程不会立即发生。在这种情况下发生的情况是:

  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 替换存储在服务器中的注册令牌,因为旧的注册令牌最终将停止工作。