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