App搜索編程指南(六) —— 吸引網絡用戶之支持Universal Links(一)

版本記錄

版本號 時間
V1.0 2018.09.28 星期五

前言

iOS系統有自己的搜索,大家試過的都知道,這個搜索速度非常之快,可以很快的在網頁、appleStor、地圖以及其他App中的內容,接下來就讓我們一起來看一下這個搜索。感興趣的看下面幾篇文章。
1. App搜索編程指南(一) —— 搜索基本之搜索推動用戶參與(一)
2. App搜索編程指南(二) —— 搜索基本之示例實現(一)
3. App搜索編程指南(三) —— 讓項目可索引之索引活動和導航點(一)
4. App搜索編程指南(四) —— 讓項目可索引之索引應用內容(一)
5. App搜索編程指南(五) —— 吸引網絡用戶之標記Web內容(一)

Support Universal Links - 支持Universal Links

當您支持通用鏈接(universal links)時,iOS用戶可以點擊指向您網站的鏈接,無需通過Safari即可無縫重定向到已安裝的應用。 如果您的應用未安裝,點擊指向您網站的鏈接即可在Safari中打開您的網站。

通用鏈接為您提供了使用自定義URL scheme時無法獲得的幾個主要優勢。 具體而言,通用鏈接是:

  • Unique - 唯一性:與自定義URL schemes不同,其他應用無法聲明通用鏈接,因為它們使用指向您網站的標準HTTP或HTTPS鏈接。

  • Secure - 安全:當用戶安裝您的應用時,iOS會檢查您上傳到網絡服務器的文件,以確保您的網站允許您的應用代表其打開網址。 只有您可以創建并上傳此文件,因此您的網站與您的應用的關聯是安全的。

  • Flexible - 靈活:即使您的應用未安裝,通用鏈接也能正常工作。 未安裝您的應用時,點按指向您網站的鏈接會在用戶期望的Safari中打開內容。

  • Simple - 簡單:一個URL適用于您的網站和您的應用。

  • Private - 私密的:其他應用可以與您的應用進行通信,而無需知道您的應用是否已安裝。

注意:通用鏈接允許用戶在WKWebView和UIWebView視圖和Safari頁面中點擊指向您網站的鏈接時打開您的應用,此外還有導致調用openURL:的鏈接,例如在MailMessages和其他應用中發生的鏈接。
??當用戶在Safari中瀏覽您的網站并且他們點擊與當前網頁位于同一域中的URL的通用鏈接時,iOS會尊重用戶最可能的意圖并在Safari中打開該鏈接。 如果用戶點擊通向不同域中網址的通用鏈接,iOS會在您的應用中打開該鏈接。
??對于運行早于9.0的iOS版本的用戶,點擊指向您網站的通用鏈接會在Safari中打開該鏈接。

添加對通用鏈接的支持很容易。 您需要采取三個步驟:

  • 1) 創建一個apple-app-site-association文件,其中包含有關您的應用可以處理的網址的JSON數據。
  • 2) 將apple-app-site-association文件上傳到您的HTTPS Web服務器。 您可以將文件放在服務器的根目錄或.well-known子目錄中。
  • 3) 準備您的應用程序以處理通用鏈接。

您可以在設備上測試通用鏈接。


Creating and Uploading the Association File - 創建和上載關聯文件

要在您的網站和應用之間建立安全連接,請在它們之間建立信任關系。 您將這種關系分為兩部分:

您可以在Shared Web Credentials Reference中詳細了解您的應用和網站如何共享憑據。

注意:如果您的應用程序在iOS 9或更高版本中運行,并且您使用HTTPS來提供apple-app-site-association文件,則可以創建使用application / json MIME類型的純文本文件,而無需對其進行簽名。 如果您在iOS 8中支持HandoffShared Web Credentials,則仍需要按 Shared Web Credentials Reference中的描述對該文件進行簽名。

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

在您的apple-app-site-association文件中,您指定網站中應作為通用鏈接處理的路徑以及不應作為通用鏈接處理的路徑。保持路徑列表相當短,并依靠通配符匹配來匹配更大的路徑集。Listing 6-1顯示了一個apple-app-site-association文件的示例,該文件標識了應作為通用鏈接處理的三個路徑。

// Listing 6-1Creating an apple-app-site-association file

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

注意:不要將.json附加到apple-app-site-association文件名。

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

每個特定于應用程序的字典都包含appID密鑰和paths密鑰。 appID鍵的值是team IDapp ID前綴,后跟bundle ID。 (appID值與構建應用程序entitlements后與“application-identifier”鍵相關聯的值相同。)paths鍵的值是一個字符串數組,用于指定網站支持的部分。應用程序以及您不希望與應用程序關聯的網站部分。要指定不應作為通用鏈接處理的區域,請在路徑字符串的開頭添加“NOT ”(包括T之后的空格)。例如,Listing 6-1中顯示的apple-app-site-association文件可以通過更新路徑數組來阻止網站的/ videos / wwdc / 2010 / *區域作為通用鏈接處理,如下所示:

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

