原理
? ? ? ? 在安裝某個app的時候,iOS系統會檢查App bundle中的Info.plist文件。如果發現有associated domain字段,會讀取applinks的地址,比如open.mycompany.com,然后系統會去該域名根目錄下尋找一個名為apple-app-site-association的文件。如果有,那么下載到本地,然后解析這個文件。根據path建立與appid的映射關系,保存在系統的數據庫中。如果有訪問https://open.mycompany.com/path/ 的鏈接,系統會根據映射關系找到的appid,啟動該app,實現universal link。
客戶端和服務端的任務
根據上述原理,客戶端的首要任務就是要告訴系統去哪個域名下找關聯文件。這個在associated domain中設置。
剩下的就是在app delegate文件里寫處理的方法了。
服務端的任務就是部署這個文件,文件位置可以隨便放,但是訪問的地址一定要是域名的根目錄下。
關聯文件的格式,可以參考幾個鏈接:
https://www.douban.com/apple-app-site-association
https://open.cmbchina.com/apple-app-site-association
雖然是json格式的,但是文件名不能有后綴名哦。
幾個點
? ? ? ?通過抓包看,的確是安裝時候就會去下載關聯文件。如果此時網絡不通,iOS有重試的機制,但具體的策略不太清楚。
? ? ? ? iOS9+,不要拿著iOS8系統的手機過來說,為什么ul不起作用。。。
? ? ? ? 有時候不是跳轉到app,而是直接跳轉到瀏覽器打開。其實這是正常的,本來就是應該跳轉到safari的,只是我們多了一個跳轉到app的選擇。第一次鏈接跳轉,會給你一個選擇,safari還是app,系統會記住并作為下一次默認的選擇。
? ? ? ? 如果想讓url直接跳轉到我們的app,可以訪問一下域名+path的地址,在safari中下拉頁面,會看到一個從app打開的選擇,又可以重新選擇了。