iOS 通用鏈接(Universal Links)的配置與使用

一层皱、通用鏈接簡介

在iOS9之前狈蚤,對于從各種從瀏覽器奴曙、Safari中喚醒APP的需求欲主,我們通常只能使用scheme邓厕。但是這種方式需要提前判斷系統(tǒng)中是否安裝了能夠響應(yīng)此scheme的app逝嚎,并且這種方式在微信中是被禁用了的。

通用鏈接(Universal Links)是iOS9推出的一項功能详恼,使你的應(yīng)用可以通過傳統(tǒng)的HTTP鏈接來啟動APP(如果iOS設(shè)備上已經(jīng)安裝了你的app补君,不管在微信里還是在哪里), 或者打開網(wǎng)頁(iOS設(shè)備上沒有安裝你的app)昧互。

通用鏈接為您提供了使用自定義URL方案時無法獲得的幾個主要優(yōu)勢挽铁。具體而言,通用鏈接是:

  • 獨特敞掘。與自定義網(wǎng)址方案不同叽掘,其他應(yīng)用無法聲明通用鏈接,因為它們使用指向您網(wǎng)站的標(biāo)準(zhǔn)HTTP或HTTPS鏈接玖雁。
  • 安全更扁。當(dāng)用戶安裝您的應(yīng)用時,iOS會檢查您上傳到網(wǎng)絡(luò)服務(wù)器的文件赫冬,以確保您的網(wǎng)站允許您的應(yīng)用代表其打開網(wǎng)址浓镜。只有您可以創(chuàng)建并上傳此文件,因此您的網(wǎng)站與應(yīng)用的關(guān)聯(lián)是安全的劲厌。
  • 靈活膛薛。即使您的應(yīng)用未安裝,通用鏈接也能正常工作补鼻。未安裝您的應(yīng)用時哄啄,點按指向您網(wǎng)站的鏈接會在用戶期望的Safari中打開內(nèi)容。
  • 簡單风范。一個URL適用于您的網(wǎng)站和您的應(yīng)用咨跌。
  • 私人的。其他應(yīng)用可以與您的應(yīng)用進行通信乌企,而無需知道您的應(yīng)用是否已安裝虑润。

注意
1、通用鏈接允許用戶在點擊您網(wǎng)站內(nèi)的鏈接WKWebView和UIWebView視圖以及Safari頁面時打開您的應(yīng)用加酵,此外還有導(dǎo)致呼叫的鏈接openURL:拳喻,例如郵件,消息和其他應(yīng)用中出現(xiàn)的鏈接猪腕。
2冗澈、當(dāng)用戶在Safari中瀏覽您的網(wǎng)站并且他們點擊與當(dāng)前網(wǎng)頁位于同一域中的URL的通用鏈接時,iOS會尊重用戶最可能的意圖并在Safari中打開該鏈接陋葡。如果用戶點擊通向不同域中網(wǎng)址的通用鏈接亚亲,iOS會在您的應(yīng)用中打開該鏈接。
3、對于運行早于9.0版本的iOS的用戶捌归,點擊指向您網(wǎng)站的通用鏈接會在Safari中打開該鏈接肛响。

二、配置通用鏈接

1惜索、配置開發(fā)證書

需要在開發(fā)者中心做配置:找到對應(yīng)的App ID特笋,在Application Services列表里有Associated Domains一條,把它變?yōu)镋nabled就可以了巾兆。

配置開發(fā)證書.jpg

2猎物、配置Capabilitles

進入項目的Targets->Capabilites->Associated Domains,設(shè)置成ON狀態(tài)。在其中的Domains中填入你想支持的域名角塑,必須以applinks:為前綴蔫磨,后面添加通用鏈接的域名,這里以 www.baidu.com 為例

配置Capabilitles.png

3圃伶、創(chuàng)建關(guān)聯(lián)文件apple-app-site-association

創(chuàng)建一個內(nèi)容為json格式的文件堤如,蘋果將會在合適的時候,從我們在項目中填入的域名請求這個文件窒朋。這個文件名必須為apple-app-site-association煤惩,沒有后綴名,文件內(nèi)容大概是這樣子:

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

