APP之間的跳轉需求很普遍,比如我們使用支付寶会通、微信支付時,會調起支付寶娄周、微信客戶端涕侈,支付完成后又返回到我們APP了,這些都是應用之間相互跳轉的經典案例煤辨;其工作原理就是通過一些兩者之間約定的協(xié)議來達成通訊裳涛,如同http協(xié)議一樣,iOS中URL Schemes就相當于協(xié)議众辨,跳轉的方法蘋果也幫我們封裝在UIApplication中:
- (BOOL)openURL:(NSURL)url;
看到此方法是不是很熟悉端三?對,平常我們用的打電話鹃彻、發(fā)短信什么的都是用這個方法,下面筆者列舉了些打開系統(tǒng)應用程序的常見方法郊闯;
打開打電話應用程序
URL:tel://***
打開發(fā)短信應用程序
URL:sms://***
打開系統(tǒng)的設置界面,必須先在info.plist中配置URL Schemes
在URL Types中添加prefs
打開Wifi設置
URL:prefs:root=WIFI
打開定位服務
URL:prefs:root=LOCATION_SERVICES
打開藍牙服務
URL:prefs:root=Bluetooth
打開FaceTime
URL:prefs:root=FACETIME
打開音樂
URL:prefs:root=MUSIC
打開墻紙設置
URL:prefs:root=Wallpaper
以下分三種情況講解跳轉的各個細節(jié):
一:單跳
應用A跳轉到應用B,跳過去OK,不管回來
1蛛株、首先要在項目APP_B當中設置URL Schemes团赁,該key必須確保唯一,要提供給APP_A用谨履,我在這用了JasonB
,當然你可以隨便取欢摄,當然最好是英文和沒有特殊字符(我用了下劃線居然跳轉不成功!K袼凇)怀挠,設置路徑如下:
targets -> info -> URL Types ->URL Scheme (或者直接在Info.plist添加析蝴,筆者喜歡用此路徑,因為直接填寫就可以)
2绿淋、在應用APP_A寫跳轉代碼
**注意: iOS9中打開一個應用程序的URL必須配置info.plist文件
添加 LSApplicationQueriesSchemes的key
添加對應url的 scheme**
代碼實現跳轉:
//此URL的格式是應用B設置的URL Scheme
NSString *UrlStr = @"JasonB://";
NSURL *url = [NSURL URLWithString:UrlStr];
// 在這里可以先做個判斷,如沒有跳轉APPStore去下載
if ([[UIApplication sharedApplication]canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url];
}else{
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"溫馨提示" message:@"跳轉的應用程序未安裝" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"去下載", nil];
[alert show];
}
二:相互跳
應用A跳轉到應用B嫌变,再從應用B跳回應用A
1、經過上面的測試躬它,跳回其實很簡單腾啥,就是把之前在APP_A和APP_B設置的東西對應的設置一下,先在APP_A中設置URL Schemes:
2冯吓、APP_B中iOS9
以上添加 LSApplicationQueriesSchemes倘待,然后在應用B中添加跳轉代碼,方法和第一種一樣组贺,但URL要變成APP_A中的URL Schemes:
NSString *UrlStr = @"JasonA://";
NSURL *url = [NSURL URLWithString:UrlStr];
這樣就實現了跳回了凸舵;當然了,iOS系統(tǒng)在應用跳轉的時候左上角有提供系統(tǒng)調回的按鈕失尖,自己寫的話更靈活
三:跳轉傳值并進入指定頁面
很多時候我們跳轉應用不止打開另一個應用而更多需要跳到相應的指定頁面
1啊奄、我們需要在應用A跳轉時將參賽通過URL傳過來,URL的格式為JasonB://
這個URL是可以將參數拼接在url后邊的掀潮,這樣在另一個APP的openUrl方法中菇夸,解析這個url中的參數就可以了,如:
NSString *UrlStr = JasonB://goodID=100
2仪吧、在應用B中的AppDelegatehandleOpenURL
方法中接收應用A傳過來的參數
-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
NSString *canshu = url.absoluteString;
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"傳過來的參數是" message:canshu delegate:self cancelButtonTitle:@"取消" otherButtonTitles:nil, nil];
[alert show];
return NO;
}
在跳轉過來時就接到了傳過來的參數庄新,我們可以通過判斷參數含有什么字段實現跳轉相應的頁面:
//獲取URL
NSString *urlStr = url.absoluteString;
//取出根控制器
UINavigationController *rootNav = (UINavigationController *)[UIApplication sharedApplication].keyWindow.rootViewController;
//回到根控制器
[rootNav popToRootViewControllerAnimated:NO];
//取出MainViewController
ViewController *MaintVc = rootNav.childViewControllers.firstObject;
//判斷包含哪個字段然后跳轉
if ([urlStr containsString:@"goodID"]) {
//取出ID跳轉商品詳情
}else if ([urlStr containsString:@"shopID"]) {
//取出ID跳轉店鋪詳情
}
上面我只是列舉一種跳轉的方法,方法很多請根據自己的項目靈活使用薯鼠!以上就是APP之間跳轉的幾種情況择诈,不管需求怎么變,思路大概就是這些出皇。