Android 中如何使用 App Links

news2024/11/16 11:59:24

1. 简介

什么是 App Links呢?App Links 是 Android 6.0 (API 级别23) 引入的新功能,它是基于 DeepLinking,允许应用自动处理网站的 URL,而无需提示用户启动相应的应用。

例如:如果你在手机浏览器中输入了某个网站,而你的应用已经支持了那个网站,那么操作系统会直接打开你的手机应用,而并不是浏览器打开网站的网页。

2. DeepLinks

了解 App Links 之前,我们需要了解一下 DeepLinks,因为上面已经聊过了 App Links 是基于 DeepLinks。 DeepLinks 简单来说,就是能够在网页上跳转进入 App 某个功能页面的技术。也比较简单,现在带大家来做一个:

首先我们定义一个简单的 Activity,然后在 AndroidManifest.xml 中配置:

        <activity android:name="com.xing.jnigo.DeepLinksUI" android:exported="true">
            <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="mydeeplink"
                      android:host="open.my.application"/>
            </intent-filter>
        </activity>

在这里, ”mydeeplink“ 是我定义的方案名称,”open.my.application“ 是我自定义的主机名称。当其它 app 或者 web 页面跳转时,需要这样使用 url scheme:

mydeeplink://open.my.application

DeepLinksUI中,我们还可以在 onCreate() 或者 onNewIntent() 方法中获取从其它应用传输过来的数据:

public class DeepLinksUI extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.deep_links_ui_layout);

        Uri data = this.getIntent().getData();
        if (data != null) {
            Log.i("MyApp", "data: " + data);
        }
        
    }
}

3. 测试 DeepLinks 是否有效

首先安装已经写好的的 App 到手机中,此时我们可以写一个网页,内容如下:

<html>
  	<title>测试DeepLinks</title>
  	
  	 <body>
  			<a href='mydeeplink://open.my.application'>点击我进入app</a>     
	  </body>
  
</html>

然后部署在服务器上,让App去访问,尝试点击上面的超链接,查看是否能打开我们的目标App。

当然,这么做比较麻烦,那么有没有稍微不那么麻烦的方法么?当然有了,我们可以直接使用 adb 工具测试即可。

在控制台,输入以下 adb 命令:

adb shell am start -W -a android.intent.action.VIEW -d “mydeeplink://open.my.application?name=Tom&age=20”

然后我们可以看到启动日志:

可以看到页面已经启动成功了,那么就说明我们自定义的 DeepLinks 成功匹配到目标 Activity.

4. App Links

如果你对 DeepLinks 有了解,那么 App Links 就会非常容易,首先我们修改一下 AndroidManifest.xml 的配置,使得它能适配 App Links:

<activity android:name="com.xing.jnigo.DeepLinksUI" android:exported="true">
     <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="mydeeplink"
                      android:host="open.my.application"/>
     </intent-filter>

     <intent-filter android:autoVerify="true">
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data android:scheme="https"
                    android:host="www.myapplication.com"/>
            </intent-filter>

      </activity>

这里我重新定义了一个 intent-filter, 修改了其 scheme 和 host;当然这里也需要添加一个 autoVerify=“true” 属性,它表示的意思是如果应用安装时设备链接到网络,系统会自动去尝试验证相应的网站 URL。

5. 为网站创建 Digital Asset Links 文件

此时,我们需要在我们网站(例如 www.myapplication.com/.well-konow/)中添加一个 json 格式的 assetlinks.json 文件。

文件格式如下:

[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.xing.jnigo",
    "sha256_cert_fingerprints":
    ["FA:2A:03:CB:38:9C:F3:BE:28:E3:CA:7F:DA:2E:FA:4F:4A:96:3B:DF"]
  }
}]

你现在需要改的地方有两个

  1. package_name 需要你修改成你自己的包名;
  2. sha256_cert_fingerprints 需要获取你的apk 的sha-256签名
tips 确认你的网站启用了https,默认情况下,Digital Asset Links 仅支持 https 的网站。

正常情况下了,你在手机浏览器访问 :

https://www.myapplication.com

即可打开你的app。

6. 使用 App Links Assistant 验证你的 App Links

