Universal Links

Universal Links 是在 iOS 9 加入的功能,相較使用 custom URL scheme 有幾點好處:

  • Custom URL scheme 因為是自定義的協議,所以在沒有安裝 app 的情況下是無法直接打開的。而 Universal Links 本身是一個 HTTP/HTTPS 連結,所以有更好的相容性。
  • 不同的 app 可以定義相同的 custom URL scheme 的,因此會存在 app 之間的衝突問題。而 Universal Links 是從 Server 查詢由哪個 app 打開的,所以不會發生上述問題。
  • Universal Links 的頁面內容可以被搜尋引擎索引。
  • Universal Links 支援從其他 app 的 WKWebView 或 UIWebView 中跳轉到 特定的 app。

Server 端需要做:

Step #1
準備一個檔名為 apple-app-site-association 的檔案,內容格式是 json (但是要去掉副檔名 .json),用途是說明有哪些 URLs 是 App 支援的。其中 URL path 是有區別大小寫 (case-sensitive)。

  • appID 是由你的 team ID 和 bundle ID 所組成的。
  • paths 如果直接填 * 就表示整個網站都支援

Step #2
接著把 apple-app-site-association 放到 HTTPS Web Server 的根目錄或是 .well-known 資料夾。這個樣做的目的是讓 Apple 可以從以下連結得到你上傳的 apple-app-site-association 檔案.

https://<domain>/apple-app-site-association 或是 https://<domain>/.well-known/apple-app-site-association

這邊要注意的是:

  • Web Server 需要支援 https,並且 https 必須使用有效的憑證
  • 上述連結不能有轉址 (without any redirects)

App 端需要做的事:

Step #1
Project -> Capabilities -> 開啟 Associated Domains -> 增加支援 Universal Links 的 domain,另外必須以 applinks: 作為開頭

增加完之後,可以到 Apple Developer 後台檢查一下

設定相關的工作已經完成,app 已經可以支援 Universal Links,接下來就是程式碼的部分

註:在增加 Associated Domains 時,會改變 *.entitlements 裡面的設定,這會間接影響到 Provisioning Profile (*.mobileprovision)。如果你是用 Jenkins 做 CI 的話要順便更新 Jenkins 所用的 Provisioning Profile,不然 Archive 的過程中會出現錯誤。

錯誤訊息:Provisioning profile “XXXXX” doesn’t include signing certificate “iPhone Distribution: YYYYY”.

Step #2 
當收到支援的 Universal Links 時,系統會呼叫 appDelegate 內的 application:continueUserActivity:restorationHandler:

如果 app 是處於 Not running 的情況下,可以藉由以下方式判斷是否由 Universal Links 所觸發的

開發階段時如果要測試以上行為,可以把要測試的連結貼在 iOS 內建的備忘錄,點選之後就會跳進你的 app 了

如果要驗證 連結 是否有效,可以使用 Apple 官方的驗證工具:App Search API Validation Tool。它會列出檢測的結果,如下:

如果還是對於 app-site-association 不知道該怎麼填,或是想知道有哪些 app 使用 Universal Link、想體驗一下效果,這篇文章列出 51 個 有實作 Universal Link 的 app,可以當作參考 。

Reference

  1. Apple — Support Universal Links
  2. App Search API Validation Tool (可以用來驗證 Link 是否有效)
  3. iOS Universal Links(通用链接)
  4. 51 iOS 9 Apps That Support Universal Links
  5. WWDC 2015 — Seamless Linking to Your App
Like what you read? Give Hill Hung a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.