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

Claude Code + 登录

用 Claude Code 实现能在 WebView 应用内正常工作的 Sign in with Apple 和 Google 登录

在封装的 Web 应用中,有两件事会让登录失效:Google 会在嵌入式 WebView 中屏蔽其登录页面,而 Apple 会拒绝那些提供 Google 登录、却没有同等隐私选项的应用。WebViewGold 用 Social Login Helper 解决了第一个问题,并在 iOS 上自动处理 Sign in with Apple 页面;Web 端则交给 Claude Code。下面是既能通过审核、又能让用户保持登录状态的设置方法。

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

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

登录为何在审核中失败,以及每种失败的解决方法

Google。Google 拒绝在嵌入式 WebView 中进行 OAuth,并显示“Error 403: disallowed_useragent”。审核人员点按“使用 Google 继续”,看到这个错误,您就会因登录失效而收到准则 2.1 拒审。WebViewGold 的 Social Login Helper 可以解决这个问题:您列出登录流程中会出现的 URL 前缀(Config.swift 中的 google_login_helper_triggers、Config.java 中的 GOOGLE_LOGIN_HELPER_TRIGGERS),当其中某个 URL 加载时,应用会在一个专用窗口中以 Google 接受的 User-Agent 打开登录页面,完成后再返回您的 Web 应用。Facebook 也有同样的机制。详情参见Social Login Helper 文档和disallowed_useragent 修复指南。

Apple。准则 4.8 规定,使用第三方或社交登录作为主账户登录方式的应用,还必须提供一种同等的登录服务:只收集姓名和邮箱,允许用户对邮箱保密,并且未经同意不会为广告目的追踪用户。Sign in with Apple 满足全部三项,也是审核人员期望看到的。在 iOS 上,WebViewGold 会检测 appleid.apple.com 并自动处理该流程,无需任何配置。如果您的应用只有邮箱和密码登录,4.8 就不适用。

Android。Apple 的规则不适用于 Google Play,WebViewGold 文档也没有描述在 Android 上对 Apple 页面做任何特殊处理。请在您的 Android 版本中测试 Web 流程;如果无法完成,在 Android 上隐藏 Apple 按钮也是可以接受的。

Claude Code 做什么,您做什么

领域Claude Code您
Web 应用Apple 登录提供方、同等地位的按钮、回调路由、首次登录时的姓名处理、用户资料中的登录方式标记、CLAUDE.md 规则审阅计划和 diff,部署
Apple Developer 门户和身份验证控制台撰写一份列出每个字段的 SETUP-APPLE-LOGIN.mdServices ID、密钥、回调 URL、提供方设置、邮件中继,以及每六个月一次的密钥续期
WebViewGold列出登录流程经过的 URL 前缀;仅当项目在仓库中时才编辑 Config 中的值确认触发规则列表,构建
测试在桌面浏览器中检查 Web 流程在 TestFlight 和内部测试中做真机测试、隐藏邮件地址、审核人员账号

哪个设置对应哪个问题

需求iOS(Config.swift)Android(Config.java)
在应用内使用 Google 登录google_login_helper_triggers,例如 accounts.google.com 和 accounts.youtube.comGOOGLE_LOGIN_HELPER_TRIGGERS
Facebook 登录facebook_login_helper_triggersFACEBOOK_LOGIN_HELPER_TRIGGERS
Sign in with Apple自动检测(appleid.apple.com)文档未说明;请测试 Web 流程
把登录 URL 交给系统googlelogin:// + 编码后的 URL 会在外部打开它(此时会话保存在 Safari 中,而不是应用内)googlelogin:// + 编码后的 URL 会打开一个 Chrome Custom Tab(URL 处理文档)
在代码中识别应用useragent_iphone、useragent_ipad,加上标记 WebViewGoldAppUSER_AGENT,加上标记 WebViewGoldApp
保持会话让 deletecache 保持为 false让 CLEAR_CACHE_ON_STARTUP 保持为 false;如果 Cookie 到得晚,使用 MANUAL_COOKIE_SYNC;退出登录 URL 用 HOME_URL_LOGOUT

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

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

按正确的顺序设置

