react原生android backgroundhandler中的fcm推送通知重复

oxcyiej7  于 2023-01-05  发布在  React
关注(0)|答案(2)|浏览(182)

我开发的React Native应用程序与rnfirebasenotifee发送推送通知。前台工作正常,消息只显示一次。但后台通知显示两次,一次来自messaging().setBackgroundMessageHandler,另一次来自android的默认推送通知。第一条消息来自默认推送通知,下一条消息来自firebase消息传递。那么,如何删除android'的默认推送通知。我还检查了第一个默认通知没有使用firebase消息和notifee。它来自react native之外,就像android的原生推送通知

yvt65v4c

yvt65v4c1#

您看到的通知很可能一个来自firebase,另一个来自Notifee。在我的项目中,我通过firebase.messaging().onMessage处理来自firebase的通知,在这个侦听器中,我使用Notifee显示本地通知,以便通知显示在前台。

async showNotificationInForeground(message: FirebaseMessagingTypes.RemoteMessage) {
    const { messageId, notification, data } = message
    const channelId = await Notifee.createChannel({
      id: messageId,
      name: 'Pressable Channel',
      importance: AndroidImportance.HIGH,
    })

    await Notifee.displayNotification({
      title: notification?.title || '',
      body: notification?.body || '',
      data,
      android: {
        channelId,
        importance: AndroidImportance.HIGH,
        pressAction: {
          id: messageId,
        },
        smallIcon: 'ic_stat_name',
        localOnly: true,
      },
    })
  }

然而,发生的事情是,我调用了这个showNotificationInForeground方法,在firebase的后台和消息监听器上显示本地Notifee通知,即:firebase.messaging().onMessagefirebase.messaging().setBackgroundMessageHandler
因此,我最终只在onMessage侦听器中调用showNotificationInForeground方法,而不在setBackgroundMessageHandler中调用,这导致在前台显示本地通知,在后台显示firebase通知。
如果不是这种情况,您很可能在AndroidManifest.xml文件中注册了额外的通知接收器,从而导致重复

mm5n2pyu

mm5n2pyu2#

我遇到了同样的问题,有两个通知a)1来自notifee(我想保留)b)来自FCM(我不想保留).从我的自定义服务器发送一个只包含数据的消息解决了这个问题.下面是发送只包含数据的消息的服务器端的片段:

const admin = require("firebase-admin");

// Do other stuff like create an express server to listen and trigger sending message 
// Note dont forget to to initialize the app

await admin.messaging().sendToDevice(
    tokens, // ['token_1', 'token_2', ...]
    {
      data: {
        owner: "Me",
        user: "My Friend",
      },
    },
    {
      // Required for background/quit data-only messages on iOS
      contentAvailable: true,
      // Required for background/quit data-only messages on Android
      priority: "high",
    }
  );

您也可以使用其他方法,只要确保FCM不包含通知,并且仅包含数据即可。

相关问题