当app被杀死时,在推送通知后执行操作:react-native,IOS

时间:2017-09-19 15:38:23

标签: ios objective-c react-native react-native-ios expo

开展IOS反应原生项目。

当应用程序为DEAD并收到推送通知时 -

我希望应用根据通知的有效负载导航到其他页面。 当应用程序处于前台或后台时 - 一切正常。 当应用程序被杀死时 - 应用程序就会自行打开。

下面添加的是我的Appdelegate.m代码。 我正在捕获通知并将其记录到控制台,但我不知道如何将其发送到本地反应。

使用RN 0.46

expo 19(与ExpoKit分开)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
    _window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    _window.backgroundColor = [UIColor whiteColor];
    [[ExpoKit sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];
    _rootViewController = [ExpoKit sharedInstance].rootViewController;
    _window.rootViewController = _rootViewController;

    [_rootViewController loadReactApplication];
    [_window makeKeyAndVisible];


    if ([launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]) {
          NSDictionary *notification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
          if (notification) {
              //logs the notification's payload
              NSLog(@"app recieved notification from remote%@",notification);
          } else {
              NSLog(@"app did not recieve notification");
          }

    }

    return YES;
}

https://jsfiddle.net/nirbenya/pxojj7qv/

1 个答案:

答案 0 :(得分:0)

要实现此类行为,您需要为您的应用实施某种deep linking。这样,您可以在您的react-native应用程序中侦听有效负载并导航到正确的屏幕。 react-navigationreact-native-navigation有自己的深层链接实现。

来自react-native docs,

  

处理深层链接

     

如果您的应用是从注册到您应用的外部网址启动的   您可以使用

从任何组件访问和处理它
componentDidMount() {
  Linking.getInitialURL().then((url) => {
    if (url) {
      console.log('Initial url is: ' + url);
    }
  }).catch(err => console.error('An error occurred', err));
}