Firebase两次发送推送通知

时间:2016-07-03 05:52:59

标签: android firebase firebase-cloud-messaging firebase-notifications

我写了一个非常简单的Android应用来测试firebase推送通知,我收到两次通知。

这是清单服务:

<service
        android:name="com.google.firebase.messaging.FirebaseMessagingService">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT"/>
        </intent-filter>
    </service>
    <service
        android:name="com.google.firebase.iid.FirebaseInstanceIdService">
        <intent-filter>
            <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
        </intent-filter>
    </service>

这是app gradle:

    compile 'com.google.android.gms:play-services:9.0.0'
    compile 'com.google.firebase:firebase-core:9.0.0'
    compile 'com.google.firebase:firebase-messaging:9.0.0'
}
apply plugin: 'com.google.gms.google-services'

这是项目级别的gradle:

classpath 'com.google.gms:google-services:3.0.0'

6 个答案:

答案 0 :(得分:9)

看起来您正在使用com.google.android.gms:play-services:9.0.0(包括play-services-gcm)和com.google.firebase:firebase-messaging:9.0.0

来自firebase-massaging的FCM会自动注册一个实例ID令牌(设备ID),因此如果您有在您的应用中注册令牌的逻辑,则可能是您要注册两次。这可能会导致您收到多个通知。更一般地说,虽然你不应该在同一个应用程序中使用FCM和GCM,正是出于这个原因。因此,如果您要使用FCM,则应从应用中删除GCM。

此外,使用播放服务包括所有play-services-x A​​PI,如play-services-gcm和play-services-drive等。因此,请始终使用play-services-x等拆分库,而不仅仅是播放服务

答案 1 :(得分:2)

对我而言,当我们的应用程序使用FCM时,它是使用GCM的第3方sdk。注册这两项服务将为您提供两个通知。

(另外,我在FirebaseMessagingService中调用了super.onMessageReceived(remoteMessage),导致出现第三个通知:p

答案 2 :(得分:1)

接受的答案对我不起作用。以下是有效的:

我使用data-messages代替display-messages,因此即使应用位于前台或后台,也会出现唯一的通知。

替换

{
      "to": "/topics/journal",
      "notification": {
        "title" : "title",
        "text": "data!",
        "icon": "ic_notification"
       }
}

使用

{
  "to": "/topics/dev_journal",
   "data": {
       "text":"text",
       "title":"",
       "line1":"Journal",
       "line2":"刊物"
   }
} 

参考:How to handle notification when app in background in firebase

答案 3 :(得分:1)

当应用程序处于后台或关闭(并发送通知和数据)时,我遇到了同样的问题。在AndroidManifest.xml中请求旧的GCM权限导致

查看https://stackoverflow.com/a/44435980/1533285

答案 4 :(得分:0)

用于构建gradle文件编译&#39; com.google.firebase:firebase-core:10.2.1&#39;,编译&#39; com.google.firebase:firebase-messaging:10.2.1&#39 ;并在reciver中使用handleIntent()。

答案 5 :(得分:0)

我必须删除

<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="${applicationId}" /> 
  </intent-filter> 
</receiver>

来自AndroidManifest.xml

这对我有用,谢谢

相关问题