GCM的注册ID重复

时间:2014-05-25 12:19:27

标签: android google-cloud-messaging canonical-link

我们有一个使用GCM的应用。当用户首次打开应用程序时,应用程序会检查共享首选项以查看用户是否先前已注册。如果注册ID不是从GCM获取并存储到共享首选项。还有一个第三方服务器,其中存储了用户ID和注册ID。我阅读并实现了以下针对规范id问题的案例:

  1. 在发送通知期间,如果收到新的注册ID(规范ID),则使用第三方服务器中的规范ID更新旧的注册ID。
  2. 当用户卸载应用程序时,以及第三方服务器向卸载的应用程序注册ID发送通知时,未收到注册消息,并从第三方数据库中删除注册ID。
  3. 作为开发人员,我们在数据库中存储了许多注册ID。因为我们经常卸载并安装应用程序。通常用户不会这样做。然后我们考虑使用设备ID作为设备的唯一ID,并检查用户是否先前注册过。可以使用Android设备ID吗?我应该考虑什么来防止设备的多个注册ID?这些多个注册ID会导致多次推送到Android设备。多个注册ID主要由以下原因引起:

    1. 该应用程序最近已卸载并重新安装。如何检测用户已卸载并已安装且已有注册ID?
    2. 已清除缓存和/或已为应用清除数据 最近。我如何检测用户清除了应用数据并且已经注册了注册ID?
    3. 处理规范ID的最佳做法是什么?

1 个答案:

答案 0 :(得分:2)

为了处理用户卸载和重新安装应用程序(或清除应用程序数据)的情况,我会存储用户ID(或用于识别特定设备上的应用程序实例的任何标识符)在设备的外部存储器中。当用户卸载应用程序或清除应用程序数据时,此存储将不会被删除(用户仍然可以手动删除它,但您无法做到这一点)。

然后,当您启动应用程序时,如果共享首选项中没有用户数据,您将尝试从外部存储中恢复它。只有当它在外部存储器中不可用时,您才认为这是在新设备上新安装的应用程序并注册到GCM(此外,还建议您在新版本时重新注册到GCM您的应用已安装)。

如果客户端的所有处理都失败了,只要您在Google的回复中获得规范的注册ID,您仍然有机会从服务器中删除重复的注册ID。