跳至内容
WebViewGold 从 Vibe Coding 到 App Store
中文
获取 WebViewGold

Claude Code + 深度链接

用 Claude Code 设置 Universal Links 和 App Links:从任何链接打开您的 WebViewGold 应用

邮件、聊天消息或魔法链接登录中指向您域名的链接,应该在正确的页面打开应用,而不是打开一个浏览器标签页。这需要服务器上的两个小 JSON 文件、Xcode 中的一项 Capability、Android 上的一个 intent filter,以及几个 WebViewGold 开关。Claude Code 负责编写、托管和检查这些文件;您负责填写 ID,并在真实手机上测试。

每个平台一次性 $109 起,或由我们的团队全程代劳,$698 起。

  • 审核通过保证 – 否则 14 天内退款
  • 无需编程
  • 一次性付费,免费更新
  • 7×24 小时人工支持
  • 2014 年起德国出品 · ISO 27001

您需要哪种链接

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 而不是应用中打开的魔法链接或密码重置链接,会让会话落在错误的地方,审核人员也会被卡在您的登录页面上。魔法链接指南详细解释了这种情况。

Claude Code 做什么,您做什么

Claude Code

编写两个 JSON 文件、托管响应头和中间件排除规则,确保每个被链接的路由在冷启动加载时都能正常工作,并编写一个检查脚本,用 curl 和 Node 对您的部署进行检查。

您

提供 Team ID、Bundle ID、包名和签名指纹,在 Xcode 中添加 Associated Domains,修改 Android 清单中的主机名,打开 WebViewGold 开关,然后构建。

Apple 和 Google

按照它们自己的节奏获取并验证您的文件。Apple 通过其 CDN 提供该文件,所以改动不会立即生效;请为此预留一点时间。

iOS 与 Android 对照

iOS Universal LinksAndroid 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 = trueIS_DEEP_LINKING_ENABLED = true
快速测试在“备忘录”或“信息”中点按链接adb shell pm get-app-links,以及在 Gmail 或“信息”中点按

出色的工作!无需任何编码就能轻松完成。简单快捷!创作者也提供了大力帮助!

卢卡斯·杜波依斯(Lucas Dubois) · CodeCanyon

Claude Code 提示词

先填好您的 ID。第 5 项中的检查脚本值得保留:每次更改托管或中间件后都运行一次,或者让 Claude Code 用 /hooks 把它注册为一个 hook。

粘贴到 Claude Code
为我们部署在 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 命令。

不要编辑原生项目。报告修改的内容以及检查脚本的输出。

apple-app-site-association

当前格式,使用 appIDs 和 components。components 按顺序匹配,第一个匹配项生效,所以排除规则放在最前面。app ID 由您的 Team ID、一个点和 Bundle ID 组成。

json
{
  "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*" }
        ]
      }
    ]
  }
}

assetlinks.json

启用 Play 应用签名后,用户安装的构建版本由 Google 签名,所以关键的指纹是 Play Console 中“应用完整性”(App integrity)下显示的应用签名密钥。如果您要测试本地签名的构建版本,也请加上上传密钥。

json
[
  {
    "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"
      ]
    }
  }
]

以正确的响应头提供文件(Next.js)

静态托管平台经常把没有扩展名的文件当作下载类型发送,而 Apple 会忽略这样的文件。在不使用 Next.js 的 Vercel 上,使用 vercel.json 的 headers 部分;在 Netlify 上,使用 _headers 文件。

javascript
// 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、包名和域名都会固化在这些文件中。

  1. 确定域名和 ID

    深度链接把您的域名与应用身份绑定在一起,所以开始之前就要把两者都定下来。参见先确定自定义域名和Bundle ID 一次选定。

  2. 收集参数值

    开发者账户会员资料中的 Apple Team ID、Xcode 中的 Bundle ID、包名,以及 Play Console 中应用签名密钥的 SHA-256。

  3. 运行提示词并部署

    然后对生产环境运行 npm run check:links https://app.example.com。在动原生项目之前,两个文件都必须通过检查。

  4. iOS 项目

    在 Apple Developer 门户中为该 App ID 启用 Associated Domains。在 Xcode 中选择 WebViewGold target,打开 Signing & Capabilities,添加 Associated Domains 并填入 applinks:app.example.com(如果您也链接到 www 版本,就把它一并加上),然后在 Config.swift 中把 ShowExternalLink 设为 true。

  5. Android 项目

    在 AndroidManifest.xml 中,把深度链接 intent filter 里的示例主机名替换为您的域名,并确保它带有 android:autoVerify="true"。在 Config.java 中把 IS_DEEP_LINKING_ENABLED 设为 true。

  6. 构建并安装

    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 当前持有的版本。
  • Google 的 Digital Asset Links API(digitalassetlinks.googleapis.com/v1/statements:list,带上您的网站和 handle_all_urls 关系)返回您的声明。
  • iPhone:把链接粘贴到“备忘录”中,或者通过“信息”发给自己,然后点按:应用在该页面打开。长按会提供在您的应用中打开的选项。在 Safari 地址栏中输入 URL 不会打开应用,这是有意为之的设计。
  • Android: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 的推送通知会打开同一个页面;参见推送指南。

