android怎么设置点击app后,从0开始认识android(十五):点击链接启动APP及Android App Links详解...

首先,来看看android中的两类链接:

1、深链接Deep linking

深链接即我们通常说的scheme跳转,需要我们在清单文件中对activity添加intent-fillter,并定义scheme(包括但不限于HTTP协议)。如果用户手机内安装了多款能响应链接启动的应用,那么系统会弹出一个选择器,让用户自主选择用哪个应用打开(可能不是你的应用)。

2、安卓软件链接组 Android App Links

Android App Links是6.0以后才支持的链接方式,APP通过定义一组你自有的HTTP URL将该其设置为系统的默认打开对应域名的地址的应用(注意区分:不是6.0以下的默认打开某类数据)。当用户点击了包含你的域名的链接时,系统默认用你的APP打开该链接,如果用户手机未安装你的APP,那么会直接用浏览器打开。手机里的其他应用则不能打开。

3、Deep linking和App Links区别一览图

区别项

Deep lingking

App Links

Intent URL scheme

http,https,自定义协议

http,https

Intent action

任何action

需要android.intent.action.VIEW

Intent category

任何category

需要android.intent.category.BROWSABLE和android.intent.category.DEFAULT

链接验证

不验证

通过DAL文件和https验证

用户体验

可能会弹出一个APP选择弹框让用户选择用哪个应用打开

不弹APP选择弹框,直接用你的APP打开(已安装,否则直接打开网页)

兼容性

所有版本系统

6.0及以上

因此,Android App Links相对于Deep linking有以下几点优势:

1、安全:因为只有你自己的APP能打开,所以很可靠;

2、无缝的用户体验:因为只有自己的APP可以打开,所以不会出现让用户选择哪个应用的打开的弹框,如果用户没有安装你的APP,则直接用浏览器打开。

3、支持免安装的谷歌应用:当然,这条优势对国内开发者来说没什么影响,因为谷歌的免安装应用需要上传到google player。

4、支持从浏览器、谷歌搜索APP、手机快捷搜索和谷歌助手等多个地方通过链接启动APP。

Deep linking支持:

当用户点击一个链接时,系统默认按以下顺序打开:

1、如果你设置了默认打开应用,则优先使用该应用打开;

2、如果只有一个应用能打开,则直接用该应用打开;

3、如果有多个应用能打开,才会弹出应用选择弹框。

以下就是一个支持Deep linking启动的activity的意图配置模板,注意看注释:

通过ADB命令检测是否配置正确

如果通过以下命令能够打开目标activity,则说明我们的配置无误:

adb shell am start

-W -a android.intent.action.VIEW

-d < 你配置的Uri> < 你的APP包名>

根据我上面的配置代码,那么我的adb命令对应如下图:

  44ee48e2b214ae7c3f2ab50779fa0877.png

从上图中可以看出,通过以 http://和jackxiong/开头的协议启动目标activity的命令均Complete了,说明配置是正确的。

Android App Links支持

Android App Links也免不了需要在清单文件里为activity声明意图过滤器,只不过它声明的是一个可用的url,如果你的android studio是2.3以上的版本,而且你也不想自己写intent-filter部分的代码,我们可以通过android studio的APP链接助手来实现半自动的为目标activity添加intent-filter:

1、点击Tools选择App Links Assistant打开助手面板

  4c5cb601d48ab6fbe1ed5410f293a95e.png

2、点击助手面板中的Open URL Mapping Editor按钮打开activity和url映射配置的操作面板

  82b88857cb74e231d547f1f146a25912.png

从上图中我们可以看到,当我们打开这个操作面板时:

区域1:会默认显示我们APP中所有声明了url意图过滤器的activity及其对应的url详情;

区域4:当我们在区域1中选中了某天映射时,该activity及其intent-filter在清单文件中的代码可以在区域4中得到预览;

