2012-07-21 113 views
43

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

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

类似:http://stackoverflow.com/questions/16838654/handling-registration-id-changes-in-google-cloud-messaging-on-android – trante 2014-05-22 10:29:35

回答

41

编辑:这个答案是远远过时了,我不知道目前的行为是


,我发现自己的答案。您并不需要全部重新注册,just once according to the example in the docs

此外,不像GCM和C2DM以前的版本,谷歌本身刷新注册本身现在:一旦你从初始登记的注册ID,你是好去,除了一案:你仍然需要重新注册,当用户升级到新的版本(这种情况下也是在例子中的链接处理以上):

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

+0

但是如何生成注册id mannn ????? – 2013-10-08 09:34:13

+1

@AndroidKiller:阅读文档:http://developer.android.com/google/gcm/index.html – 2013-10-08 19:08:05

+0

嘿@MohamedHafez。您的第一段来自C2DM而非GCM文档,这意味着(我相信)它不适用于GCM。这使你的回答有点误导。 Thx – AndroidGecko 2014-02-27 11:26:59

10

我认为它最终会刷新,是的。从官方文档:如果应用手动通过发出com.google.android.c2dm.intent.UNREGISTER意图注销 :

现有的注册ID可能不再有效在许多情况下,包括。 如果应用程序自动取消注册,如果用户卸载应用程序,可能会发生(但不能保证)。 如果注册ID过期。 Google可能会决定刷新注册ID。 对于所有这些情况,您应该从第三方服务器中删除此注册ID,并停止使用它来发送消息。 当错误代码是NotRegistered时会发生。

这可以从您的第三方服务器,它会返回错误未注册装置一个JSON响应GCM的请求发生。

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

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

+0

那么,将它保存到刚刚检查令牌有在我的'RegistationIntentService'中更改?我可以将令牌存储在共享首选项中,并每次检查它是否已更改。 – Zapnologica 2015-08-04 19:18:36