审核期间 Demo 账号失效:Guideline 2.1 对症修复

提交后回 Rejected,附 'We were unable to sign in with the credentials you provided',但你自己手机能登——多半是审核员陌生 IP 撞上安全策略。六种原因按命中率排,附 App Store Connect 里 Sign-In 字段的准确位置和重交步骤。

你传了 build、填好了 demo 账号的用户名密码,一天内提交状态翻成 Rejected(旧状态显示为 Metadata Rejected),Resolution Center 附一句 “We were unable to sign in to the app with the credentials you provided”“login error: invalid credentials”。你自己手机上同账号能用得好好的。审核员从陌生 IP(多半是 Cupertino,或中国区团队走别区的 VPN 出口)、一台干净设备、零缓存会话进你后端,账号要么撞上某条安全策略,要么本来在你测试环境之外就跑不起来。

这是 Guideline 2.1(Information Needed)拒回里最常见的一种,也是最快能修好的,前提是你能精确判断审核员那边到底为什么登不上。

只做一件事的话: 在一台抹干净、关掉自动填充的设备上,照 App Review notes 里的字面冷登一次(下面 Step 1)。约 70% 的拒回会当场复现:要么弹 2FA,要么首页空白,要么账号被锁。看到什么修什么,再重交即可。Demo 账号修复属于 metadata-only,不需要重新打包。

先判断你属于哪一类

干净冷登时的现象最可能原因跳到
密码过了,接着弹一个你拿不到的验证码2FA / 短信 / 邮箱验证原因 2、Step 3
密码明明对,却回 401 / “invalid credentials”后端安全锁(地域 / 限速)原因 1、Step 2
怎么输都登不上账号失效 / 被删,或 notes 抄错原因 3-4、Step 4
登进去了,但首页一片空白内容有地域锁或没预置数据原因 5、Step 5 + 地域说明
Auth 接口超时 / 连不上build 指向挂在 Access/VPN 后的 staging原因 6

常见原因

按命中率排序,约 70% 是 #1 或 #2。

1. 后端安全策略锁了账号

你的 auth 服务(Auth0、Firebase Auth、Cognito、Supabase 或自建)看到同一账号在异常 geo / IP / user-agent 下反复登录,触发了限速、地域拦截或”可疑活动”自动锁。审核员看到的是一个长得像密码错误的 401,其实是被锁了。

如何判断:去 auth provider 后台查 demo 用户的失败记录,时间锁定在审核窗口。Apple 持有整个 17.0.0.0/8 段,审核流量常从这里来,但 Apple 并未公布官方审核出口段,部分审核还会走云 / VPN 段(中国区审核出口可能在别处)。所以主要靠失败登录的时间戳对齐,不光看 IP。出现 “account locked” 或 “too many attempts” 就是它。

2. demo 账号要 2FA 或 SMS / 邮箱验证

审核员输完密码,App 弹出短信 / 邮箱二次验证,他拿不到那个手机号或邮箱,放弃。你自己手机已经登过,从来没在冷启动设备上验过完整流程。

如何判断:完全登出、抹掉 App 数据、重装,在一台从没登过这个账号的设备上用 demo 凭证登一次。出现 2FA 弹窗就是同一堵墙。

3. 两次提交之间账号过期或被删

v1.0 提交时建的 demo 账号,半年过去你的清理脚本顺手清了非活跃账号,或者密码被轮换,或者某个同事手抖禁用了用户。notes 里的凭证已经失效。

如何判断:管理后台搜 demo 账号,看 last_logindisabled_atpassword_changed_at。任何一个比 notes 里的凭证还新,账号就是死的。

4. App Review notes 里的凭证抄错

0Ol1、行尾空格、从文档复制带过来的智能引号、或字段标签写错(写 “username” 但 App 要 email)。审核员就是按你写的一字不差输入。

如何判断:照 App Store Connect Sign-In 字段里的原样取凭证(你的 App → 版本页 → App Review InformationSign-In requiredUser Name / Password),粘进生产登录表单。哪怕错一个字符都会被拒。

