Android接收并显示双GCM推送通知
每当我的应用程序在后台接收推送时,它就会自动处理和显示 每当应用程序位于前台时,就会使用myAndroid接收并显示双GCM推送通知,android,notifications,google-cloud-messaging,gcmlistenerservice,Android,Notifications,Google Cloud Messaging,Gcmlistenerservice,每当我的应用程序在后台接收推送时,它就会自动处理和显示 每当应用程序位于前台时,就会使用myGCMMessageHandlerclass手动显示push 以下是GCMMessageHandler @Override public void onMessageReceived(String from, Bundle data) { super.onMessageReceived(from, data); MyNotification notification = new MyNo
GCMMessageHandler
class手动显示push
以下是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文档的一部分,声明“如果客户端应用程序中的错误触发了同一设备的多个注册,则很难协调状态,客户端应用程序可能会出现重复消息。”
要使用规范ID,这可以帮助您了解如何使用GCM实现它
有关更多信息,请检查这些问题,以了解它是否能帮助您