Android接收并显示双GCM推送通知

Android接收并显示双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

每当我的应用程序在后台接收推送时,它就会自动处理和显示

每当应用程序位于前台时,就会使用my
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实现它

有关更多信息,请检查这些问题,以了解它是否能帮助您

根据GCM文档的一部分,指出“如果客户端应用程序中的错误触发同一设备的多个注册,则很难协调状态,客户端应用程序可能会出现重复消息。”

要使用规范ID,这可以帮助您了解如何使用GCM实现它

有关更多信息,请检查这些问题,以了解它是否能帮助您