2012-12-20 66 views
24

我正在開發用於電子郵件服務的移動客戶端。其中一個關鍵功能是有關郵箱中新郵件的通知。根據GCM體系結構指南的建議,我們使用一個「推送器」,一旦我們收到新消息,它就負責向Google服務器發送消息。問題在於測試過程報告了推送通知到設備的嚴重問題。Android GCM交付監控

所以問題:有沒有一種方法來監測平均統計推送通知交付百分比,時間等?或者,也許有人在如何設置測試環境方面有經驗,以有效監控在應用程序工作期間有多少通知會丟失?

歡迎與Android GCM體驗改善有關的所有「技巧&技巧」。

回答

2

谷歌不會提供這些統計數據給你。 Android開發人員控制檯上提供了一些統計信息。這隻顯示消息和註冊的數量。

你將不得不實現自己的數據收集,這可以很容易地完成。您可以記錄發送的每條消息的時間&,並讓您的android客戶端收到消息時向您的服務器報告。然後,您可以將數據存儲在服務器上並根據需要進行查詢。

+0

是的,你說得對。我正在尋找如何使其成爲可能的有效方法。 – rus1f1kat0R

+0

你使用了什麼後端? – Patrick

+0

作爲後端,我們正在使用一組複雜的服務器,其中包括專門的「推送」服務器,負責通過Google(蘋果,微軟)服務向設備發送消息。 – rus1f1kat0R

21

Google聲稱在他們的GCM服務器上的處理時間不到一毫秒。請參閱下面的鏈接,瞭解Google開發人員關於GCM的精彩視頻。而且這是可信的,因爲我可以立即使用我公司的服務器將推送通知立即用於我的設備。

http://www.youtube.com/watch?v=YoaP6hcDctM

他們不保證發貨,但他們嘗試4周的最大提供取決於你在郵件中設定的時間發送給谷歌的GCM服務器的消息,如果你希望讓Google會保留這些數據,以便在設備處於離線狀態時向設備最終傳送消息,以便傳遞消息。

但是,也有一定的條件下在其下GCM郵件不傳遞。

  1. 在帳戶和同步設置下未選中背景數據。
  2. 之前4.0.4。(ICS),在裝置上的谷歌帳戶是先決條件GCM。也許,用戶沒有登錄到他們的Google帳戶。
+0

非常感謝有關GCM的更多信息! – rus1f1kat0R

+0

您是否也知道交付時間是否取決於每天發送郵件的數量?這很重要,因爲我們有很多呢? – rus1f1kat0R

+0

你想發送相同的消息到很多設備嗎?如果這樣做,您可以同時將相同的消息多播到最多1000個設備。 –

6

要做到這一點的唯一方法是使用收到的推送時間戳報告給您的服務器。

您可以

  1. 報告回服務器,一旦你收到你的GCM服務的通知。要實施,您必須爲您的推送通知添加推送ID,並將推送數據與ID一起發送。客戶端在收到消息後必須獲取時間戳,並將其與通知ID一起發回。一個簡單的PHP腳本可以做(當您發送推送通知,您將發送通知的時間,一旦接收設備的時間戳它集收到通知,這歸結於兩個領域的數據庫(用粗體標出)。在這種方法中,您可能不會太在意錯誤,因爲設備在接收到通知時很有可能會建立連接,因此它會向您的服務器發送請求。

  2. 保留您的應用中收到的通知列表及其時間戳。同步完成後,在同步操作中發送這些數據。這最終是相同的方法,但您的服務器數據不會像第一種方法那樣實時。但是,客戶端不需要額外請求,但保存接收到的通知及其時間戳。

總而言之,你必須跟蹤使用通知-ID發送的通知和他們的發送時間(發送通知)和它們的接收時間(收到通知) 。一個簡單的查詢將幫助您分析這些數據。

5

谷歌增加了支持,使您可以接收來自雲連接服務器送貨單(CCS):

您可以使用上游消息得到送貨單(從CCS發送到您的第三方應用程序服務器)時設備確認收到CCS發送的消息。

要啓用此功能,第三方應用服務器發送給CCS的消息必須包含一個名爲「delivery_receipt_requested」的字段。當此字段設置爲true時,CCS在設備確認收到特定消息時發送遞送收據。

https://developer.android.com/google/gcm/ccs.html#receipts

+1

有時CCS不會發送delivery_receipt,我找不到可重複路徑。當delivery_receipt_requested設置爲true時,GCM是否允許隔離區發送delivery_receipt? –