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

App Store 审核被拒

准则 5.1.1(v)(账号登录):应用何时可以要求登录,以及如何添加访客模式

如果您的应用强制用户先注册账号,才能使用与账号毫无关系的功能,Apple 就会依据 5.1.1(v) 拒审。AI 应用构建工具默认把整个应用都放在登录之后,所以这种情况很常见。修复方法是:开放不需要账号的部分,需要账号的部分保留登录,并在审核备注中清楚说明哪些属于哪一类。

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

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

5.1.1(v) 的规定

准则 5.1.1 中关于账号登录的部分规定:没有重要的基于账号功能的应用,应允许用户在不登录的情况下使用。除非与核心功能直接相关或法律有要求,应用不得要求用户提供个人信息才能运行。支持注册账号的应用,必须在应用内提供账号删除功能。此外,如果核心功能与某个特定社交网络无关,用户必须能在不登录该社交网络的情况下使用应用;获取个人资料数据、分享和邀请好友都不算核心功能。

5.1.1 的其他部分(隐私政策、用途说明文本、数据最小化)请参阅5.1.1 隐私指南。本页讨论的是登录墙。

拒审消息通常怎么说

这条备注通常说,应用要求用户先注册或登录,才能访问并非基于账号的功能,并建议让用户自由使用这些功能,只对与账号相关的功能要求注册。一种常见的变体是说应用要求提供核心功能并不需要的个人信息,例如电话号码、生日或性别。另一种变体与购买有关:应用强制要求用户先注册,才能购买并非基于账号的应用内购买项目。

哪些功能可以放在登录之后

功能是否基于账号?是否放在登录之后?
浏览目录、阅读文章、查看菜谱否否,设为公开
计算器、转换器、生成器、有限的免费 AI 体验否否,或使用访客会话
收藏、历史记录、跨设备同步是是;在用户保存内容时再询问
发帖、聊天、关注其他用户是是
订单、预订、发票、团队工作区是是
面向某项服务现有会员、员工或客户的应用是,账号就是核心是;在审核备注中说明并提供演示账号
同样可在网页上使用的订阅是,跨平台是;在审核备注中说明

我的iOS WebView应用终于通过审核了。谢谢!!

塔哈·法鲁基(Taha Farooqui) · CodeCanyon

AI 构建的应用为什么会撞上登录墙

包住一切的认证守卫

Lovable、Bolt 和 v0 的脚手架常常把整个路由器包在受保护的路由里,于是应用的第一个页面就是登录表单。

起始 URL 设在 /login 或 /dashboard

营销页面是网站的公开部分,所以很多人把 webviewurl 设为应用区域,而它会直接重定向到登录页。

索要过多信息的注册表单

“以防万一”生成的电话、生日、性别和公司字段,都是核心功能并不需要的个人信息。

只有社交登录

只有“Continue with Google”,意味着没有社交账号的人根本进不来。请添加邮箱登录或Sign in with Apple,并考虑提供访客入口。

无需重建应用即可添加访客入口

  1. 把每个功能标记为公开或仅限账号

    逐一检查每个页面。通常来说,发现和阅读是公开的;保存、发帖、与账号绑定的购买以及个人数据仅限账号使用。

  2. 让应用指向公开的起始页面

    在 Config.swift 中把 webviewurl 设为一个无需登录即可使用的页面,例如 yourdomain.com/app 或 /explore,而不是 /login。修改它需要新的构建版本。

  3. 把认证守卫移到账号路由上

    公开路由对所有人渲染;只有账号路由才重定向到登录页(代码见下文)。把“登录”放在页眉中或第一次保存时,而不是挡在内容前面。

  4. 访客需要保存状态时使用匿名会话

    如果访客应能保存进度,请使用 Supabase 匿名登录、Firebase 匿名认证或本地存储,并在注册时把访客转换为正式账号,这样就不会丢失任何数据。用验证码和行级安全(row-level security)保护匿名注册;Supabase 检查清单列出了相关设置。

  5. 精简注册表单

    邮箱和密码(或 Sign in with Apple),如果确实需要,再加一个姓名。其他信息等到某项功能需要时再询问,并把可选字段明确标为可选。

  6. 保留账号删除和演示账号

    支持注册账号,依然意味着要在应用内提供删除功能(账号删除指南);账号功能依然需要为审核提供演示账号(演示账号指南)。保持 deletecache 为 false,让已登录的用户保持登录状态。

公开路由优先,只在必要处要求登录

以大多数 AI 构建工具生成的 React Router 代码为例,外加一个用于保存的 Supabase 访客会话。

javascript
// 修改前(典型的 AI 脚手架):所有路由都在 <RequireAuth /> 之后
// <Route element={<RequireAuth />}> ...所有路由... </Route>

