iOS的UniversalLink開發(fā)總結(jié)

一,簡介

通用鏈接是Apple在WWDC2015上為iOS9引入的一個新功能,是通過傳統(tǒng)HTTP鏈接來啟動App的技術(shù)??梢允褂孟嗤木W(wǎng)址打開網(wǎng)站和App。通過唯一的網(wǎng)址,就可以鏈接到App中具體的視圖,不需要特殊的schema。如果用戶沒有安裝App則鏈接到對應(yīng)的普通網(wǎng)頁。

二,對比URL Scheme跳轉(zhuǎn)

在iOS 9之前,我們從外部啟動App都是通過URL scheme的方式進(jìn)行跳轉(zhuǎn),開發(fā)者通過配置info.plist文件中的 URL Types 可以輕松實現(xiàn)跳轉(zhuǎn),而且現(xiàn)在蘋果還對這種跳轉(zhuǎn)的方式加了一個提示框:“是否打開XXX”,跳轉(zhuǎn)過程也顯得不流暢。

而UniversalLink跳轉(zhuǎn)方式可以實現(xiàn)無縫跳轉(zhuǎn),當(dāng)瀏覽器識別到預(yù)先指定好的URL,就可以直接喚醒App,不需要在瀏覽器中打開再去點擊其他按鈕。

三,開發(fā)步驟

1,打開Associated Domains服務(wù)

登錄開發(fā)者賬號,在Identifiers下AppIDs找到自己的App ID,編輯打開Associated Domains服務(wù)。

image

2,在Xcode中開啟Associated Domains服務(wù)

找到工程的Capabilities -> Associated Domains,打開此功能,在Domains中添加跳轉(zhuǎn)域名,域名的格式為:

applinks:www.example.com

注:
①,你的服務(wù)器必須支持SSL;
②,Domains可以添加多個;
③,Domains必須以 applinks: 開頭;

image

3,配置 apple-app-site-association 文件

蘋果官方給出的格式如下圖所示:

image

其中apps項必須對應(yīng)一個空的數(shù)組,details項對應(yīng)一個字典的數(shù)組,其中appID對應(yīng)項由前綴和ID兩部分組成,可以在developer.apple.com中的Identifiers→AppIDs中點擊對應(yīng)的App ID查看。

image

paths對應(yīng)域名中的path,用于過濾可以跳轉(zhuǎn)到App的鏈接,支持通配符‘*’,‘?’以及‘NOT’進(jìn)行匹配,匹配的優(yōu)先級是從左至右依次降低。

最后,需要把配置好的json文件上傳到服務(wù)器中該域名的根目錄下,也就是說,我們可以用GET請求可以獲取到這個apple-app-association文件。

當(dāng)我們的App在設(shè)備上第一次運行時,如果支持Associated Domains功能,那么iOS會自動去GET定義的Domain下的apple-app-site-association文件。

需要留意iOS會先請求 https://domain.com/.well-known/apple-app-site-association
如果此文件請求不到,再去請求 https://domain.com/apple-app-site-association。 所以如果想要避免服務(wù)器接收過多GET請求,可以直接把a(bǔ)pple-app-site-association放在./well-known/目錄下。

Tips

服務(wù)器上apple-app-site-association的更新不會讓iOS本地的apple-app-site-association同步更新,即iOS只會在App第一次啟動時請求一次,以后除非App更新或重新安裝否則不會在每次打開時請求apple-app-site-association。

4,Xcode代碼處理

當(dāng)服務(wù)器部署完成之后,我們需要在AppDelegate中實現(xiàn)代理方法:

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler

具體實現(xiàn)如下:

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{

if (![userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
return YES;
}

//讀取url地址
NSURL *jumpUrl = userActivity.webpageURL;
// TODO: handle jump code

return YES;
}

5,測試過程

最簡單的測試方法,是在系統(tǒng)的短信中點擊一個URL直接跳轉(zhuǎn)到App,點擊之前定義的鏈接,如果能跳轉(zhuǎn)到App內(nèi),就正明配置成功了。

四,挖坑提示

1,在Safari中點擊鏈接打開App后,會發(fā)現(xiàn)App的右上角的navigationBar會有一串網(wǎng)址的鏈接箭頭,如果你點擊了它,它會跳轉(zhuǎn)到Safari,同時系統(tǒng)會默認(rèn)你選擇用Safari來打開該域名的鏈接,而不用app打開,也就是說下次你再點擊該鏈接,它只會在Safari中打開,不會在App中打開了。那么如何開啟app跳轉(zhuǎn)呢?有兩種方法:第一種,在Safari頁面中,手指往下拉一下頁面,會顯示一個“隱藏”的banner,俗稱為 smart banner,右側(cè)有一個button,點擊它,就開啟App跳轉(zhuǎn)功能了。第二種,長按跳轉(zhuǎn)鏈接,底下會彈出一些選項,選擇在App中打開,同樣可以開啟這個功能。

2,apple-app-site-association 文件注意格式是否正確,json格式中的引號是全角還是半角的。(特別注意一下這個問題,如果是中文的引號,點擊鏈接不會跳轉(zhuǎn)到App)

五,總結(jié)

1,apple-app-site-association不需要.json后綴。

2,如果要對沒有path的域名進(jìn)行支持(如:www.163.com),在json文件的paths中用通配符’*’是不行的,需要在paths數(shù)組中加入’/’進(jìn)行匹配。

3,對json文件的請求僅在App第一次啟動時進(jìn)行,如果此時網(wǎng)絡(luò)連接出了問題apple會緩存請求,等有網(wǎng)的時候再去請求,而實際測試抓包并沒有請求故通用連接會失效。

4,paths匹配的優(yōu)先級是從左至右依次降低,但需要明確,否則會出問題。比如"paths":[ "NOT /together/",""],在IOS9.2上path為/together/*都不會跳到App,但是在IOS9.0上會跳到。

5,從iOS 9.2開始,在相同的domain內(nèi)Universal Links是不work的,必須要跨域才生效

六,參考鏈接

1)https://developer.apple.com/library/content/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12-SW1 官網(wǎng)鏈接

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

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

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