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

时间:2014-05-17 10:49:12

标签: android push-notification google-cloud-messaging

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

2 个答案:

答案 0 :(得分:5)

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

  

规范ID

     

在服务器端,只要应用程序运行良好,   一切都应该正常工作。但是,如果应用程序中存在错误   触发同一设备的多次注册,可能很难   协调状态和您最终可能会收到重复的消息

     

GCM提供了一个名为"规范注册ID"很容易   从这些情况中恢复。定义了规范注册ID   是您的申请所要求的最后一次注册的ID。   这是服务器在向邮件发送邮件时应使用的ID   设备

     

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

Source

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

答案 1 :(得分:0)

@Eran我们有两个选项可以删除旧的注册ID,也可以使用Key和规范ID的位置进行更新。我更喜欢更新...你可以查看我的工作代码我在这里已经回答了Steps to Update Canonical Ids