iOS 9 通用鏈接(Universal Links)

當(dāng)您支持通用鏈接時(shí),iOS用戶(hù)可以點(diǎn)擊鏈接到您的網(wǎng)站,并無(wú)縫地重定向到已安裝的應(yīng)用程序,而無(wú)需通過(guò)Safari。如果您的應(yīng)用未安裝,請(qǐng)點(diǎn)擊您的網(wǎng)站的鏈接在Safari中打開(kāi)您的網(wǎng)站。

通用鏈接為您提供了使用自定義URL方案時(shí)無(wú)法獲得的幾個(gè)主要優(yōu)點(diǎn)。具體來(lái)說(shuō),通用鏈接是:

獨(dú)特。與自定義網(wǎng)址方案不同,其他應(yīng)用不能聲明通用鏈接,因?yàn)樗鼈兪褂脴?biāo)準(zhǔn)的HTTP或HTTPS鏈接到您的網(wǎng)站。

安全。當(dāng)用戶(hù)安裝您的應(yīng)用程序時(shí),iOS會(huì)檢查您已上傳到Web服務(wù)器的文件,以確保您的網(wǎng)站允許您的應(yīng)用程序代表其打開(kāi)URL。只有您可以創(chuàng)建和上傳此文件,因此您的網(wǎng)站與您的應(yīng)用程序的關(guān)聯(lián)是安全的。

靈活。即使您的應(yīng)用程序未安裝,Universal links也可以正常工作。當(dāng)您的應(yīng)用程序未安裝時(shí),點(diǎn)擊鏈接到您的網(wǎng)站會(huì)按照用戶(hù)期望在Safari中打開(kāi)內(nèi)容。

簡(jiǎn)單。一個(gè)URL適用于您的網(wǎng)站和您的應(yīng)用程序。

私人的。其他應(yīng)用程序可以與您的應(yīng)用程序通信,而無(wú)需知道您的應(yīng)用程序是否已安裝。

注意

通用鏈接可讓用戶(hù)在點(diǎn)擊鏈接到您的網(wǎng)站WKWebView,UIWebView瀏覽和Safari頁(yè)面之前打開(kāi)您的應(yīng)用程序,以及導(dǎo)致呼叫的鏈接openURL:,例如郵件,郵件和其他應(yīng)用程序中發(fā)生的鏈接。

當(dāng)用戶(hù)在Safari中瀏覽您的網(wǎng)站,并點(diǎn)擊與當(dāng)前網(wǎng)頁(yè)位于同一個(gè)域中的URL的通用鏈接時(shí),iOS會(huì)尊重用戶(hù)最有可能的意圖,并在Safari中打開(kāi)鏈接。如果用戶(hù)點(diǎn)擊不同域中的URL的通用鏈接,則iOS會(huì)在您的應(yīng)用中打開(kāi)鏈接。

對(duì)于運(yùn)行9.0之前的iOS版本的用戶(hù),點(diǎn)擊通用鏈接到您的網(wǎng)站將在Safari中打開(kāi)鏈接。

添加對(duì)通用鏈接的支持很容易。您需要采取以下三個(gè)步驟:

創(chuàng)建一個(gè)apple-app-site-association包含您的應(yīng)用程序可以處理的URL的JSON數(shù)據(jù)的文件。

將apple-app-site-association文件上傳到您的HTTPS Web服務(wù)器。您可以將文件放在服務(wù)器的根目錄或.well-known子目錄中。

準(zhǔn)備您的應(yīng)用程序來(lái)處理通用鏈接。

您可以測(cè)試設(shè)備上的通用鏈接。

創(chuàng)建和上傳關(guān)聯(lián)文件

要在您的網(wǎng)站和您的應(yīng)用程序之間建立安全的連接,您將建立它們之間的信任關(guān)系。你建立這種關(guān)系的兩個(gè)部分:

apple-app-site-association您添加到您的網(wǎng)站的文件

