GCM注册ID已更改

时间:2013-07-27 00:43:41

标签: android google-cloud-messaging

我开发了一个使用GCM技术的应用程序,一切都很好。

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

那么我如何为客户获得固定的Reg ID?

2 个答案:

答案 0 :(得分:15)

当GCM注册ID可能发生变化时,我读了here的两个原因:

  1. 每次更新时,您都需要重新注册每台设备 应用
  2. 如果设备的Android版本已更新,您还需要重新注册设备
  3. P.S:以下旧答案的引用已从Google的页面中删除,因此可能无法再有效

    如果您在Architectural Overview页面上的“启用GCM”标题下看到第二个点,则说明:

      

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

    因此,为了处理您应该有一个Broadcast Listener可以处理com.google.android.c2dm.intent.REGISTRATION意图,Google必须刷新注册ID时才会发送给该应用。广播接收器将具有带有Intent的onReceive方法。根据意图,您可以使用Bundle从中提取Google的新注册ID。您可以将其保存并发送到第三方服务器,以替换该用户以前注册的ID。

    另外,您可能会在问题this上看到In 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?问题的讨论可能也有一些用处。

    希望这有助于您了解如何处理它。

答案 1 :(得分:12)

“周期性”刷新从未发生过,新的GCM库中不包含注册刷新。

注册ID更改的唯一已知原因是,如果应用程序在升级时收到消息,则会自动取消注册。在修复此错误之前,应用程序仍需要在升级后调用register(),到目前为止,注册ID可能会更改。显式调用unregister()通常也会更改注册ID。

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