当然,如果手头暂时没有可用的网站,但是又想验证一下你的 App Links 是否配置正常,那么就可以使用 Android Studio 自带的 App Links Assistant 来验证了。

  1. 在Android Studio中打开 “App Links Assistant”:点击 “Tools” > “App Links Assistant”。
  1. 在 “App Links Assistant” 窗口中选择 “Open URL Mapping Editor”,然后点击 “Add” 在当前 Activity 上添加 URL。
  1. 填入你的 URL 模式,例如 https://www.myapplication.com,点击 “OK”。

  2. 在 “App Links Assistant” 窗口中,选择 “Test App Links”。

  1. 在“Test URLs”区域中,输入你想测试的网址,如 https://www.myapplication.com`, 然后点击 “Run Test”

可以看到,这个url成功适配,说明成功了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1133198.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小红书女性用户洞察|2023「她研究」深度数据报告

作为新时代女性群体的聚集地、发声场&#xff0c;小红书不断涌现的「她」话题&#xff0c;承载着不同的女性特质&#xff0c;对理想自我、理想生活的期待&#xff0c;以及消费行为与决策偏好。 当代女性为回答「我是谁」、「我要什么」、「我想成为什么样的自己」&#xff0c;倾…

YOLOv7改进:全网原创首发 | 新颖的多尺度卷积注意力(MSCA),即插即用,助力小目标检测 | NeurIPS2022

💡💡💡本文全网首发独家改进:多尺度卷积注意力(MSCA),有效地提取上下文信息,新颖度高,创新十足。 1)作为注意力MSCA使用; 推荐指数:五星 MSCA | 亲测在多个数据集能够实现涨点,多尺度特性在小目标检测表现也十分出色。 收录: YOLOv7高阶自研专栏介绍:…

【网安大模型专题10.19】论文4:大模型+自动生成代码评估:改进自动化测试方法、创建测试输入生成器、探索新的评估数据集扩充方法,提高编程基准的精度

Is Your Code Generated by ChatGPT Really Correct? 写在最前面主要贡献这篇论文的创新点&#xff0c;为之后的论文提供了一些的启发未来研究的方向&#xff1a;改进自动化测试方法、创建测试输入生成器、探索新的评估数据集扩充方法&#xff0c;以及提高编程基准的精度。实验…

【单链表,循环链表和双向链表的时间效率比较,顺序表和链表的比较,有序表的合并------用顺序表实现,用链表实现】

文章目录 一、单链表&#xff0c;循环链表和双向链表的时间效率比较二、顺序表和链表的比较三、线性表的应用1.线性表的合并1.1有序表的合并------用顺序表实现1.2有序表的合并--------用链表实现 一、单链表&#xff0c;循环链表和双向链表的时间效率比较 查找表头结点&#…

C语言每日一题(19)回文素数

牛客网 BC157 回文素数 题目描述 描述 现在给出一个素数&#xff0c;这个素数满足两点&#xff1a; 1、 只由1-9组成&#xff0c;并且每个数只出现一次&#xff0c;如13,23,1289。 2、 位数从高到低为递减或递增&#xff0c;如2459&#xff0c;87631。 请你判断一下&am…

React中的Virtual DOM(看这一篇就够了)

文章目录 前言了解Virtual DOMreact创建虚拟dom的方式React Element虚拟dom的流程虚拟dom和真实dom的对比后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;react合集 &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌…

双非本两年经验,靠这套Java面试题拿下拿下阿里、百度、美团、滴滴、快手、拼多多等大厂offer

背景 博主是双非大学毕业&#xff0c;有两年的互联网经验 社招面试也是一样的流程&#xff1a;项目 八股 算法 项目&#xff1a; 公司项目&#xff0c;涉及的技术包括但不限&#xff1a; 管理域&#xff1a;DDD、CQRS、事件总线、命令总线 运行域&#xff1a;微内核、规则…

卡尔曼滤波(Kalman Filter)原理及Python实现

Kalman-Filter-Example 项目地址 https://github.com/zhengjie9510/kalman-filter-example 理论公式 详细理论可参考DR_CAN关于卡尔曼滤波器的视频讲解。https://www.bilibili.com/video/BV1dV411B7ME 卡尔曼滤波公式分为预测和更新两部分。 预测公式为&#xff1a; x_hat…

IDENTITY_INSERT 设置为 OFF 时,不能为表 ‘t_user‘ 中的标识列插入显式值

出现这个问题的原因 出现这个问题一般都是SQL server数据库&#xff0c;在创建表主键的时候双击修改标识规范默认自增&#xff0c;如果再插入显示的值就会出现这样的问题。这样的问题是非常常见的&#xff0c;通常会出现在大量数据插入表中&#xff0c;列如 解决的办法 在…

