我们一直致力于 GCM 实现,并注意到分配给应用程序安装的设备地址即使卸载应用程序也可以继续存在。
因此,我们安装一个应用程序,获取令牌 A,设备订阅特定警报类型 1、消息令牌 A 并取得巨大成功。然后我们卸载该应用程序。
不,我们重新安装,接收令牌 B,并且设备订阅特定警报类型 2,我们成功地向令牌 B 发送消息。
现在,由于我们在卸载和重新安装应用程序之间没有向令牌 A 发送消息,因此我们仍然可以向这两个令牌发送消息,并且应用程序会收到它们。
如果我们在应用程序卸载时尝试向令牌 A 发送消息,我们就可以从 Google 的响应中清除该消息。
有什么方法可以知道代币 A 在技术上不再有效吗?
来自官方文档:
卸载客户端应用程序注册的工作原理 https://developers.google.com/cloud-messaging/registration#how-uninstalled-client-app-unregistration-works
客户端应用程序可以在注册后自动注销
已卸载。然而,这个过程不会立即发生。什么
这种情况下发生的情况是:
- 最终用户卸载客户端应用程序。
- 应用程序服务器向 GCM 连接服务器发送消息。
- GCM 连接服务器将消息发送到设备上的 GCM 客户端。
- 设备上的GCM客户端收到消息,检测到客户端应用已被卸载;检测详细信息取决于客户端应用程序运行的平台。
- 设备上的GCM客户端通知GCM连接
客户端应用程序已卸载的服务器。
- GCM 连接服务器
标记要删除的注册令牌。
- 应用服务器发送一个
向 GCM 发送消息。
- GCM 返回 NotRegistered 错误消息给
应用程序服务器。
- 应用服务器应删除注册令牌。
笔记
注册令牌可能需要一段时间才能完全完成
从 GCM 中删除。因此,在步骤 7 中发送的消息有可能
上面获取一个有效的消息 ID 作为响应,即使该消息
不会传递到客户端应用程序。最终,登记
令牌将被删除,服务器将收到 NotRegistered 错误,
无需应用程序服务器执行任何进一步操作。
但是,显然您仍然会收到旧注册 ID 的通知,正如用户在其他问题中所述:
- 重新安装后,应用程序使用 GCM 收到重复的通知 https://stackoverflow.com/questions/27315169/app-recieves-duplicate-notification-using-gcm-after-reinstalling
- Android GCM 和多个令牌 https://stackoverflow.com/questions/23293444/android-gcm-and-multiple-tokens
- https://stackoverflow.com/questions/27845298/gcm-deleting-app-and-reinstalling-multiple-notifications https://stackoverflow.com/questions/27845298/gcm-deleting-app-and-reinstalling-multiple-notifications
- 取消注册和重新注册 GCM 消息会导致两个 regId 有效。这是如预期的那样吗? https://stackoverflow.com/questions/16320549/unregistering-and-re-registering-for-gcm-messages-causes-two-regids-to-be-valid
对于这个问题,有一个称为“规范 ID”的功能:
规范ID https://developers.google.com/cloud-messaging/registration#canonical-ids
如果客户端应用程序中的错误触发了多次注册
同一设备,很难协调状态和客户端应用程序
可能最终会出现重复的消息。
实施规范 ID 可以帮助您更轻松地从这些问题中恢复
情况。规范的注册 ID 是注册令牌
客户端应用程序请求的最后一次注册。这是身份证
服务器向设备发送消息时应使用的。
如果您尝试使用旧的注册令牌发送消息,GCM 将
照常处理请求,但它将包含规范 ID
响应的 Registration_id 字段。确保更换
使用此规范 ID 存储在您的服务器中的注册令牌,如
最终旧的注册令牌将停止工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)