【问题标题】:How to add click action for push notification in React native如何在 React Native 中为推送通知添加点击操作
【发布时间】:2019-11-22 08:53:20
【问题描述】:

我想在点击远程推送通知后导航到特定的应用程序屏幕。 我如何通过本机反应来实现这一点。我正在使用 react-native-push-notification 库

【问题讨论】:

  • 您能否提供有关您的实际代码的更多详细信息?你在使用 react-navigation 吗?
  • 是的,我正在使用 react-navigation

标签: reactjs react-native push-notification react-native-push-notification


【解决方案1】:

react-native-push-notification 有一个 on Notification press 处理程序 -> onNotification ,每次用户按下或收到通知时都会调用它(这来自 react-native-push-notification 文档)。在应用程序中,您创建一个 NavigationService 组件,该组件使用 App.js 文件中设置的顶级导航器引用。使用此导航器,在 onNotification 回调中,您可以导航到应用程序中的任何屏幕,并将收到的通知数据用于您的目的,这些数据可以通过导航器(处于其状态)传递到导航屏幕。一些伪代码可能如下所示:

NotificationService.js:

import NavigationService from './NavigationService';
import PushNotification from "react-native-push-notification";

PushNotification.configure({
    onNotification: function(notification) {
        const { data } = notification;

        NavigationService.navigate('Screen', { notificationData: data });
    }
});

导航服务.js:

import { NavigationActions } from 'react-navigation';

let _navigator;

function setTopLevelNavigator(navigatorRef) {
    _navigator = navigatorRef;
}

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

编辑:您还必须创建一个 AppContainer,(这放置在您的 App.js 中)

 import { createSwitchNavigator } from 'react-navigation';
 import { createAppContainer } from 'react-navigation';

 const AppContainer = createAppContainer(createSwitchNavigator({...Screens}));

 export default class App extends React.Component {
     ...
     render() {
          return (
               <View>
                    <AppContainer ref={ (navigatorRef) => { NavigationService.setTopLevelNavigator(navigatorRef); } } />
               </View>
          )

     }
 }

【讨论】:

  • 这不起作用。它的返回使用空数据导航。抛出错误 TypeError:_NavigationService.default.navigate is not a function
  • 在应用容器的 App.js 文件中添加 &lt;AppContainer ref={ (navigatorRef) =&gt; { NavigationService.setTopLevelNavigator(navigatorRef); } } /&gt; 以设置导航器的引用
  • 应用程序关闭时如何实现相同的行为。当应用程序关闭并收到推送通知时,重定向不起作用。
  • 如果应用在后台没有回调被调用,则必须实现无头JS任务。不过,这是一个完全不同的主题,您将不得不花一些时间阅读和研究如何实施它。
  • headless JS 是 android 的唯一解决方案。你知道任何适用于 ios 和 android 的解决方案吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 2019-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多