Universal Links 接入指南

如果你的app支持了Universal Links, iOS用戶點擊你網站的鏈接可以直接打開已經安裝的app, 而不用通過打開Safari, 如果你的app沒有安裝那麼點擊鏈接是通過Safari打開你的網站,

Universal Links爲您提供了一些自定義Scheme方案無法獲得的關鍵優勢, 主要包括:

  • 獨特: 與自定義Scheme方案不同,其他應用無法聲明通用鏈接,因爲通用鏈接使用的是指向您網站的標準HTTP或HTTPS鏈接。
  • 安全: 當用戶安裝您的app時,iOS會檢查您已上傳到網絡服務器的文件,以確保您的網站允許打開您的應用。只有您可以創建和上傳此文件,因此網站與應用程序的關聯是安全的。
  • 靈活: 即使未安裝您的應用程序,Universal Links也可以使用。未安裝您的應用程序時,點擊鏈接會在Safari中打開。
  • 簡單: 一個URL既適用於您的網站,也適用於您的應用程序。
  • 私密: 其他應用可以與您的應用通信,而無需知道您的應用是否已安裝。

注意:
Universal links使用戶可以在點擊WKWebView和UIWebView 以及Safari頁面中的網站鏈接時打開您的應用程序,此外例如在Mail,Messages和其他應用程序中出現的鏈接會調用openURL:不能實現Universal links效果。
當用戶在Safari中瀏覽您的網站時,他們點擊指向當前網頁所在域中URL的Universal links,則iOS會尊重用戶最有可能的意圖,並在Safari中打開該鏈接。如果用戶點擊指向其他域中URL的Universal links,iOS將在您的應用中打開該鏈接。(相同域名的 在Safari中點擊不會打開app)
對於運行9.0之前的iOS版本的用戶,點擊指向您網站的通用鏈接會在Safari中打開該鏈接。

支持 Universal links是容易的, 只需要三個步驟:

  1. 創建一個命名爲 apple-app-site-association 的json文件 到你的app中
  2. 上傳這個文件到你的HTTPS 服務器, 只能放置在根目錄下或者 .well-known子目錄下
  3. 做一些app的配置
    然後 就可以使用 universal links了

創建/上傳 關聯文件

要在您的網站和應用之間建立安全連接,請在它們之間建立信任關係。

分兩部分建立:

  1. 創建 apple-app-site-association 到你的網站
  2. 創建 com.apple.developer.associated-domains entitlement 到你的app

你可以通過Shared Web Credentials Reference 瞭解更多關於 app和website之間建立安全連接

注意:
如果你的app運行在iOS9+系統 並且使用HTTPS部署的 apple-app-site-association 文件, 你可以創建不用簽名的json文件, 如果你app支持 Handoff 並且需要建立安全連接, 那麼你需要對這個文件簽名, 詳情瞭解Shared Web Credentials Reference.

您需要爲每個域提供一個單獨的apple-app-site-association文件,其中包含您的應用支持的唯一內容。例如: apple.com和developer.apple.com需要單獨的apple-app-site-association文件,因爲這些域提供不同的內容。相比之下: apple.com和www.apple.com不需要單獨的站點關聯文件,因爲兩個域都提供相同的內容,但是兩個域都必須使文件可用。對於在iOS 9.3.1及更高版本中運行的應用,無論文件是否已簽名,apple-app-site-association文件的未壓縮大小不得超過128 KB

在您的apple-app-site-association文件中,指定網站中應被視爲通用鏈接的路徑以及不應被視爲通用鏈接的路徑。保持路徑列表簡短,並依靠通配符匹配來匹配較大的路徑集。

下表顯示了一個apple-app-site-association文件的示例,該文件標識了應作爲通用鏈接處理的三個路徑

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "9JA89QQLNQ.com.apple.wwdc",
                "paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"]
            },
            {
                "appID": "ABCD1234.com.apple.wwdc",
                "paths": [ "*" ]
            }
        ]
    }
}

注意:
不要在apple-app-site-association 後面拼.json

apple-app-site-association文件中的apps鍵必須存在其值必須爲空數組,如上表所示: details的值是字典的數組,您的網站支持的每個應用程序都有一個字典。數組中字典的順序決定了系統在尋找匹配項時所遵循的順序,因此您可以指定一個應用來處理網站的特定部分。

每個特定於應用程序的詞典都包含一個appID鍵和一個path鍵。appID鍵的值是team ID 或者 app ID前綴,後跟bundle ID. (appID值與構建的entitlements後中的“ application-identifier”鍵相關聯的值相同)paths鍵的值是一個字符串數組,用於指定網站所支持的部分該應用程序以及您不想與該應用程序關聯的網站部分。要指定不應作爲通用鏈接處理的區域,請在路徑字符串的開頭添加“ NOT”(在T後面包含空格)。例如,清單6-1中顯示的apple-app-site-association文件可以通過更新路徑數組來防止將網站的 /videos/wwdc/2010/* 區域視爲通用鏈接,如下所示:

"paths": [ "/wwdc/news/", "NOT /videos/wwdc/2010/*", "/videos/wwdc/201?/*"]

由於系統按照指定的順序查找path數組中的每個路徑,並在找到正/負匹配時停止查找,因此您應在低優先級路徑之前指定高優先級路徑。請注意,僅將URL的path部分用於比較。其他query string or fragment identifier將被忽略。

  1. 使用*指定整個網站
  2. 包括特定的URL,例如/wwdc/news/,以指定特定的鏈接
  3. 添加 *到特定的URL,例如 /videos/wwdc/2015/*,以指定網站的一部分

除了使用 *匹配任何子字符串外,您還可以使用?匹配任何單個字符。您可以將兩個通配符合並在一個路徑中,例如/foo/*/bar/201?/mypage

