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