大部分时间花在 Apple Developer 门户上,代码很快就能写好。

  1. Apple Developer 门户

    为您的 App ID 启用 Sign in with Apple。为 Web 流程创建一个 Services ID(它的标识符就是 OAuth 客户端 ID),添加您的域名和身份验证提供商的回调 URL(Supabase 为 https://YOUR-PROJECT.supabase.co/auth/v1/callback),并创建一个 Sign in with Apple 密钥(.p8)。记下 Team ID 和 Key ID。

  2. 身份验证提供商

    用 Services ID 和密钥启用 Apple 提供方。Apple 的客户端密钥(client secret)是一个签名的 JWT,有效期最长六个月,所以请在日历中设置续期提醒。把生产域名加入允许的重定向 URL;从生产项目中移除预览和 localhost 条目。

  3. 邮件中继

    用户可以选择“隐藏邮件地址”(Hide My Email)。为了把密码重置邮件和收据送达 privaterelay.appleid.com 地址,请在 Apple Developer 门户的 Sign in with Apple for Email Communication 下注册您的发件域名或发件地址。

  4. 运行 Claude Code 提示词

    它会添加按钮、回调处理和一份设置清单,并列出登录流程经过的 URL 前缀,方便您核对触发规则列表。

  5. WebViewGold 触发规则

    把 Google 的前缀放进 google_login_helper_triggers 和 GOOGLE_LOGIN_HELPER_TRIGGERS。如果您的身份验证提供商使用一个会重定向到 Google 的自定义域名,需要列出的仍然是 Google 的域名。

  6. 构建并测试

    TestFlight 和内部测试,对照下面的清单逐项检查。如果原生部分需要帮手,Full Service 团队会为您设置并构建应用。

Claude Code 提示词

如果您通过 MCP 服务器连接了身份验证提供商或数据库,Claude Code 可以自己读取当前的提供方设置;否则它会替您把这些设置写进清单。

粘贴到 Claude Code
我们的 Web 应用运行在浏览器中,也运行在用 WebViewGold 构建的原生 iOS 和 Android 应用中(User-Agent 中包含 WebViewGoldApp)。我们提供 Google 登录,因此 Apple 准则 4.8 要求 iOS 应用中提供一种同等的、注重隐私的登录方式;我们将添加 Sign in with Apple。原生封装层已经处理好了 WebView 这一侧:Google 登录页面由 WebViewGold Social Login Helper 打开(触发规则 URL 前缀在 Config.swift 和 Config.java 中),在 iOS 上 appleid.apple.com 会被自动检测和处理。不要为登录添加原生代码或 URL scheme。

先给出计划,我批准后再实施:
1. 识别我们使用的身份验证库(Supabase Auth、Firebase Auth、Auth.js 或 Clerk),为 Web 流程添加它的 Apple 提供方,使用我们的生产回调 URL。不要预览或 localhost 重定向。
2. 登录和注册页面:Sign in with Apple 和 Continue with Google 作为同等选项,尺寸和位置相同。按照 Apple 的规范设计 Apple 按钮(黑色或白色,文字为 Sign in with Apple)。邮箱和密码登录保留,因为 App Review 的演示账号要用它。
3. Apple 只在首次授权时提供用户姓名。如果我们的身份验证库没有保存它,就在新手引导中、缺少显示名称时请用户填写。
4. 用户可能选择隐藏邮件地址。确保事务性邮件对 privaterelay.appleid.com 地址也能正常送达。
5. 在用户资料中记录用户用过哪些登录方式,以便日后删除账户时撤销 Apple 令牌。如果身份验证库在登录时提供 Apple refresh token,就在服务器端加密保存。
6. 列出 Google 和 Apple 流程在我们的域名和提供商域名上经过的每一个 URL 前缀(如果已连接 Playwright MCP 服务器就用它,否则参考身份验证库的文档),方便我与 google_login_helper_triggers 和 GOOGLE_LOGIN_HELPER_TRIGGERS 进行比对。
7. 编写 SETUP-APPLE-LOGIN.md:Apple Developer 步骤(启用 Sign in with Apple 的 App ID、带域名和回调 URL 的 Services ID、密钥)、我们身份验证控制台中的字段、重定向 URL 白名单、邮件中继注册,并注明 Apple 客户端密钥最长六个月后就会过期。
8. 在 CLAUDE.md 中添加一条规则:Sign in with Apple 必须与其他所有第三方登录同样醒目,重构时不得删除。

报告修改过的文件以及任何悬而未决的问题。

代理最终应该交付的登录按钮

一个在 Next.js 客户端组件中使用 Supabase 的示例。重点在于两个提供方得到同等对待,并且只有一个生产重定向;代理会根据您的身份验证库进行调整。

typescript
// components/social-login.tsx
"use client";
import { createClient } from "@/lib/supabase/client";

// 仅限生产回调;必须列在 Supabase 的重定向 URL 白名单中
const REDIRECT_TO = "https://app.example.com/auth/callback";

export function SocialLogin() {
  const supabase = createClient();
  const signIn = (provider: "apple" | "google") =>
    supabase.auth.signInWithOAuth({ provider, options: { redirectTo: REDIRECT_TO } });

  return (
    <div className="flex flex-col gap-3">
      {/* 两者的高度、宽度和位置都相同:准则 4.8 要求的是同等,而不是藏起来 */}
      <button
        type="button"
        onClick={() => signIn("apple")}
        className="h-12 w-full rounded-lg bg-black text-white font-medium"
      >
        Sign in with Apple
      </button>
      <button
        type="button"
        onClick={() => signIn("google")}
        className="h-12 w-full rounded-lg border border-gray-300 bg-white text-gray-900 font-medium"
      >
        Continue with Google
      </button>
    </div>
  );
}

// app/auth/callback/route.ts 用 code 换取会话 (supabase.auth.exchangeCodeForSession),
// 并重定向到用户来时的页面。在应用内,WebViewGold 登录窗口
// 会返回到这个 URL,所以会话落在应用中,而不是 Safari 或 Chrome 中。

在设备上的验证清单

  • TestFlight 版本:点“使用 Google 继续”会打开登录窗口,完成登录后,您以已登录状态回到应用。没有 disallowed_useragent 错误。
  • Sign in with Apple:出现 Apple 的弹出面板或页面,提供“隐藏邮件地址”选项,您以已登录状态返回。用一个全新的 Apple 账户试一次,看看首次登录时的姓名处理。
  • 彻底关闭应用再重新打开:您仍处于登录状态。如果不是,先检查 deletecache 和 Cookie 设置,再去动代码。
  • 退出登录,用另一个提供方、同一个邮箱登录:账户关联的行为符合您的身份验证设置(同一个账户或独立账户都行,但绝不能是错误页面)。
  • Android 内部测试版本:Google 登录可以完成。Apple 流程要么能完成,要么在 Android 上隐藏该按钮。
  • 给审核人员的演示账号在两个平台上仍能用邮箱和密码登录。
  • 向一个隐藏邮件地址发送密码重置邮件:邮件能够送达。

常见陷阱

  • 缺少触发规则前缀。如果登录窗口始终没有打开,说明流程中加载的 URL 不在触发规则列表中。在桌面浏览器中启动流程,记下每一次重定向。
  • 在 iOS 上使用 googlelogin://。它会在应用外打开登录页面,结果会话留在了 Safari 中。在应用内请优先使用 Social Login Helper 触发规则。
  • Apple 按钮看起来像次要选项。更小、放在首屏以下或者做成文字链接,都不算同等。审核人员会亲眼检查这一点。
  • 六个月有效期的密钥。Apple 客户端密钥过期后,Apple 登录会以一个笼统的错误失败。请在到期日之前续期,而不是等收到第一封客服邮件之后。
  • 重定向到预览 URL。重定向到预览部署的 OAuth 在测试时可用,在生产环境中却会失败。只保留一个生产回调。
  • 忘记删除流程。Apple 期望在账户删除时撤销令牌。账户删除指南会构建这一步。

常见问题

如果我只有邮箱和密码登录,还需要 Sign in with Apple 吗?

不需要。准则 4.8 适用于用第三方或社交登录来创建或验证主账户的情况。只有邮箱和密码登录不会触发它。

一定要用 Sign in with Apple 吗?

Apple 的措辞允许任何具备所列隐私特性的登录服务。但在实践中,Sign in with Apple 是审核人员一眼就能认出的选项,也是最省力就能站得住脚的选择。

为什么 Google 登录在 Safari 中可用,在我的应用中却不行?

Google 会检测嵌入式 WebView,并以 disallowed_useragent 阻止它们。Social Login Helper 会在 Google 接受的环境中打开这些页面,完成后再返回您的应用。

Sign in with Apple 应该出现在 Android 和网站上吗?

在那里是可选的。到处都显示,对在不同设备间切换的用户来说更一致;只有当 Web 流程在您的测试版本中无法完成时,才在 Android 上隐藏它。

Claude Code 能配置 Apple Developer 门户吗?

不能。它负责撰写清单和代码,如果项目在仓库中,还可以编辑 Config.swift 和 Config.java 中的值。门户设置、密钥和签名仍由您负责。

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

结果相同,只是您需要投入的工作量不同。三种方式都附带审核通过保证和 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 天内提出申请。