1、配置URLSchemes 被跳轉至的應用要配置URLSchemes,其他應用根據此應用的URLSchemes跳轉至此應用。 一個APP可以配置多個URLSchemes,這樣其他APP無論寫哪個URLSchemes,都能跳轉至此應用。 方式1:配置Info信息,其實本質修改的還是Info.plis ...
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 }