android 如何在notifee和FCM中接收后台通知

ddarikpa  于 2022-12-16  发布在  Android
关注(0)|答案(2)|浏览(192)

我一直在尝试在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季度 * 仍待定 *

6jjcrrmo

6jjcrrmo1#

backgroundMessageHandler会自己创建一个包含FCM信息的通知,而触发自己的通知只会导致两个通知。您应该删除backgroundMessageHandler中的displayNotification();。此外,backgroundMessageHandler应该位于index.js文件中,而不是您的应用程序中。

t9aqgxwy

t9aqgxwy2#

如果您想忽略FCM后台通知,只需忽略notification参数。只需发送data参数,但在Android和iOS上,仅发送Data消息的优先级都很低,默认情况下不会触发setBackgroundMessageHandler。要启用此功能,您必须在Android上将“priority”设置为high,并在消息负载中为iOS启用content-available标志。

{
  "to": "User_Device_Token",
  "data": {
     "body": "Body of Your Notification",
     "title": "Title of Your Notification"
  },
  "priority": "high",
  "contentAvailable": true
}

相关问题