我使用
rnfirebase
和 notifee
开发了 React Native 应用程序来发送推送通知。前台工作正常,消息仅显示一次。但后台通知显示两次,就像一个来自messaging().setBackgroundMessageHandler
,另一个是android的默认推送通知。第一条消息来自默认推送通知,下一条消息来自 firebase 消息传递。那么如何删除android默认的推送通知呢?我还检查了第一个默认通知未使用 firebase 消息传递和 notifee。它来自 React Native 之外,就像 Android 的原生推送通知
您看到的通知很可能是来自 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
文件中注册了一个额外的通知接收器,这导致了重复
我遇到了同样的问题,有两个通知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 不包含通知且仅是数据即可。
这在 2024 年仍然是一件事情。这是一种“有意的行为”。 有关此的更多信息这里。