// 修改后:发现类内容公开,账号功能放在守卫之后
<Routes>
  <Route path="/" element={<Explore />} />                {/* 无需账号 */}
  <Route path="/recipes/:id" element={<Recipe />} />      {/* 无需账号 */}
  <Route path="/login" element={<Login />} />
  <Route element={<RequireAuth />}>
    <Route path="/favorites" element={<Favorites />} />    {/* 基于账号 */}
    <Route path="/settings/account" element={<Account />} />
  </Route>
</Routes>

// 访客点按“保存”:启动匿名会话,之后再升级
async function saveAsGuest(recipeId) {
  const { data } = await supabase.auth.getSession();
  if (!data.session) await supabase.auth.signInAnonymously();
  await supabase.from("favorites").insert({ recipe_id: recipeId }); // user_id 默认为 auth.uid()
  showBanner("已保存。创建一个免费账号,即可在所有设备上保留您的收藏。");
}
// 之后升级:supabase.auth.updateUser({ email }) 会把匿名用户转为永久用户

提示词:向访客开放应用

让 AI 来完成重构,但在它修改代码之前,先审查它列出的公开路由和仅限账号路由。

给 Lovable、Bolt、v0、Cursor 或 Claude Code 的提示词
按照 App Store 准则 5.1.1(v) 重构身份验证。
1) 列出每一个路由,并将其归类为公开(无需账号即可使用)或仅限账号(保存、发帖、与账号绑定的购买、个人数据)。在修改代码之前,先把这份清单给我看。
2) 移除全局认证守卫,只把它应用到仅限账号的路由上。
3) 把 / 设为公开的起始页面,无需登录即可显示核心内容。
4) 当访客尝试仅限账号的操作时,显示一个友好的弹出面板:“创建一个免费账号来保存这项内容”,提供 Sign in with Apple、邮箱注册以及“以后再说”选项。
5) 对需要保存状态的访客使用 Supabase 匿名登录,并在注册时把他们转换为永久账号,不丢失任何数据。所有表都保持启用行级安全(row-level security)。
6) 把注册表单精简为邮箱、密码和可选的姓名。除非有功能需要,否则删除电话、生日和性别字段。
7) 保留设置中现有的“删除账号”流程。

Resolution Center 回复模板

如果您开放了应用,用方案 A;如果登录确实必不可少,用方案 B。无论哪种都要具体。模板保留英文,因为 Apple 审核人员阅读的是英文。

Resolution Center 回复(选择方案 A 或 B)
Hello App Review team,

Thank you for reviewing [App name] [version] ([build]).

[Option A: guest access added]
Users can now [browse / read / use the calculator] without an account. The app opens on [Explore], and an account is requested only when a user wants to [save favorites / post / sync across devices], which are account-based features. Sign-up now asks only for email and password, or Sign in with Apple. [New build: [number].]

[Option B: login is essential]
[App name] is a [client portal / team workspace] for [existing customers of X / members of Y]. Every feature works on the user's own account data: [list the main features]. There is no content that could be shown without an account. Accounts are created [at sign-up in the app / by the customer's organization]. A demo account is provided in App Review Information.

Account deletion is available in [Settings > Account > Delete account].

Best regards,
[Name], [email]

检查清单

  • 新用户无需注册即可使用每一项非账号功能。
  • webviewurl 指向公开页面,而不是登录页面。
  • 登录提示在用户第一次执行账号操作时出现,并且可以拒绝。
  • 注册表单只索要账号所需的信息。
  • 社交登录不是唯一的登录方式。
  • 应用内账号删除功能和可用的演示账号均已就绪。

常见问题

我的应用是面向付费客户的仪表盘。需要访客模式吗?

如果每项功能都基于客户自己的账号数据,就不需要。请在审核备注中说明这一点并提供演示账号。为尚未成为客户的人提供一个展示应用用途的公开页面,则是锦上添花。

“以访客身份继续”必须放在第一个页面上吗?

没有固定的位置要求。重要的是新用户无需注册就能使用非账号功能。一个公开的起始页面,在页眉中放一个“登录”按钮,通常是最简洁的方案。

我可以要求用户在应用内购买前先注册账号吗?

如果购买与账号绑定,例如同时解锁网页版的订阅,可以,请在审核备注中说明。对于只在本设备上生效的购买,审核人员希望注册是可选的。

只支持 Google 登录算 5.1.1(v) 问题吗?

有可能:如果您的核心功能与 Google 毫无关系,用户就必须能在不使用 Google 登录的情况下使用应用。访客访问或邮箱登录可以解决这个问题,而准则 4.8 还要求在 Google 旁边提供 Sign in with Apple 或类似选项。

访客用户需要账号删除功能吗?

删除要求适用于用户创建的账号。对于匿名会话,在设置中提供“清除我的数据”选项是一种好做法;一旦访客转换为正式账号,就适用常规的“删除账号”流程。

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

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