一個(gè)com.apple.developer.associated-domains您添加到您的應(yīng)用程序的權(quán)利(這部分中描述的準(zhǔn)備您的應(yīng)用程序以處理通用鏈接

您可以了解有關(guān)應(yīng)用程序和網(wǎng)站如何在“共享Web憑據(jù)參考”共享憑據(jù)的更多信息

注意

如果您的應(yīng)用程序在iOS 9或更高版本中運(yùn)行,并且使用HTTPS來(lái)投放該apple-app-site-association文件,則可以創(chuàng)建使用application/jsonMIME類(lèi)型的純文本文件,而不需要對(duì)其進(jìn)行簽名。如果您在iOS 8中支持切換和共享網(wǎng)絡(luò)憑據(jù),則仍需要按照“共享Web憑據(jù)參考”中所述對(duì)文件進(jìn)行簽名。

您需要為apple-app-site-association您的應(yīng)用程序支持的獨(dú)特內(nèi)容為每個(gè)域提供單獨(dú)的文件。例如,apple.com并且developer.apple.com需要單獨(dú)的apple-app-site-association文件,因?yàn)檫@些域提供不同的內(nèi)容。相比之下,apple.com并且www.apple.com不需要單獨(dú)的站點(diǎn)關(guān)聯(lián)文件 - 因?yàn)閮蓚€(gè)域都提供相同的內(nèi)容 - 但是這兩個(gè)域都必須使該文件可用。對(duì)于在iOS 9.3.1及更高版本中運(yùn)行的應(yīng)用程序,apple-app-site-association文件的未壓縮大小必須不大于128 KB,無(wú)論文件是否已簽名。

在您的apple-app-site-association文件中,您將指定您的網(wǎng)站中應(yīng)該作為通用鏈接處理的路徑以及不應(yīng)被視為通用鏈接的路徑。保持路徑列表相當(dāng)短,并且依靠通配符匹配來(lái)匹配更大的路徑集。清單6-1顯示了一個(gè)apple-app-site-association文件的示例,該文件標(biāo)識(shí)了應(yīng)作為通用鏈接處理的三個(gè)路徑。

清單6-1創(chuàng)建apple-app-site-association文件

