App之間跳轉(zhuǎn)實(shí)現(xiàn)
在談App內(nèi)部的路由之前,先來談?wù)勗趇OS系統(tǒng)間袄秩,不同App之間是怎么實(shí)現(xiàn)跳轉(zhuǎn)的腰奋。
1. URL Scheme方式
iOS系統(tǒng)是默認(rèn)支持URL Scheme的轻绞,具體見官方文檔。
比如說窿春,在iPhone的Safari瀏覽器上面輸入如下的命令拉一,會(huì)自動(dòng)打開一些App:
// 打開郵箱
mailto://
// 給110撥打電話
tel://110
在iOS 9 之前只要在App的info.plist里面添加URL types - URL Schemes,如下圖:
這里就添加了一個(gè)com.ios.Qhomer的Scheme旧乞。這樣就可以在iPhone的Safari瀏覽器上面輸入:
com.ios.Qhomer://
就可以直接打開這個(gè)App了蔚润。
關(guān)于其他一些常見的App,可以從iTunes里面下載到它的ipa文件尺栖,解壓嫡纠,顯示包內(nèi)容里面可以找到info.plist文件,打開它,在里面就可以相應(yīng)的URL Scheme筒繁。
// 手機(jī)QQ
mqq://
// 微信
weixin://
// 新浪微博
sinaweibo://
// 餓了么
eleme://
當(dāng)然了味混,某些App對(duì)于調(diào)用URL Scheme比較敏感,它們不希望其他的App隨意的就調(diào)用自己者蠕。
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation
{
NSLog(@"sourceApplication: %@", sourceApplication);
NSLog(@"URL scheme:%@", [url scheme]);
NSLog(@"URL query: %@", [url query]);
if ([sourceApplication isEqualToString:@"com.tencent.weixin"]){
// 允許打開
return YES;
}else{
return NO;
}
}
如果待調(diào)用的App已經(jīng)運(yùn)行了,那么它的生命周期如下:
如果待調(diào)用的App在后臺(tái)屡贺,那么它的生命周期如下:
明白了上面的生命周期之后蠢棱,我們就可以通過調(diào)用application:openURL:sourceApplication:annotation:這個(gè)方法,來阻止一些App的隨意調(diào)用甩栈。
如上圖泻仙,餓了么App允許通過URL Scheme調(diào)用,那么我們可以在Safari里面調(diào)用到餓了么App量没。手機(jī)QQ不允許調(diào)用玉转,我們?cè)赟afari里面也就沒法跳轉(zhuǎn)過去。
關(guān)于App間的跳轉(zhuǎn)問題殴蹄,感興趣的可以查看官方文檔Inter-App Communication究抓。
App也是可以直接跳轉(zhuǎn)到系統(tǒng)設(shè)置的。比如有些需求要求檢測(cè)用戶有沒有開啟某些系統(tǒng)權(quán)限袭灯,如果沒有開啟就彈框提示刺下,點(diǎn)擊彈框的按鈕直接跳轉(zhuǎn)到系統(tǒng)設(shè)置里面對(duì)應(yīng)的設(shè)置界面。
iOS 10 支持通過 URL Scheme 跳轉(zhuǎn)到系統(tǒng)設(shè)置 iOS10跳轉(zhuǎn)系統(tǒng)設(shè)置的正確姿勢(shì) 關(guān)于 iOS 系統(tǒng)功能的 URL 匯總列表
2. Universal Links方式
雖然在微信內(nèi)部開網(wǎng)頁會(huì)禁止所有的Scheme稽荧,但是iOS 9.0新增加了一項(xiàng)功能是Universal Links橘茉,使用這個(gè)功能可以使我們的App通過HTTP鏈接來啟動(dòng)App。 1.如果安裝過App,不管在微信里面http鏈接還是在Safari瀏覽器畅卓,還是其他第三方瀏覽器擅腰,都可以打開App。 2.如果沒有安裝過App翁潘,就會(huì)打開網(wǎng)頁趁冈。
具體設(shè)置需要3步:
1.App需要開啟Associated Domains服務(wù),并設(shè)置Domains拜马,注意必須要applinks:開頭渗勘。
2.域名必須要支持HTTPS。
3.上傳內(nèi)容是Json格式的文件一膨,文件名為apple-app-site-association到自己域名的根目錄下呀邢,或者.well-known目錄下。iOS自動(dòng)會(huì)去讀取這個(gè)文件豹绪。具體的文件內(nèi)容請(qǐng)查看官方文檔价淌。
如果App支持了Universal Links方式,那么可以在其他App里面直接跳轉(zhuǎn)到我們自己的App里面瞒津。如下圖蝉衣,點(diǎn)擊鏈接,由于該鏈接會(huì)Matcher到我們?cè)O(shè)置的鏈接巷蚪,所以菜單里面會(huì)顯示用我們的App打開病毡。
在瀏覽器里面也是一樣的效果,如果是支持了Universal Links方式屁柏,訪問相應(yīng)的URL啦膜,會(huì)有不同的效果。如下圖:
以上就是iOS系統(tǒng)中App間跳轉(zhuǎn)的二種方式淌喻。
從iOS 系統(tǒng)里面支持的URL Scheme方式僧家,我們可以看出,對(duì)于一個(gè)資源的訪問裸删,蘋果也是用URI的方式來訪問的八拱。
統(tǒng)一資源標(biāo)識(shí)符(英語:Uniform Resource Identifier,或URI)是一個(gè)用于標(biāo)識(shí)某一互聯(lián)網(wǎng)資源名稱的字符串涯塔。 該種標(biāo)識(shí)允許用戶對(duì)網(wǎng)絡(luò)中(一般指萬維網(wǎng))的資源通過特定的協(xié)議進(jìn)行交互操作肌稻。URI的最常見的形式是統(tǒng)一資源定位符(URL)。
舉個(gè)例子:
這是一段URI匕荸,每一段都代表了對(duì)應(yīng)的含義爹谭。對(duì)方接收到了這樣一串字符串,按照規(guī)則解析出來榛搔,就能獲取到所有的有用信息旦棉。
這個(gè)能給我們?cè)O(shè)計(jì)App組件間的路由帶來一些思路么齿风?如果我們想要定義一個(gè)三端(iOS药薯,Android绑洛,H5)的統(tǒng)一訪問資源的方式,能用URI的這種方式實(shí)現(xiàn)么童本?
作者:餓了么物流移動(dòng)團(tuán)隊(duì)
鏈接:https://juejin.im/post/5ab85a346fb9a028e52dd16e
來源:掘金
著作權(quán)歸作者所有真屯。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處穷娱。