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

Posted

技术标签:

【中文标题】当应用程序被杀死时,在推送通知后执行操作:react-native,IOS【英文标题】:Perform action after push notification when app is killed : react-native, IOS 【发布时间】:2017-09-19 15:38:23 【问题描述】:

从事 ios react-native 项目。

当应用程序死亡并收到推送通知时 -

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

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

使用 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】:

要实现这种行为,您需要为您的应用实现某种deep linking。这样你就可以在你的 react-native 应用程序中监听有效载荷并导航到正确的屏幕。 react-navigation 和 react-native-navigation 有自己的深度链接实现。

来自 react-native 文档,

处理深层链接

如果您的应用是从注册到您的应用的外部网址启动的 您可以使用任何您想要的组件访问和处理它

componentDidMount() 
  Linking.getInitialURL().then((url) => 
    if (url) 
      console.log('Initial url is: ' + url);
    
  ).catch(err => console.error('An error occurred', err));

【讨论】:

谢谢,但我的应用不是从外部 URL 启动的。它推出了 @NirBen-Yair 您使用什么服务发送通知? react-native 自带的普通 PushNotificationsIOS。没有什么像一个信号或火力基地那样的定制。我也退出了世博会,我认为这可能是相关的。 那你应该继续实现PushNotificationIOS API并使用addEventListener

以上是关于当应用程序被杀死时,在推送通知后执行操作:react-native,IOS的主要内容,如果未能解决你的问题,请参考以下文章

应用程序被杀死/关闭/未打开时的 IOS 推送通知操作

使用firebase发送静默推送通知,以便在应用程序被杀死时唤醒它

当应用程序被杀死Android时无法接收解析推送通知

当应用程序被杀死时,iOS 没有收到推送通知

iOS React 在应用程序被杀死时推送通知

推送通知后台被用户杀死