什么是universal link?
通用鏈接是Apple在WWDC2015上為iOS9引入的一個新功能,是通過傳統HTTP鏈接來啟動App的技術。可以使用相同的網址打開網站和App。通過唯一的網址,就可以鏈接到App中具體的視圖,不需要特殊的schema。如果用戶沒有安裝App則鏈接到對應的普通網頁。之前使用scheme進行應用之間的跳轉比較麻煩,需要寫很多的scheme字段。
使用universal link需要什么條件呢?
有一個注冊的域名
通過 SSL 訪問域名
支持上傳一個 JSON 文件到你的域名
至少 iOS 9 beta 2 版本 [下載],這很重要, 因為如果是之前的測試版本你需要做額外的操作。
至少 Xcode 7 beta 2 [下載]
開始使用universal link?
第一步:添加域名到 Capabilities
首先, 你必須在 Xcode 的 capabilities 里 添加你的 APP 域名, 必須用 applinks: 前置它:還添加一些你可能擁有的子域和擴展(www.domain.com, news.domain.com 等等)。
這將使你的 APP 從你的域名請求一個特殊的 JSON 文件 apple-app-site-association。當你第一次啟動 APP,它會從 https://domain.com/apple-app-site-association 下載這個文件。跳到下個步驟來了解如何構建這個文件。
這將使你的 APP 從你的域名請求一個特殊的 JSON 文件 apple-app-site-association。當你第一次啟動 APP,它會從 https://pre-jr1.letv.com/apple-app-site-association下載這個文件。跳到下個步驟來了解如何構建這個文件。
第二步:創建apple-app-site-association文件,記住此文件不要添加后綴名,編輯完成此文件之后要上傳到我們的服務器。
編輯apple-app-site-association文件的內容:
{
"applinks":{
"apps":[],
"details":
[
{
"appID":"4B7W4R45RH.com.letv.jr",
"paths":["/mleplatform/current/","/mleplatform/regular/"]
}
]
}
}
appID的拼接方式為:teamID+bundleID
第三步:如果要處理通用鏈接的話,需要在APPDelegate方法中進行處理。
- (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;
}