繁体   English   中英

Firebase两次发送推送通知

[英]Firebase send push notification twice

我写了一个非常简单的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>

这是应用程序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'

看起来您正在使用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而不仅仅是播放服务。

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

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

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

我使用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":"刊物"
   }
} 

参考: 如何在firebase的后台应用程序时处理通知

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

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

在build gradle文件中使用编译'com.google.firebase:firebase-core:10.2.1',编译'com.google.firebase:firebase-messaging:10.2.1'并在reciver中使用handleIntent()。

我不得不删除

<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

这对我有用,谢谢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM