App Links这么优雅,为什么国内没人用

1,761 阅读4分钟

前言

作为一个前端开发,我们应该都做过这样的需求

我们这个活动页面希望用户点击某个按钮的时候导流到我们的App,如果没有安装App跳转到下载落地页 --产品经理

一般来说面对这种需求大致的实现分为两种情况

  • 手机浏览器中使用URL Scheme
  • 微信浏览器可以考虑 微信开放标签

但是感觉这些都太寻常,难道就没有其他的解决方案,本着有事没事敲打一下GPT的原则,看下它能不能给出其他的解决方案,问了一下,哦吼!果然还真炸出一个新玩意 ---App Links

什么是App Links

一种由 Android 系统提供的深度链接技术,允许开发者将网页链接(HTTP/HTTPS URL)直接关联到移动应用中的特定内容。通过 App Links,用户点击链接时可以无缝跳转到应用内的对应页面,而不是打开浏览器。这种技术提升了用户体验,并加强了应用与网页之间的互联性 -- DeepSeek

哦!懂了就是一个深链接,使用的是(Http、Https)协议,可以通过这个链接跳转到应用的对应页面。

如何配置App Links

1、在应用中配置 Intent Filter

在 AndroidManifest.xml 文件中声明应用可以处理的 URL 模式。例如:

<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.example.com" android:pathPrefix="/example"/>
</intent-filter>

2、在网站中配置 Digital Asset Links

在网站的 .well-known 目录下放置 assetlinks.json 文件,声明应用与网站的关联关系。例如:

[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.example.app",
    "sha256_cert_fingerprints": ["SHA256_FINGERPRINT"]
  }
}]

3、测试与验证

使用 Android Studio 或命令行工具验证 App Links 是否配置成功。 比如第一步中我们验证的协议是https,域名是www.example.com, 路径是/example,所以在浏览器中访问 https://www.example.com/example,如果手机安装了App就会唤起App,如果没有安装App就会跳转到对应的页面。

这3步操作下来,有一种IOS的Universal Link的既视感。

言归正传,为什么这么配置就能实现H5唤醒App呢?

App Links原理

App Links认证涉及到安卓系统的两个组件:Package Manager和Intent Filter Verifier。

PackageManager是一个无处不在的标准组建 - 它负责验证所安装的apk是否有效,授予app权限,另外还可以通过它知道系统上安装了些什么app。

Intent Filter Verifier组件负责获取链接指向的JSON认证,解析它,验证它,然后将报告返回给PackageManger。
App Links认证在安装的时候就一次性完成。不必在每次点击链接的时候都阻塞网络。

image.png

与传统深度链接的区别

特性App Links传统深度链接
跳转方式直接跳转到应用,无选择提示弹出选择对话框(浏览器或应用)
安全性通过 Digital Asset Links 验证无验证机制
实现复杂度需要配置 Intent Filter 和 JSON 文件只需配置 Intent Filter
用户体验更流畅,无中断需要用户手动选择

哎,用户体验既然这么流畅,咋没怎么听说国内有这么用呢,肯定有什么猫腻吧。看来还得实操一下才能知道原因了。 此处省去实操的一对过程,哈哈哈哈。直接说结果吧。

实操结果

一顿操作下来,也是发现好几个大坑。

Digital Asset Links文件验证的坑

上面在App Links原理中提到了在第一次安装App的时候就会完成这个验证,实操过程中也是通过代理发现在App安装的时候会发出一个请求用来验证这个文件

digitalassetlinks.googleapis.com/v1/statemen…

这是请求是谷歌的域名,大家应该不难猜到了,这玩意国内网络访问不了,第一步路就封的死死的。

为了实操完整过程,加个梯子继续操作。

只有谷歌浏览器才能唤醒的坑

先是用三星手机自带的浏览器,访问了对应的链接发现没有唤起App,只是跳转到了链接对应的H5页面。
难道还是我配置有问题?灵光一现,是不是要用谷歌浏览器才可以。
换了用谷歌浏览器,果然成了!安装App的情况下会很丝滑的唤起App,如果没有安装App的情况下会跳转到链接对应的H5页面。

总结

App Links是谷歌2015年就发布的一个新特性,但是国内迟迟没得到很好的应用,整体实践下来有两个致命的原因

  1. App Links验证的时候需要访问外网的域名
  2. 需要使用谷歌浏览器