iOS Universal Links(通用鏈接)的使用

一、 通用鏈接介紹

Apple 推出通用鏈接:一種能夠方便的通過傳統(tǒng) HTTP 鏈接來啟動 APP, 使用相同的網(wǎng)址打開網(wǎng)站和 APP。

當(dāng)你的應(yīng)用支持通用鏈接,iOS9 之后 , 用戶可以點擊一個鏈接跳轉(zhuǎn)到你的網(wǎng)站,并獲得無縫重定向到您安裝的應(yīng)用程序,而無需通過 Safari 瀏覽器。如果你的應(yīng)用不支持的話,點擊鏈接將會用 Safari 來打開。

二、 通用鏈接的關(guān)鍵實現(xiàn)條件

有一個注冊的域名

域名可通過 SSL 訪問(應(yīng)該是需要有效的證書)

支持上傳一個 JSON 文件到域名

iOS 9? 以上版本

Xcode 7 以上

需要真機測試,模擬器不支持通用鏈接

web server 需要支持 https,客戶端需要通告 https 訪問,并且不支持任何重定向

說了這么多是時候來點干貨了;

三、 通用鏈接實現(xiàn)步驟

1.在項目中開啟Associated Domains 域

? 進入自己的項目的Targets->Capabilites->Associated Domains,設(shè)置成ON狀態(tài),這時候你會發(fā)現(xiàn)你的項目的文件夾下會多出一個.entitlements的文件

注意:我這里是使用了Xcode的自動管理證書,所以當(dāng)我打開Associated Domains時Xcode會自動幫我處理證書配置問題以及appIDs打開Associated Domains。

如果你是使用手動管理證書,需在處理第1步之前先去自己的開發(fā)者賬號找到對應(yīng)的appIDs,勾選Associated Domains選項。具體操作步驟:

進入蘋果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端的域名

點擊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是什么?進入蘋果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 文件是否成功。蘋果有一個檢測的接口 蘋果測試入口 ,將你的域名放入測試口,點擊TestURL即可。

但是但是但是,小編把公司的域名放到蘋果進行測試得到的答案是沒有通過,但是卻能正常的使用Universal Links了,關(guān)于原因,網(wǎng)上有很多說法。有些小伙伴說是因為你的APP沒有上線,等上線了就會測試通過,但是小編的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)站,進行我們需要的處理

}else{

[[UIApplication sharedApplication]openURL:webpageURL];

}

}

return YES;

}

當(dāng)用Universal Links啟動APP時就會調(diào)用上面的方法。

把我們設(shè)置好通用鏈接的URL放到備忘錄中,長按URL會多出一條在“××××”中打開,當(dāng)你點擊時就會打開你的APP,并且在上面的方法中將URL傳給你處理。


如果你選擇在Safari中打開,上下滑動頁面,你會發(fā)現(xiàn)仍然有一個按鈕可以打開你的應(yīng)用。


參考資料

蘋果官方文檔

http://pinwei.blog.51cto.com/5452359/1734167/

http://www.2cto.com/kf/201604/497162.html?

文筆不好,望大家見諒。寫的不全或者有誤的地方,望大家不吝賜教。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容