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 }