目錄
1.URL Scheme的作用
2.如何 注冊URL Scheme
3.APP之間跳轉(zhuǎn)測試
4. 通過Safari瀏覽器測試自定義的URL Schemes APP跳轉(zhuǎn)
iOS中使用URL Scheme進(jìn)行App跳轉(zhuǎn)粮揉,比如在應(yīng)用內(nèi)提示安裝另一個(gè)應(yīng)用時(shí)就以url打開safari卸夕,然后打開app store那樣
1.URL Scheme的作用
我們都知道蘋果手機(jī)中的APP都有一個(gè)沙盒酣倾,APP就是一個(gè)信息孤島,相互是不可以進(jìn)行通信的起宽。但是iOS的APP可以注冊自己的URL Scheme,URL Scheme是為方便app之間互相調(diào)用而設(shè)計(jì)的。我們可以通過系統(tǒng)的OpenURL來打開該app,并可以傳遞一些參數(shù)坯认。
例如:你在Safari里輸入www.alipay.com,就可以直接打開你的支付寶app氓涣,前提是你的手機(jī)裝了支付寶牛哺。如果你沒有裝支付寶,應(yīng)該顯示的是支付寶下載界面劳吠,點(diǎn)擊會(huì)跳到AppStore的支付寶下載界面引润。
URL Scheme必須能唯一標(biāo)識一個(gè)APP,如果你設(shè)置的URL Scheme與別的APP的URL Scheme沖突時(shí)痒玩,你的APP不一定會(huì)被啟動(dòng)起來淳附。因?yàn)楫?dāng)你的APP在安裝的時(shí)候议慰,系統(tǒng)里面已經(jīng)注冊了你的URL Scheme。
一般情況下奴曙,是會(huì)調(diào)用先安裝的app别凹。但是iOS的系統(tǒng)app的URL Scheme肯定是最高的。所以我們定義URL Scheme的時(shí)候洽糟,盡量避開系統(tǒng)app已經(jīng)定義過的URL Scheme炉菲。
下面就舉例來實(shí)現(xiàn)一下,應(yīng)用A跳轉(zhuǎn)到應(yīng)用B
2.如何 注冊URL Scheme
1.在應(yīng)用B工程的info.plist里添加URL types
?
2.添加URL Schemes
?
3.設(shè)置URL Schemes 和設(shè)置URL Identifier
URL Identifier是自定義的 URL scheme 的名字坤溃,一般采用反轉(zhuǎn)域名的方法保證該名字的唯一性拍霜,比如 com.iOSStrongDemo.www,也可以不設(shè)置薪介,或者隨便設(shè)置一個(gè)祠饺,但必須保證唯一性
?
3.APP之間跳轉(zhuǎn)測試
1.不帶參數(shù)的方法(應(yīng)用A里面)
- (IBAction)click:(UIButton *)sender {
NSString *url = @"isTony://tony";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url] options:@{} completionHandler:^(BOOL success) {
}];
}
2.帶參數(shù)的方法
- (IBAction)click:(UIButton *)sender {
NSString *url = @"isTony://tony?name=tony&phone=18788888888";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url] options:@{} completionHandler:^(BOOL success) {
}];
}
3.應(yīng)用B的AppDelegate.m里面監(jiān)測是否跳轉(zhuǎn)成功
//iOS9之前走這個(gè)方法
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL*)url
{
// 接受傳過來的參數(shù)
NSString *text = [[url host] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"打開啦"
message:text
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertView show];
return YES;
}
//iOS9以后走的是這個(gè)方法
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options{
NSLog(@"Calling Application Bundle ID: %@", options[UIApplicationOpenURLOptionsSourceApplicationKey]);
NSLog(@"URL scheme: %@", [url scheme]);
NSLog(@"URL query: %@", [url query]);
NSString *text = [url query];
UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"跳轉(zhuǎn)成功啦!" message:text preferredStyle:UIAlertControllerStyleAlert];
[alertVC addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction*action) {
}]];
[self.window.rootViewController presentViewController:alertVC animated:YES completion:nil];
return YES;
}
4.跳轉(zhuǎn)成功視頻
?
4. 通過Safari瀏覽器測試自定義的URL Schemes APP跳轉(zhuǎn)
我們也可以在Safari瀏覽器地址欄里輸入:isTony:// 也是可以跳轉(zhuǎn)成功的
?