UniversalLink通用鏈接梳理

本文內(nèi)容收集整理自網(wǎng)絡(luò)粪牲,結(jié)合了項(xiàng)目中的情況

1.什么是Universal Link

iOS9 新引入的一個(gè)功能憎账,是通過傳統(tǒng)HTTP鏈接來啟動(dòng)App的技術(shù)蚤假,可以使用相同的網(wǎng)址打開網(wǎng)站和App击费。通過唯一的網(wǎng)址逞刷,就可以鏈接到App中具體的視圖风罩,不需要特殊的scheme荞下。如果用戶沒有安裝App則鏈接到對(duì)應(yīng)的普通網(wǎng)頁拧篮。無縫連接Web-App ,備忘錄-App,信息-App之間的跳轉(zhuǎn)。
(在iOS 9以前螺垢,我們從外部啟動(dòng)App都是通過URL Scheme實(shí)現(xiàn)跳轉(zhuǎn)的喧务,與scheme不同,Universal Link是系統(tǒng)級(jí)別的枉圃,可以突破微信或是其他第三方封殺功茴;
無縫跳轉(zhuǎn),沒有提示框彈出孽亲,沒有安裝App則鏈接到對(duì)應(yīng)的普通網(wǎng)頁痊土,讓用戶體驗(yàn)提升一個(gè)級(jí)別)

特征

  • 唯一性。不像自定義的scheme協(xié)議墨林, unversal link不受其他App的限制赁酝,因?yàn)樗鞘褂脴?biāo)準(zhǔn)的http和https協(xié)議連接到自己的網(wǎng)站。

  • 安全性旭等。當(dāng)用戶安裝你的app的時(shí)候酌呆,iOS系統(tǒng)會(huì)檢測(cè)你指定服務(wù)器你來確定你的網(wǎng)站是否支持通過這個(gè)方式來打開URL鏈接。一旦你創(chuàng)建和上傳你的關(guān)聯(lián)文件到你的服務(wù)器搔耕,你的站點(diǎn)和app的關(guān)聯(lián)就是私密安全的隙袁。

  • 靈活性。Universal Link無論是是否安裝了關(guān)聯(lián)的app弃榨,都可以無縫的工作菩收。當(dāng)用戶未安裝關(guān)聯(lián)的app時(shí),就是一個(gè)普通的URL鏈接鲸睛,可以通過webView正常打開娜饵,無需做其他配置。這個(gè)完全是iOS系統(tǒng)webKit的行為官辈,開發(fā)者不用關(guān)心箱舞。

  • 簡(jiǎn)單。一個(gè)URL鏈接,可以同時(shí)作用于網(wǎng)站和app拳亿。

  • 私密性晴股。其他app可以無縫的和你的app通信,其他app并不能通過連接知道用戶是不是安裝了你的app肺魁。

先決條件

  • 有一個(gè)注冊(cè)的域名电湘,并可通過 SSL 訪問
  • 至少 iOS 9 版本
  • 至少 Xcode 7

Universal Link的基本運(yùn)作流程

  • APP第一次啟動(dòng) or APP更新版本后第一次啟動(dòng)
  • APP向工程里配置的域名發(fā)起Get請(qǐng)求拉取apple-app-association Json File
  • APP將apple-app-association注冊(cè)給系統(tǒng)
  • 由任意webview發(fā)起跳轉(zhuǎn)的url,如果命中了apple-app-association注冊(cè)過的通用鏈接
  • 打開App,觸發(fā)Universal Link delegate
  • 沒命中寂呛,webview繼續(xù)跳轉(zhuǎn)url

注意事項(xiàng)

  • iOS 9.2之前怎诫,不用跨域都可以跳轉(zhuǎn), iOS 9.2之后昧谊,必須跨域才能進(jìn)行跳轉(zhuǎn)到原生app上。

  • iOS只會(huì)在App第一次啟動(dòng)時(shí)請(qǐng)求一次apple-app-site-association文件酗捌,服務(wù)器上該文件的更新不會(huì)讓iOS本地的文件同步更新呢诬。

  • 下載的文件必須是apple-app-site-association,不能帶后綴胖缤。

  • apple-app-site-association文件中paths 路徑是大小寫敏感尚镰。

  • iOS系統(tǒng)還會(huì)記錄用戶的習(xí)慣。
    (如果跳轉(zhuǎn)到app內(nèi)后哪廓,用戶點(diǎn)擊了屏幕右上角的按鈕使用Safari打開后狗唉,下次還是點(diǎn)擊出發(fā)跳轉(zhuǎn)的連接的時(shí)候,那么iOS系統(tǒng)會(huì)根據(jù)用戶的使用習(xí)慣直接用Safari或者WebView打開涡真,不會(huì)跳轉(zhuǎn)到App內(nèi)分俯;當(dāng)用戶點(diǎn)擊了WebView或者Safari啟發(fā)跳轉(zhuǎn)連接頂欄那個(gè)”打開”按鈕發(fā)生跳轉(zhuǎn)后,下次打開才會(huì)觸發(fā)跳轉(zhuǎn))

