iOS-UniversalLink開(kāi)發(fā)

Universal Link 介紹

Universal Link是蘋(píng)果在WWDC 2015上提出的iOS 9的新特性之一。此特性類(lèi)似于深層鏈接,并能夠方便地通過(guò)打開(kāi)一個(gè)Https鏈接來(lái)直接啟動(dòng)您的客戶(hù)端應(yīng)用(手機(jī)有安裝App)。對(duì)比起以往所使用的URL Sheme, 這種新特性在實(shí)現(xiàn)web-app的無(wú)縫鏈接時(shí)能夠提供極佳的用戶(hù)體驗(yàn)。

這具體是一種怎樣的情景呢?舉個(gè)例子,你的用戶(hù)在微信里面瀏覽一個(gè)你們公司的網(wǎng)頁(yè),而此時(shí)用戶(hù)手機(jī)也同時(shí)安裝有你們公司的App ;而universal link 能夠使的用戶(hù)在打開(kāi)某個(gè)詳情頁(yè)時(shí)直接打開(kāi)你的app 并到達(dá)app中相應(yīng)內(nèi)容的頁(yè)面,從而實(shí)施用戶(hù)想要的操作(例如查看某條新聞,例如查看某個(gè)商品的明細(xì))

以下分別為URL Scheme方式及Universal Link的方式呈現(xiàn)場(chǎng)景恢復(fù)的過(guò)程
以下為URL Scheme方式: (第一張圖是在微信中瀏覽web,下同)

下面是用Universal Link方式:

ul

通過(guò)上述對(duì)比得知,Universal Link能夠直接從微信中打開(kāi)App,比起以往的URL Scheme的方式能夠大大改善用戶(hù)體驗(yàn)。

Univerasl Link的準(zhǔn)備工作

  • 擁有自己的域名,且此域名網(wǎng)站支持https
  • 能夠上傳文件apple-app-site-association到自己的域名
  • 只支持iOS 9以上

注:可以使用三方服務(wù),MobLink已經(jīng)幫您完成了上面所有的工作,免費(fèi)為您提供Universal Link服務(wù)。使用MobLink提供的技術(shù)方案,無(wú)論您是否iOS9以上,都能夠助您實(shí)現(xiàn) Web與App 之間的完美交互。

集成步驟

  1. 開(kāi)啟Associated Domains服務(wù)
    image.png

注意:有的app會(huì)區(qū)分線(xiàn)上包和測(cè)試包,不同賬號(hào)下的都需要設(shè)置App ID才行,前往不要忘記。

2.開(kāi)啟Associated Domains服務(wù)
在xcode工程的Capabilities -> Associated Domains中添加跳轉(zhuǎn)域名,域名的格式為:
applinks:www.example.com

image.png

注意:
你的服務(wù)器必須支持SSL
Domains可以添加多個(gè)
Domains必須以applinks: 開(kāi)頭

3.配置apple-app-site-association文件,官方文檔如下:

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "9JA89QQLNQ.com.apple.wwdc",
                "paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"]
            },
            {
                "appID": "ABCD1234.com.apple.wwdc",
                "paths": [ "*" ]
            }
        ]
    }
}

  • apps項(xiàng)必須對(duì)應(yīng)一個(gè)空的數(shù)組

  • details項(xiàng)對(duì)應(yīng)一個(gè)字典的數(shù)組,

  • appID對(duì)應(yīng)項(xiàng)由前綴和ID兩部分組成,可以在developer中的Identifiers→AppIDs中點(diǎn)擊對(duì)應(yīng)的App ID查看。

    image.png

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

  • 建議配置上path,同一公司可能多款app有次需求,不同的path有益于后期的擴(kuò)展。

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

當(dāng)我們的App在設(shè)備上第一次運(yùn)行時(shí),如果支持Associated Domains功能,那么iOS會(huì)自動(dòng)去GET定義的Domain下的apple-app-site-association文件。
需要留意iOS會(huì)先請(qǐng)求 https://domain.com/.well-known/apple-app-site-association
如果此文件請(qǐng)求不到,再去請(qǐng)求 https://domain.com/apple-app-site-association。 所以如果想要避免服務(wù)器接收過(guò)多GET請(qǐng)求,可以直接把a(bǔ)pple-app-site-association放在./well-known/目錄下。

4.Appdelegate增加如下代碼

#pragma mark Universal Link
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
    if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
        NSURL *url = userActivity.webpageURL;
       // TODO 根據(jù)需求進(jìn)行處理
    }
      // TODO 根據(jù)需求進(jìn)行處理
    return YES;
}

在Safari中點(diǎn)擊鏈接打開(kāi)App后,會(huì)發(fā)現(xiàn)App的右上角的navigationBar會(huì)有一串網(wǎng)址的鏈接箭頭,
如果你點(diǎn)擊了它,它會(huì)跳轉(zhuǎn)到Safari,同時(shí)系統(tǒng)會(huì)默認(rèn)你選擇用Safari來(lái)打開(kāi)該域名的鏈接,而不用app打開(kāi),也就是說(shuō)下次你再點(diǎn)擊該鏈接,它只會(huì)在Safari中打開(kāi),不會(huì)在App中打開(kāi)了。

那么如何開(kāi)啟app跳轉(zhuǎn)呢?有兩種方法:
第一種,在Safari頁(yè)面中,手指往下拉一下頁(yè)面,會(huì)顯示一個(gè)“隱藏”的banner,俗稱(chēng)為 smart banner,右側(cè)有一個(gè)button,點(diǎn)擊它,就開(kāi)啟App跳轉(zhuǎn)功能了。
第二種,長(zhǎng)按跳轉(zhuǎn)鏈接,底下會(huì)彈出一些選項(xiàng),選擇在App中打開(kāi),同樣可以開(kāi)啟這個(gè)功能。

apple-app-site-association 文件注意格式是否正確 中文字符不識(shí)別

總結(jié)

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

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

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

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

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

參考文章:
蘋(píng)果官方文檔
mob
iOS的UniversalLink開(kāi)發(fā)總結(jié)

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

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

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