问题描述
我正在为 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 的打开,即使您的应用如您所说的“处于活动状态”。