簡單解釋一下
我們都知道ios應用能夠注冊自己的URL Schemes,之后通過點擊鏈接訪問應用,比如 TheTest://testUrl. 而如果是普通的http或者https鏈接,那么就會用safari打開。
如果我有一個資源,比如是一個pdf文件,在游覽器中可以訪問,地址是 http://test.com/aaa.pdf 。如果ios設備安裝了我的app,那么在app中也能查看這個pdf。客戶想要這樣一個功能:點擊了一個鏈接,如果安裝了app,那么在app中打開,如果沒裝,那么在safari打開。
在ios9以前,用一個鏈接打開也有方法,但要多次跳轉,十分不友好,基本不會使用。最常用的方法是建立2個url,一個是http://test.com/aaa.pdf這樣的,一個是TheTest://aaa.pdf這樣的,用戶自己選擇打開哪一個,也不太友好。
ios9 的 Support Universal Links 就能解決這個問題。
我們只需要在郵件中寫一個標准的http鏈接,就是http://test.com/aaa.pdf這樣的,點擊之后,系統會判斷是否有程序注冊了這個鏈接,如果注冊了,不會打開safari,而會打開這個程序。沒有注冊的話,還是通過safari打開。
具體實現如下:
1.配置ios工程:

這2個鏈接,就表示程序會到這2個domain取具體的配置文件。為什么要到服務器取?這樣就能增加一層驗證,防止惡意程序代替正常的網站鏈接啟動。
The file needs to be accessible via HTTPS—without any redirects—at https://<domain>/apple-app-site-association or https://<domain>/.well-known/apple-app-site-association.
注意,必須是https的鏈接,而且不能有任何重定向操作。那么是不是必須使用經過CA認證的https呢?也就是說,能不能自己在內網上建立一個https服務器,讓universal links工作呢?
這個問題,我到官方論壇提問了,鏈接如下 https://forums.developer.apple.com/thread/51619 ,必須使用CA認證的證書!如果實在內網測試,應該自己模擬CA頒發證書,並讓系統信任自己創建的ca,那么問題又來了,如何讓ios系統信任這個ca呢????是可以通過企業設備管理,把相關證書加入ios系統嗎?
取的數據沒什么特別,就是一個json數據,但是它的獲取位置是固定的,要么是/apple-app-site-association,要么是
/.well-known/apple-app-site-association
:
{ "applinks": { "apps": [], "details": [ { "appID": "Q4BE9Z32J8.com.kings.test", "paths": [ "*" ] } ] } }
具體的說明可以參看官方文檔。
成功后,在郵件中點擊普通的http://test.com/aaa.pdf鏈接,就會出現下圖:直接進入了程序,注意右上角,點擊后可以用游覽器啟動

而如果用游覽器啟動,有下圖,看上方,還能用程序啟動。系統會記錄下你最后一次的選擇,下次點擊http鏈接時,會重復你的上次的選擇。

另外,針對這個Universal link 功能,ios10加入了openURL:options:completionHandler:這個新api,其中options的參數有一個UIApplicationOpenURLOptionUniversalLinksOnly選項,默認是false,如果設置為true,當打開一個http這樣的連接時,如果沒有安裝注冊這個url的ios應用,函數就會返回錯誤,不會用safari代替打開。
