免费工具
AASA 与 assetlinks.json 生成器
为 iOS Universal Links 生成 apple-app-site-association 文件,为 Android App Links 生成 assetlinks.json 文件。填写应用信息,然后复制或下载可直接上传的文件。
- 免费,无需注册
- 在浏览器中运行
- 采用 Apple 当前的 components 格式
已经有这两个文件了? 用验证工具检查一下
应用
添加所有需要打开这个域名链接的应用。每个应用都会成为 appIDs 中的一项。
- 应用 1
10 位字符,在 Apple Developer 账号的 Membership details 中。
在 Xcode 的应用 target 中查看,例如 com.example.app。
会打开应用的路径
规则从上到下依次匹配,先匹配到的规则生效,所以排除规则要放在范围更大的规则之前。* 匹配任意数量的字符,? 只匹配一个字符。
- 规则 1
用 & 连接的 name=value 对
其他服务
你的文件
apple-app-site-association
示例。填写你的信息后会被替换。
{
"applinks": {
"details": [
{
"appIDs": [
"ABCDE12345.com.example.app"
],
"components": [
{
"/": "/*"
}
]
}
]
}
}在你的浏览器中生成,不会发送到任何地方。
放在哪里
- 上传到
https://你的域名/.well-known/apple-app-site-association,不要加.json扩展名。 - 通过 HTTPS 提供,证书有效,直接返回 200,不要重定向。
- 返回
Content-Type: application/json响应头。 - 链接中用到的每个主机都要配置:
example.com和www.example.com是两个主机,各自需要文件和applinks:条目。 - Apple CDN 会在 24 小时内抓取新文件。在此期间可以用
?mode=developer测试。
不想自己托管文件?智能链接免费使用;在 Enterprise 套餐中,Appy 会在应用的专属链接域名上提供这两个文件。
免费创建链接它们如何配合
两个文件,一次双向确认
只有双方互相确认,Universal Links 和 App Links 才会打开你的应用:应用声明域名,域名上的文件声明应用。缺少任何一半,链接都会改为打开你的网站。
iOS 应用
Associated Domains entitlement
applinks:example.com你的域名
example.com/.well-known/
apple-app-site-association
列出 app ID:Team ID 加 bundle ID
ABCDE12345.com.example.appassetlinks.json
列出包名和 SHA-256 指纹
com.example.app · 14:6D:E9:…
Android 应用
带 autoVerify 的 intent filter
android:autoVerify="true"android:host="example.com"两半匹配:链接打开应用
缺少任何一项:链接打开你的网站
逐个字段
文件中每个键的含义
两个文件都是普通的 JSON。下面是生成器会写入的键,以及值得了解的可选键。
apple-app-site-association
applinks- Universal Links 服务。哪个 URL 打开哪个应用,全部在这里定义。
details- 一个条目数组,每个条目把一组应用和一组 URL 规则对应起来。不同应用处理不同路径时,可以写多个条目。
appIDs- 格式为
<Team ID>.<bundle ID>的 app ID,例如ABCDE12345.com.example.app。每个应用还需要在 Associated Domains entitlement 中声明这个域名。 components- URL 规则,按顺序检查。第一条匹配的规则决定是否打开应用。
/- URL 路径的匹配模式,例如
/products/*。不写则匹配所有路径。 ?- 要匹配的查询参数,写成字典。
{"ref": "?*"}表示必须带有非空的ref参数。 ##之后片段的匹配模式。exclude- 设为
true时,匹配的 URL 留在网站上。这类规则要放在范围更大的规则之前。 comment- 写给阅读文件的人看的说明,iOS 会忽略。
webcredentials- 可选。列出可以通过自动填充使用这个网站已保存密码的应用。
appclips- 可选。列出这个域名可以启动的 App Clip。
* 匹配任意数量的字符,? 只匹配一个,?* 至少匹配一个。默认区分大小写,除非加上 "caseSensitive": false。
assetlinks.json
[ ]- 文件本身是一个由声明组成的 JSON 数组,即使只有一条声明也是如此。
relationdelegate_permission/common.handle_all_urls允许应用打开这个网站的链接。delegate_permission/common.get_login_creds用于共享登录凭据。target- 这条声明针对的应用。
namespace- Android 应用固定为
android_app。 package_name- 应用的 applicationId,例如
com.example.app。 sha256_cert_fingerprints- 为应用签名的证书的 SHA-256 指纹,写成用冒号分隔的大写字符对。凡是用户会安装的版本,其签名密钥都要列出来。
relation_extensions- 可选,适用于 Android 15 及以上。其中的
dynamic_app_link_components可以按 Apple components 的方式添加路径规则,旧版本会忽略它。
旧的 paths 格式
在 iOS 13 之前,每个条目只有一个 appID,用 paths 数组列出路径,排除项前加 NOT ,文件中还必须有一个空的 apps 数组。iOS 13 及以上读取 appIDs 和 components。生成器只输出新格式;如果你仍需支持 iOS 12,请把旧的键加到同一个条目里。
{
"applinks": {
"apps": [],
"details": [{
"appID": "ABCDE12345.com.example.app",
"paths": ["NOT /help/website/*", "/buy/*"]
}]
}
}{
"applinks": {
"details": [{
"appIDs": ["ABCDE12345.com.example.app"],
"components": [
{"/": "/help/website/*", "exclude": true},
{"/": "/buy/*"}
]
}]
}
}常见错误
看起来没问题的文件为什么仍然失效
JSON 完全合法,链接也可能照样打开网站。先把下面七项检查一遍。
- 01iOS
Team ID 前缀写错
文件能正常加载,但 iOS 始终不打开应用。
解决方法
使用为正式版本签名的账号的 Team ID,可在 Membership details 中找到。不是 App Store 的数字 ID,不是 Key ID;如果应用从你自己的账号发布,也不是外包团队的 Team ID。
iOS 和 Android 通用链接完整指南 - 02Android
用了上传密钥,而不是 Play 应用签名密钥
自己打的包能打开应用,从 Google Play 安装的却打开浏览器。
解决方法
Google 分发应用时会用应用签名密钥重新签名。到 Play Console 的“应用完整性”中复制它的 SHA-256;只有在分发用上传密钥签名的版本时,才需要保留上传密钥。
Android App Links 验证失败:用 adb 五分钟定位问题 - 03iOS + Android
文件需要经过重定向才能访问
浏览器里能正常打开,验证却失败。
解决方法
Apple 和 Android 要求在准确的地址上直接返回 200。让
通用链接打开 Safari?修复 AASA、App Links、重定向与响应头/.well-known/不参与裸域名与 www 之间的跳转,也不参与按语言的跳转。 - 04iOS + Android
Content-Type 不对,或返回了 HTML 而不是 JSON
文件明明在,平台却忽略它。
解决方法
两个文件都要以
通用链接打开 Safari?修复 AASA、App Links、重定向与响应头application/json返回。AASA 文件没有扩展名,服务器常把它当作application/octet-stream;有些托管服务还会返回登录页或人机验证页。 - 05iOS + Android
漏掉了 www 主机
指向 example.com 的链接能打开应用,指向 www.example.com 的却打开网站。
解决方法
每个主机单独验证。两个主机都要上传文件,都要写进 Associated Domains,也都要在 Android 的 intent filter 中声明。
iOS 和 Android 通用链接完整指南 - 06iOS
排除规则放在了通配规则后面
本该留在网站上的页面打开了应用。
解决方法
先匹配到的规则生效。把
exclude规则移到/*之前,生成器里的 Appy 示例就是这么写的。 - 07iOS
加了 .json 扩展名,或放错了目录
iOS 请求的地址上什么都没有。
解决方法
文件名是
apple-app-site-association,没有扩展名,放在/.well-known/目录下。上面的下载按钮已经使用了这个文件名。
省掉托管的麻烦
让 Appy 替你提供这两个文件
在 Enterprise 套餐中,你的应用会获得专属链接域名,Appy 会根据你登记的 Team ID、bundle ID、包名和指纹生成 apple-app-site-association 和 assetlinks.json,并在该域名上托管。智能链接本身免费,深度链接从 Pro 套餐开始提供。
- 免费套餐
- 无需信用卡
- 所有套餐均不限点击
- 取消订阅后链接照常可用
常见问题
什么是 apple-app-site-association 文件?
放在你域名上的一个 JSON 文件,用来告诉 iOS 哪些应用可以把哪些 URL 作为 Universal Links 打开。它位于 https://你的域名/.well-known/apple-app-site-association,没有扩展名,列出各个 app ID(Team ID 加 bundle ID)及其对应的 URL 规则。
什么是 assetlinks.json?
它是 Android 上的对应文件,基于 Google 的 Digital Asset Links。文件位于 https://你的域名/.well-known/assetlinks.json,写明允许打开你链接的应用的包名和签名证书指纹。Android 在安装应用时检查它,通过后才把你的链接视为已验证的 App Links。
生成的文件要上传到哪里?
上传到链接中用到的每个主机根目录下的 /.well-known/ 文件夹。两个文件都必须通过 HTTPS 直接返回 200,不能重定向,Content-Type 为 application/json。AASA 文件没有扩展名,在静态托管服务上通常需要单独配置响应头规则。
在哪里找到 Team ID 和 bundle ID?
Team ID 在 Apple Developer 账号的 Membership details 中。Bundle ID 在 Xcode 中应用 target 的 General 标签页。两者组合成 app ID,例如 ABCDE12345.com.example.app。
如何获取 assetlinks.json 需要的 SHA-256 指纹?
如果应用由 Google Play 签名,打开 Play Console,进入“应用完整性”,复制应用签名密钥证书的 SHA-256。对于你自己保管的密钥,运行 keytool -list -v -keystore my-release-key.keystore 或 ./gradlew signingReport。生成器接受带冒号或不带冒号的值。
AASA 文件应该用 paths 还是 components?
用 components。Apple 在 iOS 13 中引入了它,支持查询参数、片段、排除和注释。只有仍需支持 iOS 12 及以下时才需要旧的 paths 数组,这时把两者写在同一个条目里。
一个文件能覆盖多个应用吗?
可以。在 AASA 文件中,把所有 app ID 列在 appIDs 里;如果不同应用处理不同路径,就添加多个 details 条目。在 assetlinks.json 中,每个包名在数组里写一条声明。生成器支持多个 iOS 应用;如需第二个 Android 包,复制这条声明,改掉包名和指纹即可。
修改后多久能在设备上生效?
Apple 表示,其 CDN 会在 24 小时内请求你的 AASA 文件,设备在安装后大约每周检查一次更新。Android 在安装应用时验证;在测试设备上,运行 adb shell pm verify-app-links --re-verify com.example.app 可以重新验证。
AASA 文件需要签名吗?
不需要。只有 iOS 8 要求用 TLS 证书签名。从 iOS 9 开始,Apple 要求的就是通过 HTTPS 提供的普通 JSON 文件。
我填写的内容会发送给 Appy 吗?
不会。文件由在你浏览器中运行的代码生成,你输入的任何内容都不会上传或保存。验证工具则不同:运行时它会从你的域名获取这些文件。
下一步
检查结果,继续阅读
- 免费工具Universal Link 验证工具文件上线后,在你的域名、Apple CDN 以及 Google Digital Asset Links API 上分别检查。
- 指南iOS 和 Android 通用链接完整指南关于通用链接、深度链接和 App Links 的完整指南,包含实现方法与移动营销实践。
- 指南通用链接打开 Safari?修复 AASA、App Links、重定向与响应头可执行排障流程,帮助你修复打开浏览器而非 App 的通用链接问题。
- 指南Android App Links 验证失败:用 adb 五分钟定位问题从 Android 12 起,域名验证未通过的 App Link 会在浏览器而非你的应用中打开——静默发生,而且并非每台设备都一样。这份 adb 排查清单能快速找到原因。
- 指南深度链接 vs 通用链接:完整对比了解深度链接与通用链接的核心差异、适用场景,以及如何正确实现。