在WWDC 2015 上, Apple 為 iOS 9 宣布了一個(gè)所謂 通用鏈接 的深層鏈接特性, 視頻地址為 [無(wú)縫鏈接到您的 App]宿稀。雖然它不是一個(gè)必須實(shí)現(xiàn)的功能, 但還是需要引起一些注意霎肯。
在網(wǎng)上有太多讓人迷惑和錯(cuò)誤的信息, 這次 WWDC 本身也沒(méi)有去描述細(xì)節(jié)。幸運(yùn)的是, 在 HOKO 我們?cè)谖覀兊闹悄苕溄由咸砑恿诉@一特性, 所以我們可以無(wú)縫的引導(dǎo)用戶到 APP 上疏唾。
什么是通用鏈接冠跷?
很顯然 Apple 正在大力推動(dòng) APP 開(kāi)發(fā)者在深層鏈接上有更好的體驗(yàn)荡含。所有的消息都圍繞著深層鏈接技術(shù)火窒。與此同時(shí), Apple 推出通用鏈接:一種能夠方便的通過(guò)傳統(tǒng) HTTP 鏈接來(lái)啟動(dòng) APP, 使用相同的網(wǎng)址打開(kāi)網(wǎng)站和 APP。
通過(guò)唯一的網(wǎng)址, 就可以鏈接一個(gè)特定的視圖到你的 APP 里面, 不需要特別的 schema 冒嫡。試想一下 Twitter 使用了通用鏈接, 那么你每在 twitter拇勃。com 點(diǎn)擊一個(gè)鏈接, 你的 iOS 設(shè)備都會(huì)在 Twitter 里面自動(dòng)打開(kāi)這個(gè)頁(yè)面, 而不是當(dāng)你沒(méi)有安裝時(shí)轉(zhuǎn)到普通的網(wǎng)頁(yè)。這個(gè)用戶體驗(yàn)是順暢的, 最重要的是用戶不會(huì)失去上下文(跳到 APP 后 Safari 上不再留下空標(biāo)簽)孝凌。
準(zhǔn)備使用通用鏈接
實(shí)現(xiàn)通用鏈接不難, 但首先必須遵守一些先決條件方咆。如下:
有一個(gè)注冊(cè)的域名
通過(guò) SSL 訪問(wèn)域名
支持上傳一個(gè) JSON 文件到你的域名
至少 iOS 9 beta 2 版本 [下載],這很重要, 因?yàn)槿绻侵暗臏y(cè)試版本你需要做額外的操作蟀架。
至少 Xcode 7 beta 2 [下載]
如果你都有了, 那就來(lái)按照下面3個(gè)步驟來(lái)做吧瓣赂。
1.添加域名到 Capabilities
首先, 你必須在 Xcode 的 capabilities 里 添加你的 APP 域名, 必須用 applinks: 前置它:還添加一些你可能擁有的子域和擴(kuò)展(www.domain.com, news.domain.com 等等)。
用 applinks: 前綴添加所有域名, 同時(shí)不要忘了包含所有可能需要的子域名*
這將使你的 APP 從你的域名請(qǐng)求一個(gè)特殊的 JSON 文件 apple-app-site-association片拍。當(dāng)你第一次啟動(dòng) APP煌集,它會(huì)從 https://domain.com/apple-app-site-association 下載這個(gè)文件。跳到下個(gè)步驟來(lái)了解如何構(gòu)建這個(gè)文件捌省。
2.上傳 apple-app-site-association 文件
該文件必須存在且為了安全原因可使用 **SSL 通過(guò) GET **請(qǐng)求訪問(wèn)到苫纤。你可以打開(kāi)一個(gè)文本編輯器然后寫(xiě)一個(gè)這樣的簡(jiǎn)單 **JSON **格式:
1
2
3
4
5
6
7
8
9
10
{
"applinks"
: {
"apps"
: [],
"details"
: {
"TBEJCS6FFP.com.domain.App"
: {
"paths"
:[
"*"
]
}
}
}
}
根據(jù) paths 鍵設(shè)定一個(gè)允許的路徑列表(你希望APP 作出反應(yīng)的路徑), 或只是一個(gè)星號(hào)如果你想打開(kāi) APP 而不管路徑是什么。
你可能想知道 TBEJCS6FFP.com.domain.App 從何而來(lái), 基本上, 它是加入了你的團(tuán)隊(duì)標(biāo)識(shí)的 bundle id纲缓。你可以從你的 [蘋(píng)果開(kāi)發(fā)賬號(hào)頁(yè)面]獲取你的團(tuán)隊(duì)標(biāo)識(shí):
這個(gè)頁(yè)面有你的團(tuán)隊(duì)標(biāo)識(shí), 你可以拷貝粘貼到 apple-app-site-association 文件
Bundle id 可以在項(xiàng)目的 target -- General 中找到:
檢查 General 標(biāo)簽并拷貝粘貼 bundle id 到 apple-app-site-association 文件
最后, 上傳這個(gè)文件到你的域名根目錄方面。如果你打開(kāi) https://domain.com/apple-app-site-association 可以看到你的文件, 那么你就可以繼續(xù)下一步了。
3.在 APP 里處理通用鏈接
為了在 APP 里支持通用鏈接, 你需要在 AppDelegate 里實(shí)現(xiàn) [application(_:continueUserActivity:restorationHandler:)]色徘。 盡管這種方法可以用于許多不同的目的(比如 [Handoff]和 [搜索 API]), 我們將只關(guān)注如何處理接收到的通用鏈接。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import UIKit
extension AppDelegate {
func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool {
if
userActivity.activityType == NSUserActivityTypeBrowsingWeb {
let webpageURL = userActivity.webpageURL!
// Always exists
if
!handleUniversalLink(URL: webpageURL) {
UIApplication.sharedApplication().openURL(webpageURL)
}
}
return
true
}
private func handleUniversalLink(URL url: NSURL) -> Bool {
if
let components = NSURLComponents(URL: url, resolvingAgainstBaseURL:
true
), let host = components.host, let pathComponents = components.path?.pathComponents {
switch
host {
case
"domain.com"
:
if
pathComponents.count >= 4 {
switch
(pathComponents[0], pathComponents[1], pathComponents[2], pathComponents[3]) {
case
(
"/"
,
"path"
,
"to"
, let something):
if
validateSomething(something) {
presentSomethingViewController(something)
return
true
}
default
:
return
false
}
}
default
:
return
false
}
}
return
false
}
}
如果提供的 userActivity 是 NSUserActivityTypeBrowsingWeb 類(lèi)型, 那么意味著它已經(jīng)由通用鏈接 API 代理操禀。這樣的話, 它保證用戶打開(kāi)的 URL 將有一個(gè)非空的 webpageURL 屬性褂策。依據(jù)前面的例子, 這將是 http://domain.com/path/to/thezoo 的體現(xiàn)。
為了確保你的 APP 可以翻譯 URL 成實(shí)際的內(nèi)容, 你需要做下面幾步:
使用 [NSURLComponents]簡(jiǎn)單解析 webpageURL 到 host(如domain颓屑。com), 路徑組成同理(如 ["/"]斤寂、"path"、"to"以及"thezoo")揪惦。
確保能識(shí)別 host遍搞。
嘗試將 pathComponents 匹配到 APP 的已知內(nèi)容里。
驗(yàn)證該內(nèi)容實(shí)際上可以被呈現(xiàn)器腋。
呈現(xiàn)內(nèi)容給用戶溪猿。
如果上述步驟有任何一個(gè)失敗, Apple 建議你的 APP 應(yīng)該在 Safari 上打開(kāi) webpageURL 以顯示錯(cuò)誤钩杰。
總結(jié)如圖:
上圖是通用鏈接的工作流程的概要
通用鏈接的缺點(diǎn)
通用鏈接對(duì)于開(kāi)發(fā)人員來(lái)說(shuō)是一個(gè)好主意, 但也有一些缺點(diǎn)可能會(huì)導(dǎo)致不受青睞。
通用鏈接只適用于 iOS 9 +
配置 APP 支持通用鏈接意味著只有運(yùn)行 iOS 9 的用戶才能享用這一技術(shù)優(yōu)勢(shì)诊县。 而之前版本的用戶將不能在點(diǎn)擊網(wǎng)頁(yè)鏈接時(shí)打開(kāi) APP讲弄。 相反的, 他們將返回到瀏覽器和網(wǎng)頁(yè), 就像之前正常的網(wǎng)頁(yè)鏈接一樣。
然后, HOKO為 iOS 5 及更高版本的用戶提供了移動(dòng)深層鏈接依痊。 因此, 你的移動(dòng)深層鏈接將可以運(yùn)行在幾乎所有的 iOS 設(shè)備上, 不管它們是不是 iOS 9避除。
通用鏈接總是會(huì)返回到先前創(chuàng)建的網(wǎng)頁(yè)
如果你想退回主頁(yè)或與 APP 完全不不相關(guān)的網(wǎng)站?實(shí)現(xiàn)這一目標(biāo)需要一些額外的工作, 要配置一個(gè)網(wǎng)頁(yè)可以指引用戶到你的目標(biāo)頁(yè)面胸嘁。 此外, 如果你沒(méi)有一個(gè)網(wǎng)站的話, 這將會(huì)是一個(gè)不可能的解決方案瓶摆。
你可以使用 HOKO 智能鏈接和他們自適應(yīng)的返回來(lái)輕松的解決這個(gè)問(wèn)題。 對(duì)于創(chuàng)建的每個(gè)智能鏈接, 你可以在每個(gè)平臺(tái)上選擇如果沒(méi)有安裝 APP 會(huì)發(fā)生什么性宏。 另外你可以設(shè)置返回到你的網(wǎng)站, iTunes 商店頁(yè)面或其它外部網(wǎng)站群井。
使用通用鏈接, 開(kāi)發(fā)者必須部署一個(gè)網(wǎng)站來(lái)關(guān)聯(lián) APP
這對(duì)于小型開(kāi)發(fā)者來(lái)說(shuō)可能是個(gè)壞消息, 他們可能買(mǎi)不起或維護(hù)一個(gè)網(wǎng)站, 但是仍然想通過(guò)網(wǎng)頁(yè)鏈接進(jìn)入他們的 APP。
HOKO 可以解決這個(gè)問(wèn)題因?yàn)樗鼇?lái)充當(dāng)開(kāi)發(fā)者的網(wǎng)站, 每個(gè) APP 托管在不同的子域衔沼。 因此, 開(kāi)發(fā)者只需創(chuàng)建智能鏈接, 并發(fā)布其網(wǎng)址, 然后每次都會(huì)無(wú)縫的打開(kāi)相應(yīng)的 APP蝌借。
APP 與網(wǎng)站之間的聯(lián)系是由創(chuàng)建和托管在開(kāi)發(fā)者網(wǎng)站上的配置文件搞定的
使用 HOKO, 你可以跳過(guò)這些繁的配置, 因?yàn)槲覀兪顾梢蚤_(kāi)箱即用。 此外, 我們的服務(wù)器運(yùn)行在有行業(yè)頂級(jí)標(biāo)準(zhǔn)的安全性和性能上, 為每個(gè)設(shè)備提供安全和快速的方式指蚁。
如果你想了解更多關(guān)于 HOKO 的信息, 可以給我們發(fā)郵件或直接注冊(cè)菩佑。
(或直接檢查我們關(guān)于Google’s App Links的詳細(xì)指南)
轉(zhuǎn)載地址: