Android移動開發(fā)者必須知道的Deep Linking技術(shù)

1.概述

Deep Linking(譯:深度鏈接)作為移動開發(fā)者可能對這個概念有點(diǎn)陌生则涯,但是對于它的實(shí)現(xiàn)原理篙梢,說出來大家肯定都知道崎页。不過我們先說一下Deep Linking能做什么孝宗?

它可以喚起指定應(yīng)用并向其傳遞數(shù)據(jù)捣卤,根據(jù)傳遞的數(shù)據(jù)顯示特定內(nèi)容頁的詳細(xì)信息异逐;

它不再受制于應(yīng)用捶索,只通過一個鏈接便可喚起應(yīng)用并跳轉(zhuǎn)到指定頁面;

它使應(yīng)用之間產(chǎn)生了聯(lián)系灰瞻,使應(yīng)用不再孤立存在腥例;

它優(yōu)化了用戶體驗(yàn),這一點(diǎn)是它最終要達(dá)到的目的酝润。

根據(jù)Deep Linking能做到的燎竖,很多人都能想到如何去實(shí)現(xiàn)它了,采用Uri Scheme的方式實(shí)現(xiàn)要销,是的构回!這是最通用的實(shí)現(xiàn)方式,不過該方式有一個問題疏咐,就是當(dāng)點(diǎn)擊一個深度鏈接時纤掸,該鏈接必須先經(jīng)過瀏覽器才能跳轉(zhuǎn)到相應(yīng)的應(yīng)用。不過浑塞,從Android 6.0開始借跪,Android又增加了一種更加直接的方式來打開應(yīng)用——App Links,該技術(shù)可以通過一個鏈接直接打開應(yīng)用酌壕,不再需要瀏覽器的協(xié)助掏愁。下面分兩部分實(shí)現(xiàn)Android如何通過Deep Linking從web頁面跳轉(zhuǎn)到指定應(yīng)用頁面。

2.Uri Scheme

Uri Scheme并不是什么特殊的Uri卵牍,只是因主要使用了Uri的scheme部分果港,所以稱為Uri Scheme。關(guān)于Uri不了解的可以參考官方URI的API文檔或者網(wǎng)上搜索相關(guān)資料查看糊昙,此處不講解URI辛掠。下面講解如何實(shí)現(xiàn)瀏覽器跳轉(zhuǎn)到指定的APP頁面。

目的:使用Uri Scheme實(shí)現(xiàn)從web頁面喚起應(yīng)用并跳轉(zhuǎn)到指定頁面

分析:

使用Uri Scheme需要添加怎樣的溅蛉,才能實(shí)現(xiàn)從瀏覽器喚起應(yīng)用公浪?

web頁面如何配置對應(yīng)的URI他宛,才能實(shí)現(xiàn)跳轉(zhuǎn)到指定頁面?

如何接受web頁面intent攜帶的參數(shù)欠气?

實(shí)現(xiàn):

1厅各、配置

對應(yīng)的組件可以響應(yīng)符合該的URI。如果要實(shí)現(xiàn)可以接收瀏覽器發(fā)送的Intent的预柒。就必須添加和? 這兩項(xiàng)队塘。同時還必須能夠接收特定的scheme,所以添加的屬性宜鸯,并指定scheme的名稱憔古。在AndroidManifest.xml文件中進(jìn)行配置,具體配置如下圖(摘自:LinkedME):

2淋袖、web頁面跳轉(zhuǎn)鏈接配置

只需簡單地添加一個鏈接就可以實(shí)現(xiàn)從web頁面喚起App鸿市。鏈接如下:

open app with uri-scheme

分析:lkmedemo://?click_id=IEGyekes7,其中l(wèi)kmedemo對應(yīng)的就是中配置的scheme即碗,這樣系統(tǒng)才能找到對應(yīng)的組件焰情。該URI只包含了scheme、query兩部分剥懒,其中l(wèi)kmedemo屬于scheme部分内舟,?click_id=IEGyekes7部分屬于query部分,在query部分初橘,你可以添加一些參數(shù)验游。

Notice:query部分的“?”是必須包含的。

當(dāng)你點(diǎn)擊該鏈接的時候會自動打開能接收該URI的應(yīng)用保檐,并且你可以在相應(yīng)的組件中接收參數(shù)并進(jìn)行后續(xù)處理耕蝉。

(DeepLinking Demo:https://github.com/ljpww72729/DeepLinking)

3、參數(shù)接收處理

上面指出query部分屬于URI攜帶的一些參數(shù)展东,如何去獲取參數(shù)呢赔硫?通過getQueryParameter()方法可獲取query部分的參數(shù)炒俱,如下:

String click_id = getIntent().getData().getQueryParameter("click_id");

獲取到參數(shù)后就可以根據(jù)參數(shù)進(jìn)行后續(xù)處理了盐肃。

3.App Links

在2015的I/O大會上,谷歌宣布了Android M 支持App鏈接(App Links)权悟,這將極大提升用戶體驗(yàn)砸王,當(dāng)用戶點(diǎn)擊一個web鏈接時能直接跳轉(zhuǎn)到特定的App內(nèi)。

在Android M之前峦阁,點(diǎn)擊一個鏈接會彈出一個對話框谦铃,詢問用戶使用哪個應(yīng)用打開 - 包括瀏覽器應(yīng)用。但是谷歌在Android M 上實(shí)現(xiàn)了一個自動認(rèn)證(auto-verify)機(jī)制榔昔,讓開發(fā)者可以避開這個彈出框驹闰,使用戶不必去選擇一個列表瘪菌,直接跳轉(zhuǎn)到他們的App。

官方關(guān)于App Links的介紹嘹朗,已經(jīng)很詳細(xì)了师妙,不再贅述,這里說一下需要注意的問題:

1屹培、需要按照以下格式進(jìn)行配置默穴,其中android:autoVerify="true"是必須配置項(xiàng)。因?yàn)榕渲昧嗽擁?xiàng)褪秀,所以需要特別注意AndroidManifest.xml文件中所有的包含屬性的蓄诽,需要在必要的域名服務(wù)器上都添加json校驗(yàn)文件,有一項(xiàng)校驗(yàn)不成功都會校驗(yàn)失敗媒吗。具體參考:https://developer.android.com/training/app-links/index.html#testing

