反应本机android后台处理程序中重复的fcm推送通知

问题描述 投票:0回答:3

我使用

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

See this image

react-native push-notification firebase-cloud-messaging
3个回答
4
投票

您看到的通知很可能是来自 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().onMessage
firebase.messaging().setBackgroundMessageHandler

所以我最终所做的只是在

showNotificationInForeground
监听器中调用
onMessage
方法,而不是在
setBackgroundMessageHandler
中,这导致在前台显示本地通知,在后台显示 firebase 通知。

如果您不是这种情况,您很可能在您的

AndroidManifest.xml
文件中注册了一个额外的通知接收器,这导致了重复


1
投票

我遇到了同样的问题,有两个通知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 不包含通知且仅是数据即可。


0
投票

这在 2024 年仍然是一件事情。这是一种“有意的行为”。 有关此的更多信息这里

© www.soinside.com 2019 - 2024. All rights reserved.