GCM的注册ID重复问题

6
我们有一个使用GCM的应用程序。当用户第一次打开应用程序时,应用程序检查共享首选项以查看用户是否先前注册。如果没有,则从GCM获取注册ID并存储到共享首选项中。还有一个第三方服务器,其中存储了用户ID和注册ID。我阅读并实施了以下规则来处理规范ID问题:
  1. 在发送通知期间,如果接收到新的注册ID(规范ID),则在第三方服务器中使用规范ID更新旧的注册ID。
  2. 当用户卸载应用程序并且第三方服务器向已卸载的应用程序注册ID发送通知时,将收到未注册的消息,并将注册ID从第三方数据库中删除。
作为开发人员,我们在数据库中存储了许多注册ID。因为我们经常卸载和安装应用程序。通常用户不会这样做。然后,我们考虑使用设备ID作为设备的唯一ID,并检查用户之前是否注册过。使用Android设备ID可以吗?我应该考虑什么来防止一个设备有多个注册ID?这些多个注册ID会导致向Android设备推送多个消息。多个注册ID主要由以下原因造成:
  1. 应用程序最近已被卸载并重新安装。如何检测用户已卸载并安装并已拥有注册ID?
  2. 最近清除了缓存和/或应用程序数据。如何检测用户已清除应用程序数据并已拥有注册ID?
处理规范ID的最佳实践是什么?

阅读有关规范 ID 的内容,请访问 https://developer.android.com/google/gcm/adv.html。 - Raghunandan
1个回答

2
为了解决用户卸载并重新安装应用程序(或清除应用程序数据)的情况,我会将用户ID(或您用于在特定设备上标识应用程序实例的任何标识符)存储在设备的外部存储中。当用户卸载应用程序或清除应用程序数据时,此存储不会被删除(用户仍然可以手动删除,但您无法控制)。
然后,在启动应用程序时,如果用户数据在共享首选项中不可用,则尝试从外部存储恢复它。仅当外部存储中不存在时,您才假定这是在新设备上的应用程序的新安装,并注册到GCM(此外,建议您在安装新版本的应用程序时重新注册到GCM)。
如果所有客户端处理均失败,则仍有机会在从Google的响应中获取规范化注册ID时从服务器中删除重复的注册ID。

还有一个问题是,一个用户可能有多个设备,我们将用户ID与这些注册ID关联起来。所以删除其他注册ID会很困难,因为你不能确定那个ID是旧ID还是另一个设备的ID。 - Murat
@Murat 如果您为安装您的应用程序的每个设备生成唯一的ID(并将此ID存储在设备的外部存储器中),那么该问题可以得到解决。然后,您将此ID与注册ID相关联。这样,用户ID可以与多个设备关联,但您仍然知道哪些注册ID代表同一设备。 - Eran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接