2012-07-21 112 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