Universal Link 介紹
Universal Link是蘋果在WWDC 2015上提出的iOS 9的新特性之一。此特性類似于深層鏈接隐孽,并能夠方便地通過打開一個(gè)Https鏈接來直接啟動(dòng)您的客戶端應(yīng)用(手機(jī)有安裝App)是晨。對(duì)比起以往所使用的URL Sheme, 這種新特性在實(shí)現(xiàn)web-app的無縫鏈接時(shí)能夠提供極佳的用戶體驗(yàn)婚夫。
這具體是一種怎樣的情景呢?舉個(gè)例子署鸡,你的用戶在微信里面瀏覽一個(gè)你們公司的網(wǎng)頁,而此時(shí)用戶手機(jī)也同時(shí)安裝有你們公司的App 限嫌;而universal link 能夠使的用戶在打開某個(gè)詳情頁時(shí)直接打開你的app 并到達(dá)app中相應(yīng)內(nèi)容的頁面靴庆,從而實(shí)施用戶想要的操作(例如查看某條新聞,例如查看某個(gè)商品的明細(xì))
以下分別為URL Scheme方式及Universal Link的方式呈現(xiàn)場(chǎng)景恢復(fù)的過程
以下為URL Scheme方式: (第一張圖是在微信中瀏覽web,下同)
下面是用Universal Link方式:
通過上述對(duì)比得知,Universal Link能夠直接從微信中打開App,比起以往的URL Scheme的方式能夠大大改善用戶體驗(yàn)。
Univerasl Link的準(zhǔn)備工作
- 擁有自己的域名怒医,且此域名網(wǎng)站支持https
- 能夠上傳文件
apple-app-site-association
到自己的域名 - 只支持iOS 9以上
注:可以使用三方服務(wù)炉抒,MobLink已經(jīng)幫您完成了上面所有的工作,免費(fèi)為您提供Universal Link服務(wù)稚叹。使用MobLink提供的技術(shù)方案焰薄,無論您是否iOS9以上,都能夠助您實(shí)現(xiàn) Web與App 之間的完美交互扒袖。
集成步驟
- 開啟
Associated Domains
服務(wù)
注意:有的app會(huì)區(qū)分線上包和測(cè)試包塞茅,不同賬號(hào)下的都需要設(shè)置App ID才行,前往不要忘記季率。
2.開啟Associated Domains
服務(wù)
在xcode工程的Capabilities -> Associated Domains
中添加跳轉(zhuǎn)域名野瘦,域名的格式為:
applinks:www.example.com
注意:
你的服務(wù)器必須支持SSL
Domains可以添加多個(gè)
Domains必須以applinks:
開頭
3.配置apple-app-site-association
文件,官方文檔如下:
{
"applinks": {
"apps": [],
"details": [
{
"appID": "9JA89QQLNQ.com.apple.wwdc",
"paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"]
},
{
"appID": "ABCD1234.com.apple.wwdc",
"paths": [ "*" ]
}
]
}
}
apps項(xiàng)必須對(duì)應(yīng)一個(gè)空的數(shù)組
details項(xiàng)對(duì)應(yīng)一個(gè)字典的數(shù)組飒泻,
-
appID對(duì)應(yīng)項(xiàng)由前綴和ID兩部分組成,可以在developer中的Identifiers→AppIDs中點(diǎn)擊對(duì)應(yīng)的App ID查看鞭光。
paths對(duì)應(yīng)域名中的path,用于過濾可以跳轉(zhuǎn)到App的鏈接泞遗,支持通配符
*
惰许,?
以及NOT
進(jìn)行匹配,匹配的優(yōu)先級(jí)是從左至右依次降低
史辙。建議配置上path汹买,同一公司可能多款app有次需求,不同的path有益于后期的擴(kuò)展髓霞。
最后卦睹,需要把配置好的json文件上傳到服務(wù)器中該域名的根目錄下,也就是說方库,我們可以用GET請(qǐng)求可以獲取到這個(gè)apple-app-association文件结序。
當(dāng)我們的App在設(shè)備上第一次運(yùn)行時(shí),如果支持Associated Domains功能纵潦,那么iOS會(huì)自動(dòng)去GET定義的Domain下的apple-app-site-association
文件徐鹤。
需要留意iOS會(huì)先請(qǐng)求 https://domain.com/.well-known/apple-app-site-association
如果此文件請(qǐng)求不到垃环,再去請(qǐng)求 https://domain.com/apple-app-site-association。 所以如果想要避免服務(wù)器接收過多GET請(qǐng)求返敬,可以直接把a(bǔ)pple-app-site-association放在./well-known/目錄下遂庄。
4.Appdelegate增加如下代碼
#pragma mark Universal Link
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
NSURL *url = userActivity.webpageURL;
// TODO 根據(jù)需求進(jìn)行處理
}
// TODO 根據(jù)需求進(jìn)行處理
return YES;
}
坑
在Safari中點(diǎn)擊鏈接打開App后,會(huì)發(fā)現(xiàn)App的右上角的navigationBar會(huì)有一串網(wǎng)址的鏈接箭頭劲赠,
如果你點(diǎn)擊了它涛目,它會(huì)跳轉(zhuǎn)到Safari,同時(shí)系統(tǒng)會(huì)默認(rèn)你選擇用Safari來打開該域名的鏈接凛澎,而不用app打開霹肝,也就是說下次你再點(diǎn)擊該鏈接,它只會(huì)在Safari中打開塑煎,不會(huì)在App中打開了沫换。
那么如何開啟app跳轉(zhuǎn)呢?有兩種方法:
第一種最铁,在Safari頁面中讯赏,手指往下拉一下頁面,會(huì)顯示一個(gè)“隱藏”的banner冷尉,俗稱為 smart banner漱挎,右側(cè)有一個(gè)button,點(diǎn)擊它网严,就開啟App跳轉(zhuǎn)功能了识樱。
第二種,長(zhǎng)按跳轉(zhuǎn)鏈接震束,底下會(huì)彈出一些選項(xiàng)怜庸,選擇在App中打開,同樣可以開啟這個(gè)功能垢村。
apple-app-site-association
文件注意格式是否正確 中文字符不識(shí)別
總結(jié)
apple-app-site-association不需要.json后綴割疾。
如果要對(duì)沒有path的域名進(jìn)行支持(如:www.163.com),在json文件的paths中用通配符’*’是不行的嘉栓,需要在paths數(shù)組中加入’/’進(jìn)行匹配宏榕。
對(duì)json文件的請(qǐng)求僅在App第一次啟動(dòng)時(shí)進(jìn)行,如果此時(shí)網(wǎng)絡(luò)連接出了問題apple會(huì)緩存請(qǐng)求侵佃,等有網(wǎng)的時(shí)候再去請(qǐng)求麻昼,而實(shí)際測(cè)試抓包并沒有請(qǐng)求故通用連接會(huì)失效。
paths匹配的優(yōu)先級(jí)是從左至右依次降低馋辈,但需要明確抚芦,否則會(huì)出問題。比如"paths":[ "NOT /together/",""],在IOS9.2上path為/together/*都不會(huì)跳到App叉抡,但是在IOS9.0上會(huì)跳到尔崔。
iOS 9.2開始,在相同的domain內(nèi)Universal Links是不work的褥民,必須要跨域才生效