卸载后,旧的GCM令牌还能继续使用吗?

Mat*_*ivo 17 android google-cloud-messaging

我们一直致力于GCM实施,并注意到即使卸载了应用程序,分配给应用程序安装的设备地址也可以继续使用.

因此,我们安装了一个应用程序,获得令牌A,设备订阅了特定的警报类型1,消息令牌A非常成功.然后我们卸载应用程序.

不,我们重新安装,接收令牌B,并且设备订阅了特定的警报类型2,我们向令牌B发送消息非常成功.

现在,由于我们在卸载和重新安装应用程序之间没有向令牌A发送消息,因此我们仍然可以向两个令牌发送消息,并且应用程序同时接收它们.

如果我们尝试在卸载应用程序时向令牌A发送消息,我们可以从谷歌的响应中清除它.

有没有办法知道令牌A在技术上不再有效?

Bar*_*kar 13

从官方文档:

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

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

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


Nic*_*ckT 6

我假设你通过"令牌"实际上是指注册ID.旧注册ID可以暂时保持活动状态.但是,Google会告诉您,您需要通过对已发送邮件的响应中的规范ID更新特定设备/应用组合的注册表.