我开发了一个使用GCM技术的应用程序,一切都很好。
我观察到设备的注册ID在一段时间后发生了变化,这导致我的应用程序出现问题,因为我的应用程序依赖于Reg ID。
那么我如何为客户获得固定的Reg ID?
答案 0 :(得分:15)
当GCM注册ID可能发生变化时,我读了here的两个原因:
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。这也可以帮助跟踪和调试服务器端的升级和注册更改。