审核期间 Demo 账号失效:6 个原因 + 对症修复

App 提交后回 Metadata Rejected,留言写 demo 账号 invalid credentials,但你自己测能用——多半是审核员陌生 IP 撞上安全策略。本文按命中率给六种原因和修复。

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

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

常见原因

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

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

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

如何判断:去 auth provider 后台查 demo 用户的失败记录,时间锁定在审核窗口。看是否有 Apple IP 段(Cupertino 17.0.0.0/8)或中国区审核 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 → App Information → Review notes 里复制凭证,粘进生产登录表单。哪怕错一个字符都会被拒。

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

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

如何判断:查你的内容 / 功能 gating 逻辑。如果同区登录用户落地是空状态,你要么给那个区准备样本数据,要么在 notes 里写 VPN 指引。

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 里不同。
  • 完整记下审核员原文,“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 Review notes 里凭证的每一个字符(注意空格、引号)。
  • 当前生效的限速 / 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 Review notes,凭证明明白白

App Store Connect → 你的 App → App Information → App Review Information,粘成:

Demo account
Login URL: (in-app, tap "Sign In" on launch)
Email: apple-review-2026@yourdomain.com
Password: ReviewPass-Spring2026!

This account is monogamous (single device) but reset on each submission.
No 2FA. Region-locked features are pre-enabled for this user; ignore
the location prompt.

用直引号、ASCII 字符,避免智能标点。别写 “see attached”——Apple 在审核工具里不一定显示附件。

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

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

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

App Store Connect → App Store 标签 → 点 build → Submit for Review。Demo 账号修复属于 metadata-only,不用重新打包。

怎么确认已经修好

  • 用 App Review notes 里的凭证在干净设备上登录,30 秒内进到带样本内容的首页。
  • Auth provider 日志显示你的非 Apple IP 测试登录成功,未触发锁定或 2FA。
  • App Store Connect 里 App Review notes 预览渲染正确,没有编码乱码。
  • 重交后 1-2 小时内状态从 Metadata Rejected 回到 Waiting for Review

如果还是没修好

  1. 在 Resolution Center 回复时把凭证再贴一遍,附上一段 30 秒的 QuickTime 屏录,证明你冷设备登录成功。
  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 Review notes。
  • demo 账号不要绑真人手机号或邮箱——用你长期掌控的共享收件箱。

相关阅读

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