Detect if the app was launched/opened from a push notification描述了如何通过用户点击推送通知来检测本机iOS应用程序是否已打开(即已启动或仅处于活动状态).

我怎样才能在你的生活中做同样的事情?PushNotificationIOS让我附加一个通知侦听器...

PushNotificationIOS.addEventListener('notification', function (notification) {
    console.log('got a notification', notification);
});

但当前台的应用程序收到推送通知时,以及当我通过推送通知打开应用程序时,都会触发and.

我怎样才能发现第二个病例?

推荐答案

这里有两种情况需要以不同的方式检测:

  1. 应用程序已完全终止(例如,重新启动手机,或双击home并将其从后台运行的应用程序列表中删除),用户点击推送通知后,应用程序将被终止.这可以通过React.PushNotificationIOS.getInitialNotification方法检测(以及获取通知的数据).
  2. 该应用程序已暂停,用户点击推送通知后将再次激活.只有like in a native app个,你可以看出这是因为iOS在应用程序打开时将点击的通知传递给你的应用程序(即使它是一个旧的通知),并在你的应用程序处于UIApplicationStateInactive状态(或'background'状态,React Native的AppStateIOS类称之为'background'状态)时触发通知处理程序.

处理这两种情况的代码(你可以把它放在你的index.ios.js或应用程序启动时运行的其他地方):

import React from 'react';
import { PushNotificationIOS, AppState } from 'react-native';

function appOpenedByNotificationTap(notification) {
  // This is your handler. The tapped notification gets passed in here.
  // Do whatever you like with it.
  console.log(notification);
}

PushNotificationIOS.getInitialNotification().then(function (notification) {
  if (notification != null) {
    appOpenedByNotificationTap(notification);
  }
});

let backgroundNotification;

PushNotificationIOS.addEventListener('notification', function (notification) {
  if (AppState.currentState === 'background') {
    backgroundNotification = notification;
  }
});

AppState.addEventListener('change', function (new_state) {
  if (new_state === 'active' && backgroundNotification != null) {
    appOpenedByNotificationTap(backgroundNotification);
    backgroundNotification = null;
  }
});

React-native相关问答推荐

导航到另一个屏幕后清空搜索屏幕

有人可以帮我实现 Font.loadAsync

我应该什么时候调用 realm.close()?

React native flexbox - 如何做 percentages || columns || responsive || grid etc

在选项卡更改时react-navigation

在根项目ReactNativeStarter中找不到任务installRelease

ReactNative 0.43-rc.2 FlatList -- 试图获取超出范围索引 0 的框架

如何在 Crashlytics (Fabrics) 中有效地对非致命异常进行分组?

使用 react-native 设置 Select 器的高度

api.get(...).then(...).catch(...).finally 不是函数

NativeBase + Exponent Header

如何在 react-native 上自动聚焦下一个 TextInput

XCode AppIcon 基于方案

React Native TextInput blur TouchableHighlight 按下事件

创建新的 react-native 元素时出现Unexpected token import错误

如何将 BuildConfig 值传递给依赖模块?

xcode 10错误:multiple commands produce

在 React 中调用 getDerivedStateFromProps 中的方法

如何隐藏 React Native NavigationBar

尽管 TypeScript 编译器错误,为什么我的 React Native 应用程序构建成功?