gcm注册id的持久化

Posted

技术标签:

【中文标题】gcm注册id的持久化【英文标题】:Persistance of gcm registration id 【发布时间】:2014-05-13 07:55:47 【问题描述】:

我正在做一个使用 gcm 的 android 应用程序。我开始知道,当应用程序被卸载并重新安装时,不能保证再次收到相同的注册 id。所以我所做的是在登录时使用一个唯一的来自应用程序服务器的 ID 并且每当创建新的注册 ID 时,我都可以在应用程序服务器中替换它。所以我的问题是,我没有使用规范 ID 来替换 gcm 服务器中的最新注册 ID。它会导致任何问题吗?请帮帮我。

【问题讨论】:

【参考方案1】:

您的解决方案基本上很好,但我不确定您的服务器生成的唯一 ID 是否与设备或登录用户相关联。如果是前者,请确保将其保存在设备的外部存储中,以免在卸载应用时丢失。如果是后者,我不确定您如何处理同一用户在多个设备上登录的情况。

虽然您的策略有利于维护设备和服务器上的当前注册 ID,但为了安全起见,您仍应处理来自 Google 的规范注册 ID 响应。

【讨论】:

【参考方案2】:

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

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

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

来源:http://developer.android.com/google/gcm/adv.html#canonical

【讨论】:

如果您从this page 逐字复制您的整个答案,正确的做法是将其标记为引用并附上源链接。

以上是关于gcm注册id的持久化的主要内容,如果未能解决你的问题,请参考以下文章

Android-GCM:如何照顾注销的用户?

与没有 GCM 的推送服务器的持久 http 连接

融合模式注册表持久性

GCM 的注册 ID 重复

C2DM 注册 ID 与 GCM 注册 ID?

GCM注册ID过期时间