7

我开发了一个使用 GCM 技术的应用程序,一切正常。

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

那么如何为客户获取固定的 Reg ID 呢?

4

2 回答 2

15

当您的 GCM 注册 ID 可能更改时,我在这里阅读了 2 个原因:

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

PS:以下旧答案的参考已从 Google 页面中删除,因此可能不再有效

如果您在架构概述页面上看到标题启用 GCM 下的第二点,它会显示:

请注意,Google 可能会定期刷新注册 ID,因此您应该在设计您的 Android 应用程序时理解 com.google.android.c2dm.intent.REGISTRATION 意图可能会被多次调用。您的 Android 应用程序需要能够做出相应的响应。

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

您也可能会在 GoogleCloudMessaging API 中的问题中看到答案,如何处理注册 ID 的续订或到期?.

关于应用程序是否应该每 7 天调用一次 gcm.register() 以确保有效的注册 ID 的讨论?问题也可能有一些用处。

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

于 2013-07-27T00:51:18.347 回答
12

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

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

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

于 2013-07-27T16:23:56.703 回答