簡單解釋一下ios
咱們都知道ios應用可以註冊本身的URL Schemes,以後經過點擊連接訪問應用,好比 TheTest://testUrl. 而若是是普通的http或者https連接,那麼就會用safari打開。json
若是我有一個資源,好比是一個pdf文件,在遊覽器中能夠訪問,地址是 http://test.com/aaa.pdf 。若是ios設備安裝了個人app,那麼在app中也能查看這個pdf。客戶想要這樣一個功能:點擊了一個連接,若是安裝了app,那麼在app中打開,若是沒裝,那麼在safari打開。api
在ios9之前,用一個連接打開也有方法,但要屢次跳轉,十分不友好,基本不會使用。最經常使用的方法是創建2個url,一個是http://test.com/aaa.pdf這樣的,一個是TheTest://aaa.pdf這樣的,用戶本身選擇打開哪個,也不太友好。服務器
ios9 的 Support Universal Links 就能解決這個問題。app
咱們只須要在郵件中寫一個標準的http連接,就是http://test.com/aaa.pdf這樣的,點擊以後,系統會判斷是否有程序註冊了這個連接,若是註冊了,不會打開safari,而會打開這個程序。沒有註冊的話,仍是經過safari打開。dom
具體實現以下:函數
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代替打開。