2013-08-23 153 views
0

是否有什麼錯誤的事實是,我每次登錄到我的Android應用程序時,我所做的第一件事就是註冊到GCM。 我知道沒有必要這樣做,但爲了檢查註冊ID是刷新到新的還是一樣的,我打算重新註冊。明確重新註冊設備到GCM

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

我也想知道如果通過重新註冊GCM我不知何故迫使註冊ID過期。

謝謝!!!

回答

2

1部分:

爲了檢查,如果註冊ID被刷新到一個新的或它仍然是相同的,我打算重新註冊。

現在,如果你看到標題下的第二點上Architectural Overview頁面啓用GCM,它說:

Note that Google may periodically refresh the registration ID, so you should design your Android application with the understanding that the com.google.android.c2dm.intent.REGISTRATION intent may be called multiple times. Your Android application needs to be able to respond accordingly.

所以,谷歌會自動向您發送該廣播,當更新的ID。您可能不一定發送檢查ID的空白。當Google更改ID時,它也不會是空的,對嗎?所以,如果你要處理的ID的續約/清爽,那麼你可以做到以下幾點:

你應該有一個Broadcast Listener它可以處理com.google.android.c2dm.intent.REGISTRATION意向,其中谷歌發送到應用程序時,它必須刷新註冊ID。廣播接收器將具有帶有意圖的onReceive方法。根據您的意圖,您可以獲得Bundle,您可以使用它從Google提取新的註冊ID。您可以將其保存並將其發送到第三方服務器,以替換您之前爲該用戶註冊的ID。

另外你可能會看到thisIn GoogleCloudMessaging API, how to handle the renewal or expiration of registration ID?這個問題回答。

第2部分: 回答你的問題的第二部分:

你可能想在這裏閱讀Unregistration。該文檔說If you unregister and then re-register, GCM may return the same ID or a different ID—there's no guarantee either way.

我認爲,無論何時身份證即將過期/更新,Google都會向您發送新身份證。然後Google的回覆將包含一個規範註冊ID(這是新的註冊ID)。此響應表明您的服務器應刪除舊的註冊ID並只使用新的註冊ID。 (來源:Unregistering and re-registering for GCM messages causes two regId's to be valid. Is this as intended? @Eran問題回答)

希望這可以幫助你理解如何處理它。

+0

謝謝。我想我跳過了GCM發送給客戶端的那部分註冊ID的廣播。你能寫信給我或者請教一個如何捕捉這個廣播信息的例子嗎?:)比你! –

+0

對不起,我現在找不到一段代碼,但如果您閱讀http://stackoverflow.com/questions/17891399/should-applications-call-gcm-register-every-seven-days-to-ensure-有效註冊/ 17892487#17892487,它應該是直截了當,就像你實現其他廣播接收器。實際的文檔不提供代碼sniplets,但只是提到了上述事情。 –

+0

@justME你不需要定義一個新的'BroadcastReceiver'。您只能在'GCMBroadcastReciever'中處理'''。把它放在'intent-filter'裏面。每當你收到廣播時,檢查'action'是否是'com.google.android.c2dm.intent.REGISTRATION'。然後你可以通過從意圖中提取ID來更新ID。現在希望它有點清楚。 –