2013-05-15 84 views
8

我有一個依賴GCM推送通知的Android應用程序,有時用戶的設備將停止接收推送通知。這種行爲非常具有間歇性:在某些設備上,它永遠不會失敗,只需保持數週或數月的工作狀態,而在其他設備上,它會工作幾天,然後隨機停止接收推送。設備停止接收GCM推送,直到網絡切換

每當設備停止工作時,我已驗證設備從GCM有一個有效的regId,並且我的服務器正在發送推送到該REGID。但是,日誌顯示設備沒有收到任何東西。這裏是一個正常的推日誌中收到什麼樣子:

05-15 10:39:21.091: V/GCMBroadcastReceiver(13766): onReceive: com.google.android.c2dm.intent.RECEIVE 
05-15 10:39:21.091: V/GCMBroadcastReceiver(13766): GCM IntentService class: com.medigram.v2.GCMIntentService 
05-15 10:39:21.091: V/GCMBaseIntentService(13766): Acquiring wakelock 
05-15 10:39:21.111: V/GCMBaseIntentService(13766): Intent service name: GCMIntentService-468134393228-13 
05-15 10:39:21.131: V/GCMBaseIntentService(13766): Releasing wakelock 
05-15 10:39:21.171: V/GCMBroadcastReceiver(13766): onReceive: com.google.android.c2dm.intent.RECEIVE 
05-15 10:39:21.171: V/GCMBroadcastReceiver(13766): GCM IntentService class: com.medigram.v2.GCMIntentService 
05-15 10:39:21.171: V/GCMBaseIntentService(13766): Acquiring wakelock 
05-15 10:39:21.241: V/GCMBaseIntentService(13766): Intent service name: GCMIntentService-468134393228-14 
05-15 10:39:21.271: V/GCMBaseIntentService(13766): Releasing wakelock 

的這一切都顯示了已停止接收推送的設備上,並且作爲一個結果,也不是我的GCMIntentService的onMessage()方法調用。

奇怪的是,當我將設備連接從3G/4G切換到wifi或反之亦然時,它再次開始工作,設備立即獲得所有積壓推送。當連接類型改變時究竟發生了什麼?

萬一有幫助,這裏有一些事情我在哪裏推動工作手動重現問題的設備試過,但無濟於事:

-I開始以爲這可能是一個方面的問題,但當簡單的交換網絡解決了這個問題時,這一點很快就被排除了。無論如何,我試着進一步調查,通過使用'不保留活動'開發人員選項,然後背景的應用程序,但這對推動沒有影響。

-I've試圖強行停止的應用程序,看它是否會導致推停止工作,但似乎問題並不有什麼做的應用程序被強制停止,因爲它保持工作。

-I've試圖把手機飛行模式和回來了,但推堅持工作。

我將不勝感激,如果有人能在正確的方向指向我,因爲我幾乎用盡了所有的資源,在計算器和谷歌。對於這個問題,我仍然一無所知。

+2

可能重複讀的[這](http://stackoverflow.com/questions/13835676/google-cloud-messaging-messages-sometimes-not-received-until-network-state-cha) – Eran

+0

你能提供一些洞察到你的項目的S- etup?這是一個圖書館項目嗎?您的應用程序是否從庫項目調用GCM處理?在哪些情況下,您的應用在GCM上註冊,並且它是否註銷? –

+0

您是否找到了解決方案?即使我面臨同樣的問題。 – keen

回答

0

典型的Android發送心跳在移動連接每28分鐘,每15分鐘上WIFI,這樣你就可以從你的應用程序在更短的間隔廣播這兩種意圖解決這個問題。

com.google.android.intent.action.MCS_HEARTBEAT

com.google.android.intent.action.GTALK_HEARTBEAT

 Intent intent = new Intent("com.google.android.intent.action.MCS_HEARTBEAT"); 
     Intent intent1 = new Intent("com.google.android.intent.action.GTALK_HEARTBEAT"); 
     sendBroadcast(intent); 
     sendBroadcast(intent1); 

您可以詳細here

相關問題