2012-10-07 41 views
3

我有意將自己的應用程序多次註冊到GCM以測試規範ID概念,但云不會將其返回給我。看到我的服務器日誌下面,它是同一個設備,我可以在Android日誌中看到它收到消息四次。但是我從來沒有從谷歌的回報中得到一個規範的身份證,我誤解了什麼?Google Cloud Messaging不返回Canonical ID

[INFO com.bipper.filters.PushUpdatesFilter] method: POST childId: 13 has pending updates: true url: /mybipperapi/do/parents/1/children/13/usagelimits 

[INFO com.bipper.services.gcm.GcmSenderService] registrationId: APA91bHQIWguRXvpVrg7Xh1nOsUqqbephClS9KkuuFf0eg3fkfgjkmvi1o-0WaSwWWdWwqXw9e3X80OsZwdINr1ufBjEXQJ5om48lL6q8bH3Vrlaf5U11FbyzQdVvzGy-3QBqahc_nMh9FeiL2sBzU0KPGG3y9xtYg 

[INFO com.bipper.services.gcm.GcmSenderService] Sent message to one device: [ messageId=0:1349650679774901%d3cfcce76e2555b5 ] 


[INFO com.bipper.services.gcm.GcmSenderService] registrationId: APA91bE9Vl_qijVdpFTqlJXA2OHyaF2cjKaCi8ZvNrD5r2woNs_TSuJgVuxn7RIF3pef6vdtd2MMV1TrWnusbGPXy4uWT4KJBhuAoAYgCjbXJduv-oz13_xICIKYOZTAFH2OpuC8E1Hw65KN6N4QukxG0W4Zor8jSg 

[INFO com.bipper.services.gcm.GcmSenderService] Sent message to one device: [ messageId=0:1349650679857971%d3cfcce76e2555b5 ] 


[INFO com.bipper.services.gcm.GcmSenderService] registrationId: APA91bEzQag9HBPbrR0wtaSuR3HA5NV795ZuDzxwQJVnQfc2r1lDv0gUXxc6GikUJDWMiUSge-b0BS1Tz2yIr8flpBqmAdpgQnatvP19PVm9zd8PopE51T-NJkfqqX65oPfKkx93Os7qS8_-IokjbyNIOK5FDCsrAQ 

[INFO com.bipper.services.gcm.GcmSenderService] Sent message to one device: [ messageId=0:1349650679940798%d3cfcce76e2555b5 ] 


[INFO com.bipper.services.gcm.GcmSenderService] registrationId: APA91bG_nVU-8VM9JSbTlxjAuseJ4LZG75BOoP5kd85garpcW698w4uwGWCy3dkUt3pXiXWhAV-KLPuEr-vw4_yARwjma2U46KXjmEoBwkTaVNi9t5M4sKRtqaKGZTcsaoa_Ng4EenVw41QFTi2At75946WR3Qu7jQ 

[INFO com.bipper.services.gcm.GcmSenderService] Sent message to one device: [ messageId=0:1349650680044947%d3cfcce76e2555b5 ] 

[WARN com.bipper.filters.PushUpdatesFilter] results has size 4, this is fishy 

[INFO com.bipper.filters.PushUpdatesFilter] [ messageId=0:1349650679774901%d3cfcce76e2555b5 ] 
[INFO com.bipper.filters.PushUpdatesFilter] [ messageId=0:1349650679857971%d3cfcce76e2555b5 ] 
[INFO com.bipper.filters.PushUpdatesFilter] [ messageId=0:1349650679940798%d3cfcce76e2555b5 ] 
[INFO com.bipper.filters.PushUpdatesFilter] [ messageId=0:1349650680044947%d3cfcce76e2555b5 ] 

文檔(link)說:

規範標識

在服務器端,只要應用程序表現良好, 一切都應該正常工作。但是,如果應用程序 中的某個錯誤觸發了同一設備的多個註冊,則可能很難與 協調狀態,並且最終可能會出現重複的消息。

GCM提供了一種稱爲「規範註冊ID」的功能,可以很容易地從這些情況中恢復出 。規範註冊ID被定義爲 是您的應用程序請求的最後一次註冊的ID。 這是服務器在將消息發送到 設備時應使用的ID。

如果稍後嘗試使用不同的註冊ID 發送消息,GCM將處理該請求和往常一樣,但它包括將在 響應的registration_id領域 規範註冊ID。請確保使用此規範ID替換存儲在您的 服務器中的註冊ID,因爲最終您使用的ID將會停止工作。

+0

您可以訪問和發佈響應JSON對象嗎? – lulalala

回答

0

從GCM解析結果時,必須手動檢查它是否返回canonicalId。

String canonicalRegId = result.getCanonicalRegistrationId(); 

然後您必須確保使用此新ID來推送到設備。

+0

Jepp,我知道,但GCM不會在Result對象中返回任何規範的註冊ID給我 –

0

作爲每Google docs

當明文請求成功(HTTP狀態代碼200),所述響應 體包含在鍵/值對的形式1個或2行。 第一行始終可用,其內容是ID = 已發送消息的ID或Error = GCM錯誤代碼。第二行(如果可用) 具有registration_id = canonical ID的格式。 第二行(包含規範id)是 可選,並且只有在第一行不是錯誤時才能發送。

  • 如果有一個規範的ID目前,pgratton是正確的,你將不得不分析的結果,並使用result.getCanonicalRegistrationId得到它();

  • 即使在推送後收到成功響應,規範id也可以爲null。在大多數情況下,它將是空的,這意味着您推送的標記是可以的,並且不需要替換它。當令牌發生變化時(例如,在Google刷新令牌的情況下),如果我們仍然使用舊令牌推送,我想您會在您的回覆中收到規範ID,您必須替換舊令牌。

  • 如果您的推送也返回失敗響應,則canonical id將不會出現在響應中。