2015-12-08 101 views
4

概念性問題,如果你不介意。GCM消息死於「Accepted」無聲死亡。

我們面臨的挑戰是如何讓GCM通知一直傳遞到我們的Android應用程序,並且已經踢了幾乎所有代碼的輪胎以找到沒有錯誤的地方。然而許多信息只是在狀態=「接受」下結束了他們的生活。

我可以確認將正確的gcm_tokens打包並通過POST發送到https://gcm-http.googleapis.com/gcm/send,並且大部分但不是全部都被收到。我可以確認這些消息的所有gcm_tokens正在被GCM帖子接收,因爲我們正在記錄最終的message_ids。但是message_id並不總是轉化爲提示通知。 FWIW:我們不覆蓋delay_while_idle的默認設置,time_to_live設置爲1天。

我真的很茫然。我剩下的兩個假設:或者GCM實質上小於< 100%可靠,或者我們遇到了一些客戶端不在網絡中的邊緣情況,並且一旦再次激活消息就不會收到消息。鑑於這種情況,我們應該檢查什麼?抱歉,這個模糊的問題......我們不知道我們不知道的。

+0

您是否得到了答案?我遇到了同樣的問題,我很確定所有未交付的設備都未關閉。 – MRK

回答

3

我們遇到了同樣的問題。

我們的假設是,它們是關閉的設備,並從此以後一直關閉。例如,當某人替換他們的手機時,舊設備將被關閉或其電池耗盡。我們仍然堅持這個設備上的令牌,我們的應用程序仍然安裝在它上面。我猜GCM的確如此 - 它不能聯繫設備,設備可以在任何時候重新開機,所以令牌不能被認爲是無效的。

通過觀察我們有越來越多的令牌(過去幾個月),這個假設得到了加強。這與以下事實一致:越來越多的人們使用我們的應用的舊設備被替換並關閉。這也與Google Play儀表板中的GCM消息圖形一致 - 存儲的通知數量隨着時間的推移而增加。

幾個月後,我還打開了我的舊手機,並得到了很多以前接受的通知。這些是由GCM存儲了4周的通知(我們不使用time_to_live標誌),並且在手機處於脫機狀態時無法發送。

有關此主題的文檔很少,但最好的可能是https://developers.google.com/cloud-messaging/concept-options#lifetime