應用間跳轉,應用跳轉
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 }