Deep Link,又叫deep linking,中文翻譯做深層連接。html
簡單地從用戶體驗來說,Deep Link,就是可讓你在手機的瀏覽器/Google Search上點擊搜索的結果,便能直接跳轉到已安裝的應用中的某一個頁面的技術。java
對於不懂技術的運營人員來講就是一個分享功能,而從技術層面上去簡單理解是實現將某APP用戶帶到另外APP相對應的內容頁面,實現APP之間無縫跳轉!android
相信你們或多或少看到過這樣的頁面:git
底部有一個「App內打開」,點擊後若是安裝過應用直接跳到應用的對應頁面,若是沒安裝則跳到下載應用頁。github
對於已經安裝APP,指向特定的頁面,和上面說的一致。web
相比deeplink,它增長了判斷APP是否被安裝,用戶匹配的2個功能;chrome
經過上面的2個技術方案,不只:①可讓被分享者更快更便捷的回到APP,且回到指定的活動頁面,並且:②能夠引導未安裝APP的用戶下載APP、③分享者和被分享者的關係鏈會經過設備指紋信息記錄下來,在業務場景中給出相應的獎勵。json
使用deeplink先後對比: 瀏覽器
具體見Demo:WebViewStudy服務器
<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 有兩個單詞:
咱們能夠像定位一個網頁同樣,用一種特殊的 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:15088888888@qq.com">郵件</a>
複製代碼
與URL同樣,URL Schemes也能夠經過傳參打開特定的APP界面。
Android App Links是一種特殊的Deep Links,它使Android系統可以直接經過網站地址打開應用程序對應的內容頁面,而不須要用戶選擇使用哪一個應用來處理網站地址。
要添加Android App Links到應用中,須要在應用裏定義經過Http(s)地址打開應用的intent filter,並驗證你確實擁有該應用和該網站。若是系統成功驗證到你擁有該網站,那麼系統會直接把URL對應的intent路由到你的應用。
爲了驗證你對應用和網站的全部權,如下兩個步驟是必須的:
https://domain.name/.well-known/assetlinks.json
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及以上 |
因爲大部分應用,如微博、微信、第三方瀏覽器(包括Chrome),都不會將URL拋給系統處理(對scheme進行屏蔽),所以App Links生效的狀況就頗有限了,好比只能從記事本應用、短信應用這些進行跳轉。通常商用實現的是打開系統瀏覽器,經過系統瀏覽器打開應用的對應頁面。
京東及淘寶的CPS便是使用此方式實現的。 京東CPS商品推廣接入流程 Android 阿里百川cps SDK接入流程
知乎:回答 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