注意
1炼邀、不要附加.json到apple-app-site-association文件名。
2剪侮、appID:組成方式是 teamId.yourapp’s bundle identifier拭宁。如上面的 9JA89QQLNQ就是teamId。登陸開發(fā)者中心瓣俯,在Account - Membership里面可以找到Team ID
3杰标、paths:設(shè)定你的app支持的路徑列表,只有這些指定的路徑的鏈接彩匕,才能被app所處理腔剂。星號的寫法代表了可識別域名下所有鏈接。

paths要指定不應(yīng)作為通用鏈接處理的區(qū)域驼仪,請在路徑字符串的開頭添加“NOT”(包括后面的空格T)掸犬。例如,apple-app-site-association顯示的文件可能會阻止/videos/wwdc/2010/*通過更新paths數(shù)組將網(wǎng)站區(qū)域作為通用鏈接處理绪爸,如下所示:

"paths": [ "/wwdc/news/", "NOT /videos/wwdc/2010/*", "/videos/wwdc/201?/*"]

因為系統(tǒng)paths按照指定的順序評估數(shù)組中的每個路徑湾碎,并且在找到正匹配或負匹配時停止評估,您應(yīng)該在低優(yōu)先級路徑之前指定高優(yōu)先級路徑奠货。請注意介褥,只有URL的路徑組件用于比較,其他組件(例如查詢字符串或片段標(biāo)識符)將被忽略。

有多種方法可以在apple-app-site-association文件中指定網(wǎng)站路徑柔滔。例如溢陪,您可以:

  • 使用 * 指定整個網(wǎng)站
  • 包括特定的URL,例如/wwdc/news/睛廊,以指定特定的鏈接
  • 附加 * 到特定網(wǎng)址形真,例如/videos/wwdc/2015/*,指定您網(wǎng)站的某個部分
  • 除了用于 * 匹配任何子字符串之外喉前,您還可以使用 ? 匹配任何單個字符没酣。您可以將兩個通配符組合在一個路徑中,例如/foo/*/bar/201?/mypage卵迂。

注意:
用于指定paths陣列中網(wǎng)站路徑的字符串區(qū)分大小寫裕便。

4、上傳關(guān)聯(lián)文件apple-app-site-association

上傳該文件到你的域名所對應(yīng)的根目錄或者.well-known目錄下见咒,這是為了蘋果能獲取到你上傳的文件偿衰。上傳完后,自己先訪問一下,看看是否能夠獲取到,當(dāng)你在瀏覽器中輸入這個文件鏈接后改览,應(yīng)該是直接下載apple-app-site-association文件下翎。如以知乎為例:https://www.zhihu.com/apple-app-site-association

三、驗證通用鏈接

1宝当、抓包驗證

我們創(chuàng)建apple-app-site-association文件的目的是為了讓iOS系統(tǒng)能獲取這個文件视事,知道你的哪些是鏈接是Universal Links,哪些不是Universal Links庆揩。所以在你第一次安裝APP時俐东,iOS系統(tǒng)會去對應(yīng)的路徑下拿取apple-app-site-association文件,所以我們可以通過抓包來判斷通不通订晌。另外直接用Xcode debug調(diào)試APP時虏辫,iOS也會去拿取apple-app-site-association文件。

配置抓包.png

2、訪問驗證

在iOS設(shè)備中的備忘錄中輸入App能識別的鏈接,然后直接點擊此鏈接渔扎,就會直接跳轉(zhuǎn)到你的app了÷ィ或是長按,在出現(xiàn)的彈出菜單中第二項是在’XXX’中打開验辞,這也代表著成功稿黄。這里使用知乎的鏈接為例:https://www.zhihu.com/question/345124567

備忘錄驗證.png

如果你選擇在Safari中打開,上下滑動頁面跌造,你會發(fā)現(xiàn)仍然有一個按鈕可以打開你的應(yīng)用杆怕。


safari打開應(yīng)用.jpg

3族购、驗證失敗原因推測

  • TeamId不對,要使用開發(fā)者中心賬號下的TeamID
  • 域名不是https請求
  • 服務(wù)器端的SSL證書有問題(偽證書或者無效證書)
  • 服務(wù)器端的證書配置有問題

