Получение двойного всплывающего уведомления для одного события на ios при отправке уведомления с помощью FCM - PullRequest
0 голосов
/ 07 марта 2019

Описание проблемы ::

Я работаю над реагированием собственного приложения и использую службу реагирования собственного firebase для push-уведомлений.У меня проблема на платформе IOS.Я получаю двойные всплывающие уведомления для одного события.

Шаги, которым я следую, чтобы создать случай: *

  1. После установки приложения, если я вхожу в систему и отправляю уведомление через FCMЯ только что получил одно всплывающее окно.После этого я вышел из системы и снова вошел в систему, теперь на этот раз я получил двойные всплывающие окна для одного уведомления.В этом случае я не очищаю приложение от фона.

  2. Если после каждого выхода из системы я очищаю приложение от фона, я только что получил одно всплывающее окно для одного события.

  3. Когда я вышел из приложения и принудительно отправляю уведомление из FCM, я получаю двойное всплывающее окно на экране инициализации приложения (экран входа в систему).

IЯ генерирую новый токен устройства при входе пользователя в систему и сохраняем этот токен в локальном хранилище. Мы очищаем данные локального хранилища при выходе из системы.

Код ::

async mountDashboard() {
    const enabled = await firebase.messaging().hasPermission();
    if (enabled) {
        const fcmToken = await firebase.messaging().getToken();
        await AsyncStorage.setItem(LocalStorageKeys.DEVICE_TOKEN, fcmToken);
        if (fcmToken) {
            //--- here we are saving our token and sendind data to API
        }
    }

    // in Foreground
    this.notificationListener = firebase.notifications().onNotification((notification) => {
        new RegisterLocalNotification(notification);
    });

    // App in Foreground and background
    let notificationHandler = new NotificationsHandler();
    this.notificationOpenedListener = firebase.notifications().onNotificationOpened((notificationOpen) => {
        notificationHandler.handleNotification(notificationOpen.notification);
    });

    // app close notification handler
    AppCloseNotificationHandler.getInstance().handleNotification();

}

componentDidMount() {
    this.mountDashboard();
}

Среда ::

Двоичные файлы:

  • Узел: 10.15.0 - / usr / local / opt / node @ 10 / bin/ node
  • Пряжа: 1.10.1 - / usr / local / bin / пряжа
  • npm: 6.4.1 - / usr / local / opt / node @ 10 / bin / npm
  • Сторож: 4.9.0 - / usr / local / bin / watchman
  • Элемент списка

npm Пакеты:

  • Реакция: ^ 16.8.4 => 16.8.4
  • react-native: ^ 0.58.6 => 0.58.6

npm. Глобальные пакеты:

  • act-native-cli: 2.0.1
  • реактивная база огня: 5.2.3

1 Ответ

1 голос
/ 07 марта 2019

Вы должны отписаться от слушателя, когда компонент будет отключен.Если вы этого не делаете, вы подписываетесь на двух слушателей.

componentWillUnmount() {
    this.notificationListener(); // it's unsubscribing your listener
}
...