Как запретить показ первого маршрута при уведомлении, нажмите в реагировать на родной

Я реализовал push-уведомление, используя react-native-push-nofication Вот моя конфигурация push-уведомлений.

const configure = () => {

 var _token

 PushNotification.configure({

   onRegister: function(token) {
     //process token

     //alert(JSON.stringify(token));
     Clipboard.setString(JSON.stringify(token))
   },

   onNotification: function(notification) {
     // process the notification
     // required on iOS only
     navigator.navigate(notification.data.url);
    // notification.finish(PushNotificationIOS.FetchResult.NoData);
   },

   senderID: Config.GCMSENDERKEY,

   permissions: {
     alert: true,
     badge: true,
     sound: true
   },

   popInitialNotification: true,
   requestPermissions: true,

 });
};

Этот код успешно перемещается по желаемому маршруту, но когда приложение находится в фоновом режиме, когда пользователь нажимает на уведомление, он показывает корневой маршрут приложения (заставку) перед переходом к желаемому маршруту. Я не хочу, чтобы заставка появлялась вообще.

1 ответ

Я только что просмотрел библиотеку и должен сказать, что она действительно плохо спроектирована. Вы должны перейти к реакции-native-firebase.

Но если вы хотите остаться с ним:

Первое, что мы должны выяснить, это как мы можем получить уведомление о том, что приложение было открыто?

Мы не можем использовать onNotification из библиотеки, потому что мы не знаем, когда будет вызван обратный вызов.

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

    if ( this.hasPoppedInitialNotification === false &&
            ( options.popInitialNotification === undefined || options.popInitialNotification === true ) ) {
        this.popInitialNotification(function(firstNotification) {
            if ( firstNotification !== null ) {
                this._onNotification(firstNotification, true);
            }
        }.bind(this));
        this.hasPoppedInitialNotification = true;
    }

Как видите, он будет вызывать функцию с именем popInitialNotification(callback) с функцией обратного вызова с начальным уведомлением.

Теперь вы можете использовать функцию, чтобы получить начальное уведомление.

PushNotification.popInitialNotification(function(notification) {

});

При этом у вас теперь есть доступ к первоначальному уведомлению напрямую, без ожидания onNotification,

С этого момента вы можете использовать SwitchNavigator из реагирующей навигации, как в следующем примере: https://reactnavigation.org/docs/en/auth-flow.html

Другие вопросы по тегам