我一直在尝试在react native中通过rnfirebase使用FCM来实现通知,并使用notifee来处理本地通知。
我已经能够接收后台通知即杀死状态和最小化状态通过firebase云消息,并能够获得前台通知使用notifee。
现在我想使用notifee作为后台通知,以保持通知之间的一致性。
这里的代码
const displayNotification = async () => {
const channelId = await notifee.createChannel({
id: 'important',
name: 'Important Notifications',
importance: AndroidImportance.HIGH,
});
notifee.displayNotification({
body: 'This message was sent via FCM!',
android: {
channelId: channelId,
actions: [
{
title: 'Mark as Read',
pressAction: {
id: 'read',
},
},
],
},
});
};
messaging().setBackgroundMessageHandler(async remoteMessage => {
console.log('Message handled in the background!', remoteMessage);
displayNotification();
});
messaging().onMessage(async remoteMessage => {
console.log('Message handled in the foregourp!', remoteMessage);
displayNotification();
});
- 使用此代码获取前台通知。当应用程序最小化时,将获取两个通知,一个来自notifee,另一个来自FCM。当应用程序被杀死时,仅获取FCM通知,而不是notifee。*
问题
1.如何在已死亡状态下获得被通知人的通知?
1.如何禁用FCM后台通知。我需要从firebase只发送数据通知吗?
1.此外,在One Plus设备上,无法在已关闭状态下获得FCM通知,因为它显示应用程序未运行。我是否需要添加到Android清单文件?
解决方案
通过将setBackgroundHandler从useEffect内部移动到钩子外部,可以解决问题1。
第二季度 * 仍待定 *
第3季度 * 仍待定 *
2条答案
按热度按时间6jjcrrmo1#
backgroundMessageHandler会自己创建一个包含FCM信息的通知,而触发自己的通知只会导致两个通知。您应该删除backgroundMessageHandler中的
displayNotification();
。此外,backgroundMessageHandler应该位于index.js
文件中,而不是您的应用程序中。t9aqgxwy2#
如果您想忽略FCM后台通知,只需忽略notification参数。只需发送data参数,但在Android和iOS上,仅发送Data消息的优先级都很低,默认情况下不会触发setBackgroundMessageHandler。要启用此功能,您必须在Android上将“priority”设置为high,并在消息负载中为iOS启用content-available标志。