Невозможно перейти от Push-уведомления к выбранному экрану - PullRequest
0 голосов
/ 12 июня 2018

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

Изначально я использовал класс PushController для обработки функции onNotification, но не перенес функции configure и onNotification в компонент, который монтировался в моем компоненте, где создается локальное уведомление.

this.props.navigation.navigate('RouteName'); 

Не работает.Это говорит о том, что this.props.navigation или this.props.navigation.navigate не определены.

PushNotification.
            onNotification(notification) {
                console.log('onNotification')
                console.log( notification );
this.props.navigation.navigate('RegisterRoute');
            },

        });

Как правильно выполнить маршрутизацию или переход от уведомления к выбранному экрану.Я не могу найти прямой ответ в проблемах и документации реагирующих на получение push-уведомлений.

Редактировать: Этот код можно найти в классе, куда я звоню / делаю локальное уведомление.Уведомление запускается и вызывается, и когда уведомление нажимается или на Уведомление, я хотел бы перейти или перейти к другому экрану.

Внутри компонента удалось монтировать.

PushNotification.configure({

            onNotification(notification) {
                console.log('onNotification')
                console.log( notification );
this.props.navigation.navigate('ChosenScreen');
            },


        });

Функция, которая вызывает и создает локальное уведомление

function sendNotification(title, pushMessage){
        PushNotification.localNotification({
        message: pushMessage, 
        title: title,
        userInteraction: true,
        alertAction: 'default',// (optional) default: view

       autoCancel: true, 
       largeIcon: "logo", 
       smallIcon: "logo",
       vibrate: true, 
       vibration: 300,

       alertAction: 'default',
       userInfo: 'default'

      });

}

Ответы [ 3 ]

0 голосов
/ 15 июля 2018

Вероятно, ваша onOpened функция не имеет нужной области видимости, потому что она вызывается в функции addEventListener, поэтому вам нужно связать this.

Пример: (хорошо)

 OneSignal.addEventListener('opened', this.onOpened.bind(this));

(неверно) - нет доступа к навигации

 OneSignal.addEventListener('received', this.onReceived);
0 голосов
/ 26 июля 2019

Вот как я решил свою проблему.

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

Где мое уведомление объявлено и используется

import NavigationService from './NavigationService.js';

compnentDidMount(){
  PushNotification.configure({
    onNotification(notification){
    console.log('onNotification')
    console.log(notification );
      NavigationService.navigate('Route', {Params: param});


  },
  });

}

Класс обслуживания навигации

import { NavigationActions } from 'react-navigation';

let _navigator;

function setTopLevelNavigator(navigatorRef) {
  _navigator = navigatorRef;
}

function navigate(routeName, params) {
  _navigator.dispatch(
    NavigationActions.navigate({
      routeName,
      params,
    })
  );
}

export default {
  navigate,
  setTopLevelNavigator,
};
0 голосов
/ 13 июня 2018

this.props.navigation was undefined означает, что ваш компонент не имеет навигации проп.Вы должны использовать с навигацией , которая является компонентом более высокого порядка.

...