3

我已經集成到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> 

任何幫助將不勝感激。

感謝

+0

您是否嘗試過使用Topic Messaging並查看案例是否也一樣? (雖然你不能跟蹤通過主題發送的郵件,而沒有實現*交付收據*功能) –

+0

沒有測試它,但正如你所說,將無法跟蹤它:)可能會有同樣的問題。對我而言,奇怪的是,如果我將沒有ping回服務器的消息ID並通過FCM診斷工具進行檢查,則該工具會顯示ID已成功傳送到設備。 – JohnSKat

+0

您是否找到了解決此問題的解決方案? –

回答

0

在我這方面的經驗,我使用節點GMC發送消息,這不應該的問題,因爲這些是API調用。

在我來說,我把下面的參數

var message = new gcm.Message({ 
    priority: 'high', 
    contentAvailable: true, 
    content_available: true, 
    notification: { 
     sound: true, 
     title: "StockAlert Notification", 
     icon: "ic_launcher", 
     body: notification, 
    } 
}) 

反正我也有同樣的問題,與參數打幫助。 出於某種原因contentAvailable:真工作在某些手機上,但我不得不添加content_available:真,爲別人。

我還在看這個

+0

據我所知,contentAvailable僅適用於iOS設備,目前我只談論Android設備。此外,我發送「數據」消息而不是「通知」消息(發送時沒有「通知」鍵,onMessageReceived中的代碼獲取數據並顯示通知) – JohnSKat

相關問題