一、關于Universal Link
? ? ? ? Universal Link 是蘋果在iOS9 中新增的新特性之一,類似于深層鏈接,可以更簡單快速的通過打開一個通用的https鏈接來直接啟動客戶端app應用,在實現web-app的無縫鏈接時能提供極佳的用于體驗。
? ? ? ? 與傳統(tǒng)的URL Scheme作為對比,使用Universal Link可以通過點擊鏈接直接跳轉對應APP,不需要通過Sarafi瀏覽器。如果應用不支持的話,則會在Sarafi中打開該鏈接。
二、Universal Link的好處
? ? ? ? · 唯一性:不像自定義的URL Scheme,Universal Link使用的是標準的HTTPS協(xié)議鏈接到你的web站點,所以其他APP應用不需要聲明。而且URL Scheme是自定義協(xié)議,所以必須要求用戶安裝了app才能實現跳轉。
? ??????· 靈活:當用戶沒有安裝APP時,Universal Link可以在Sarafi中展示網站的內容。????????
? ? ? ? · 安全:當用戶安裝了APP時,系統(tǒng)會去網站的根目錄下GET你上傳的配置說明文件(說明文件后文會提到),這樣你的網站與APP之間的關聯(lián)是安全的。
? ? ? ? · 私有性:其他APP不需要知道你的APP的安裝情況。
三、Universal Link 配置過程(以QQ和微信為例)
1、準備好一個支持HTTPS的域名,且有上傳到根目錄的權限。
eg:https://www.example.com
2、對應證書及描述文件配置生成
? ? ? ? 1)進入蘋果開發(fā)者中心,找到對應App ID后進入后臺配置,在Application Services里面勾選Associated Domains,dis和dev證書都勾選。
? ? ? ? 2)在描述文件生成過程中勾選該證書,生成PP文件即可。
3、Xcode對應配置
? ? ? ? 1)進入工程配置界面,選擇Signing&Capabilities欄目。選擇對應描述文件后,左上角添加Capability。在彈出來的浮窗中點擊Associated Domains 即可。

? ? ? ? 2) 在下面的Associated Domains 欄目中添加Domains: applinks:www.example.com。

? ? ? ? ?tips:此步驟對應于Xcode 11以上版本,以下版本直接在Capabilities條目下找到Associated Domains 開關打開填入即可。
4、配置指定說明文件:apple-app-site-association
? ? ? ? 配置Universal Link 需要在服務器根目錄上傳一個指定的說明文件——apple-app-site-association。
? ? ? ? 蘋果系統(tǒng)會在合適的時候想填入的https域名發(fā)起GET請求,請求這個說明文件。切記這個說明文件不能有任何后綴?。。?/b>
? ? ? ? apple-app-site-association文件填寫如下:

{appID}為你在對應后臺上的appid。
"appID" 由2部分組成 Teamid.Bundleid。
當文件配置好后,上傳到你填寫的域名的根目錄下即可。
5、在對應移動后臺上進行配置
? ? ? ? 這一步比較簡單,即在微信、QQ后臺上填寫正確的信息。包括bundle id ?universal link 等。注意填寫universal link的時候,只需要host即可。當然這里要注意的是,有些平臺會在你填寫的域名后面自動加上一些路徑,比如qq平臺,會在www.example.com/qq_conn/{appID},而微信卻不會,這里后臺填寫的universal link最終結果一定要和你的網頁上存放的AASA文件對應,不然實際上universal link是失效的,走的仍然是URL Scheme。
經過以上配置步驟Universal Link就配置完成了!
四、如何查驗配置不成功的一些方法和一些本人遇到的錯誤
1、apple-app-site-association文件位置錯誤:可以通過蘋果官方給的鏈接工具進行查驗?App Search API Validation Tool。
進入網站后輸入自己配置的universal link 域名,點擊Test URL。

搜尋不到說明文件會提示報錯?Error?cannot parse app site association 如圖

如果正確則如下圖

tips: Error no apps associated with url 這個錯誤可以無視。
2、我已經正確配置說明文件,但是universal link還是不起作用
當我們在web中輸入https://www.example.com/apple-app-site-association 能看到我們的json文件內容時,卻發(fā)現app還是無法進行universal link的跳轉。那么可能有2個可能
? ? ? ? 1)? 從app跳轉到qq、微信的步驟出錯。
? ? ? ? 2)? 從qq、微信跳轉回app出錯。
當我們配置好Associated Domains后,在設備第一次啟動app的時候,蘋果系統(tǒng)會向我們填寫的domain發(fā)送Http Get請求來獲取說明文件,所以我們可以通過Charles抓包來分析問題。如果抓包成功獲取到了說明文件,那么就在備忘錄中填寫一個可以跳轉回我們App的universal link(注意,鏈接填寫一定要符合自己說明文件里填寫的路徑paths,不然是無效的),如果可以成功跳轉App,則說明問題出在1)上。如果抓包發(fā)現獲取失敗,打開手機控制臺日志,過濾條件輸入swcd,我們能看到完整的系統(tǒng)對www.example.com/apple-app-site-association的網絡請求過程,里面會有報錯信息,根據這些信息可以進行相應的調試,例如有kAuthenticationErr的認證問題,kAuthenticationTimedout的網絡超時問題等等。
至于問題1) 多半出在后臺配置寫入錯誤的情況,或者是類似于qq后臺需要點擊驗證universal link,其他的什么問題暫時沒遇到過。
至于Charles抓包過程,這里就不詳細說明了。
五、一些自己遇到的問題匯總
1. QQ分享在iOS13系統(tǒng)上必須添加Universal Link ?不然會報設備未授權錯誤。微信分享不加的話,會從底部系統(tǒng)再次發(fā)起URL Scheme請求,結果就是發(fā)生APP二次跳轉。
2. 當網絡不好時會發(fā)生跳轉失敗。
3. 包名一定要填對,不然會報應用未授權錯誤。
4. teamID注意了 一定要填對。
5. QQ的分享,后臺配置好universal link 后要點擊驗證。驗證通過后才能從自己的app跳到QQ。
6. 如果同一域名下有多個App進行關聯(lián),一定要在AASA文件中分好路徑,切忌使用'*',不然會造成App亂跳的可能。
以后添加...