Android中的深度链接技术实战
作者:星星同学 发布时间:2023-09-20 11:27:18
前言
日常中,我们经常需要从浏览器中的网页或者从其它APP中直接打开我们的APP,我们就需要使用到深度链接技术。实现方式分别是 Dee pLinks 和 APP Links。
Deep Links
deep links是谷歌支持的一种打开app指定页面的方式,常用于从H5页面跳转至app目标页面。其对应指定页面的匹配规则是按照URI来匹配的。常见URI格式如下图:
示例
H5测试页面
<html>
<a href="http://demo.deaven.com:2003/test/data?params1=value1¶ms2=value2" rel="external nofollow" >点击唤起app</a>
<a href="https://demo.deaven.com:2003/test/data?params1=value1¶ms2=value2" rel="external nofollow" >点击唤起app</a>
<a href="abc://demo.deaven.com:2003/test/data?params1=value1¶ms2=value2" rel="external nofollow" >点击唤起app</a>
</html>
如上
scheme = http、https、abc。 DeepLink中 scheme 可自定义
host = demo.deaven.com
port = 2003
path = test/data
传递参数(key-value): params1 : value1 params2 : value2
Android配置
<activity android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<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:scheme="http" />
<data android:scheme="https" />
<data android:scheme="abc" />
<data android:host="demo.deaven.com"/>
<data android:port="2003"/>
<!--表示匹配 Path 以/test 开头的uri,此项可以不写-->
<!-- 注意 "/" 在pathPrefix中是必须的-->
<data android:pathPrefix="/test"/>
</intent-filter>
</activity>
3.Activity中解析Intents
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Uri uri = getIntent().getData();
String scheme = uri.getScheme(); // http、https、abc
String host = uri.getHost(); // demo.deaven.com
String path = uri.getPath(); // test/data
String query = uri.getQuery(); // params1=value1¶ms2=value2
String value1 = uri.getQueryParameter("params1");
String value2 = uri.getQueryParameter("params2");
}
为了更好的管理以及用户体验,app中可以声明一个中间页根据参数统一分发跳转请求。
注意事项
scheme为 htttp/https 开头的uri,部分浏览器和手机ROM 并不能链接至APP,而是在浏览器中打开了对应的链接。所以做Deep Links时建议全部采用自定义Scheme的形式。
在询问是否用APP打开对应的链接时,如果选择了“取消”并且“记住选择”被勾上,那么下次你再次想链接至APP时就不会有任何反应!!!
不同的host不要写在同一个Intent Filter中,最好为每种匹配规则新建一个Intent Filter
App Links
Android在Android 6.0 (API level 23) 及以后加入了App Links , 当用户点击对应的URI 时,会直接启动对应的APP,不会再出现类似Deep Links 中是否打开app 的对话框出现。
Intent Filter
<activity android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTask"
android:autoVerify="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<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:scheme="http" />
<data android:scheme="https" />
<data android:host="demo.deaven.com"/>
<data android:port="2003"/>
<!--表示匹配 Path 以/test 开头的uri,此项可以不写-->
<!-- 注意 "/" 在pathPrefix中是必须的-->
<data android:pathPrefix="/test"/>
</intent-filter>
</activity>
Intent Filter和Deep Links 类似 但是 scheme只能使用 htttp 或 https 不支持自定义scheme。
android:autoVerify="true" 会让APP自动在所列的host中去验证,如果验证成功,APP将成为匹配URI默认打开方式。
配置 assetlinks.json
你可以访问https://developers.google.com/digital-asset-links/tools/generator生成assetlinks.json,如下图:
如不能翻墙,可复制下方代码修改为自己参数,生成 assetlinks.json文件 ,json文件名只能是 assetlinks 不能自定义
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target" : { "namespace": "android_app", "package_name": "com.deaven.link",
"sha256_cert_fingerprints": [""14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5""] }
}]
2.部署assetlinks.json
我们的host为demo.deaven.com,那么我们就需将assetlinks.json放到https://demo.deaven.com/.well-known/assetlinks.json并可以正常访问。你也可以在 https://developers.google.com/digital-asset-links/tools/generator检查服务器上assetlinks.json是否可访问如下图:
3.Activity中解析Intents 类似 Deep Links
参考文档
https://www.jianshu.com/p/1632be1c2451
来源:https://juejin.cn/post/7077831040705757214


猜你喜欢
- 在Android应用中,图片裁剪也是一个经常用到的功能。Android系统中可以用隐式意图调用系统应用进行裁剪,但是这样做在不同的手机可能表
- 究其根本,原因在于,能在unity面板上识别的变量,public不是唯一的条件,另外一个条件是可序列化比如你声明了如下一个类using Sy
- 因项目中的需要实现ScrollView顶部的悬停,也不是太难便自己实现功能,话不多说,先上效果图红色text一到顶上便会悬浮在上面,不会跟随
- 已经自学OpencvSharp一段时间了(目前工作用的是C#,就学了Opencvsharp了,vs2015,opencvsharp3),收获
- 本文在实现雪花效果的基础上,根据漫天飞舞雪花,实现下雨天场景的效果,使用eclipse android 版本,具体内容如下雪花效果图:具体代
- 异步操作C++11为异步操作提供了4个接口std::future : 异步指向某个任务,然后通过future特性去获取任务函数的返回结果。s
- 在前台请求数据的时候,sql语句一直都是打印到控制台的,有一个想法就是想让它打印到日志里,该如何做呢?见下面的mybatis配置文件:<
- eclipse的代码提交到git,下载后用新的ide工具IJ 进行开发一、导入项目eclipse里有workSpace 但是在IDEA中没有
- 本文实例为大家分享了Android实现下载文件的具体代码,供大家参考,具体内容如下1.实现效果直接上图: 2.代码实现在AndroidMan
- public partial class MonthCalendarForm : Form{ public MonthCalen
- 这篇文章主要介绍发送验证码和校验验证码的功能,用到一个第三方平台Bmob,那Bmob是什么呢?Bmob可以开发一个云存储的移动应
- 又遇到了回调函数,这次打算写下来分享一下。所谓回调函数,或者在面向对象语言里叫回调方法,简单点讲,就是回头在某个时间(事件发生)被调用的函数
- 一. SpringBoot集成liquibase项目集成liquibase作用对数据库表字段进行版本控制项目初始化部署时初始化数据库表和数据
- 我们有时用C#需要实现锁住文件的功能,该如何锁住文件呢?下面小编给大家介绍一下。首先大家需要到码云里面找到如下图所示的文件锁的项目,如下图所
- 今天群里有人问了关于仿京东App分类页面的实现,而我之前正好查过这方面的资料,手上正好有一个demo,正好分享给大家看看,个人觉得效果棒棒哒
- 本文实例讲述了C#图像伪彩色处理方法。分享给大家供大家参考。具体如下://灰度图转伪彩色图像函数public Bitmap PGrayToC
- 如下所示:Synchronized是内置的java关键字,Lock是一个java类。Synchronized无法判断是否获取到了锁,Lock
- 首先为大家介绍Andorid5.0原生下拉刷新简单实现。先上效果图;相对于上一个19.1.0版本中的横条效果好看了很多。使用起来也很简单。
- ArrayList集合的创建非泛型创建ArrayList集合对象,可以添加任意Object子类元素至集合//非泛型创建的ArrayList集
- Android AsyncTask详解及使用方法 简介: AsyncTask就是一个封装过的后