2仑氛、json校驗(yàn)文件必須能通過https訪問,無論intent-filter中是否聲明了https闸英。

3调衰、響應(yīng)只能是“application/json”類型的Content-type,其他類型都不支持自阱!

4嚎莉、校驗(yàn)不支持重定向,所以不要配置鏈接重定向沛豌。

5趋箩、生成sha256指紋證書java命令:keytool -list -v -keystore my-release-key.keystor ? e,json校驗(yàn)文件中的sha256應(yīng)該是發(fā)布簽名的sha256加派,可以配置多個叫确,以逗號分隔。


附:

查看webview的User Agent:

https://developer.chrome.com/multidevice/user-agent

DeepLinking Demo該demo模擬了web頁面跳轉(zhuǎn)打開應(yīng)用的場景芍锦,通過webview加載本地html文件竹勉,并通過點(diǎn)擊鏈接打開應(yīng)用。請不要為webview添加setWebViewClient()方法娄琉,否則無法跳轉(zhuǎn)次乓!

該Demo跳轉(zhuǎn)可以按照自己的需要更改scheme,默認(rèn)采用的是(LinkedME Demohttps://github.com/WFC-LinkedME/LinkedME-Android-Deep-Linking-Demo)

作為跳轉(zhuǎn)的應(yīng)用孽水,如若不想更改scheme票腰,需要下載運(yùn)行LinkedME Demo才能正常跳轉(zhuǎn)。

聲明:DeepLinking Demo 并沒有對所有手機(jī)進(jìn)行適配女气,部分手機(jī)或者模擬器可能會出現(xiàn)跳轉(zhuǎn)不成功的情況杏慰,請多試幾部手機(jī)(Android 6.0模擬器正常運(yùn)行)。


參考:

1.https://developer.chrome.com/multidevice/android/intents

2.https://developer.android.com/training/app-links/index.html

3.https://developer.android.com/training/basics/intents/filters.html

4.https://github.com/hehonghui/android-tech-frontier/blob/master/issue-15/Android-M%E7%9A%84App-Links%E5%AE%9E%E7%8E%B0%E8%AF%A6%E8%A7%A3.md

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市缘滥,隨后出現(xiàn)的幾起案子轰胁,更是在濱河造成了極大的恐慌,老刑警劉巖朝扼,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件软吐,死亡現(xiàn)場離奇詭異,居然都是意外死亡吟税,警方通過查閱死者的電腦和手機(jī)凹耙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肠仪,“玉大人肖抱,你說我怎么就攤上這事∫炀桑” “怎么了意述?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長吮蛹。 經(jīng)常有香客問我荤崇,道長,這世上最難降的妖魔是什么潮针? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任术荤,我火速辦了婚禮,結(jié)果婚禮上每篷,老公的妹妹穿的比我還像新娘瓣戚。我一直安慰自己,他們只是感情好焦读,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布子库。 她就那樣靜靜地躺著,像睡著了一般矗晃。 火紅的嫁衣襯著肌膚如雪仑嗅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天张症,我揣著相機(jī)與錄音仓技,去河邊找鬼。 笑死吠冤,一個胖子當(dāng)著我的面吹牛浑彰,可吹牛的內(nèi)容都是我干的恭理。 我是一名探鬼主播拯辙,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了涯保?” 一聲冷哼從身側(cè)響起诉濒,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎夕春,沒想到半個月后未荒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡及志,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年片排,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片速侈。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡率寡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出倚搬,到底是詐尸還是另有隱情冶共,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布每界,位于F島的核電站捅僵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏眨层。R本人自食惡果不足惜庙楚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望趴樱。 院中可真熱鬧醋奠,春花似錦、人聲如沸伊佃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽航揉。三九已至塞祈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間帅涂,已是汗流浹背议薪。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留媳友,地道東北人斯议。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像醇锚,于是被迫代替她去往敵國和親哼御。 傳聞我的和親對象是個殘疾皇子坯临,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,099評論 25 707
  • 本文作者徐斌,原騰信IOS工程師恋昼,現(xiàn)LinkedME高級工程師看靠。 SandBox是什么? SandBox(沙盒)機(jī)...
    LinkedME閱讀 1,193評論 0 1
  • 原文鏈接:https://github.com/halfrost/Halfrost-Field/blob/mast...
    hament閱讀 5,663評論 1 31
  • 移動互聯(lián)時代液肌,很多互聯(lián)網(wǎng)服務(wù)都會同時具備網(wǎng)站以及移動客戶端挟炬,很多人認(rèn)為APP的能幫助建立更穩(wěn)固的用戶關(guān)系,于是經(jīng)常...
    zyl04401閱讀 43,967評論 17 72
  • 無聊的人都干嘛嗦哆? 每天下午這個時候谤祖,無聊到死,也沒興趣看書看電影老速,捧著手機(jī)反復(fù)的刷泊脐,除了朋友圈一直有更新,再沒有一...
    溫暖一個人閱讀 183評論 0 0