gcm规范id应该更新或不更新

use*_*431 6 android push-notification google-cloud-messaging

我正在开发一个使用gcm的android项目.我开始知道,如果我们从设备上卸载app并重新安装,设备会获得新的注册ID.然后,如果我们不从应用程序服务器删除旧的并更新,则消息将发送到两个ID并且在响应它将显示规范ID存在.我的问题是,此时消息将成功发送到该设备或不?

Era*_*ran 5

当您在Google的回复中收到规范注册ID时,GCM服务器会接受该消息,GCM服务器会尝试将其传递给设备.是否实际发送到设备取决于设备是否可用(即连接到互联网).因此,如果您的服务器向旧ID和新ID发送GCM消息,则设备可能会收到两条消息.

规范ID

在服务器端,只要应用程序运行良好,一切都应该正常工作.但是,如果应用程序中的错误触发同一设备的多个注册,则可能很难协调状态,并且最终可能会出现重复的消息.

GCM提供了一个名为"规范注册ID"的工具,可以轻松地从这些情况中恢复.规范注册ID定义为应用程序请求的最后一次注册的ID.这是服务器在向设备发送消息时应使用的ID.

如果稍后您尝试使用不同的注册ID发送消息,GCM将照常处理请求,但它将在响应的registration_id字段中包含规范注册ID.确保使用此规范ID替换存储在服务器中的注册ID,因为最终您使用的ID将停止工作.

(来源)

您可以通过为应用程序的每个实例分配唯一标识符来解决此问题.如果将该标识符存储在设备的外部存储中,则在卸载应用程序时不会删除该标识符.然后,您可以在再次安装应用程序时恢复它.如果将此标识符连同注册ID一起发送到服务器,则可以检查服务器是否具有此标识符的旧注册ID,并将其删除.

  • Eran,看起来你是问任何gcm相关的人:我通过在服务器上存储唯一ID(用户名)以及设备的regid对你的解决方案做了一些修改.如果我错了,请纠正我,但我应该没事,因为我只允许每个用户使用一个regid,我可以相应更新.然而,这仍然假设设备将*始终*具有最新(和有效)的注册.假设这样安全吗? (2认同)
  • @ user1164937您的解决方案应该可以正常工作.如果您的应用程序在每次获得新的注册ID时保持服务器更新,并且服务器仅存储每个用户名的最新注册ID,则您甚至不应该在GCM服务器的响应中获得规范的注册ID.应用程序运行状况不佳的情况下,需要规范的注册ID机制.我不知道任何其他边缘情况. (2认同)