注意:
您用於在paths數組中指定網站路徑的字符串區分大小寫

創建apple-app-site-association文件後,將其上傳到HTTPS Web服務器的根目錄.well-known子目錄。該文件需要通過HTTPS進行訪問(無任何重定向),網址爲https://<domain>/apple-app-site-associationhttps://<domain>/.well-known/apple-app-site-association。接下來,您需要處理應用程序中的通用鏈接。

App 中處理 Universal Links

通用鏈接使用兩種技術:
第一種是爲Web瀏覽器和本機應用之間的提供相同的powers Handoff ,
第二種是共享Web憑據(有關這些技術的更多信息,請參閱 Web Browser–to–Native App Handoff and Shared Web Credentials Reference)。
當用戶點擊Universal Links時,iOS將啓動您的應用程序並向其發送一個NSUserActivity對象,您可以查詢該對象以瞭解您的應用程序是如何啓動的。

要在您的應用中支持通用鏈接,請執行以下步驟:

  1. 添加一個 你app支持的指定域的 entitlement文件
  2. 添加代理 -application:continueUserActivity:restorationHandler:處理NSUserActivity 對象
    在您的com.apple.developer.associated-domains entitlement 文件中,包括您的應用程序希望作爲通用鏈接處理的域的列表。爲此,請在Xcode中打開the Associated Domains section in the Capabilities tab,併爲您的應用程序支持的每個域添加一個條目,並以applinks:爲前綴,例如applinks:www.mywebsite.com。將此列表限制爲不超過20到30個域。

要匹配關聯域的所有子域,您可以通過在特定域的開頭之前加*.來指定通配符(需要句號)。域匹配基於applinks條目中最長的子字符串。例如,如果您指定條目applinks:.mywebsite.com和applinks:.users.mywebsite.com,則針對較長的*.users.mywebsite.com條目執行域名emily.users.mywebsite.com的匹配。請注意,由於星號後有句號,因此*.mywebsite.com的條目與mywebsite.com不匹配。要同時爲*.mywebsite.com和mywebsite.com啓用匹配,您需要爲每個網站提供單獨的應用程序鏈接條目

指定關聯的域後,實現的UIApplicationDelegate 方法(特別是 application:continueUserActivity:restorationHandler:),以便您的應用可以接收鏈接並對其進行適當處理。

當用戶點擊通用鏈接 啓動您的應用程序時,您會收到an NSUserActivity object with an activityType value of NSUserActivityTypeBrowsingWeb.。活動對象的webpageURL屬性包含用戶正在訪問的URL。網頁URL屬性始終包含HTTP或HTTPS URL,並且您可以使用NSURLComponents API來操縱URL的組件。

當用戶點擊您處理的universal link時,iOS還將檢查用戶的最新選擇,以確定是否打開您的app或網站。例如,點擊了universal link以打開您的應用程序的用戶可以稍後通過點擊狀態欄中的breadcrumb按鈕來選擇在Safari中打開您的網站。用戶做出選擇後,iOS繼續在Safari中打開您的網站,直到用戶選擇通過在網頁上的the Smart App Banner中點擊“OPEN”來打開您的應用程序。

注意
如果您實例化 SFSafariViewController, WKWebView, or UIWebView 對象以處理通用鏈接,則iOS會在Safari中打開您的網站,而不是打開您的應用程序。但是,如果用戶從嵌入式SFSafariViewController,WKWebView或UIWebView對象中點擊通用鏈接,則iOS會打開您的應用程序。

請務必理解,如果您的應用程序使用openURL:來打開指向您網站的universal link,則該鏈接不會在您的應用程序中打開。在這種情況下,iOS會識別出該事件來源於您的應用程序內,因此您的應用程序不應將其視爲通用鏈接。

如果您在活動對象中收到無效的URL,請務必進行正常的失敗。要處理不受支持的URL,您可以在共享應用程序對象上調用openURL:以在Safari中打開鏈接。如果您仍然無法打開鏈接,請向用戶顯示一條錯誤消息,說明發生了什麼問題。

重要提示:
爲了保護用戶的隱私和安全,當您需要傳輸數據時,不應使用HTTP。而是使用安全傳輸協議,例如HTTPS。

接入驗證:

  1. 通過 https://search.developer.apple.com/appsearch-validation-tool/ 可以驗證配置的 apple-app-site-association 是否合法
  2. 在iOS設備中的備忘錄中輸入universal link,然後直接點擊此鏈接,就會直接跳轉到app。或是長按,在出現的彈出菜單中第二項是在’XXX’中打開,這也代表着成功
  3. 你將要測試的網址在safari中打開,在出現的網頁上方(the Smart App Banner),可以看到有在”XX”應用中打開

蘋果文檔: https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12-SW2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章