常见陷阱

  • 重定向。如果 app.example.com 重定向到 www(或者反过来),文件请求就无法通过验证。在您列出的每个主机名上都直接提供该文件,不要重定向。
  • 用错了指纹。在 Play 应用签名下,上传密钥并不是用户构建版本所用的签名密钥。请从 Play Console 复制应用签名密钥。
  • SPA 代替文件做出了响应。通配路由会对 /.well-known/apple-app-site-association 返回您的 index.html,状态码还是 200。检查脚本能发现这一点,因为 JSON 解析会失败。
  • 安全层。受密码保护的预览、身份验证中间件和机器人验证,会像拦截陌生人一样拦截 Apple 和 Google 的抓取程序。
  • 缓存。Apple 的 CDN 不会立即获取更改后的 AASA 文件。改动之后,在测试设备上重新安装应用,并留出一些时间,再下结论说它坏了。
  • 跨环境的 PKCE 魔法链接。在桌面版 Safari 中请求、却在应用中打开的魔法链接,无法完成 PKCE 登录,因为 code verifier 保存在发起请求的那个浏览器中。在哪里打开链接,就在哪里请求它。

常见问题

用 Universal Links 还是自定义 URL scheme?

凡是用户会点击的链接,都用 Universal Links 和 App Links,因为在应用缺失时它们会回退到您的网站。自定义 scheme 适合应用之间的调用,或者只应在应用内生效的二维码。

修改路径后需要新的构建版本吗?

AASA 文件或 assetlinks.json 中的路径不需要,它们存放在您的服务器上。但添加域名时需要新的构建版本,因为域名是 Associated Domains entitlement 和 Android 清单的一部分。

为什么我在自己的网站上点按链接时,打开的是 Safari?

在 Safari 中,点按指向同一域名的链接会留在浏览器里。请从“备忘录”“信息”或“邮件”中测试,真实用户也正是在这些地方点击链接的。

Claude Code 能在我的手机上测试深度链接吗?

它可以用 curl 和检查脚本验证服务器端,并为 Android 编写 adb 命令。在真实设备上点按是您的工作,只需两分钟。

深度链接对 App Review 有帮助吗?

间接有帮助。它们让魔法链接、密码重置和分享链接在应用内正常工作,从而让审核人员保持登录状态、留在应用中,而不是被困在浏览器里。

让您的应用上架商店的三种方式

结果相同,只是您需要投入的工作量不同。三种方式都附带审核通过保证和 7×24 小时人工支持。

自己动手

$109 每个平台,一次性付费

WebViewGold 许可证:一个现成的 Xcode 或 Android Studio 项目。粘贴您的 URL,设置名称和图标,开启所需功能,构建并提交。永久免费更新。

在主页查看方案

Cloud Builder

$349 每个许可证,一次性附加购买

无需 Mac、Xcode 或 Android Studio:在浏览器中完成配置,我们在云端构建两个应用,并将其交付到 App Store Connect 和 Play Console。

Cloud Builder 如何运作 试用免费演示

Full Service

$698 每个平台 $798

把您的 URL 和图标发给我们。我们的团队在 72 小时内完成配置、构建并交付您的应用,白标,附源码项目。两个平台共 $1,158。

Full Service 详情 服务提供方: WeSetupYourWebViewApp

冬季特惠价格有效期至 2026年12月31日。

准备好发布您的应用了吗?

App Store & Google Play 审核通过保证 – 否则 14 天内退款

想直接交给我们?Full Service:我们在 72 小时内完成配置、构建并交付,每个平台 $698 起。有疑问?通过 7×24 小时在线聊天联系我们。

退款依据我们 FAQ 中列出的条件:应用因非内容原因被 Apple 和/或 Google 拒审,并在购买后 14 天内提出申请。