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 }