Universal Links 的作用
當(dāng)應(yīng)用支持 Universal Links 后鄙皇,如果用戶已經(jīng)安裝了你的 app伴逸,當(dāng)點(diǎn)擊開發(fā)者配置的網(wǎng)站鏈接后错蝴,iOS 用戶可以無縫跳轉(zhuǎn)至該應(yīng)用 顷锰,而無需經(jīng)由 Safari 中轉(zhuǎn)官紫;如果沒有安裝玛界,則會通過 Safari 打開鏈接對應(yīng)的網(wǎng)站慎框。
注:當(dāng)用戶在 WKWebView 或 UIWebView 頁面或 Safari 網(wǎng)頁中點(diǎn)擊指向網(wǎng)站的鏈接時(shí)笨枯,Universal Links 才允許用戶打開開發(fā)者的應(yīng)用
Universal Links 配置方法
-
在開發(fā)者中心進(jìn)行配置:找到對應(yīng)的App ID馅精,在 Application Services 列表里將 Associated Domains 更改為 Enabled。
Application Services -
打開工程配置 Capabilities 選項(xiàng)卡中的 Associated Domains 開關(guān)漫玄,在其中的 Domains 中填入域名睦优,必須以“applinks:”為前綴汗盘,如“
applinks:test.universallinks.com
”隐孽。
image.png
- 創(chuàng)建 JSON 數(shù)據(jù)格式的名為 apple-app-site-association 的文件菱阵,內(nèi)容為你的應(yīng)用需關(guān)聯(lián)的所有 URL送粱,形式如下:
{
"applinks": {
"apps": [],
"details": [
{
"appID": "9JA89QQLNQ.com.apple.wwdc",
"paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"]
},
{
"appID": "ABCD1234.com.apple.wwdc",
"paths": [ "*" ]
}
]
}
}
注:對于在 iOS 9.3.1 更高版本中運(yùn)行的應(yīng)用程序抗俄,apple-app-site-association 的文件大小必須 ≤ 128 KB动雹。
- 上次 apple-app-site-association 文件至你的網(wǎng)站服務(wù)器(需支持 HTTPS 協(xié)議)跟压,并將其放置網(wǎng)站根目錄或 .well-known 文件夾下震蒋。
- 在 AppDelegate 的
- (BOOL)application: continueUserActivity: restorationHandler:
方法中處理通用鏈接查剖。
- (BOOL)application:(nonnull UIApplication *)application
continueUserActivity:(nonnull NSUserActivity *)userActivity
restorationHandler:(nonnull void (^)(NSArray * __nullable))restorationHandler {
if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
NSURL *webpageURL = userActivity.webpageURL;
NSString *host = webpageURL.host;
if ([host isEqualToString:@"test.universallinks.com"]) {
// TODO:處理應(yīng)用內(nèi)跳轉(zhuǎn)邏輯
}
else {
[[UIApplication sharedApplication]openURL:webpageURL];
}
return YES;
}
return NO;
}
Universal Links 原理
app 第一次啟動 或 app 更新版本后第一次啟動時(shí)笋庄,會向工程里配置的域名發(fā)起獲取 apple-app-site-association 文件的 get 請求直砂,并將其注冊給系統(tǒng)静暂。
當(dāng)用戶在 WKWebView 或 UIWebView 頁面或 Safari 網(wǎng)頁中點(diǎn)擊指向開發(fā)者網(wǎng)站的鏈接時(shí),如果系統(tǒng)中安裝了開發(fā)者的 app摹迷,Universal Links 會直接調(diào)起泪掀,否則會通過 Safari 打開鏈接對應(yīng)的網(wǎng)站。
其它問題
點(diǎn)擊 url 頁面中的通用鏈接后椅挣,沒有打開應(yīng)用鼠证。
原因:當(dāng)用戶點(diǎn)擊通用鏈接時(shí)靠抑,iOS 系統(tǒng)會檢查用戶最近的選擇颂碧,以確定是打開應(yīng)用還是網(wǎng)站载城。 例如诉瓦,用戶在 Safari 中點(diǎn)擊通用鏈接打開應(yīng)用后,可以通過點(diǎn)擊狀態(tài)欄中返回按鈕來在 Safari 中繼續(xù)瀏覽網(wǎng)站固额,直到用戶在網(wǎng)頁頂部的條幅中點(diǎn)擊“打開”按鈕斗躏。
解決方法:在網(wǎng)頁頂部的條幅中點(diǎn)擊“打開”按鈕瑟捣。服務(wù)器配置了 apple-app-site-association 文件栅干,點(diǎn)擊 url 鏈接卻沒有調(diào)起客戶端碱鳞。
原因:服務(wù)器根目錄及 .well-known 文件夾下均存在 apple-app-site-association 文件,客戶端在請求該文件時(shí)贵白,會以 .well-known 文件夾下的配置文件內(nèi)容為準(zhǔn)禁荒,而在更改配置時(shí)沒有同時(shí)對這兩個(gè)目錄中的文件進(jìn)行更新呛伴,故導(dǎo)致上述問題热康。
解決方法:同時(shí)更新根目錄及 .well-known 文件夾下的 apple-app-site-association 文件姐军,或只保留其中某個(gè)文件并使內(nèi)容保持最新。