我在这里阅读到的两个GCM注册ID可能会更改的原因:
附注:下面旧答案的参考已从Google页面中删除,因此可能不再有效
如果您在架构概述页面下的第二个点下看到,它说:
请注意,Google可能会定期刷新注册ID,因此您应该设计您的Android应用程序,了解com.google.android.c2dm.intent.REGISTRATION意图可能会被多次调用。您的Android应用程序需要能够相应地做出响应。
因此,为了处理这个问题,您需要拥有一个Broadcast Listener
,它可以处理com.google.android.c2dm.intent.REGISTRATION
意图,当谷歌需要刷新注册ID时,会向应用程序发送该意图。广播接收器将具有带有Intent的onReceive
方法。从意图中,您可以使用Bundle
获取新的注册ID,然后保存并将其发送到第三方服务器以替换该用户的先前注册ID。
此外,您还可以查看In GoogleCloudMessaging API, how to handle the renewal or expiration of registration ID?上的this答案。
Should applications call gcm.register() every seven days to ensure valid registration IDs?问题的讨论也可能会有所帮助。
希望这能帮助您了解如何处理它。“周期性”刷新从未发生过,而注册刷新也不包含在新的GCM库中。
已知注册ID更改的唯一原因是应用程序在升级时自动注销。在修复此错误之前,应用程序仍然需要在升级后调用register(),因此在这种情况下,注册ID可能会更改。显式调用unregister()通常也会更改注册ID。
建议/解决方法是生成自己的随机标识符,例如保存为共享首选项。每次应用程序升级时,可以上传标识符和可能的新注册ID。这也有助于跟踪和调试服务器端的升级和注册更改。