原理

与url scheme不同的地方在于协议必须是http或者https(但是经测试http无效),不能随便自定义协议头。

首先通过Android studio的工具帮助我们生成一个验证安装的app的信息的json文件(或者自己写也可以),里面主要包括app签名等可以用于验证身份的信息,放在https服务器上,首次安装app的时候会自动向服务器请求该json文件,验证目前安装的app是否正确未被第三方篡改。验证成功后会把app加入到链接处理政策列表中,当点击该链接时会自动选择使用app打开,不会弹选项框让用户选择是通过浏览器还是app打开该链接。

接入步骤

Android studio为我们提供了工具可以使applink的接入变得简单

总有4个步骤

将链接与activity关联起来


可以在pathvalues那里填需要从链接传过来的参数,url需要和你的https服务器url一致,不能像url scheme一样随便填。 activity就是你跳转过来之后要展示的页面。
其实就是帮我们在manifest.xml里面加了一个intent-filter:

加入meta data

在Androidmanifest.xml里的application里加入

<meta-data
android:name="asset_statements"
android:resource="@string/asset_statements" />

然后在strings.xml里加入

<string name="asset_statements" translatable="false">

        [{

        "include": "https://你的服务器域名/.well-known/assetlinks.json"

        }]

    </string>

生成身份验证JSON


site domain要与上一个步骤里填的url一致,这个服务器是用来存放下面生成的JSON的。
选择一个签名文件,点击generate digital asset links file,生成用以验证身份的json,生成的JSON里最下面那一行就是签名文件的SHA。
官方这个步骤和描述很有误导性,其实不是把JSON文件放到服务器上,而是要以接口的形式返回JSON的内容,返回报文格式必须是application/json
点击下面的link and verify 可以验证是否能正确访问服务器的JSON

真机测试

经测试applink assistant的test app links 不好用,它只能以debug包进行测试,而且每次测试都失败。
打包一个release包(签名文件要与生成JSON用的一样),安装之后需要等待一段时间用以身份验证,Google官方说20s,经测试不止,华为需要几分钟,小米甚至需要十几分钟。验证成功后在手机本地(如备忘录)里点击url即可跳转到app,且不会弹框让用户选择使用浏览器还是app来打开这个链接。
可以这个命令来查看你的url是否加入到了链接处理策略列表里

adb shell dumpsys package domain-preferred-apps


这个status:always就是成功了,ask是没成功,需要询问。

结论

不好用,华为可以正常使用,本地点链接就直接打开app,但是小米6X不稳定,也是没有弹框,但是有时候打开了浏览器有时候打开了app。并且只能点本地链接(如备忘录、短信),在html里使用windo.herf.location = “链接” 来跳转,在浏览器里可以成功,微信里还是会被拦截

官方文档

[1]https://developer.android.com/studio/write/app-link-indexing.html
[2]https://developer.android.com/training/app-links/verify-site-associations#web-assoc

Android applink 踩坑指南的更多相关文章

  1. [置顶] xamarin android toolbar(踩坑完全入门详解)

    网上关于toolbar的教程有很多,很多新手,在使用toolbar的时候踩坑实在太多了,不好好总结一下,实在浪费.如果你想学习toolbar,你肯定会去去搜索androd toolbar,既然你能看到 ...

  2. Spring WebSocket踩坑指南

    Spring WebSocket踩坑指南 本次公司项目中需要在后台与安卓App间建立一个长连接,这里采用了Spring的WebSocket,协议为Stomp. 关于Stomp协议这里就不多介绍了,网上 ...

  3. C# -- HttpWebRequest 和 HttpWebResponse 的使用 C#编写扫雷游戏 使用IIS调试ASP.NET网站程序 WCF入门教程 ASP.Net Core开发(踩坑)指南 ASP.Net Core Razor+AdminLTE 小试牛刀 webservice创建、部署和调用 .net接收post请求并把数据转为字典格式

    C# -- HttpWebRequest 和 HttpWebResponse 的使用 C# -- HttpWebRequest 和 HttpWebResponse 的使用 结合使用HttpWebReq ...

  4. Unity Android交互过坑指南

    Unity Android交互过坑指南 介于网上看过很多unity和Android交互的教程,都或多或少的漏掉了一些部分,导致编译过程中出现各种问题,特此整理一份教程,仅供参考 介绍 本次实现的是在游 ...

  5. 树莓派4B踩坑指南 - (15)搭建在线python IDE

    今天想在树莓派上自己搭一个在线的python IDE,于是找到了一篇教程--Fred913大神的从头开始制作OJ-在线IDE的搭建 自己尝试动手做了一下, 还是发现不少细节需要注意, 记录在此 如果不 ...

  6. 正则表达式 test 踩坑指南

    正则表达式 test 踩坑指南 test 只能使用一次,第二次返回的是错误结果! reg = /edg|edge/g; /edg|edge/g reg.test(`edg`) true reg.tes ...

  7. Taro 开发踩坑指南 (小程序,H5, RN)

    Taro 开发踩坑指南 (小程序,H5, RN) css taro 如何展示多行文本省略号 https://www.cnblogs.com/xgqfrms/p/12569057.html UI 设计稿 ...

  8. 小程序 & taro 踩坑指南

    小程序 & taro 踩坑指南 微信开发者工具, 不支持 react bug https://github.com/NervJS/taro/issues/5042 solution just ...

  9. Nuxt.js的踩坑指南(常见问题汇总)

    本文会不定期更新在nuxt.js中遇到的问题进行汇总.转发请注明出处,尊重作者,谢谢! 强烈推荐作者文档版踩坑指南,点击跳转踩坑指南 在Nuxt的官方文档中,中文文档和英文文档都存在着不小的差异. 1 ...

