iOS - 如果应用处于非活动状态,Deeplink 将不起作用

问题描述

我正在为 ios 实现深层链接 -> 响应原生。

我知道如果应用处于非活动状态,方法 didFinishLaunchingWithOptions 将被触发。 但是放置这些代码无助于在应用程序内部传递深层链接

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  ...
  if(launchOptions) {
    NSDictionary *userInfo = [launchOptions valueForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
    NSURL *siteURL = [NSURL URLWithString:[userInfo objectForKey:@"url"]];
    if(siteURL) {
//      [self application:application didReceiveRemoteNotification:userInfo fetchCompletionHandler:^(UIBackgroundFetchResult result){}];
//      return [self application:application openURL:siteURL options:launchOptions];
      return [RCTLinkingManager application:application openURL:siteURL options:launchOptions];
    }
  }
  return Yes;
}

siteURL 是有效的,但我已经尝试了上述方法,但都没有奏效。

这是 openURL 方法,如果应用程序处于非活动状态,它将永远不会被调用

- (BOOL)application:(UIApplication *)application
   openURL:(NSURL *)url
   options:(NSDictionary<UIApplicationopenURLOptionsKey,id> *)options
{
  NSLog(@"123456xx %@",url.absoluteString);
  Nsstring *myUrl = url.absoluteString;
  if ([myUrl containsstring:@"fb***"]) {
      return [[FBSDKApplicationDelegate sharedInstance] application:application
                                                                  openURL:url
                                                        sourceApplication:options[UIApplicationopenURLOptionsSourceApplicationKey]
                                                               annotation:options[UIApplicationopenURLOptionsAnnotationKey]
                    ];
    } else {
      return [RCTLinkingManager application:application openURL:url options:options];
    }
//  return [RCTLinkingManager application:application openURL:url options:options];
}

didReceiveRemoteNotification方法

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
  NSLog(@"123456 did receive");
  // redirect while got url from notif
  Nsstring *urlstr = (Nsstring*)[userInfo objectForKey:@"url"];
  if(urlstr) {
    NSLog(@"123456 did receive url %@",urlstr);
    NSURL *url = [NSURL URLWithString:urlstr];
    [RCTLinkingManager application:application openURL:url options:@{}];
  }


  [RNcpushNotificationIOS didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler];
}

解决方法

您还需要像这样实现 MediaStore.Video.Media 委托方法:

openURL

从那里您可以处理 URL 的打开,即使您的应用如您所说的“处于活动状态”。