免费开发者工具
通用链接验证器
确保链接能顺利打开你的应用。粘贴域名以检查 iOS Universal Links 与 Android App Links,并获得清晰的结果与修复步骤。
工作原理
有人点你的链接时,到底发生了什么
两个平台都不会在点击那一刻去访问你的域名。它们在安装应用时就完成检查,把结果记下来,等有人点链接时直接使用。所以一个坏掉的文件可能好几天都没人发现,修好的文件也不会立刻生效。
iPhone 和 iPad
apple-app-site-association安装时
读取 Associated Domains
iOS 查看应用 Associated Domains entitlement 中的
applinks:条目。安装时
经由 Apple CDN 获取
Apple 的 CDN 从你的域名下载文件,再把缓存副本交给设备。
点击时
匹配链接
iOS 把被点击的域名和路径与该文件中的 app ID 以及
paths或components规则进行比对。结果
匹配成功:打开你的应用
不匹配或没有文件:用 Safari 打开网页
Android
assetlinks.json安装时
读取 intent filter
Android 找到为你的域名标记了
autoVerify的 intent filter。安装时
获取 assetlinks.json
在每个声明的主机上请求
/.well-known/下的这个文件,出现重定向即视为失败。安装时
核对签名证书
文件中的包名和 SHA-256 指纹必须与签署已安装应用的证书一致。
结果
验证通过:打开你的应用
未通过验证:打开浏览器,旧版 Android 会弹出应用选择框
检查项
这个工具检查什么
每次检查最多发出十个请求:你的域名及其带或不带 www 的另一个版本上的两个关联文件、Apple CDN 上的副本,以及 Google 的 Digital Asset Links API。具体看这些方面。
两个位置,两个主机
在你的域名和对应的 www 版本上,查找
/.well-known/与根目录下的apple-app-site-association,以及/.well-known/下的assetlinks.json。HTTPS 与 200 状态码
报告每个请求的 HTTP 状态码,以及导致文件无法加载的超时和连接错误。
重定向
跟随重定向,显示每个请求最终落在哪里;如果最终地址在其他主机或是明文 HTTP,会给出提示。
该是 JSON 却返回 HTML
识别登录页、错误模板,或 Cloudflare、Akamai 等服务的人机验证页面,并显示返回的 Content-Type 响应头。
JSON 是否有效
解析每个文件,失败时直接给出解析器的报错,方便你知道要改哪里。
applinks 与 app ID
确认
applinks.details存在,并列出其中所有 app ID。在“高级选项”里填入你的 App ID,可检查它是否在列表中。能识别签名(PKCS7)文件,但不解码。relation 与包名
检查 assetlinks.json 是否为包含
delegate_permission/common.handle_all_urlsrelation 的 JSON 数组,并列出包名。在“高级选项”里填入你的包名即可比对。SHA-256 指纹
把签名证书指纹粘贴到“高级选项”,验证器会在文件里查找它,带不带冒号都可以。
Apple 的副本与 Google 的视角
读取 Apple CDN 下发给 iPhone 的副本,并询问 Google 的 Digital Asset Links API 在你的网站上找到了什么,方便你与服务器上的文件对比。
还没有这个文件,或者 JSON 解析报错?用 AASA 与 assetlinks.json 生成器生成
它看不到的部分
应用端:Associated Domains entitlement、intent filter、某个路径是否符合你的 paths 或 components 规则,以及某个应用内浏览器的具体行为。上线前请在真机上测试这些。
故障排查
为什么链接还是在浏览器里打开
绝大多数情况都能归到下面八种原因之一。服务器端的问题在验证器里就能看到,其余的只会在真机上出现。
- 01iOS + Android
点击发生在 Instagram、Facebook 或 TikTok 里
从备忘录或信息里点击正常,从主页简介或广告点击却打开网页。
解决方法
这些应用会在自己的应用内浏览器中打开链接,往往不会把地址交给 iOS 或 Android。请逐个渠道测试,并确保即使 App 没有打开,链接也能把人带到有用的地方,例如应用商店页面或你的网站。
需在真机测试Instagram 与 TikTok 深度链接 - 02iOS + Android
关联文件发生了重定向
文件在浏览器里能正常打开,但验证失败。
解决方法
Apple 和 Android 都要求在准确的地址上直接返回 200。去掉
/.well-known/上从 http 到 https、从裸域名到 www 或按语言的重定向。验证器中可见通用链接总是打开 Safari? - 03iOS + Android
Content-Type 不对
文件能加载,但平台直接忽略它。
解决方法
两个文件都以
application/json提供。AASA 文件没有扩展名,很多服务器会默认返回application/octet-stream或text/plain。验证器中可见通用链接总是打开 Safari? - 04iOS
Apple CDN 上还是旧文件
文件已经修好,iPhone 仍然打开 Safari。
解决方法
Apple CDN 提供的是缓存副本,会落后于你的服务器;验证器会同时显示两者。测试期间,在 entitlement 后加上
?mode=developer,并在设备的开发者设置中打开 Associated Domains Development。验证器中可见通用链接完整指南 - 05Android
缺少 Play 应用签名密钥
自己打的包能打开应用,从 Play 商店安装的却打开浏览器。
解决方法
启用 Play App Signing 后,用户安装的应用由 Google 签名。把 Play Console“应用完整性”中应用签名密钥证书的 SHA-256 加进去;如果还在 Play 之外分发,也保留上传密钥的指纹。
验证器中可见Android App Links 验证失败 - 06iOS
链接指向当前页面所在的域名
网站上的按钮打开的是更多网页,而不是应用。
- 07iOS
用户曾经选择过 Safari
链接在你的手机上正常,在同事的手机上不行。
- 08iOS
App ID 与构建版本不符
测试环境的构建能用,正式发布的构建不行。
解决方法
条目必须是 Team ID 加上已发布应用的准确 bundle ID,例如
ABCDE12345.com.example.app。在“高级选项”里填入,验证器会帮你核对。验证器中可见通用链接完整指南
省掉这些折腾
做出开箱即用的链接
Appy 链接会识别每一次点击,把它送到对的地方:iPhone 去 App Store,Android 去 Google Play,电脑去你的网站。在 Pro 套餐开启深度链接后,已安装应用的用户会直接进入应用。
- 免费套餐
- 无需信用卡
- 所有套餐不限点击
- 取消订阅后链接照常可用
Enterprise 套餐会为你的应用分配专属链接域名,并由 Appy 在上面托管 apple-app-site-association 和 assetlinks.json。 了解 SDK 如何工作
常见问题
什么是 apple-app-site-association(AASA)文件?
放在你域名上的一个 JSON 文件,用来告诉 iOS 哪些应用可以打开哪些链接。它位于 https://你的域名/.well-known/apple-app-site-association,没有 .json 扩展名,列出你的 app ID(Team ID 加 bundle ID)以及它们处理的 paths 或 components 规则。
关联文件必须放在哪里?
iOS 读取 /.well-known/apple-app-site-association,Android 读取 /.well-known/assetlinks.json,链接里用到的每个主机都要有。两者都必须通过 HTTPS 直接返回 200,不能有重定向,并使用 application/json 内容类型。
为什么通用链接打开的是 Safari 而不是我的应用?
要么验证失败了(文件缺失、被重定向或无效,或 app ID 与构建版本不符),要么是 iOS 有意选择了 Safari:点击来自应用内浏览器或同一域名的页面,或者用户曾经选择过 Safari。先运行验证器;如果没有问题,再在真机上测试这些情况。
为什么营销邮件里的链接打开的是浏览器而不是应用?
邮件服务商会把每个链接替换成自己域名上的点击追踪 URL。iOS 和 Android 只根据这第一个域名做判断,之后的重定向无法打开应用。把验证器切换到“邮件中的链接”,粘贴测试邮件中的链接:它会跟踪重定向,识别邮件服务商,并告诉你追踪域名需要做哪些配置。
怎样检查我的 assetlinks.json?
在上方输入你的域名,展开“高级选项”填入包名和 SHA-256 指纹。在测试手机上运行 adb shell pm get-app-links com.example.app,可以看到 Android 是否已把每个域名标记为已验证。
为什么 Android 提示 App Links 验证失败?
最常见的原因是 assetlinks.json 里的指纹来自你的上传密钥,而从 Play 商店安装的应用是用 Google 的应用签名密钥签名的。其次是重定向、内容类型错误,以及 /.well-known/ 前面的反爬保护。改好文件后,运行 adb shell pm verify-app-links --re-verify com.example.app。
Apple 多久能拿到修改后的 AASA 文件?
没有即时刷新。设备从 Apple CDN 获取文件,而 CDN 提供的是缓存副本,所以服务器上的修改需要一段时间才能生效。验证器会把 CDN 副本和你的文件并排显示。开发阶段在 entitlement 后加 ?mode=developer,设备就会直接从你的服务器获取文件。
通用链接在 Instagram、Facebook 或 TikTok 里能用吗?
经常不行。这些应用会在自己的应用内浏览器中打开链接,点击能否到达你的应用取决于具体应用和投放位置。请逐个渠道测试,并确保你的网站或应用商店页面本身就是一个合格的落地页。
验证器会检查我的应用、entitlement 或路径吗?
它读取的是你的服务器、Apple CDN 和 Google Digital Asset Links API 返回的内容。对于邮件中的链接,它还会检查 AASA 文件中的规则是否覆盖这个链接。应用端,也就是 Associated Domains entitlement 和 intent filter,需要在真机上测试。
深度链接和通用链接有什么区别?
深度链接泛指任何能打开应用内特定页面的链接。iOS 的 Universal Links 和 Android 的 App Links 是经过验证的那一类:普通的 HTTPS 地址,已安装应用时打开应用,未安装时打开网页。
需要注册账号吗?可以分享检查结果吗?
不需要账号,验证器免费使用。每次检查都有独立的网址,可以复制后发给你的开发同事。这些结果页不会被搜索引擎收录。