一蜒茄、 通用鏈接介紹
Apple 推出通用鏈接:一種能夠方便的通過傳統(tǒng) HTTP 鏈接來啟動 APP, 使用相同的網(wǎng)址打開網(wǎng)站和 APP摄杂。
當(dāng)你的應(yīng)用支持通用鏈接丧慈,iOS9 之后 , 用戶可以點(diǎn)擊一個鏈接跳轉(zhuǎn)到你的網(wǎng)站,并獲得無縫重定向到您安裝的應(yīng)用程序,而無需通過 Safari 瀏覽器。如果你的應(yīng)用不支持的話,點(diǎn)擊鏈接將會用 Safari 來打開玩祟。
二靡馁、 通用鏈接的關(guān)鍵實(shí)現(xiàn)條件
有一個注冊的域名
域名可通過 SSL 訪問(應(yīng)該是需要有效的證書)
支持上傳一個 JSON 文件到域名
iOS 9? 以上版本
Xcode 7 以上
需要真機(jī)測試,模擬器不支持通用鏈接
web server 需要支持 https,客戶端需要通告 https 訪問,并且不支持任何重定向
說了這么多是時候來點(diǎn)干貨了欲鹏;
三、 通用鏈接實(shí)現(xiàn)步驟
1.在項(xiàng)目中開啟Associated Domains 域
? 進(jìn)入自己的項(xiàng)目的Targets->Capabilites->Associated Domains,設(shè)置成ON狀態(tài)臭墨,這時候你會發(fā)現(xiàn)你的項(xiàng)目的文件夾下會多出一個.entitlements的文件
注意:我這里是使用了Xcode的自動管理證書赔嚎,所以當(dāng)我打開Associated Domains時Xcode會自動幫我處理證書配置問題以及appIDs打開Associated Domains。
如果你是使用手動管理證書胧弛,需在處理第1步之前先去自己的開發(fā)者賬號找到對應(yīng)的appIDs尤误,勾選Associated Domains選項(xiàng)。具體操作步驟:
進(jìn)入蘋果Apple Developer -> Member Center -> Certificates, Identifiers & Profiles – >Identifiers - >App IDs–>Edit 然后開啟打鉤 Associated Domains 后保存结缚。
如果證書設(shè)置正確以及App IDs的Associated Domains打開后损晤,你再執(zhí)行第1步操作之后Associated Domains下面的steps有2個對號,否則就會出現(xiàn)錯號红竭。
2.在Associated Domains下添加web端的域名
點(diǎn)擊Associated Domains的+號填入applinks:后面是你的域名尤勋,例如我公司的是
applinks:×××××.mingpao.com
3 制作apple-app-site-association 文件
創(chuàng)建一個json格式的命名為apple-app-site-association文件,注意這個文件必須沒有后綴名,文件名必須為apple-app-site-association!!!
{
"applinks":{
"apps":[],
"details":[
{
"appID": "G4E6298X77.com.mingpao.×××××",
"paths":[ "/*" ]
},
]
}
}
這里解釋一下:
appID 是由你的Team ID+BundleID組成喘落,如果你不知道你的Team ID是什么?進(jìn)入蘋果Apple Developer -> Member Center ->Membership->Team ID
paths 是一個字符串的數(shù)組,這里是你的應(yīng)用支持的通用鏈接與不支持的鏈接最冰,這里小編使用的是/*,代表著只要是Associated Domains域名下的所有的鏈接都支持瘦棋。如果你不支持某一個鏈接,在這個鏈接前面加NOT空格锌奴,舉個例子
"paths":[? "NOT /home/*",? "/*"? ]
如果這樣寫就是除了不支持/home下所有的鏈接兽狭,其他鏈接都支持。
這里有很多公司的apple-app-site-association文件設(shè)置?
4.上傳apple-app-site-association 文件
把你剛才制作好的apple-app-site-association文件交給服務(wù)器端的小伙伴鹿蜀,放到服務(wù)器的根目錄下箕慧,還有一種說法是,iOS9.3之前是根目錄下即:https://××××.mingpao.com/apple-app-site-association茴恰,iOS9.3之后是.well-known目錄下即:https://××××.mingpao.com/.well-known/apple-app-site-association颠焦,小編為了安全起見兩個都放了。
到此為止往枣,Universal Links的工作已經(jīng)基本完成了伐庭,下面我們可以檢測一下上傳apple-app-site-association 文件是否成功。蘋果有一個檢測的接口 蘋果測試入口 分冈,將你的域名放入測試口圾另,點(diǎn)擊TestURL即可。
但是但是但是雕沉,小編把公司的域名放到蘋果進(jìn)行測試得到的答案是沒有通過集乔,但是卻能正常的使用Universal Links了,關(guān)于原因坡椒,網(wǎng)上有很多說法扰路。有些小伙伴說是因?yàn)槟愕腁PP沒有上線,等上線了就會測試通過倔叼,但是小編的APP上線后測試依然不能通過汗唱。還有一些小伙伴說我們并沒有對蘋果開放爬蟲。也就是不允許蘋果爬蟲你們的網(wǎng)站丈攒,這個是測不通的哩罪。
我們創(chuàng)建apple-app-site-association文件的目的是為了讓iOS系統(tǒng)能獲取這個文件,知道你的哪些是鏈接是Universal Links巡验,哪些不是Universal Links识椰。所以在你第一次安裝APP時,iOS系統(tǒng)會去對應(yīng)的路徑下拿取apple-app-site-association文件深碱,所以我們可以通過抓包來判斷通不通。另外直接用Xcode debug調(diào)試APP時藏畅,iOS也會去拿取apple-app-site-association文件敷硅。
如果不通問題可能有很多:
1.域名不是https請求
2.服務(wù)器端的SSL證書有問題(偽證書或者無效證書)
3.服務(wù)器端的證書配置有問題
小編曾經(jīng)在這里卡了2天就是找不到原因功咒,結(jié)果是服務(wù)器端的證書配置有問題。
為了避免移動端的小伙伴被坑绞蹦,我把服務(wù)器端SSL證書配置向?qū)У木W(wǎng)址給大家力奋。https://sg.godaddy.com/zh/help/ssl-16623?
5.在AppDelegate處理Universal Links
在AppDelegate里面添加下面的方法
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *))restorationHandler
{
if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
NSURL *webpageURL = userActivity.webpageURL;
NSString *host = webpageURL.host;
if ([host isEqualToString:@"××××.mingpao.com"]) {
//判斷域名是自己的網(wǎng)站,進(jìn)行我們需要的處理
}else{
[[UIApplication sharedApplication]openURL:webpageURL];
}
}
return YES;
}
當(dāng)用Universal Links啟動APP時就會調(diào)用上面的方法幽七。
把我們設(shè)置好通用鏈接的URL放到備忘錄中景殷,長按URL會多出一條在“××××”中打開,當(dāng)你點(diǎn)擊時就會打開你的APP澡屡,并且在上面的方法中將URL傳給你處理猿挚。
如果你選擇在Safari中打開,上下滑動頁面驶鹉,你會發(fā)現(xiàn)仍然有一個按鈕可以打開你的應(yīng)用绩蜻。
參考資料
http://pinwei.blog.51cto.com/5452359/1734167/
http://www.2cto.com/kf/201604/497162.html?
文筆不好,望大家見諒室埋。寫的不全或者有誤的地方办绝,望大家不吝賜教。