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

1.概述

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

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

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

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

它優(yōu)化了用戶體驗,這一點是它最終要達到的目的。

根據(jù)Deep Linking能做到的,很多人都能想到如何去實現(xiàn)它了,采用Uri Scheme的方式實現(xiàn),是的!這是最通用的實現(xiàn)方式,不過該方式有一個問題,就是當(dāng)點擊一個深度鏈接時,該鏈接必須先經(jīng)過瀏覽器才能跳轉(zhuǎn)到相應(yīng)的應(yīng)用。不過,從Android 6.0開始,Android又增加了一種更加直接的方式來打開應(yīng)用——App Links,該技術(shù)可以通過一個鏈接直接打開應(yīng)用,不再需要瀏覽器的協(xié)助。下面分兩部分實現(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。下面講解如何實現(xiàn)瀏覽器跳轉(zhuǎn)到指定的APP頁面。

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

分析:

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

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

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

實現(xiàn):

1、配置

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

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

只需簡單地添加一個鏈接就可以實現(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)你點擊該鏈接的時候會自動打開能接收該URI的應(yīng)用,并且你可以在相應(yīng)的組件中接收參數(shù)并進行后續(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ù)進行后續(xù)處理了。

3.App Links

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

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

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

1、需要按照以下格式進行配置,其中android:autoVerify="true"是必須配置項。因為配置了該項,所以需要特別注意AndroidManifest.xml文件中所有的包含屬性的,需要在必要的域名服務(wù)器上都添加json校驗文件,有一項校驗不成功都會校驗失敗。具體參考:https://developer.android.com/training/app-links/index.html#testing

2、json校驗文件必須能通過https訪問,無論intent-filter中是否聲明了https。

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

4、校驗不支持重定向,所以不要配置鏈接重定向。

5、生成sha256指紋證書java命令:keytool -list -v -keystore my-release-key.keystor ? e,json校驗文件中的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文件,并通過點擊鏈接打開應(yīng)用。請不要為webview添加setWebViewClient()方法,否則無法跳轉(zhuǎn)!

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

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

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


參考:

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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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

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