5. 登录后的功能有地域锁

审核员在美区(或你被分到的审核区),账号基础登录能过,但首页空空如也,因为内容被地域限制锁在审核员去不到的区。他认为登录坏了,因为 App 看起来死了。

如何判断:查你的内容 / 功能 gating 逻辑。如果同区登录用户落地是空状态,你要么给那个区准备样本数据,要么按 Apple 对”审核员够不到的功能”的官方建议,在 Notes 字段里贴一段短演示视频链接,展示被锁功能能正常跑。

6. App 接的是另一套环境(sandbox / staging),审核员根本进不去

你给 App Review 的生产 build 指向 staging,而 staging 域名挂在 Cloudflare Access 或公司 VPN 后。审核员连 auth 接口都打不到。

如何判断:反编译或 strings 一下 build,查 API base URL。如果是 staging.api.yourapp.com 而你有 Cloudflare Access 规则,就是它。

动手前先确认

  • 弄清问题是只在 demo 账号上、还是所有账号都登不上。Resolution Center 回复的写法不同:只锁这个账号说明是锁定或凭证失效,所有账号都登不上说明 auth 发布坏了。
  • 完整记下审核员原文,“could not sign in”“login failed with error X” 对应的修复方向不同。
  • 改 auth 规则前先备份当前配置(限速表、geo-block 表、MFA 强制开关)。
  • 确认你的 auth provider 套餐是否还覆盖 demo 用户。有些 provider 在免费 MAU 超额时会静默禁用账号。

需要收集的信息

  • 审核员完整原文 + 引用的 Guideline 编号(2.1 vs 4.0 修法不同)。
  • 过去 48 小时内 demo 用户在 auth provider 的全部日志。
  • App Store Connect Sign-In 字段里凭证的每一个字符(注意行尾空格、智能引号)。
  • 当前生效的限速 / geo-block / MFA 强制规则。
  • 一台从没登过这个账号的设备,用来重做冷启动测试。

最短修复路径

Step 1:用全新设备冷测凭证

借一台手机或开一个干净模拟器,Settings → General → Reset → Erase All Content and Settings,装上当前生产 build(TestFlight 或 App Store 装上一版),完全按 App Review notes 里的字面登录,禁用 Keychain 自动填充。60 秒内进不到首页就先修这一步。

Step 2:在 auth 后端解锁 demo 用户

Auth0 / Firebase / Cognito / Supabase / 自建库:

# Firebase Auth 示例
firebase auth:export users.json --project your-project
# 找到 demo 用户,确认 disabled=false, emailVerified=true

# 或用 Admin SDK
node -e "const a=require('firebase-admin');a.initializeApp();a.auth().updateUser('UID',{disabled:false,emailVerified:true})"

用户在限速表里就清掉条目;在地域拦截表里就把它单独白名单,或者把 Apple IP 段(17.0.0.0/8)只对这个账号放行。

Step 3:给 demo 用户摘掉 2FA + 验证

用户表里 mfa_enabled = falserequires_phone_verification = falserequires_email_verification = false。如果代码层强制全局 2FA,加一个 feature flag 豁免邮箱匹配 apple-review-*@yourdomain.com 的账号。

Step 4:填好 App Store Connect Sign-In 字段和 Notes

凭证要放进结构化字段,不要埋在大段文字里。你的 App → 版本页 → App Review Information → 勾上 Sign-In required,把准确的 demo 值填进 User NamePasswordNotes 字段只用来写上下文(验证码、地域行为、第二个账号)。

Notes 字段粘成:

Demo account: credentials are in the Sign-In fields above.
Login: tap "Sign In" on launch (no separate URL).
This account is reset on each submission and is single-device.
No 2FA is enforced for this user. Region-locked features are
pre-enabled; ignore the location prompt.

如果 App 有多种账号类型(admin vs 普通用户),每套都补写进 Notes;任何账号需要一次性验证码,也在这里贴一个当前有效的码。用直引号、ASCII 字符,避免智能标点,去掉行尾空格。别写 “see attached”——Apple 在审核工具里不一定显示附件,改贴视频链接。