因為系統按照指定的順序評估paths數組中的每個路徑 - 并且在找到正匹配或負匹配時停止評估 - 您應該在低優先級路徑之前指定高優先級路徑。 請注意,只有URL的路徑組件(path component )用于比較。 其他組件(例如查詢字符串或片段標識符)將被忽略。

有多種方法可以在apple-app-site-association文件中指定網站路徑。 例如,您可以:

  • 使用*指定整個網站
  • 包含特定的URL,例如/ wwdc / news /,以指定特定的鏈接
  • *附加到特定網址,例如/ 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。 接下來,您需要在應用中處理通用鏈接。


Preparing Your App to Handle Universal Links - 準備應用程序以處理通用鏈接

通用鏈接使用兩種技術:第一種是為Web瀏覽器和本機應用程序之間的切換Handoff相同的機制,第二種是Shared Web Credentials(有關這些技術的更多信息,請參閱Web Browser–to–Native App HandoffShared Web Credentials Reference)。 當用戶點擊通用鏈接時,iOS會啟動您的應用并向其發送一個NSUserActivity對象,您可以查詢該對象以了解您的應用是如何啟動的。

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

  • 添加指定您的應用支持的域的entitlement
  • 更新您的應用代理以在收到NSUserActivity對象時做出適當的響應。

com.apple.developer.associated-domainsentitlement中,包含您的應用想要作為通用鏈接處理的域的列表。要在Xcode中執行此操作,請打開Capabilities選項卡中的Associated Domains部分,并為應用支持的每個域添加一個條目,前綴為applinks:,例如applinks:www.mywebsite.com。將此列表限制為不超過20到30個域。

要匹配關聯域的所有子域,可以通過前綴*指定通配符。在特定域開始之前(需要個周期)。域匹配基于applinks條目中最長的子字符串。例如,如果您指定條目applinks:*。mywebsite.comapplinks:*。userss.mywebsite.com,則針對較長的* .users.mywebsite.com條目執行域emily.users.mywebsite.com的匹配。請注意,由于星號后的句點,* .mywebsite.com的條目與mywebsite.com不匹配。要為* .mywebsite.commywebsite.com啟用匹配,您需要為每個提供單獨的applinks條目。

指定關聯域后,請采用UIApplicationDelegate方法進行Handoff(特別是application:continueUserActivity:restorationHandler:),以便您的應用程序可以接收鏈接并對其進行適當處理。

當iOS在用戶點擊通用鏈接后啟動您的應用時,您會收到一個NSUserActivity對象,其activityType值為NSUserActivityTypeBrowsingWeb。活動對象的webpageURL屬性包含用戶正在訪問的URL。webpageURL屬性始終包含HTTPHTTPS URL,您可以使用NSURLComponents API來操作URL的組件。

當用戶點擊您處理的通用鏈接時,iOS還會檢查用戶最近的選擇,以確定是打開您的應用還是您的網站。例如,點擊通用鏈接打開您的應用的用戶以后可以通過點擊狀態欄中的breadcrumb按鈕選擇在Safari中打開您的網站。用戶做出此選擇后,iOS將繼續在Safari中打開您的網站,直到用戶選擇通過點擊網頁上的Smart App Banner中的OPEN來打開您的應用。

注意:如果您實例化SFSafariViewControllerWKWebViewUIWebView對象來處理通用鏈接,iOS將在Safari中打開您的網站,而不是打開您的應用程序。 但是,如果用戶從嵌入式SFSafariViewControllerWKWebViewUIWebView對象中點擊通用鏈接,iOS將打開您的應用程序。

重要的是要了解如果您的應用使用openURL:打開指向您網站的通用鏈接,則該鏈接無法在您的應用中打開。 在這種情況下,iOS會識別出調用來自您的應用,因此您的應用不應將其作為通用鏈接處理。

如果在活動對象中收到無效的URL,則正常處理失敗很重要。 要處理不受支持的URL,可以在共享應用程序對象上調用openURL:以在Safari中打開鏈接。 如果您無法這么調用,請向用戶顯示錯誤消息,說明出現了什么問題。

重要:為了保護用戶的隱私和安全,您不應在需要傳輸數據時使用HTTP; 相反,使用安全傳輸協議,如HTTPS。

后記

本篇主要講述了吸引網絡用戶之支持Universal Links,感興趣的給個贊或者關注~~~

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容