React-Native Обработка push-уведомлений с реагированием-навигацией - PullRequest
0 голосов
/ 12 декабря 2018

Мне нужно обработать push-уведомления, и я использую onesignal для этого.В настоящее время я обрабатываю push-уведомления на своем домашнем экране и использую react-navigation.

 componentDidMount() {
        OneSignal.addEventListener('received', this.onReceived);
        OneSignal.addEventListener('opened', this.onOpened);

    }
 componentWillUnmount() {
        // OneSignal.removeEventListener('received');
        // OneSignal.removeEventListener('opened');
    }

onReceived(notification) {
    console.log('Notification received: ', notification);
}
onOpened = (data) => {
    const { notification: { payload } } = data;
    if (payload.additionalData) {
        if (payload.additionalData.params) {
            this.props.navigation.navigate({
                routeName: payload.additionalData.route,
                params: payload.additionalData.params,
                key: payload.notificationID
            });
        }
    }
}

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

Допустим, я иду на экран OrderDetail, и когда я получаю уведомление, он переходит к деталям заказа, Home Screen --> Order Detail и теперь, если я нахожусь внутри OrderDetail, и если я получу уведомление, это будет

Home Screen ---> Order Detail ---> Order Detail ... и т. Д. «Как я могу обрабатывать push-уведомления в этом случае?

1 Ответ

0 голосов
/ 12 декабря 2018

Возможно ... обрабатывать push-уведомления по-разному на Home и Detail страниц.

Скажем, на Home странице, слушатьуведомление при didFocus и удаление слушателя при willBlur.Таким образом, обработчик будет действовать только тогда, когда пользователь находится на Home .И перейдите (маршрут) к «Подробности» в обработчике уведомлений на Home странице.

Аналогично, на Detail странице, прослушайте уведомление при didFocus иудалить слушателя, когда willBlur.Хотя обработчик просто обновляет содержимое при получении уведомления.

--- edit ---

Home:

constructor() {
  this.props.navigation.addListener(
    'willBlur',() => {
      OneSignal.removeEventListener('received');
      OneSignal.removeEventListener('opened');
    }
  );

  this.props.navigation.addListener(
    'didFocus',() => {
      OneSignal.addEventListener('received');
      OneSignal.addEventListener('opened');
    }
  );
}
// handler implementation is the same

Detail:

//same lifecycle implementation
// but different handler
onOpened = (data) => {
const { notification: { payload } } = data;
if (payload.additionalData) {
    if (payload.additionalData.params) {
        this.setState(paramsUsedByDetail: payload.additionalData.params);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...