什么是universal link?
通用鏈接是Apple在WWDC2015上為iOS9引入的一個(gè)新功能,是通過(guò)傳統(tǒng)HTTP鏈接來(lái)啟動(dòng)App的技術(shù)??梢允褂孟嗤木W(wǎng)址打開(kāi)網(wǎng)站和App。通過(guò)唯一的網(wǎng)址,就可以鏈接到App中具體的視圖,不需要特殊的schema。如果用戶(hù)沒(méi)有安裝App則鏈接到對(duì)應(yīng)的普通網(wǎng)頁(yè)。之前使用scheme進(jìn)行應(yīng)用之間的跳轉(zhuǎn)比較麻煩,需要寫(xiě)很多的scheme字段。
使用universal link需要什么條件呢?
有一個(gè)注冊(cè)的域名
通過(guò) SSL 訪(fǎng)問(wèn)域名
支持上傳一個(gè) JSON 文件到你的域名
至少 iOS 9 beta 2 版本 [下載],這很重要, 因?yàn)槿绻侵暗臏y(cè)試版本你需要做額外的操作。
至少 Xcode 7 beta 2 [下載]
開(kāi)始使用universal link?
第一步:添加域名到 Capabilities
首先, 你必須在 Xcode 的 capabilities 里 添加你的 APP 域名, 必須用 applinks: 前置它:還添加一些你可能擁有的子域和擴(kuò)展(www.domain.com, news.domain.com 等等)。

這將使你的 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è)文件。
這將使你的 APP 從你的域名請(qǐng)求一個(gè)特殊的 JSON 文件 apple-app-site-association。當(dāng)你第一次啟動(dòng) APP,它會(huì)從 https://pre-jr1.letv.com/apple-app-site-association下載這個(gè)文件。跳到下個(gè)步驟來(lái)了解如何構(gòu)建這個(gè)文件。
第二步:創(chuàng)建apple-app-site-association文件,記住此文件不要添加后綴名,編輯完成此文件之后要上傳到我們的服務(wù)器。
編輯apple-app-site-association文件的內(nèi)容:
{
"applinks":{
"apps":[],
"details":
[
{
"appID":"4B7W4R45RH.com.letv.jr",
"paths":["/mleplatform/current/","/mleplatform/regular/"]
}
]
}
}
appID的拼接方式為:teamID+bundleID

第三步:如果要處理通用鏈接的話(huà),需要在APPDelegate方法中進(jìn)行處理。
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *))restorationHandler
{
if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
NSURL *webpageURL = userActivity.webpageURL;
NSString *host = webpageURL.path;
if ([host isEqualToString:@"/mleplatform/current/detail.html"]) {
[[LFDRouter shared] openURL:[NSString stringWithFormat:@"lefinance://currentDeposit/detail?%@", webpageURL.query]];
}else if ([host isEqualToString:@"/mleplatform/regular/project-detail.html"]) {
[[LFDRouter shared] openURL:[NSString stringWithFormat:@"lefinance://fixedDeposit/detail?%@", webpageURL.query]];
}
} else if ([userActivity.activityType isEqualToString:@"com.apple.corespotlightitem"]) {
// spotlight
NSString *url = userActivity.userInfo[@"kCSSearchableItemActivityIdentifier"];
if (url) {
[[LFDRouter shared] openURL:url];
}
}
return YES;
}