Pra*_*ran 6 android push-notification google-cloud-messaging
我发现当GCM无法发送下一个推送通知时,GCM会将注册ID标记为删除.
但在我的情况下,我的用户发生了以下情况.
场景:
1)我的用户安装了应用程序,他的设备已在GCM注册.
2)同一用户卸载并立即再次安装应用程序.第二次生成新的注册ID.
3)这两个注册ID存储在我的数据库中.
4)现在这个特定用户正在获得两个推送通知.
现在我有以下问题:
问题:
从官方文档:
卸载后,客户端应用程序可以自动取消注册.但是,此过程不会立即发生.在这种情况下会发生什么:
- 最终用户卸载客户端应用程序.
- 应用服务器向GCM连接服务器发送消息.
- GCM连接服务器将消息发送到设备上的GCM客户端.
- 设备上的GCM客户端接收消息并检测到客户端应用程序已卸载; 检测详细信息取决于运行客户端应用程序的平台.
- 设备上的GCM客户端通知GCM连接服务器已卸载客户端应用程序.
- GCM连接服务器将注册令牌标记为删除.
- 应用服务器向GCM发送消息.
- GCM向应用服务器返回NotRegistered错误消息.
- 应用服务器应删除注册令牌.
请注意,注册令牌可能需要一段时间才能从GCM中完全删除.因此,即使消息不会被传递到客户端应用程序,上面步骤7中发送的消息也可能获得有效的消息ID作为响应.最终,注册令牌将被删除,服务器将收到NotRegistered错误,而无需从应用服务器进行任何进一步操作.
但是,显然您可能仍会收到旧注册ID的通知,因为用户在其他问题中说明:
对于此问题,有一个称为"规范ID"的功能:
如果客户端应用程序中的错误触发同一设备的多个注册,则可能难以协调状态,并且客户端应用程序可能最终会出现重复消息.
实施规范ID可以帮助您更轻松地从这些情况中恢复.规范注册ID是客户端应用程序请求的最后一次注册的注册令牌.这是服务器在向设备发送消息时应使用的ID.
如果您尝试使用旧的注册令牌发送消息,GCM将照常处理请求,但它将在响应的registration_id字段中包含规范ID.确保使用此规范ID替换存储在服务器中的注册令牌,因为最终旧注册令牌将停止工作.
| 归档时间: |
|
| 查看次数: |
5925 次 |
| 最近记录: |