Claude Code
编写两个 JSON 文件、托管响应头和中间件排除规则,确保每个被链接的路由在冷启动加载时都能正常工作,并编写一个检查脚本,用 curl 和 Node 对您的部署进行检查。
Claude Code + 深度链接
邮件、聊天消息或魔法链接登录中指向您域名的链接,应该在正确的页面打开应用,而不是打开一个浏览器标签页。这需要服务器上的两个小 JSON 文件、Xcode 中的一项 Capability、Android 上的一个 intent filter,以及几个 WebViewGold 开关。Claude Code 负责编写、托管和检查这些文件;您负责填写 ID,并在真实手机上测试。
每个平台一次性 $109 起,或由我们的团队全程代劳,$698 起。
Universal Links(iOS)让指向您域名的普通 https 链接直接打开应用。它们需要服务器上的 apple-app-site-association(AASA)文件、Xcode 中的 Associated Domains Capability,以及在 Config.swift 中把 ShowExternalLink 设为 true(Universal Links 文档)。
App Links(Android)在 Android 上实现同样的效果。它们需要一个证明该域名属于您应用的 assetlinks.json 文件、AndroidManifest.xml 中针对您主机名的 intent filter,以及在 Config.java 中把 IS_DEEP_LINKING_ENABLED 设为 true(App Links 文档)。
自定义 scheme(例如 myapp://)也是一种选择,但每个平台的语法不同:在 iOS 上,修改 Info.plist 中的 URL scheme 后使用 myapp://url?link=https://app.example.com/page;在 Android 上使用 myapp://https://app.example.com/page,并让 IS_CUSTOM_SCHEME_ENABLED 和 CUSTOM_DEEPLINK_SCHEME 与清单文件保持一致。iOS 文档建议在 Universal Links 和自定义 scheme 之间二选一,不要同时使用。对于用户会点击的链接,https 是更好的选择:应用没有安装时,同一个链接会直接打开您的网站。
没有哪条准则要求必须有深度链接,但它们决定了审核人员能否登录。一个在 Safari 而不是应用中打开的魔法链接或密码重置链接,会让会话落在错误的地方,审核人员也会被卡在您的登录页面上。魔法链接指南详细解释了这种情况。
编写两个 JSON 文件、托管响应头和中间件排除规则,确保每个被链接的路由在冷启动加载时都能正常工作,并编写一个检查脚本,用 curl 和 Node 对您的部署进行检查。
提供 Team ID、Bundle ID、包名和签名指纹,在 Xcode 中添加 Associated Domains,修改 Android 清单中的主机名,打开 WebViewGold 开关,然后构建。
按照它们自己的节奏获取并验证您的文件。Apple 通过其 CDN 提供该文件,所以改动不会立即生效;请为此预留一点时间。
| iOS Universal Links | Android App Links | |
|---|---|---|
| 服务器文件 | /.well-known/apple-app-site-association,没有文件扩展名 | /.well-known/assetlinks.json |
| 文件中的应用身份 | Team ID + Bundle ID | 包名 + 签名证书的 SHA-256 |
| 原生项目 | Associated Domains:applinks:app.example.com(如果使用 www,需要单独添加) | AndroidManifest.xml 中带有您主机名的 intent filter,会自动验证 |
| WebViewGold 开关 | ShowExternalLink = true | IS_DEEP_LINKING_ENABLED = true |
| 快速测试 | 在“备忘录”或“信息”中点按链接 | adb shell pm get-app-links,以及在 Gmail 或“信息”中点按 |

出色的工作!无需任何编码就能轻松完成。简单快捷!创作者也提供了大力帮助!
先填好您的 ID。第 5 项中的检查脚本值得保留:每次更改托管或中间件后都运行一次,或者让 Claude Code 用 /hooks 把它注册为一个 hook。
为我们部署在 https://app.example.com 上的 WebViewGold 应用设置 Universal Links(iOS)和 App Links(Android)。先阅读 https://www.webviewgold.com/llms-full.txt 中的 Universal Links API 以及 App Links and Deep Linking API 章节。 参数值:Apple Team ID ABCDE12345,iOS Bundle ID com.example.myapp,Android 包名 com.example.myapp,SHA-256 指纹:[Play Console 中的应用签名密钥] 和 [用于本地测试构建的上传密钥]。 1. 创建 public/.well-known/apple-app-site-association(没有文件扩展名),使用带 appIDs 和 components 的 applinks 格式。在应用中打开:/app/*、/auth/callback*、/invite/*、/reset-password*。排除 /blog/* 和 /pricing(排除规则放在最前面),让营销页面留在浏览器中。 2. 创建 public/.well-known/assetlinks.json,为我们的包名和两个指纹声明 delegate_permission/common.handle_all_urls 关系。 3. 两个文件都以状态码 200 和 Content-Type application/json 提供,不经过重定向、身份验证中间件、密码保护或机器人验证。确保我们的 SPA 通配路由和中间件不会拦截 /.well-known/。根据这个项目使用的托管平台配置响应头(next.config.js 的 headers、vercel.json、netlify 的 _headers 或类似方式)。 4. 第 1 项中列出的每个路由,都必须仅凭 URL 就能在冷启动加载时正常工作:深度链接落在一个 URL 上,而不是客户端状态上。受保护的路由先重定向到登录页,登录后再回到原来的路径。 5. 创建 scripts/check-deep-links.mjs:接收一个基础 URL,获取两个文件,检查状态码、内容类型、没有重定向、JSON 有效,以及其中的 ID 与上面的值一致。添加 npm run check:links,并对预览部署运行它。 6. 编写 docs/deep-links.md:Xcode 的手动步骤(添加带 applinks:app.example.com 的 Associated Domains Capability,在 Config.swift 中把 ShowExternalLink 设为 true)和 Android Studio 的手动步骤(AndroidManifest.xml 中 intent filter 的主机名和 android:autoVerify,Config.java 中的 IS_DEEP_LINKING_ENABLED),再为每种路径模式列出示例链接,方便我粘贴到备忘录或发给自己,并附上测试它们的 adb 命令。 不要编辑原生项目。报告修改的内容以及检查脚本的输出。
当前格式,使用 appIDs 和 components。components 按顺序匹配,第一个匹配项生效,所以排除规则放在最前面。app ID 由您的 Team ID、一个点和 Bundle ID 组成。
{
"applinks": {
"details": [
{
"appIDs": ["ABCDE12345.com.example.myapp"],
"components": [
{ "/": "/blog/*", "exclude": true, "comment": "营销页面留在浏览器中" },
{ "/": "/pricing", "exclude": true },
{ "/": "/app/*", "comment": "Web 应用内的所有内容" },
{ "/": "/auth/callback*", "comment": "魔法链接和 OAuth 回跳" },
{ "/": "/invite/*" },
{ "/": "/reset-password*" }
]
}
]
}
}启用 Play 应用签名后,用户安装的构建版本由 Google 签名,所以关键的指纹是 Play Console 中“应用完整性”(App integrity)下显示的应用签名密钥。如果您要测试本地签名的构建版本,也请加上上传密钥。
[
{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.example.myapp",
"sha256_cert_fingerprints": [
"APP_SIGNING_KEY_SHA256_FROM_PLAY_CONSOLE",
"UPLOAD_KEY_SHA256_FOR_LOCAL_BUILDS"
]
}
}
]静态托管平台经常把没有扩展名的文件当作下载类型发送,而 Apple 会忽略这样的文件。在不使用 Next.js 的 Vercel 上,使用 vercel.json 的 headers 部分;在 Netlify 上,使用 _headers 文件。
// next.config.js (文件位于 public/.well-known/)
module.exports = {
async headers() {
return [
{
source: "/.well-known/apple-app-site-association",
headers: [{ key: "Content-Type", value: "application/json" }],
},
{
source: "/.well-known/assetlinks.json",
headers: [{ key: "Content-Type", value: "application/json" }],
},
];
},
};
// 同时检查 middleware.ts:把 "/.well-known" 排除在身份验证和语言区域重定向之外。先确定最终的 ID:Bundle ID、包名和域名都会固化在这些文件中。
深度链接把您的域名与应用身份绑定在一起,所以开始之前就要把两者都定下来。参见先确定自定义域名和Bundle ID 一次选定。
开发者账户会员资料中的 Apple Team ID、Xcode 中的 Bundle ID、包名,以及 Play Console 中应用签名密钥的 SHA-256。
然后对生产环境运行 npm run check:links https://app.example.com。在动原生项目之前,两个文件都必须通过检查。
在 Apple Developer 门户中为该 App ID 启用 Associated Domains。在 Xcode 中选择 WebViewGold target,打开 Signing & Capabilities,添加 Associated Domains 并填入 applinks:app.example.com(如果您也链接到 www 版本,就把它一并加上),然后在 Config.swift 中把 ShowExternalLink 设为 true。
在 AndroidManifest.xml 中,把深度链接 intent filter 里的示例主机名替换为您的域名,并确保它带有 android:autoVerify="true"。在 Config.java 中把 IS_DEEP_LINKING_ENABLED 设为 true。
TestFlight 和内部测试。请从商店测试轨道安装,这样 Android 构建版本才带有 assetlinks.json 中所列的 Play 签名证书。如果您没有安装这些 IDE,Cloud Builder 可以生成两个构建版本。
curl -sI https://app.example.com/.well-known/apple-app-site-association 返回 200、application/json,并且没有重定向。Apple 通过其 CDN 获取该文件;https://app-site-association.cdn-apple.com/a/v1/app.example.com 会显示 Apple 当前持有的版本。digitalassetlinks.googleapis.com/v1/statements:list,带上您的网站和 handle_all_urls 关系)返回您的声明。adb shell pm get-app-links com.example.myapp 显示您的域名已通过验证。在 Gmail 或“信息”中点按会打开应用;adb shell am start -a android.intent.action.VIEW -d "https://app.example.com/app/orders/42" com.example.myapp 会落在正确的页面上。url 指向 /app/orders/42 的推送通知会打开同一个页面;参见推送指南。凡是用户会点击的链接,都用 Universal Links 和 App Links,因为在应用缺失时它们会回退到您的网站。自定义 scheme 适合应用之间的调用,或者只应在应用内生效的二维码。
AASA 文件或 assetlinks.json 中的路径不需要,它们存放在您的服务器上。但添加域名时需要新的构建版本,因为域名是 Associated Domains entitlement 和 Android 清单的一部分。
在 Safari 中,点按指向同一域名的链接会留在浏览器里。请从“备忘录”“信息”或“邮件”中测试,真实用户也正是在这些地方点击链接的。
它可以用 curl 和检查脚本验证服务器端,并为 Android 编写 adb 命令。在真实设备上点按是您的工作,只需两分钟。
间接有帮助。它们让魔法链接、密码重置和分享链接在应用内正常工作,从而让审核人员保持登录状态、留在应用中,而不是被困在浏览器里。
结果相同,只是您需要投入的工作量不同。三种方式都附带审核通过保证和 7×24 小时人工支持。
$109 每个平台,一次性付费
WebViewGold 许可证:一个现成的 Xcode 或 Android Studio 项目。粘贴您的 URL,设置名称和图标,开启所需功能,构建并提交。永久免费更新。
在主页查看方案$349 每个许可证,一次性附加购买
无需 Mac、Xcode 或 Android Studio:在浏览器中完成配置,我们在云端构建两个应用,并将其交付到 App Store Connect 和 Play Console。
Cloud Builder 如何运作 试用免费演示$698 每个平台 $798
把您的 URL 和图标发给我们。我们的团队在 72 小时内完成配置、构建并交付您的应用,白标,附源码项目。两个平台共 $1,158。
Full Service 详情 服务提供方:冬季特惠价格有效期至 2026年12月31日。
App Store & Google Play 审核通过保证 – 否则 14 天内退款
想直接交给我们?Full Service:我们在 72 小时内完成配置、构建并交付,每个平台 $698 起。有疑问?通过 7×24 小时在线聊天联系我们。
退款依据我们 FAQ 中列出的条件:应用因非内容原因被 Apple 和/或 Google 拒审,并在购买后 14 天内提出申请。