应用间跳转

1、配置URLSchemes

    被跳转至的应用要配置URLSchemes,其他应用根据此应用的URLSchemes跳转至此应用。

    一个APP可以配置多个URLSchemes,这样其他APP无论写哪个URLSchemes,都能跳转至此应用。

方式1:配置Info信息,其实本质修改的还是Info.plist文件

方式2:直接修改Info.plist文件

2、配置白名单

发起跳转的APP使用openURL直接进行跳转,iOS9开始要先判断用户是否下载了跳转至的APP,使用

canOpenURL方法进行判断,但使用canOpenURL的前提是要配置要跳转至APP的白名单,否则无论用户是否下载,都返回NO。

注意:我们一般先使用canOpenURL进行判断,然后再进行跳转;但:可以直接使用openURL进行跳转,白名单不用配置,也不用canOpenURL进行判断。

执行跳转的APP配置白名单(苹果要求最多配置50个白名单):

或者使用代码来添加白名单:

1 <key>LSApplicationQueriesSchemes</key>
2 <array>
3       <string>toapp</string>
4 </array>

3、被跳转的应用

AppDelegate实现以下方法:

 1 // 当此APP被其他APP打开时调用
 2 // app:
 3 // url:打开APP的URL,即其他APP打开此APP时使用的URL,里面可能包含一些参数
 4 // options:
 5 // return:是否同意打开APP
 6 - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options{
 7     
 8     NSString *urlString = url.absoluteString;
 9     NSRange xieyitouRange = [urlString rangeOfString:@"://"];
10     NSRange range = NSMakeRange(0, xieyitouRange.location + xieyitouRange.length);
11     
12     // 截取其他APP传过来的参数
13     NSString *queryString = [urlString substringFromIndex:range.location + range.length];
14     UITabBarController *tabbarVC = (UITabBarController *)self.window.rootViewController;
15     
16     // 根据其他APP传过来的不同参数,执行不同的操作
17     if([queryString isEqualToString:@"0"]){
18         tabbarVC.selectedIndex = 0;
19     }
20     else{
21         tabbarVC.selectedIndex = 1;
22     }
23     
24     // 回跳,操作执行完,跳回到打开此APP的APP
25     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
26         [app openURL:[NSURL URLWithString:@"fromapp://"]];
27     });
28     
29     return YES;
30 }

4、执行跳转的应用

执行跳转的代码:

 1 - (IBAction)openURLRed:(id)sender {
 2     // openURL直接打开其他的APP,《toapp://》是要打开的APP的URLSchemes,后面的0是参数
 3     [self.application openURL:[NSURL URLWithString:@"toapp://0"]];
 4 }
 5 - (IBAction)openURLGreen:(id)sender {
 6     // openURL直接打开其他的APP,《toapp://》是要打开的APP的URLSchemes,后面的0是参数
 7     [self.application openURL:[NSURL URLWithString:@"toapp://1"]];
 8 }
 9 - (IBAction)canOpenURLRed:(id)sender {
10     // 使用canOpenURL先判断用户是否下载了要打开的APP,《toapp://》是要打开的APP的URLSchemes
11     // 使用这个方法,需要先设置白名单(iOS9开始),否则调用的时候,不管用户是否下载,都返回NO
12     if([self.application canOpenURL:[NSURL URLWithString:@"toapp://"]]){
13         [self.application openURL:[NSURL URLWithString:@"toapp://0"]];
14     }
15     else{
16         NSLog(@"您还未下载此APP");
17     }
18 }
19 - (IBAction)canOpenURLGreen:(id)sender {
20     // 使用canOpenURL先判断用户是否下载了要打开的APP,《toapp://》是要打开的APP的URLSchemes
21     // 使用这个方法,需要先设置白名单(iOS9开始),否则调用的时候,不管用户是否下载,都返回NO
22     if([self.application canOpenURL:[NSURL URLWithString:@"toapp://"]]){
23         [self.application openURL:[NSURL URLWithString:@"toapp://1"]];
24     }
25     else{
26         NSLog(@"您还未下载此APP");
27     }
28 }
原文地址:https://www.cnblogs.com/panda1024/p/6081587.html