原理
? ? ? ? 在安裝某個(gè)app的時(shí)候堤撵,iOS系統(tǒng)會(huì)檢查App bundle中的Info.plist文件毅待。如果發(fā)現(xiàn)有associated domain字段,會(huì)讀取applinks的地址,比如open.mycompany.com帅刊,然后系統(tǒng)會(huì)去該域名根目錄下尋找一個(gè)名為apple-app-site-association的文件。如果有漂问,那么下載到本地赖瞒,然后解析這個(gè)文件。根據(jù)path建立與appid的映射關(guān)系蚤假,保存在系統(tǒng)的數(shù)據(jù)庫(kù)中栏饮。如果有訪問(wèn)https://open.mycompany.com/path/ 的鏈接,系統(tǒng)會(huì)根據(jù)映射關(guān)系找到的appid勤哗,啟動(dòng)該app抡爹,實(shí)現(xiàn)universal link。
客戶端和服務(wù)端的任務(wù)
根據(jù)上述原理芒划,客戶端的首要任務(wù)就是要告訴系統(tǒng)去哪個(gè)域名下找關(guān)聯(lián)文件冬竟。這個(gè)在associated domain中設(shè)置。
剩下的就是在app delegate文件里寫處理的方法了民逼。
服務(wù)端的任務(wù)就是部署這個(gè)文件泵殴,文件位置可以隨便放,但是訪問(wèn)的地址一定要是域名的根目錄下拼苍。
關(guān)聯(lián)文件的格式笑诅,可以參考幾個(gè)鏈接:
https://www.douban.com/apple-app-site-association
https://open.cmbchina.com/apple-app-site-association
雖然是json格式的,但是文件名不能有后綴名哦疮鲫。
幾個(gè)點(diǎn)
? ? ? ?通過(guò)抓包看吆你,的確是安裝時(shí)候就會(huì)去下載關(guān)聯(lián)文件。如果此時(shí)網(wǎng)絡(luò)不通俊犯,iOS有重試的機(jī)制妇多,但具體的策略不太清楚。
? ? ? ? iOS9+燕侠,不要拿著iOS8系統(tǒng)的手機(jī)過(guò)來(lái)說(shuō)者祖,為什么ul不起作用立莉。。七问。
? ? ? ? 有時(shí)候不是跳轉(zhuǎn)到app蜓耻,而是直接跳轉(zhuǎn)到瀏覽器打開(kāi)。其實(shí)這是正常的械巡,本來(lái)就是應(yīng)該跳轉(zhuǎn)到safari的刹淌,只是我們多了一個(gè)跳轉(zhuǎn)到app的選擇。第一次鏈接跳轉(zhuǎn)坟比,會(huì)給你一個(gè)選擇芦鳍,safari還是app,系統(tǒng)會(huì)記住并作為下一次默認(rèn)的選擇葛账。
? ? ? ? 如果想讓url直接跳轉(zhuǎn)到我們的app柠衅,可以訪問(wèn)一下域名+path的地址,在safari中下拉頁(yè)面籍琳,會(huì)看到一個(gè)從app打開(kāi)的選擇菲宴,又可以重新選擇了。