Android DeepLink介紹與使用
前段時間公司讓調研一下DeepLink,說以後會用到,之前看了很久,並做了個demo,現整理一下,方便以後查閱,如果有幸幫助到其他人就更好了。
基本概念
Deep Link,又叫deep linking,中文翻譯作深層連結。
簡單地從使用者體驗來講,Deep Link,就是可以讓你在手機的瀏覽器/Google Search上點選搜尋的結果,便能直接跳轉到已安裝的應用中的某一個頁面的技術。
對於不懂技術的運營人員來說就是一個分享功能,而從技術層面上去簡單理解是實現將某APP使用者帶到另外APP相對應的內容頁面,實現APP之間無縫跳轉!
商業價值
相信大家或多或少看到過這樣的頁面:
底部有一個“App內開啟”,點選後如果安裝過應用直接跳到應用的對應頁面,如果沒安裝則跳到下載應用頁。
Deeplink(深度連結)
對於已經安裝APP,指向特定的頁面,和上面說的一致。
Deferred deeplink( 延遲深度連結)
相比deeplink,它增加了判斷APP是否被安裝,使用者匹配的2個功能;
- 1.當用戶點選連結的時候判斷APP是否安裝,如果使用者沒有安裝時,引導使用者跳轉到應用商店下載應用。
- 2.使用者匹配功能,當用戶點選連結時和使用者啟動APP時,分別將這兩次使用者Device Fingerprint(裝置指紋資訊)傳到伺服器進行模糊匹配,使使用者下載且啟動APP時,直接開啟相應的指定頁面。
通過上面的2個技術方案,不僅:①可以讓被分享者更快更便捷的回到APP,且回到指定的活動頁面,而且:②可以引導未安裝APP的使用者下載APP、③分享者和被分享者的關係鏈會通過裝置指紋資訊記錄下來,在業務場景中給出相應的獎勵。
使用deeplink前後對比:
基本使用
<a href="[scheme]://[host]/[path]?[query]">啟動應用程式</a>
示例:
<a href="will://link/testId">立即開啟(直接開啟)>></a>
<!--用於DeepLink,html跳到此頁面 scheme_Adr: 'will://link/testid',-->
<activity android:name=".DeepLinkActivity">
< intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="link"
android:scheme="will" />
</intent-filter>
</activity>
</application>
@SuppressWarnings("deprecation")
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (TextUtils.isEmpty(url)) {
return false;
}
try {
// 用於DeepLink測試
if (url.startsWith("will://")) {
Uri uri = Uri.parse(url);
Log.e("---------scheme", uri.getScheme() + ";host: " + uri.getHost() + ";Id: " + uri.getPathSegments().get(0));
}
Intent intent1 = new Intent();
intent1.setAction("android.intent.action.VIEW");
Uri uri = Uri.parse(url);
intent1.setData(uri);
intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mActivity.startActivity(intent1);
} catch (Exception e) {
e.printStackTrace();
}
return true;
}
/**
* 從deep link中獲取資料
* 'will://share/傳過來的資料'
*/
private void getDataFromBrowser(TextView textView) {
Uri data = getIntent().getData();
try {
String scheme = data.getScheme();
String host = data.getHost();
List<String> params = data.getPathSegments();
// 從網頁傳過來的資料
String testId = params.get(0);
String text = "Scheme: " + scheme + "\n" + "host: " + host + "\n" + "params: " + testId;
Log.e("ScrollingActivity", text);
textView.setText(text);
} catch (Exception e) {
e.printStackTrace();
}
}
頁面具體顯示:
Scheme:will
host:link
params:testId
實現原理
DeepLink用到的核心技術就是:URL SCHEMES。不論是IOS還是Android。
URL Schemes 有兩個單詞:
- Schemes,表示的是一個 URL 中的一個位置——最初始的位置,即 ?/之前的那段字元。比如 http://www.apple.com 這個網址的 Schemes 是 http。
我們可以像定位一個網頁一樣,用一種特殊的 URL 來定位一個應用甚至應用裡某個具體的功能。而定位這個應用的,就應該這個應用的 URL 的 Schemes 部分,也就是開頭兒那部分。但是需要注意的是應用的URL Schemes 並不唯一,也就是說一個應用可以“起多個名“,不同應用的URL Schemes也可能因為名字一樣發生衝突。
Android系統級應用,有一些已經定義了URL Schemes,比如簡訊是 sms:、通話是tel:、email是mailto:,在定義自己APP的URL Schemes的時候要避免跟系統應用名稱一樣。
<a href="tel:15088888888">電話</a>
<a href="sms:15088888888">簡訊</a>
<a href="mailto:[email protected]">郵件</a>
與URL一樣,URL Schemes也可以通過傳參開啟特定的APP介面。
Applink
基本介紹
Android App Links是一種特殊的Deep Links,它使Android系統能夠直接通過網站地址開啟應用程式對應的內容頁面,而不需要使用者選擇使用哪個應用來處理網站地址。
要新增Android App Links到應用中,需要在應用裡定義通過Http(s)地址開啟應用的intent filter,並驗證你確實擁有該應用和該網站。如果系統成功驗證到你擁有該網站,那麼系統會直接把URL對應的intent路由到你的應用。
為了驗證你對應用和網站的所有權,以下兩個步驟是必須的:
- 1.在AndroidManifest裡要求系統自動進行App Links的所有權驗證。這個配置會告訴Android系統去驗證你的應用是否屬於在intent filter內指定的URL域名。
- 2.在以下連結地址裡,放置一個數字資產連結的Json檔案,宣告你的網址和應用之間的關係:
https://domain.name/.well-known/assetlinks.json
與Deep Links的區別
-
Deep Links 是一種允許使用者進入應用某個特定Activity的intent filter。點選這類連結時,系統可能會彈出一個選擇列表,讓使用者在一堆能夠處理這類連結的應用裡(包括你的)選擇一個來處理該連結。圖一展示了這樣一種情況:使用者點選了一個地圖相關的連結,系統彈出一個選擇列表,讓使用者選擇是要使用地圖應用來處理,還是使用Chrome瀏覽器來處理。
-
App Links 是一種基於你的網站地址且驗證通過的Deep Links。因此,點選一個這樣的連結會直接開啟你的應用(如果已經安裝),系統將不會彈出選擇列表。當然,後續使用者可以更改配好設定,來指定由哪個應用程式處理這類連結。
下面這個列表描述更多差異:
item | Deep Links | App Links |
---|---|---|
Intent URL Scheme | https, http,或者自定義 | 需為http或https |
Intent Action | 任意Action | 需為android.intent.action.VIEW |
Intent Category | 任意Category | 需為android.intent.category.BROWSABLE 和android.intent.category.DEFAULT |
連結驗證 | 不需要 | 需要在網站上放置一個數字資產連結,並能夠通過HTTPS訪問 |
使用者體驗 | 可能會彈出一個選擇列表給使用者選擇用哪個應用處理連線 | 沒有彈框,系統直接開啟你的應用處理網站連線 |
相容性 | 所有Android版本 | Android 6.0及以上 |
總結一下
- 1.APP要想被其他APP直接開啟,自身得支援,讓自己具備被人開啟的能力。(URL Schemes)
- 2.APP要想開啟其他的APP,自身也得支援。(判斷裝置是否安裝、各種跳轉的處理)
由於大部分應用,如微博、微信、第三方瀏覽器(包括Chrome),都不會將URL拋給系統處理(對scheme進行遮蔽),因此App Links生效的情況就很有限了,比如只能從記事本應用、簡訊應用這些進行跳轉。一般商用實現的是開啟系統瀏覽器,通過系統瀏覽器開啟應用的對應頁面。
一些常用APP的URL Schemes
知乎:回答 zhihu://answers/{id}使用者頁 zhihu://people/{id}
微信:
weixin://dl/scan 掃一掃weixin://dl/feedback 反饋weixin://dl/moments 朋友圈weixin://dl/settings 設定weixin://dl/notifications 訊息通知設定weixin://dl/chat 聊天設定weixin://dl/general 通用設定weixin://dl/officialaccounts 公眾號weixin://dl/games 遊戲weixin://dl/help 幫助weixin://dl/feedback 反饋weixin://dl/profile 個人資訊weixin://dl/features 功能外掛
騰訊微博:TencentWeibo://
淘寶:taobao://
支付寶:alipay://
微博:sinaweibo://
weico微博:weico://
QQ瀏覽器:mqqbrowser://
uc瀏覽器:ucbrowser://
海豚瀏覽器:dolphin://
搜狗瀏覽器:SogouMSE://
百度地圖:baidumap://
Chrome:googlechrome://
優酷:youku://
京東:openapp.jdmoble://
人人:renren://
美團:imeituan://
1號店:wccbyihaodian://
我查查:wcc://
有道詞典:ddictproapp://
點評:dianping://
微盤:sinavdisk://
豆瓣fm:doubanradio://
網易公開課:ntesopen://
名片全能王:camcard://
淘寶寶貝搜尋:taobao://http://s.taobao.com/?q=[prompt]
淘寶店鋪搜尋:taobao://http://shopsearch.t