簡體   English   中英

Android接收並顯示雙GCM推送通知

[英]Android receives and displays double GCM push notifications

每當我的應用程序在后台接收到推送時,它就會自動處理並顯示。

每當應用程序在前台時,便會使用我的GCMMessageHandler類手動顯示推送。

這是GCMMessageHandler的代碼段

@Override
public void onMessageReceived(String from, Bundle data) {
    super.onMessageReceived(from, data);

    MyNotification notification = new MyNotification(getApplicationContext(), data);
    notification.handleNotification();
}

問題是,只要我的應用程序在后台運行 ,推送通知就會顯示兩次,而不是一次(在這種情況下,顯然不會調用onMessageReceived)。

我找到了問題所在,但不知道如何解決。

這是在我的AndroidManifest.xml文件中:

    <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="com.codepath.gcmquickstart" />
        </intent-filter>
    </receiver>

    <service
        android:name=".helpers.GCMMessageHandler"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        </intent-filter>
    </service>

我注意到,如果刪除以下行:

<action android:name="com.google.android.c2dm.intent.RECEIVE" />

從這兩個聲明中的任何一個,通知不再顯示兩次,但是前台通知不再起作用(不再調用onMessageReceived)。

如果我從接收者或服務中刪除線路,則行為完全相同。

任何想法如何正確執行此操作,以便當應用程序在后台時我的通知將僅顯示一次,而在前台時仍會調用onMessageReceived?

根據GCM文檔的Canonical IDs部分的說明,“如果客戶端應用程序中的錯誤觸發了同一設備的多個注冊,則可能難以協調狀態,並且客戶端應用程序可能會出現重復消息 。”

要使用規范ID,此SO問題可以幫助您了解如何使用GCM實施該規范。

有關更多信息,請檢查這些SO問題是否可以幫助您。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM