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

时间:2013-06-26 19:19:05

标签: android google-cloud-messaging

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

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

不,我们重新安装,接收令牌B,并且设备订阅了特定的警报类型2,我们给令牌B留言非常成功。

既然我们在卸载和重新安装应用程序之间没有向令牌A发送消息,我们仍然可以向两个令牌发送消息,并且应用程序会同时收到这两个令牌。

如果我们在卸载应用时试图向令牌A发送消息,我们可以从Google的回复中清除它。

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

2 个答案:

答案 0 :(得分:12)

来自官方文件:

  

<强> How uninstalled client app unregistration works

     

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

     
      
  1. 最终用户卸载客户端应用。
  2.   
  3. 应用服务器向GCM连接服务器发送消息。
  4.   
  5. GCM连接服务器将消息发送到设备上的GCM客户端。
  6.   
  7. 设备上的GCM客户端收到消息并检测到客户端应用程序已卸载;检测详细信息取决于运行客户端应用程序的平台。
  8.   
  9. 设备上的GCM客户端通知GCM连接   卸载客户端应用程序的服务器。
  10.   
  11. GCM连接服务器   标记要删除的注册令牌。
  12.   
  13. 应用服务器发送一个   给GCM的消息。
  14.   
  15. GCM将NotRegistered错误消息返回给   应用服务器。
  16.   
  17. 应用服务器应删除注册令牌。
  18.         

    请注意   注册令牌可能需要一段时间才能完全实现   从GCM中删除。 因此,有可能在步骤7中发送消息   以上获取有效的消息ID作为响应,即使消息   将不会发送到客户端应用程序。最终,注册   令牌将被删除,服务器将收到NotRegistered错误,   无需从应用服务器进行任何进一步操作。

但是,显然您可能会收到旧注册ID的通知,因为用户在其他问题中说明了这一点:

对于此问题,有一个名为“规范ID”的功能:

  

<强> Canonical IDs

     

如果客户端应用中的错误触发了多个注册   相同的设备,可能很难协调状态和客户端应用程序   可能最终会出现重复的消息。

     

实施规范ID可以帮助您更轻松地从中恢复   的情况。 规范注册ID是注册令牌   客户端应用程序请求的最后一次注册。这是ID   服务器在向设备发送消息时应使用

     

如果您尝试使用旧的注册令牌发送消息,GCM将会   像往常一样处理请求,但它将包括规范ID   响应的registration_id字段。 确保更换   使用此规范ID存储在服务器中的注册令牌,如   最终旧的注册令牌将停止工作。

答案 1 :(得分:6)

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