React Native: управление уведомлениями на RNFirebase - PullRequest
0 голосов
/ 19 сентября 2018

Я успешно реализовал базовую функцию уведомлений с использованием библиотеки react-native-firebase, все работает должным образом, информация получена правильно и готова для использования в целях, которые мне еще предстоит определить.Мой код в настоящее время выглядит следующим образом для части обработки уведомлений:

 componentDidMount() {
        /**
         * When app on foreground, rewrap received notification and re-send it as notification using channelId
         * A workaround because channelId never set by default by FCM API so we need to rewrap to make sure it is
         * shown on user's notification tray
         */ 
        this.notificationListener = firebase.notifications().onNotification((notification) => {
            //data object must have channelId props as a workaround for foreground notification on Android
            console.log('Notif ', notification);
            notification.android.setChannelId(notification.data.channelId);
            firebase.notifications().displayNotification(notification);
        });

        //On Notification tapped, be it from foreground or background
        this.notificationOpen = firebase.notifications().onNotificationOpened((notificationOpen) => {
            //body and title lost if accessed from background, taking info from data object by default
            const notification = notificationOpen.notification;
            console.log('Open ', notification)
            Alert.alert(notification.data.title, notification.data.body);
        });

        //When notification received when app is closed
        this.initialNotification = firebase.notifications().getInitialNotification()
            .then((notificationOpen) => {
                //body and title lost if accessed this way, taking info from data object where info will persist
                if (notificationOpen) {
                    const notification = notificationOpen.notification;
                    console.log('Initial ', notification)
                    Alert.alert(notification.data.title, notification.data.body);
                }
            });
    }

    componentWillUnmount() {
        this.notificationListener();
        this.initialNotification()
        this.notificationOpen();
    }

Приведенный выше код позволяет мне использовать любую информацию, которую я отправил с консоли Firebase или php-сервера, настроенного моим коллегой из вышеуказанной области (неконечно, как была реализована реализация на стороне сервера, но она дает мне точно такой же объект уведомления с моей стороны).

Так что это хорошо и все, но проблема в том, что когда я устанавливаю значок на IOS с консоли Firebase, значок не исчезает, как только я открываю уведомление.Я пытался выяснить, есть ли какой-нибудь дополнительный бит, который я должен добавить к вышеуказанному блоку, чтобы программно уменьшить счетчик значков, но пока мне не повезло.

Так что если кто-то здесь может показать мне, как управлятьэти объекты уведомлений должным образом (особенно объясняя природу и жизненный цикл этих объектов - то есть, какие данные о том, какое свойство / метод сохраняется или является статическим в рамках объекта уведомления) как на Android, так и на IOS, были бы весьма благодарны:)

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Получается простое firebase.notifications().setBadge(0) в корне componentDidMount() очищает счетчик значков при каждом открытии приложения.

Может понадобиться использовать firebase.notifications().removeAllDeliveredNotifications() или firebase.notifications().cancelAllNotifications(), чтобы удалить их также из панели уведомлений,

0 голосов
/ 19 сентября 2018

Возможно, вам придется установить код для значка при создании уведомления

  this.notificationListener = firebase.notifications().onNotification((notification) => {

     const localNotification = new firebase.notifications.Notification()
                .setNotificationId(notification.notificationId)
                .setTitle(notification.title)
                .setSubtitle(notification.subtitle)
                .setBody(notification.body)
                .setData(notification.data)
                .ios.setBadge(notification.ios.badge);

            firebase.notifications()
                .displayNotification(localNotification)
                .catch(err => console.error(err));
 }

Поместите эту строку в код .ios.setBadge(notification.ios.badge); при создании уведомления и повторите попытку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...