前言
DeepLink,深度链接技术,类似于 web 开发领域不仅仅是通过链接打开一个界面,而是打开界面的某个具体内容。常用于 web 端唤起 app 时,传递参数直接打开确定的界面,如通过京东的分享出去的商品详情页,实现在京东 app 中打开。
在移动开发领域,是指 app 在处理特定的 url 时能够直接跳转到对应的内容页面或者触发特定的逻辑。这样可以在 web 端切换 app 时通过参数传递保留了当前的上下文状态,又可以借用 web 端的优势,更利于传播,可利用搜索引擎的索引,增加 app 的日活和下载量等。
移动端实现 deeplink 于是就有了 Universal Link、App Link、URL schemes 等
Android 配置 scheme
如配置 WebActivity 完整的打开链接为openapp://test:8000/detail
,需要在 AndroidManifest.xml 配置
<activity android:name=".WebActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<!-- 需要被 js 调起必须设置 -->
<category android:name="android.intent.category.BROWSABLE" />
<!-- 协议部分 -->
<data
android:host="test"
android:path="/detail"
android:port="8000"
android:scheme="openapp" />
</intent-filter>
</activity>
协议部分:(类比于 http://locahost:8080/home)
-
android:scheme
:协议名,类似于http
-
android:host
:主机名,类似于locahost
-
android:port
:端口名。类似于8080
中的端口 -
android:path
: 路径名,类似于home
- 还可以配置 imei 等等。结构为
<scheme>://<host>:<port>/[<path>|<pathPrefix>|<pathPattern>]
Android 端调起
通过指定 Intent
的 Action 为Intent.ACTION_VIEW
,传入解析的 Uri
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("openapp://test:8000/detail?title= 电视影音 &url=https://u.jd.com/1dfFwO"));
startActivity(intent);
传递参数的方法跟 web 端一样,通过问号 ?
分隔,参数名和值之间使用等号 =
连接,多个参数之间使用 &
拼接。
Android 端参数接收
Uri uri = getIntent().getData();
if (uri != null) {
// 完整的 url 信息
String totalUrl = uri.toString();
Log.i(TAG, "完整 url:" + totalUrl);
// scheme 协议
String scheme = uri.getScheme();
Log.i(TAG, "scheme:" + scheme);
// host 主机
String host = uri.getHost();
Log.i(TAG, "host:" + host);
//port 端口
int port = uri.getPort();
Log.i(TAG, "port:" + port);
// 访问路径
String path = uri.getPath();
Log.i(TAG, "path:" + path);
// 获取所有参数
String query = uri.getQuery();
Log.i(TAG, "query:" + query);
// 获取指定参数值
String title = uri.getQueryParameter("title");
Log.i(TAG, "title:" + title);
String url = uri.getQueryParameter("url");
Log.i(TAG, "url:" + url);
}
唤起后可以看见打印的日志信息:
拿到参数之后就可以进行后续的使用操作啦
web 端唤起
直接当做一个普通的连接形式,直接跳转
window.location = "openapp://test:8000/detail?title= 电视影音 &url=https://u.jd.com/1dfFwO";
或者设置超链接等待用户点击
<a href="openapp://test:8000/detail?title= 电视影音 &url=https://u.jd.com/1dfFwO"> 在 app 中打开 </a>
原文链接
???? 更多好文欢迎关注我的公众号~