[英]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.