Step 5:给账号预置样本数据 + 排除统计

冷登录后看到空首页照样触发 2.1。给 demo 用户预置 3 条样本文档 / 消息 / 歌单,让首屏有真实内容。同时把账号标 is_internal = true,别污染你的分析数据。

Step 6:重新提交(不需重传 build)

打开被拒的版本,改好 Sign-In 字段和 Notes,点 Submit for Review(老账号可能先显示 Add for ReviewSubmit)。Demo 账号修复属于 metadata-only,不用重新打包。如果审核员是在 Resolution Center 里提的问,记得在那条线程里回复确认你已改,因为闷头重交可能被卡在那条未结线程后面。

怎么确认已经修好

  • 用 Sign-In 字段里的凭证在干净设备上登录,30 秒内进到带样本内容的首页。
  • Auth provider 日志显示你的非 Apple IP 测试登录成功,未触发锁定或 2FA。
  • App Store Connect 的 App Review Information 里凭证和 Notes 渲染正确,没有编码乱码。
  • 重交后 1-2 小时内状态从 Rejected 回到 Waiting for Review(截至 2026 年 6 月,多数 demo 账号复审 24 小时内出结果)。

如果还是没修好

  1. 在 Resolution Center 回复时把凭证再贴一遍,附上(或贴链接)一段 30 秒屏录,证明你冷设备登录成功。
  2. 让审核员给具体错误码或截图。有时挡住的是 captcha,不是凭证。
  3. 准备第二个 demo 账号,以防你和审核员同时测把第一个限速了。
  4. 怀疑 IP geofencing 就通过 Contact App Review 表单问审核员出口地区,再把那个地区加进白名单。

预防建议

  • 维护一个永久豁免账号 apple-review@yourdomain.com:用数据库 flag 永久跳过 MFA、限速、地域拦截、不活跃清理。
  • 加 CI 步骤:每天用一个非美区 GitHub Actions runner 登一次 demo 账号,失败就告警。
  • 每次发版前给 demo 账号重新预置样本数据,让冷登录落地是带内容的首页。
  • 在仓库里维护 REVIEW.md 记录凭证;每次提交都从这个文件抄进 App Store Connect Sign-In 字段。
  • demo 账号不要绑真人手机号或邮箱,用你长期掌控的共享收件箱。

常见问题

修 demo 账号需要重传 build 吗? 不需要。Demo 凭证、Sign-In 开关、Notes 都属于 metadata。在被拒的版本上改完,用同一个二进制再点 Submit for Review 即可。

凭证到底填在 App Store Connect 哪里? 在 App 的版本页打开 App Review Information,勾上 Sign-In required,把值填进 User NamePassword 字段。自由文本的 Notes 字段只写上下文(验证码、地域行为、额外账号),不是放主凭证的地方。

账号在我手机上能登,审核员却说登不上,为什么? 你是带着缓存会话、已登记的 2FA 设备和熟悉的 IP 在测。审核员一样都没有。复现他的条件:抹一台设备、关掉自动填充,只用 Sign-In 字段里的内容登一次。

能把 Apple 的审核 IP 加白名单吗? 可以只对 demo 用户放行 17.0.0.0/8 段,但 Apple 没公布官方审核出口段,部分流量来自别的段。比起 IP 白名单,用一个数据库 flag 让 demo 账号永久跳过地域拦截和限速更可靠。

Metadata 重交后多久复审? 截至 2026 年 6 月,demo 账号复审通常 24 小时内出结果,重交后一两小时状态会回到 Waiting for Review

App 有地域锁,审核员所在区看到空白页怎么办? 给审核员所在区预置样本数据,或在 Notes 字段贴一段短演示视频链接——这是 Apple 对”审核员无法直接够到的功能”推荐的做法。

相关阅读

标签: #排查 #App Store #App 审核 #Demo 账号