Android中的深度链接技术实战

目录
  • 前言
  • Deep Links
    • 示例
    • 注意事项
  • App Links
    • Intent Filter
    • 配置 assetlinks.json
  • 参考文档

前言

日常中,我们经常需要从浏览器中的网页或者从其它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&params2=value2" rel="external nofollow" >点击唤起app</a>
<a href="https://demo.deaven.com:2003/test/data?params1=value1&params2=value2" rel="external nofollow" >点击唤起app</a>
<a href="abc://demo.deaven.com:2003/test/data?params1=value1&params2=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&params2=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

如不能翻墙,可复制下方代码修改为自己参数,生成 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

到此这篇关于Android中的深度链接技术实战的文章就介绍到这了,更多相关Android 深度链接内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Android实现捕获TextView超链接的方法

    本文实例讲述了Android实现捕获TextView超链接的方法.分享给大家供大家参考,具体如下: 这里分享一篇捕获TextView超链接的文章,希望对大家有所帮助,我终于在歪路上回归正途了.这个捕获TextView超链接应该算是比较常用吧,如果你会了,就不用看了,如果还不会,可以看一眼,非常简单. 捕获TextView超链接这个意思就是在一段文字当中如果有超链接的网址在当中,在TextView中会特别显示,和其它文字颜色不一样,还可以点击执行相应的操作. 效果图如下: 具体代码如下: tv =

  • Android实现隐私政策弹窗与链接功能

    1.效果展示 先展示效果,看看是不是你需要的. 2.具体实现 2.1按钮美化 在drawable文件夹下新建button_shape.xml <?xml version="1.0" encoding="utf-8" ?> <!--相当于做了一张圆角的图片,然后给button作为背景图片--> <shape xmlns:android="http://schemas.android.com/apk/res/android&quo

  • Android中捕获TTextView文本中的链接点击事件方法

    Android中的TTextView很强大,我们可以不仅可以设置纯文本为其内容,还可以设置包含网址和电子邮件地址的内容,并且使得这些点击可以点击.但是我们可以捕获并控制这些链接的点击事件么,当然是可以的. 本文将一个超级简单的例子介绍一下如何实现在Android TextView 捕获链接的点击事件. 关键实现 实现原理就是将所有的URL设置成ClickSpan,然后在它的onClick事件中加入你想要的控制逻辑就可以了. 复制代码 代码如下: private void setLinkClick

  • Android使用TextView实现无下划线超链接的方法

    本文实例讲述了Android使用TextView实现无下划线超链接的方法.分享给大家供大家参考,具体如下: Android系统默认把网址.电话.地图(geo地址).邮箱等转换为超链接. 具体请查看 android:TextView简单设置文本样式和超链接的方法 和HTML中的一样,默认超链接都带下划线的,下面的方案可以在TextView中去掉超链接的下划线: 1.重写ClickableSpan类来去掉下划线样式(系统默认使用ClickableSpan来封装超链接) //无下划线超链接,使用tex

  • Android SpannableString设置超链接、颜色、字体等属性

    Android SpannableString设置超链接.颜色.字体等属性 在Android中,TextView是我们最常用的用来显示文本的控件. 一般情况下,TextView中的文本都是一个样式.那么如何对于TextView中各个部分的文本来设置字体,大小,颜色,样式,以及超级链接等属性呢?下面我们通过SpannableString的具体实例操作来演示一下. package com.snowdream; import java.io.IOException; import org.xmlpul

  • Android实现TextView中文字链接的4种方式介绍及代码

    Android 的实现TextView中文字链接的方式有很多种. 总结起来大概有4种: 1.当文字中出现URL.E-mail.电话号码等的时候,可以将TextView的android:autoLink属性设置为相应的的值,如 果是所有的类型都出来就是android:autoLink="all".当然也可以在java代码里 做,textView01.setAutoLinkMask(Linkify.ALL); 2.将要处理的文字写到一个资源文件,如string.xml,然后的java代码里

  • Android Native库的加载及动态链接的过程

    Native库的装载过程 我们从一个简单的NDK Demo开始分析. public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Example of a call t

  • Android中的深度链接技术实战

    目录 前言 Deep Links 示例 注意事项 App Links Intent Filter 配置 assetlinks.json 参考文档 前言 日常中,我们经常需要从浏览器中的网页或者从其它APP中直接打开我们的APP,我们就需要使用到深度链接技术.实现方式分别是 Dee pLinks 和 APP Links. Deep Links deep links是谷歌支持的一种打开app指定页面的方式,常用于从H5页面跳转至app目标页面.其对应指定页面的匹配规则是按照URI来匹配的.常见URI

  • Android中的人脸检测的示例代码(静态和动态)

    (1)背景. Google 于2006年8月收购Neven Vision 公司 (该公司拥有10多项应用于移动设备领域的图像识别的专利),以此获得了图像识别的技术,并加入到android中.Android 中的人脸识别技术,用到的底层库:android/external/neven/,framework 层:frameworks/base/media/java/android/media/FaceDetector.java. Java 层接口的限制:A,只能接受Bitmap 格式的数据:B,只能

  • Android、iOS和Windows Phone中的推送技术详解

    推送并不是什么新技术,这种技术在互联网时代就已经很流行了.只是随着进入移动互联网时代,推送技术显得更加重要.因为在智能手机中,推送从某种程度上,可以取代使用多年的短信,而且与短信相比,还可以向用户展示更多的信息(如图像.表格.声音等). 推送技术的实现通常会使用服务端向客户端推送消息的方式.也就是说客户端通过用户名.Key等ID注册到服务端后,在服务端就可以将消息向所有活动的客户端发送. 实际上,在很多移动操作系统中,官方都为其提供了推送方案,例如,Google的云推送.IOS.Windows

  • Android中微信抢红包插件原理解析及开发思路

    一.前言 自从去年中微信添加抢红包的功能,微信的电商之旅算是正式开始正式火爆起来.但是作为Android开发者来说,我们在抢红包的同时意识到了很多问题,就是手动去抢红包的速度慢了,当然这些有很多原因导致了.或许是网络的原因,而且这个也是最大的原因.但是其他的不可忽略的因素也是要考虑到进去的,比如在手机充电锁屏的时候,我们并不知道有人已经开始发红包了,那么这时候也是让我们丧失了一大批红包的原因.那么关于网络的问题,我们开发者可能用相关技术无法解决(当然在Google和Facebook看来的话,他们

  • Android中如何安全地打印日志详解

    前言 在Android开发过程中,不管是写Demo还是实战项目中,都会打印一些日志用于记录数据,调试来着,Android中的日志工具类是Log,这个类提供了一些方法来打印日志.五个级别,v.d.i.w.e,各有不同的重载. 当谈到如何打印日志?很多人会想这不是很简单,直接使用android.util.Log这个类不就行了?然而,日志属于非常敏感的信息:逆向工程师在逆向你的程序的时候,本来需要捕捉你程序的各种输出,然后进行推测,顺藤摸瓜然后得到需要的信息:一旦你的日志泄漏,无异于门户洞开,破解你的

  • Android中WindowManager与WMS的解析

    最近在改bug的时候发现在windowManager.addView的时候会发生莫名其妙的崩溃,那个崩溃真的是让你心态爆炸,潜心研究了两天window相关的东西,虽然不是很深奥的东西,本人也只是弄清楚了window的添加逻辑,在此分享给大家: 一.悬浮窗的概念 在android中,无论我们的app界面,还是系统桌面,再或者是手机下方的几个虚拟按键和最上方的状态栏,又或者是一个吐司...我们所看到的所有界面,都是由一个个悬浮窗口组成的. 但是这些窗口有不同的级别: 系统的是老大,是最高级别,你没见

  • C++ OpenCV技术实战之身份证离线识别

    目录 总体思路 图像的预处理 主要代码 实现效果 OpenCV身份证离线识别技术的主要技术就是通过OpenCV找到身份证号码区域,然后通过OCR进行数字识别该区域的截图即可得到身份证号码.本地ORC使用tess-two来完成,Tesseract是C++实现的OCR引擎,在Android中使用不是很方便,需要封装JavaAPI才能在Android平台中进行调用,然而tess-two已经帮我们做好了这些事情,通过集成tess-two就可以很方便的完成文字识别. 总体思路 图像的预处理 1.无损压缩

  • Android开发Flutter 桌面应用窗口化实战示例

    目录 前言 一.应用窗口的常规配置 应用窗口化 自定义窗口导航栏 美化应用窗口 二.windows平台特定交互 注册表操作 执行控制台指令 实现应用单例 三.桌面应用的交互习惯 按钮点击态 获取应用启动参数 四.写在最后 前言 通过此篇文章,你可以编写出一个完整桌面应用的窗口框架. 你将了解到: Flutter在开发windows和Android桌面应用初始阶段,应用窗口的常规配置: windows平台特定交互的实现,如:执行控制台指令,windows注册表,应用单例等: 桌面应用的交互习惯,如

  • Android中Json数据读取与创建的方法

    首先介绍下JSON的定义,JSON是JavaScript Object Notation的缩写. 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换.JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为. JSON的结构: (1) Name/Value Pairs(无序的):类似所熟知的Keyed list. Hash table.Disctiona

随机推荐