{

"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文件名。

文件中的apps鍵apple-app-site-association必須存在,其值必須為空數(shù)組,如清單6-1所示。details密鑰的值是一系列字典,您的網(wǎng)站支持的每個(gè)應(yīng)用程序有一個(gè)字典。數(shù)組中字典的順序決定了系統(tǒng)在查找匹配時(shí)遵循的順序,因此您可以指定一個(gè)應(yīng)用程序來(lái)處理網(wǎng)站的特定部分。

每個(gè)特定于應(yīng)用程序的字典包含一個(gè)appID鍵和一個(gè)paths鍵。appID密鑰的值是團(tuán)隊(duì)ID或應(yīng)用ID前綴,后跟bundle ID。(該appID值與構(gòu)建應(yīng)用程序的權(quán)利中的“應(yīng)用程序標(biāo)識(shí)符”鍵相關(guān)聯(lián)的值。)paths鍵的值是指定應(yīng)用程序支持的網(wǎng)站部分的字符串?dāng)?shù)組以及您不想與應(yīng)用程序關(guān)聯(lián)的網(wǎng)站部分。要指定不應(yīng)作為通用鏈接處理的區(qū)域,請(qǐng)?jiān)诼窂阶址拈_(kāi)頭添加“NOT”(包括一個(gè)空格T)。例如,清單6-1apple-app-site-association所示的文件可能會(huì)阻止/videos/wwdc/2010/*通過(guò)更新paths數(shù)組來(lái)將網(wǎng)站的區(qū)域作為通用鏈接處理,如下所示:

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

因?yàn)橄到y(tǒng)paths按照指定的順序?qū)﹃嚵兄械拿總€(gè)路徑進(jìn)行評(píng)估,并且在發(fā)現(xiàn)正或負(fù)匹配時(shí)停止評(píng)估 - 應(yīng)在低優(yōu)先級(jí)路徑之前指定高優(yōu)先級(jí)路徑。請(qǐng)注意,只有URL的路徑組件用于比較。其他組件(如查詢(xún)字符串或片段標(biāo)識(shí)符)將被忽略。

有多種方式可以在apple-app-site-association文件中指定網(wǎng)站路徑。例如,您可以:

使用*指定整個(gè)網(wǎng)站

包括一個(gè)特定的URL,如/wwdc/news/指定一個(gè)特定的鏈接

附加*到特定的URL,例如/videos/wwdc/2015/*,指定您的網(wǎng)站的一部分

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

注意

用于指定paths陣列中的網(wǎng)站路徑的字符串區(qū)分大小寫(xiě)。

創(chuàng)建apple-app-site-association文件后,將其上傳到HTTPS Web服務(wù)器的根目錄或.well-known子目錄。該文件需要訪問(wèn)通過(guò)HTTPS,沒(méi)有任何重定向,在https:///apple-app-site-association或https:///.well-known/apple-app-site-association。接下來(lái),您需要處理應(yīng)用程序中的通用鏈接。

準(zhǔn)備您的應(yīng)用程序處理通用鏈接

通用鏈接使用兩種技術(shù):第一種是與Web瀏覽器和本機(jī)應(yīng)用程序之間切換功能相同的機(jī)制,第二種是共享Web憑據(jù)(有關(guān)這些技術(shù)的更多信息,請(qǐng)參閱Web瀏覽器到本機(jī)應(yīng)用程序切換共享Web憑據(jù)參考)。當(dāng)用戶(hù)點(diǎn)擊通用鏈接時(shí),iOS會(huì)啟動(dòng)您的應(yīng)用程序并發(fā)送一個(gè)NSUserActivity可以查詢(xún)的對(duì)象,以了解應(yīng)用程序的啟動(dòng)方式。

要在您的應(yīng)用程序中支持通用鏈接,請(qǐng)執(zhí)行以下步驟:

添加一個(gè)指定您的應(yīng)用程序支持的域的權(quán)利。

更新您的應(yīng)用程序委托收到NSUserActivity對(duì)象時(shí)適當(dāng)響應(yīng)。

在您的com.apple.developer.associated-domains權(quán)利中,將應(yīng)用程序要處理的域列表列為通用鏈接。要在Xcode中執(zhí)行此操作,請(qǐng)打開(kāi)“功能”選項(xiàng)卡中的“關(guān)聯(lián)域”部分,并為您的應(yīng)用程序支持的每個(gè)域添加一個(gè)條目,前綴applinks:如applinks:www.mywebsite.com。將此列表限制為不超過(guò)約20到30個(gè)域。

要匹配關(guān)聯(lián)域的所有子域,您可以*.在特定域的開(kāi)頭之前通過(guò)前綴指定通配符(需要該時(shí)間段)。域匹配基于applinks條目中最長(zhǎng)的子字符串。例如,如果您指定條目,applinks:*.mywebsite.com并且針對(duì)較長(zhǎng)條目執(zhí)行applinks:*.users.mywebsite.com域匹配。請(qǐng)注意,由于星號(hào)后的期間,條目不匹配。為了使兩個(gè)匹配和,您需要提供一個(gè)單獨(dú)的每個(gè)條目。emily.users.mywebsite.com*.users.mywebsite.com*.mywebsite.commywebsite.com*.mywebsite.commywebsite.comapplinks

指定關(guān)聯(lián)的域后,請(qǐng)采用UIApplicationDelegateHandoff(特別是application:continueUserActivity:restorationHandler:)方法,以便您的應(yīng)用程序可以接收鏈接并妥善處理。

當(dāng)用戶(hù)點(diǎn)擊通用鏈接后,iOS啟動(dòng)您的應(yīng)用程序時(shí),您會(huì)收到NSUserActivity一個(gè)activityType值為的對(duì)象NSUserActivityTypeBrowsingWeb。activity對(duì)象的webpageURL屬性包含用戶(hù)正在訪問(wèn)的URL。網(wǎng)頁(yè)網(wǎng)址屬性始終包含HTTP或HTTPS網(wǎng)址,您可以使用NSURLComponentsAPI來(lái)操縱網(wǎng)址的組件。

當(dāng)用戶(hù)點(diǎn)擊您處理的通用鏈接時(shí),iOS還會(huì)檢查用戶(hù)最近的選擇,以確定是否打開(kāi)您的應(yīng)用或您的網(wǎng)站。例如,一個(gè)利用通用鏈接打開(kāi)應(yīng)用程序的用戶(hù)可以稍后在狀態(tài)欄中點(diǎn)擊導(dǎo)航痕跡按鈕,選擇在Safari中打開(kāi)您的網(wǎng)站。用戶(hù)進(jìn)行此選擇后,iOS會(huì)繼續(xù)在Safari中打開(kāi)您的網(wǎng)站,直到用戶(hù)選擇通過(guò)在網(wǎng)頁(yè)上的智能應(yīng)用橫幅中點(diǎn)擊OPEN打開(kāi)您的應(yīng)用程序。

注意

如果您實(shí)例化SFSafariViewController,WKWebViewUIWebView對(duì)象來(lái)處理通用鏈接,則iOS會(huì)在Safari中打開(kāi)您的網(wǎng)站,而不是打開(kāi)您的應(yīng)用程序。但是,如果用戶(hù)點(diǎn)擊由嵌入在一個(gè)通用的鏈接SFSafariViewController,WKWebView或UIWebView對(duì)象,iOS版開(kāi)啟應(yīng)用程式。

重要的是要明白,如果您的應(yīng)用程序用于openURL:打開(kāi)通用鏈接到您的網(wǎng)站,該鏈接不會(huì)在您的應(yīng)用程序中打開(kāi)。在這種情況下,iOS會(huì)識(shí)別該呼叫源自您的應(yīng)用程序,因此您的應(yīng)用程序不應(yīng)被視為通用鏈接。

如果您在活動(dòng)對(duì)象中收到無(wú)效的網(wǎng)址,那么重要的是正常失敗。要處理不受支持的URL,您可以調(diào)用openURL:共享應(yīng)用程序?qū)ο笠栽赟afari中打開(kāi)鏈接。如果您無(wú)法撥打此電話(huà),則會(huì)向用戶(hù)顯示一條錯(cuò)誤消息,以說(shuō)明發(fā)生了什么。

重要

為了保護(hù)用戶(hù)的隱私和安全,您不必在需要傳輸數(shù)據(jù)時(shí)使用HTTP;而是使用HTTPS等安全傳輸協(xié)議。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. 通用鏈接 通用鏈接要求在iOS9及以上的版本運(yùn)行,做用是可以備忘錄,短信,郵件中點(diǎn)擊鏈接跳轉(zhuǎn)APP, 這里有...
    開(kāi)發(fā)iOS攻城獅閱讀 1,564評(píng)論 3 5
  • 最近老大要求在App里加這個(gè)功能,于是乎就研究了一下。 網(wǎng)上可以參考的文章很多,比如: 1.官方文檔2.Cocoa...
    subvertWuxu閱讀 57,924評(píng)論 53 98
  • When you support universal links, iOS 9 users can tap a l...
    huanghy閱讀 4,300評(píng)論 2 5
  • 一、 通用鏈接介紹Apple 推出通用鏈接:一種能夠方便的通過(guò)傳統(tǒng) HTTP 鏈接來(lái)啟動(dòng) APP, 使 用相同的網(wǎng)...
    冰點(diǎn)雨閱讀 1,503評(píng)論 0 4
  • 閑時(shí)出門(mén)百般磨嘰 早上醒來(lái),想到剛剛過(guò)去的5天工作日,而周日還有二十多小時(shí),就好像還有一袋子銀子一樣開(kāi)始不在意。磨...
    念即起行閱讀 213評(píng)論 0 0

友情鏈接更多精彩內(nèi)容