你的位置:首页 > 操作系统

[操作系统]应用间跳转


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的APP25   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的URLSchemes11   // 使用这个方法,需要先设置白名单(iOS9开始),否则调用的时候,不管用户是否下载,都返回NO12   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的URLSchemes21   // 使用这个方法,需要先设置白名单(iOS9开始),否则调用的时候,不管用户是否下载,都返回NO22   if([self.application canOpenURL:[NSURL URLWithString:@"toapp://"]]){23     [self.application openURL:[NSURL URLWithString:@"toapp://1"]];24   }25   else{26     NSLog(@"您还未下载此APP");27   }28 }