我已經集成到GCM我的Android應用程序,我的應用程序是活與GCM 3個月了。GCM(Google Cloud Messaging)無法覆蓋所有註冊用戶?
我已經按照谷歌的指示,一切都按預期我的設備上(HTC的Nexus 9以及一些其他的設備我測試)。一般來說,我發送數據消息(沒有「通知」鍵),通過onMessageReceived方法接收數據消息,一旦設備獲取數據並運行處理傳入數據的代碼,就會向我的服務器發送一個ping(例如顯示通知)。
的設備獲取數據時,應用程序處於前景,背景或甚完全關閉(也重新啓動設備之後)。
但是...
每1-2周我發送一個數據信息給我的所有用戶,但我注意到的是,仍然存在着註冊標記的,而對於那些我得到了一個「成功」和「信息ID是」從GCM響應,最後我只能管理(在一些國家甚至更少)將達到約50%的用戶。 如果,例如,這是響應:
{ "multicast_id": 108,
"success": 5000,
"failure": 300,
"canonical_ids": 0,
"results": [
{ "message_id": "1:08" },
{ "message_id": "1:09" }
...
....
....
...
]
}
「成功」說5000,但onMessageReceived方法只對2500級的用戶運行...
我也看了關於FCM診斷檢查消息ID狀態,似乎設備正在收到消息。
我做了另一個測試,只是爲了看到我的代碼是好的 - 一旦用戶用GCM提供給我的註冊令牌成功註冊到我的服務器,我立即向他推送一個「測試/虛擬」數據,看到用戶得到它,我的代碼運行併發送平到我的服務器 - 這個「循環」的工作,爲用戶幾乎100%......
那麼怎麼來的1-2個星期後,我不能達到這些用戶和從100%下降到50%...? (我只是談了未卸載我的應用程序的那些)
這是我在GcmListenerService的實現中使用:
public class GcmMessageHandler extends GcmListenerService {
@Override
public void onMessageReceived(String from, Bundle data) {
...
...
Context context = getBaseContext();
sendPingtoMyServer(context)
}
}
,這是清單:
<service
android:name="[MY_PACKAGE].GcmMessageHandler"
android:exported="false" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
</intent-filter>
</service>
<receiver
android:name="com.google.android.gms.gcm.GcmReceiver"
android:exported="true"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="[MY_PACKAGE]" />
</intent-filter>
</receiver>
任何幫助將不勝感激。
感謝
您是否嘗試過使用Topic Messaging並查看案例是否也一樣? (雖然你不能跟蹤通過主題發送的郵件,而沒有實現*交付收據*功能) –
沒有測試它,但正如你所說,將無法跟蹤它:)可能會有同樣的問題。對我而言,奇怪的是,如果我將沒有ping回服務器的消息ID並通過FCM診斷工具進行檢查,則該工具會顯示ID已成功傳送到設備。 – JohnSKat
您是否找到了解決此問題的解決方案? –