四陵珍、結(jié)合NFC使用

1寝杖、AppDelegate處理Universal Links

用戶點擊某個鏈接,直接可以進我們的app了互纯,但是我們的目的是要能夠獲取到用戶進來的鏈接瑟幕,根據(jù)鏈接來展示給用戶相應(yīng)的內(nèi)容。我們需要在工程里的 AppDelegate 里實現(xiàn)回調(diào)方法:

/// 通用鏈接回調(diào)方法
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler {
    // 通用鏈
    if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
        NSURL *url = userActivity.webpageURL;
        NSLog(@"通用鏈接 :%@", url);
    }
    
    return YES;
}

Demo下載:https://github.com/ZhangJingHao/ZJHNFCDemo

2留潦、NFC后臺讀取通用鏈接

NFC的相關(guān)介紹只盹,請參考這邊文章:iOS NFC功能集成及詳解

iPhone XS及更高版本支持后臺標(biāo)簽讀取。系統(tǒng)掃描并讀取NFC數(shù)據(jù)兔院,而無需用戶使用應(yīng)用程序掃描標(biāo)簽殖卑。每次讀取新標(biāo)簽時,系統(tǒng)都會顯示彈出通知坊萝。用戶點擊通知后孵稽,系統(tǒng)會將標(biāo)記數(shù)據(jù)傳遞到相應(yīng)的應(yīng)用程序。如果iPhone被鎖定十偶,系統(tǒng)會在將標(biāo)簽數(shù)據(jù)提供給應(yīng)用程序之前提示用戶解鎖手機菩鲜。

首先將鏈接信息寫入NFC標(biāo)簽,這里以知乎鏈接為例:https://www.zhihu.com/question/345124567

當(dāng)掃描普通鏈接惦积,或未安裝相應(yīng)應(yīng)用的app時接校,會彈出Safari打開通知彈框,點擊會跳轉(zhuǎn)到Safari狮崩。


safari打開提示彈框.png

當(dāng)掃描已配置好的通用鏈接馅笙,且安裝了該app,會彈出使用app打開的通知彈框厉亏,點擊會跳轉(zhuǎn)到對應(yīng)的app。


app打開提示彈框.png



參考鏈接:
iOS Universal Links(通用鏈接)的使用
iOS 9 通用鏈接(Universal Links)
Support Universal Links
Adding Support for Background Tag Reading

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末烈和,一起剝皮案震驚了整個濱河市爱只,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌招刹,老刑警劉巖恬试,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異疯暑,居然都是意外死亡训柴,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門妇拯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來幻馁,“玉大人洗鸵,你說我怎么就攤上這事≌锑拢” “怎么了膘滨?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長稀拐。 經(jīng)常有香客問我火邓,道長,這世上最難降的妖魔是什么德撬? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任铲咨,我火速辦了婚禮,結(jié)果婚禮上蜓洪,老公的妹妹穿的比我還像新娘纤勒。我一直安慰自己,他們只是感情好蝠咆,可當(dāng)我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布踊东。 她就那樣靜靜地躺著,像睡著了一般刚操。 火紅的嫁衣襯著肌膚如雪闸翅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天菊霜,我揣著相機與錄音坚冀,去河邊找鬼。 笑死鉴逞,一個胖子當(dāng)著我的面吹牛记某,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播构捡,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼液南,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了勾徽?” 一聲冷哼從身側(cè)響起滑凉,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎喘帚,沒想到半個月后畅姊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡吹由,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年若未,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片倾鲫。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡粗合,死狀恐怖萍嬉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情舌劳,我是刑警寧澤帚湘,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站甚淡,受9級特大地震影響大诸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜贯卦,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一资柔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧撵割,春花似錦贿堰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至庶灿,卻和暖如春纵搁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背往踢。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工腾誉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人峻呕。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓利职,卻偏偏與公主長得像,于是被迫代替她去往敵國和親瘦癌。 傳聞我的和親對象是個殘疾皇子猪贪,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,515評論 2 359

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