43

我知道 C2DM 注册过期,您应该定期刷新注册 ID。GCM是这种情况吗?通过查看Android GCM指南(如下所示)上的以下代码,您似乎只执行一次并且不需要刷新,但我没有看到任何地方明确写,所以我只是想检查一下。

final String regId = GCMRegistrar.getRegistrationId(this);
if (regId.equals("")) {
  GCMRegistrar.register(this, SENDER_ID);
} else {
  Log.v(TAG, "Already registered");
}
4

2 回答 2

41

编辑:这个答案已经过时了,我不知道当前的行为是什么


我自己找到了答案。您不需要一直明确地重新注册,只需根据 docs 中的示例进行一次

此外,与以前版本的 GCM 和 C2DM 不同,Google 本身现在不会刷新注册本身:一旦您从初始注册中获得了注册 ID,您就可以开始了,除了一种情况:您仍然需要重新注册用户升级到新版本(这种情况也在上面链接的示例中处理):

当应用程序更新时,它应该使其现有的注册 ID 无效,因为不能保证它可以与新版本一起使用。因为更新应用程序时没有调用生命周期方法,所以实现此验证的最佳方法是在存储注册 ID 时存储当前应用程序版本。

于 2012-07-21T08:06:35.587 回答
10

我认为它最终会刷新,是的。来自官方文档:

现有注册 ID 可能在多种情况下不再有效,包括: 如果应用程序通过发出 com.google.android.c2dm.intent.UNREGISTER 意图手动取消注册。如果应用程序被自动取消注册,如果用户卸载应用程序,这可能会发生(但不能保证)。如果注册ID过期。Google 可能会决定刷新注册 ID。对于所有这些情况,您应该从第 3 方服务器中删除此注册 ID 并停止使用它来发送消息。当错误代码未注册时发生。

这可能发生在从您的第 3 方服务器向 GCM 发出的请求中,该请求返回带有错误Unregistered Device的 json 响应。

一旦发生这种情况,将由您来刷新相应的 id。

http://developer.android.com/guide/google/gcm/gcm.html

于 2012-07-21T08:04:34.587 回答