随机推荐

  1. 创建线程的方式三:实现Callable接口。 --- JDK 5.0新增

    如何理解实现Callable接口的方式创建多线程比实现Runnable接口创建多线程方式强大? call()可以有返回值的.call()可以抛出异常,被外面的操作捕获,获取异常的信息Callable是 ...

  2. 【算法训练营day8】LeetCode344. 反转字符串 LeetCode541. 反转字符串II 剑指Offer05. 替换空格 LeetCode151. 翻转字符串里的单词 剑指Offer58-II. 左旋转字符串

    [算法训练营day8]LeetCode344. 反转字符串 LeetCode541. 反转字符串II 剑指Offer05. 替换空格 LeetCode151. 翻转字符串里的单词 剑指Offer58- ...

  3. Linux基础_5_文件管理

    创建 touch 文件名 #创建文件 stat 文件名 #查看文件属性 touch -am 文件名 #更改文件的访问时间及修改时间 删除 rm -rf s/* #递归强制删除s目录下的所有内容(包括文 ...

  4. 齐博x1内容页中下一页上一页的标签

    在模板中分别插入如下代码即可 前一页 {:fun('content@prev',$info,20)} 后一页 {:fun('content@next',$info,20)} 复制 其中20代表取标题多 ...

  5. Redis 01: 非关系型数据库 + 配置Redis

    数据库应用的发展历程 单机数据库时代:一个应用,一个数据库实例 缓存时代:对某些表中的数据访问频繁,则对这些数据设置缓存(此时数据库中总的数据量不是很大) 水平切分时代:将数据库中的表存放到不同数据库 ...

  6. Linq--取group分组后的每组第一条数据

    Linq对指定字段分组并取每组第一个值 先排序后分组 目的:取每个RequestID组内的最大HistoryID的数据 //对RequestID进行分组降序排序,去每组的第一条数据 IList< ...

  7. Unity坐标系入门

    一.坐标系的概念 Unity 世界坐标系采用左手坐标系,大拇指指向X轴(红色),食指指向Y轴(黄色),中指向手心方向歪曲90度表示Z轴(蓝色),同时Z轴也是物体前进方向,下图表示Unity的四种坐标系 ...

  8. MyBatis笔记03------XXXMapper.xml文件解析

    SQL映射文件的配置解析 当我们写好mapper(dao)层接口时,然后在对应的XXXMapper.xml文件中写业务逻辑对应的SQL映射语句,通过这个文件中可以实现CRU操作,那么下面说明如何编写这 ...

  9. 将自己的组件打包发布到npm

    在项目中有些组件在各个项目中都会调用,那么将组件发布到npm ,用到的项目去下载,这样会省去一些不必要的麻烦. 将组件发布到npm 中的步骤 做个记录 1.项目的创建,我这里使用 vue init w ...

  10. Project facet Java version 13 is not supported.

    问题 导入的文件运行时出现报错:Project facet Java version 13 is not supported. 大概就是版本不支持,看了下自己的Java版本是1.8的,修改下版本即可运 ...