2013-07-27 170 views
5

我开发了一个使用GCM技术的应用程序,一切正常。GCM注册ID已更改

我观察到设备的注册ID在一段时间后发生了变化,这在我的应用中导致了一个问题,因为我的应用依赖于注册ID。

那么我如何才能为客户获得固定的注册ID?

+0

[处理在谷歌云消息Android上登记ID的变化]的可能重复(http://stackoverflow.com/questions/16838654/handling-registration-id-changes-in-google-cloud-messaging-on-android ) – trante

+0

@trante这个问题很老旧,浪费时间。 – Micro

回答

13

我在here阅读时你GCM注册ID可能会改变的原因有二:

  1. 你需要重新注册每个设备每次更新您的 应用。
  2. 你还需要,如果Android的版本,它的运行已更新

PS重新注册设备:以下旧答案的参考已经从谷歌的网页中删除,因此可能无效再

如果看到标题下的第二点上Architectural Overview页面启用GCM,它说:

注意,谷歌可能会定期刷新的注册ID,所以你 应该理解可以多次将 com.google.android.c2dm.intent.REGISTRATION意图调用 来设计您的Android应用程序。您的Android应用程序需要能够相应地响应 。

所以,处理,你应该有一个Broadcast Listener它可以处理com.google.android.c2dm.intent.REGISTRATION意向,其中谷歌发送到应用程序时,它必须刷新注册ID。广播接收器将具有带有意图的onReceive方法。根据您的意图,您可以获得Bundle,您可以使用它从Google提取新的注册ID。您可以将其保存并将其发送到第三方服务器,以替换您之前为该用户注册的ID。

另外你可能会看到thisIn GoogleCloudMessaging API, how to handle the renewal or expiration of registration ID?这个问题回答。

讨论Should applications call gcm.register() every seven days to ensure valid registration IDs?问题也可能有些用处。

希望这可以帮助您了解如何处理它。

+2

我认为你的报价不再有效。这段文字在Enable GCM标题下方不存在。 – Neil

12

'定期'刷新从未发生,注册刷新不包含在新的GCM库中。

注册ID更改的唯一已知原因是如果应用程序在升级过程中收到消息,则会自动取消注册的旧bug。在这个bug修复之前,应用程序在升级后仍然需要调用register(),到目前为止,在这种情况下注册ID可能会发生变化。显式调用unregister()通常也会更改注册标识。

建议/解决方法是生成您自己的随机标识符,例如保存为共享首选项。在每次应用升级时,您都可以上传标识符和潜在的新注册ID。这也可能有助于跟踪和调试服务器端的升级和注册更改。

+0

我的应用程序有“AppUpdateReceiver”监听应用更新,推出“AppUpdateService”,它同步的FCM注册来解决此问题。 这是错误还是用最新的FCM库有关,我可以删除此代码,因为启动服务这样的棘手与奥利奥。 – Singed