如何使用react-native-firebase v5正确设置前台通知?

时间:2019-11-29 16:32:42

标签: firebase react-native push-notification react-native-firebase

我们有一个react-native应用程序,它可以在以下环境中通过FCM运行其通知:

  react-native: 0.59.10,
  react-native-firebase: 5.5.6

所有的配置都已经设置好,提供了证书,等等。直到现在,通知一直像时钟一样工作,但是最近我们停止在前台接收通知。

这是NotificationsManager代码:

import firebase from 'react-native-firebase';

const CHANNEL = 'default';

...

const localNotificationListener = React.useRef();
const notificationOpenListener = React.useRef();
const onTokenRefreshListener = React.useRef();

const receiveForegroundPN = (n) => {
    const notification = new firebase.notifications.Notification()
      .setNotificationId(n.notificationId)
      .setTitle(n.title)
      .setSubtitle(n.subtitle)
      .setBody(n.body)
      .setData(n.data);

    if (Platform.OS === 'android') {
      notification
        .android.setChannelId(CHANNEL)
        .android.setSmallIcon('ic_launcher');
    }
    firebase.notifications().displayNotification(notification);
  };

React.useEffect(() => {
    const channel = new firebase.notifications.Android.Channel(
      CHANNEL,
      'Bank Notifications',
      firebase.notifications.Android.Importance.Max,
    ).setDescription('*****');

    firebase.notifications().android.createChannel(channel);

    localNotificationListener.current = firebase.notifications().onNotification(receiveForegroundPN);
    notificationOpenListener.current = firebase.notifications().onNotificationOpened(openNotification);

    onTokenRefreshListener.current = firebase.messaging().onTokenRefresh((fcmToken) => {
      registerToken({
        device_token: fcmToken,
      });
    });

    runFlow();

    return () => {
      localNotificationListener.current();
      notificationOpenListener.current();
      onTokenRefreshListener.current();
    };
  }, []);

当应用程序在后台运行时,通知在两个平台上都可以正常运行,但是当应用程序在前台运行时则永远不会显示。

我尝试设置show_on_foreground: "true",但这没有帮助。实际上,我尝试使用receiveForegroundPN方法记录任何内容,但从未调用过它,即,看起来好像在应用程序运行时从未收到过来自Firebase的通知。

这里可能是什么问题以及使通知正常工作的可能解决方案?

更新

在发布此消息的一个小时内,iOS突然开始接收前台通知。 Android仍然无法运行,但它曾经可以运行。

1 个答案:

答案 0 :(得分:0)

我也有类似的问题。 onNotification方法不会被触发,因此我尝试了onMessage方法,它似乎适用于前台。

... | grep '"' | cut -d '"' -f 2