2.實(shí)現(xiàn)步驟

1. 在開發(fā)者中心打開Associated Domains服務(wù)
20180102111723000.png
2. 在 Xcode 的 capabilities 里 添加域名
image
3. 配置apple-app-site-association文件
{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "8A7VED9NUX.com.biyao.fu",
        "paths":[ "/product/*", "/design/*", "/order/*", "/market/*", "/account/*"]
      }
    ]
  }
}
  • apps 是限制只能在這幾個(gè)app中使用哆料, 基本是不填寫
  • appID:TeamID+.Bundle ID
  • paths:可以跳轉(zhuǎn)的路徑缸剪。代表此域名下所有路徑都支持,也可以具體制定到某個(gè)頁面例如/path/page或者某個(gè)路徑下所有URL例如/path/
4. 上傳 apple-app-site-association 文件
  • 上傳 apple-app-site-association 文件到域名的根目錄或者.well-known子目錄下
  • 服務(wù)器需要支持https
  • 能打開https:///apple-app-site-association 或 https:///.well-known/apple-app-site-association
    當(dāng)我們的App在設(shè)備上第一次運(yùn)行時(shí)东亦,如果支持Associated Domains功能杏节,那么iOS會(huì)自動(dòng)去獲取域名下的apple-app-site-association文件
5. 在 APP 里處理通用鏈接

我們?cè)贏ppDelegate中實(shí)現(xiàn)如下代理方法:

-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler
{
    if([userActivity.activityTypeisEqualToString:NSUserActivityTypeBrowsingWeb]) {
        NSURL *webpageURL = userActivity.webpageURL;
        ......     
    }
    return YES;
}

3.遇到的問題

由于蘋果iOS 13系統(tǒng)版本安全升級(jí),為此openSDK在1.8.6版本進(jìn)行了適配典阵。 1.8.6版本支持Universal Links方式跳轉(zhuǎn)奋渔,對(duì)openSDK分享進(jìn)行合法性校驗(yàn)。
在配置好Universal Link后壮啊,發(fā)現(xiàn)無法正確連接嫉鲸,每次分享都會(huì)出現(xiàn)二次跳轉(zhuǎn)。


image

再來看下之前 apple-app-site-association 的配置歹啼,

{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "8A7VED9NUX.com.biyao.fu",
        "paths":[ "/product/*", "/design/*", "/order/*", "/market/*", "/account/*"]
      }
    ]
  }
}

這種寫法可以識(shí)別的Universal Link只有這種幾種情況:

而直接訪問https://www.domain.com/是不會(huì)命中Universal Link的充坑,這也導(dǎo)致了微信無法識(shí)別
將根目錄添加通配符:

{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "8A7VED9NUX.com.biyao.fu",
        "paths":[ "/product/*", "/design/*", "/order/*", "/market/*", "/account/*","*"]
      }
    ]
  }
}

就可以讓直接訪問根目錄https://www.domain.com/的請(qǐng)求也命中,成為有效的Universal Link染突,解決微信的問題捻爷。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市份企,隨后出現(xiàn)的幾起案子也榄,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件甜紫,死亡現(xiàn)場(chǎng)離奇詭異降宅,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)囚霸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門腰根,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拓型,你說我怎么就攤上這事额嘿。” “怎么了劣挫?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵册养,是天一觀的道長。 經(jīng)常有香客問我压固,道長球拦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任帐我,我火速辦了婚禮坎炼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拦键。我一直安慰自己点弯,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布矿咕。 她就那樣靜靜地躺著抢肛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪碳柱。 梳的紋絲不亂的頭發(fā)上捡絮,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音莲镣,去河邊找鬼福稳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛瑞侮,可吹牛的內(nèi)容都是我干的的圆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼半火,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼越妈!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起钮糖,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤梅掠,失蹤者是張志新(化名)和其女友劉穎酌住,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阎抒,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡酪我,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了且叁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片都哭。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖逞带,靈堂內(nèi)的尸體忽然破棺而出欺矫,到底是詐尸還是另有隱情,我是刑警寧澤掰担,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布汇陆,位于F島的核電站怒炸,受9級(jí)特大地震影響带饱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜阅羹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一勺疼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧捏鱼,春花似錦执庐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至看尼,卻和暖如春递鹉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背藏斩。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來泰國打工躏结, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人狰域。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓媳拴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親兆览。 傳聞我的和親對(duì)象是個(gè)殘疾皇子屈溉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容