最新发布!阿里云卓越架构框架重磅升级

云布道师 10 月 19 日阿里云峰会山东上&#xff0c;阿里云重磅升级《阿里云卓越架构白皮书》&#xff0c;助力企业在阿里云上构建更加安全、高效、稳定的云架构。《阿里云卓越架构白皮书》在今年的阿里云峰会粤港澳大湾区首度亮相&#xff0c;这是阿里云基于多年服务各行各业客…

RK3399平台开发中安卓系统去除USB权限弹窗

RK3399平台开发中安卓系统去除USB权限弹窗 问题方法 问题 当我们在访问一个插入到Android系统的USB设备的时候往往是需要权限的&#xff0c;此时系统会弹出询问权限的对话框&#xff0c;而我们此时希望让它默认允许访问USB设备并且不希望用户看到这个对话框。 方法 文件目录&…

Dart HttpClient 网络请示框架的使用详解

Dart的HttpClient库是一个用于发送HTTP请求的库&#xff0c;它提供了一个简单的API来执行HTTP请求和接收响应。下面是一个详细的HttpClient使用指南。 1. 导入HttpClient库 首先&#xff0c;确保你已经将HttpClient库导入到你的Dart项目中。你可以使用pubspec.yaml文件中的de…

Java程序设计进阶

Java异常处理机制 异常 异常的最高父类是 Throwable&#xff0c;在 java.lang 包下。 Throwable 类的方法主要有&#xff1a; 方法说明public String getMessage()返回对象的错误信息public void printStackTrace()输出对象的跟踪信息到标准错误输出流public void printSta…

【ArcGIS模型构建器】05:批量为多个矢量数据添加相同的字段

本文实现借助arcgis模型构建器,实现批量为多个土地利用矢量数据添加相同的字段,例如DLMC,DLTB等。 文章目录 问题分析模型构建问题分析 有多个土地利用数据矢量图层,每个图层中有很多个图斑,现在需要给每个图层添加一个或者多个字段,如DLCM,DLBM等。 属性表如下所示: …

javaEE -10(11000字详解5层重要协议)

一&#xff1a;应用层重点协议 1.1&#xff1a; DNS DNS&#xff0c;即Domain Name System&#xff0c;域名系统。DNS是一整套从域名映射到IP的系统。 TCP/IP中使用IP地址来确定网络上的一台主机&#xff0c;但是IP地址不方便记忆&#xff0c;且不能表达地址组织信息&#x…

python+requests+unittest执行自动化接口测试!

1、安装requests、xlrd、json、unittest库 <1>pip 命令安装&#xff1a; pip install requests pip install xlrd pip install json pip install unittest <2> pycharm里安装 2、利用Page Object Model 设计理念创建六类Python Package(也可根据项目要求具体实施…

mysql读取文件

环境地址&#xff1a;phpMyAdmin LOAD DATA INFILE 任意文件读取漏洞 | VULNSPY 参考文章&#xff1a; mysql任意文件读取漏洞学习_BerL1n的博客-CSDN博客 从一道ctf题学习mysql任意文件读取漏洞 - 安全客&#xff0c;安全资讯平台 MYSQL 任意文件读取 小组CTF出题感想 - …

linux离线环境中进入docker镜像安装python包

背景 当发现docker镜像因缺少python包执行失败时,需要修改docker镜像,这时候需要用到这个方法 执行失败步骤 (1)、拷贝docker镜像文件 (2)、加载镜像文件 docker load -i jetz_match.tar(3)、执行容器 docker run --name jetz_match -v /opt/jetz_match:/jetzmatch…

第2篇 机器学习基础 —(2)分类和回归

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。机器学习中的分类和回归都是监督学习的问题。分类问题的目标是将输入数据分为不同的类别&#xff0c;而回归问题的目标是预测一个连续的数值。分类问题输出的是物体所属的类别&#xff0c;而回归问题输出的是数值。本节课就…

waf绕过

1.市场Waf分类 硬件Waf&#xff1a;绿盟、安恒、启明、知道创宇等 需要选择模式 透明模式 反向代理分为反向代理&#xff08;代理模式&#xff09;与反向代理&#xff08;牵引模式&#xff09; 反向代理又分为两种模式&#xff0c;反向代理…