iOS 9
之前牧挣,一直使用的是URL Schemes
技術(shù)來從外部對App進行跳轉(zhuǎn),但是iOS系統(tǒng)中進行URL Schemes
跳轉(zhuǎn)的時候如果沒有安裝App介汹,會提示Cannot open Page的提示雷猪,而且當注冊有多個scheme相同的時候,目前沒有辦法區(qū)分漫雕,但是從iOS 9
起可以使用Universal Links
技術(shù)進行跳轉(zhuǎn)頁面滨嘱,這是一種體驗更加完美的解決方案。
-
什么是
Universal Link
(通用鏈接)
Universal Link
是Apple在iOS 9
推出的一種能夠方便的通過傳統(tǒng)HTTPS鏈接來啟動APP的功能浸间。如果你的應用支持Universal Link太雨,當用戶點擊一個鏈接時可以跳轉(zhuǎn)到你的網(wǎng)站并獲得無縫重定向到對應的APP,且不需要通過Safari瀏覽器魁蒜。如果你的應用不支持的話躺彬,則會在Safari中打開該鏈接。
-
支持
Universal Link
(通用鏈接)
先決條件:必須有一個支持HTTPS
的域名梅惯,并且擁有該域名下上傳到根目錄
的權(quán)限(為了上傳Apple指定文件)。
1仿野、在開發(fā)者中心配置Associated Domains
登錄蘋果開發(fā)者中心找到對應的APPID铣减,配置Associated Domains
,如下:
2脚作、配置指定文件(apple-app-site-association)
創(chuàng)建一個內(nèi)容為json格式的文件葫哗,蘋果將會在合適的時候,從我們在項目中填入的域名請求這個文件球涛。這個文件名必須為apple-app-site-association
劣针,切記沒有后綴名
,文件內(nèi)容大概是這樣子:
{
"applinks": {
"apps": [],
"details": [
{
"appID": "TeamID.BundleID",
"paths": [ "/app/*", "/qq_conn/2222222/*"]
}
]
}
}
appID
:組成方式是TeamID.BundleID亿扁。TeamID
和BundleID
就是第一步中的1
和2
捺典。
paths
:設定你的app
支持的路徑列表,只有這些指定路徑的鏈接从祝,才能被app所處理襟己。*
的寫法代表了可識別域名下所有鏈接。
"/app/*"
是自己定義的路徑牍陌;
"/qq_conn/22222222/*"
需要根據(jù)QQ互聯(lián)平臺設置擎浴,22222222
是QQ互聯(lián)后臺
對應應用的APPID
换薄。
ps
:可先配置微信開放平臺和QQ互聯(lián)平臺乌询。
如果上傳人員給你的訪問路徑是:
https://www.baidu.com/.well-known/apple-app-site-association
或
https://www.baidu.com/apple-app-site-association
則:
微信開放平臺的Universal Link填寫是:https://www.baidu.com/app/
QQ互聯(lián)平臺的Universal Link填寫是:https://www.baidu.com/qq_conn/22222222/
3、上傳該文件
配置好文件后排嫌,把該文件給后臺開發(fā)人員上傳就可以了契讲。上傳到域名所對應的 根目錄
或者.well-known
目錄下仿吞,這是為了蘋果能獲取到你上傳的文件。上傳完后捡偏,讓上傳人員給你一個訪問路徑茫藏,先訪問一下,看看是否能夠獲取到霹琼,當你在瀏覽器中輸入這個文件鏈接后, 出現(xiàn)下圖就可以了:
4务傲、在Xcode開發(fā)工具配置Associated Domains
在其中的Domains
中填入你想支持的域名凉当,必須以applinks:為前綴,如:applinks:domain
如果上傳人員給你的訪問路徑是:
https://www.baidu.com/.well-known/apple-app-site-association
或
https://www.baidu.com/apple-app-site-association
則Domains
中填入:applinks:www.baidu.com
配置好后run
起來售葡。
5看杭、關(guān)于驗證Universal Links是否生效
蘋果為了方便開發(fā)者,提供了一個網(wǎng)頁驗證我們編寫的這個
apple-app-site-association
是否合法有效
a) 在Safari輸入Universal Links挟伙,查看是否彈出跳轉(zhuǎn)鏈接
b) 在iOS原生備忘錄上, 輸入Universal Links,點擊是否可以跳轉(zhuǎn)app
注意:手機上必須安裝你需要跳轉(zhuǎn)的應用并配置Associated Domains
-
Universal Link
(通用鏈接)注意點
Universal Link跨域
Universal Link有跨域問題楼雹,Universal Link必須要求跨域,如果不跨域尖阔,就不會跳轉(zhuǎn)(iOS 9.2之后的改動)
假如當前網(wǎng)頁的域名是A贮缅,當前網(wǎng)頁發(fā)起跳轉(zhuǎn)的域名是B,必須要求B和A是不同域名才會觸發(fā)Universal Link介却,如果B和A是相同域名谴供,只會繼續(xù)在當前WebView里面進行跳轉(zhuǎn),哪怕你的Universal Link一切正常齿坷,根本不會打開App
Universal Link請求apple-app-site-association時機
當我們的App在設備上第一次運行時桂肌,如果支持Associated Domains功能,那么iOS會自動去GET定義的Domain下的apple-app-site-association文件
iOS會先請求https://domain.com/.well-known/apple-app-site-association永淌,如果此文件請求不到崎场,再去請求https://domain.com/apple-app-site-association,所以如果想要避免服務器接收過多GET請求遂蛀,可以直接把apple-app-site-association放在./well-known目錄下
服務器上apple-app-site-association的更新不會讓iOS本地的apple-app-site-association同步更新谭跨,即iOS只會在App第一次啟動時請求一次,以后除非App更新或重新安裝李滴,否則不會在每次打開時請求apple-app-site-association
-
Universal Link的好處
之前的Custom URL scheme是自定義的協(xié)議饺蚊,因此在沒有安裝該app的情況下是無法直接打開的。而Universal Links本身就是一個能夠指向web頁面或者app內(nèi)容頁的標準web link悬嗓,因此能夠很好的兼容其他情況
Universal links是從服務器上查詢是哪個app需要被打開污呼,因此不存在Custom URL scheme那樣名字被搶占、沖突的情況
Universal links支持從其他app中的UIWebView中跳轉(zhuǎn)到目標app
提供Universal link給別的app進行app間的交流時包竹,對方并不能夠用這個方法去檢測你的app是否被安裝(之前的custom scheme URL的canOpenURL方法可以)