区域2:我们可以对已选中的某条映射关系进行删除、修改,也可以为某个activity新增intent-fillter;

区域3:我们可以在这里输入一个url,操作面板会告知我们这个url是用在哪个activity上;

3、为activity新增intenr-filter

点击区域2中的 + 打开新增面板

  c573e2c1b466f6cc40c2a89388ccd9c9.png

在这个面板中选中目标activity,配置host、path(可选)后点击Ok即可。

例如我有一个未配置意图过滤器的ThirdActivity,在清单文件中是这样的:

  db7a44a318a2eba01c7f7f2c6b6673eb.png

我们在新增面板中为该activity新增配置后,再看看清单文件是怎样的。

  e262e4401332709d89b52636593195e4.png

下图就是配置后的ThirdActivity意图

  dfecf6cec1c00468b94c8ad8f41a69cf.png

我们可以看到,和我们手写的intent-filter一毛一样!

4、为目标activity自动插入解析对应intent的代码

例如我的ThirdActivity空空如下:

  4b3735049a1c0a0001d85559d38c193b.png

现在,我们点击app链接助手面板中的Select Activity按钮,选中ThirdActivity点击Insert Code后怎么样:

  bc3bce3d44b7b647d5d44528bbd9c163.png

以下就是插入代码后的ThirdActivity

  9b322d58760590653363b24a7823f877.png

5、生成链接数字证书文件Digital Asset Links(DAL)

点击打开链接助手的Open Digital Asset Links File Generator按钮,打开关联网站操作面板:

  976fa453a29a11b06a9e752628152c0c.png

  67143432aa2fac716fe3ebdd2ba8335a.png

我们可以看到:

**区域1:**域名和包名已经自动填充好了

**区域2:**这里可以设置是否让网页和我们的APP共享用户的登陆信息,如果选择支持的话,需要键入网页的登陆地址,并且在我们的DAL证书中的relation项的值就变为:delegate_permission/common.get_login_creds。

我这里只是测试,就不支持共享登陆信息了。

**区域3:**这里可以选择我们的DAL证书是在debug环境用还是release环境用,如果选择生成的是release环境的证书,就还需要选择我们release打包用的keystore文件。

**区域4:**当我们点击Generate Digital Asset Links 按钮后,这里就可以预览我们生成的DAL文件详情了。我们可以看到,由于我在区域2中未勾选允许网页和App共享登陆信息,所以生成的DAL文件的relation的值为:delegate_permission/common.handle_all_urls。

然后点击Save file按钮,将我们的DAL文件下载下来,让后台人员把它上传到域名下的 .well-known目录下即可(注意:该目录以一个点开头,且Content-Type必须是application/json添加到http响应头)。例如我这里的域名是http://www.jack_bear_csdn.com,那DAL文件在服务器中的路径就是:http://www.jack_bear_csdn.com/.well-known/assetlinks.json。

**区域5:**完成了以上步骤,我们点击Link and Verify按钮,会产生以下结果:

5.1:项目res目录下的strings文件会生成一个名字为asset_statements的字符串:

  fc994ee5a10f7d25aff23a4f69d4fdd3.png

5.2:产生的字符串会被添加到清单文件中的application节点下:

  7d4d1d1c89db0d5567f143af83b4c6ca.png

5.3:对应的activity的intent-filter里会加入一个是否自动认证的属性:

  16cae008bdd6eb33a9fd1d1bd86215fc.png

6、测试你的链接

完成了以上配置工作,我们回到链接助手面板,点击Test App Links按钮进入测试面板,键入对应的Url后点击Run Test按钮,可以模拟用户点击链接的操作:

  ca55df7930ed48c7b05e287f0259668d.png

到这里,我们可以知道:Android App Links之所以能够确保只有自己的App能打开对应的链接是因为DAL文件的作用。我们可以在6.0以上的手机中看到App都能被哪些链接打开,如下图:

  5dbfa494c842156c7273edb95e4cc0f8.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值