Mat*_*ivo 17 android google-cloud-messaging
我们一直致力于GCM实施,并注意到即使卸载了应用程序,分配给应用程序安装的设备地址也可以继续使用.
因此,我们安装了一个应用程序,获得令牌A,设备订阅了特定的警报类型1,消息令牌A非常成功.然后我们卸载应用程序.
不,我们重新安装,接收令牌B,并且设备订阅了特定的警报类型2,我们向令牌B发送消息非常成功.
现在,由于我们在卸载和重新安装应用程序之间没有向令牌A发送消息,因此我们仍然可以向两个令牌发送消息,并且应用程序同时接收它们.
如果我们尝试在卸载应用程序时向令牌A发送消息,我们可以从谷歌的响应中清除它.
有没有办法知道令牌A在技术上不再有效?
Bar*_*kar 13
从官方文档:
卸载后,客户端应用程序可以自动取消注册.但是,此过程不会立即发生.在这种情况下会发生什么:
- 最终用户卸载客户端应用程序.
- 应用服务器向GCM连接服务器发送消息.
- GCM连接服务器将消息发送到设备上的GCM客户端.
- 设备上的GCM客户端接收消息并检测到客户端应用程序已卸载; 检测详细信息取决于运行客户端应用程序的平台.
- 设备上的GCM客户端通知GCM连接服务器已卸载客户端应用程序.
- GCM连接服务器将注册令牌标记为删除.
- 应用服务器向GCM发送消息.
- GCM向应用服务器返回NotRegistered错误消息.
- 应用服务器应删除注册令牌.
请注意,注册令牌可能需要一段时间才能从GCM中完全删除.因此,即使消息不会被传递到客户端应用程序,上面步骤7中发送的消息也可能获得有效的消息ID作为响应.最终,注册令牌将被删除,服务器将收到NotRegistered错误,而无需从应用服务器进行任何进一步操作.
但是,显然您可能仍会收到旧注册ID的通知,因为用户在其他问题中说明:
对于此问题,有一个称为"规范ID"的功能:
如果客户端应用程序中的错误触发同一设备的多个注册,则可能难以协调状态,并且客户端应用程序可能最终会出现重复消息.
实施规范ID可以帮助您更轻松地从这些情况中恢复.规范注册ID是客户端应用程序请求的最后一次注册的注册令牌.这是服务器在向设备发送消息时应使用的ID.
如果您尝试使用旧的注册令牌发送消息,GCM将照常处理请求,但它将在响应的registration_id字段中包含规范ID.确保使用此规范ID替换存储在服务器中的注册令牌,因为最终旧注册令牌将停止工作.
| 归档时间: |
|
| 查看次数: |
9671 次 |
| 最近记录: |