这什么时候会冒出来?(为什么它会打你个措手不及)
这一刻总是相同,也总是让人难受:你做完了 app,提交到 App Store 审核……然后因为 5.1.1 规则被拒审。它之所以让你措手不及,是因为 AI 在构建时,注意力都放在创建账户和使用 app 的流程上——几乎从不去想删除账户的流程。这是一项法律和 Apple 的要求,你必须在发布前明确、主动地把它要出来。
那个会让你输两次的陷阱
正确的做法 · 软删除 + 匿名化
这里是真正行得通的平衡点。真正的技术难题是:如果你"粗暴地"删掉用户,数据库就会崩(他的订单、评论等等会指向一个已经不存在的用户)。专业的解决方案:真正删除个人数据(姓名、邮箱、照片、电话),但在原位留下一个匿名空壳,以免破坏关联。个人数据永远消失;而你数据库的完整性得以保留。
Apple 和法律要求你做到的 3 件事
- 一个"删除我的账户"按钮,容易找到,在 app 内部(通常在设置里)。
- 真正删除个人数据:姓名、邮箱、照片、电话——以不可逆的方式匿名化。
- 在认证系统里也要删除(不只是在你的用户表里——在 Supabase Auth / 登录服务商那边也要删)。
主 prompt · 交给你的 AI
这个 prompt 会让你的 AI 拿出满足规则和法律所需的一切,同时不破坏你的数据库。复制粘贴给它:
为我的 app 实现账户删除,遵守 Apple 的 5.1.1 规则以及 GDPR/CCPA。我的技术栈:[告诉它你的技术栈,例如 Supabase + Next.js]。 1. 在设置里创建"删除我的账户"按钮,容易找到。 2. 删除之前,显示清晰的确认(这是不可逆的),如果需要,可以要求验证身份(通过邮件/电话发一个验证码)。 3. 对个人数据(姓名、邮箱、照片、电话)做带不可逆匿名化的 SOFT DELETE。不要藏起来:把它们替换成匿名值(例如"已删除用户")或 NULL。 4. 留下一个空壳,以免破坏 foreign keys(他的订单/评论不能崩)。 5. 在 auth 系统里也删除身份(例如 Supabase Auth admin deleteUser),不只是在我的表里。 6. 如果用户有一个活跃的 SUBSCRIPCIÓN(订阅),在删除前提醒他,并告诉我如何处理取消,以免继续向他收费,也不丢失法律要求保存的账单记录。 7. 在审计日志里记录该账户已被删除(不含个人数据),以备法律要求时能证明。 给我迁移脚本、匿名化函数和按钮组件,并用简单的步骤向我解释每一部分做了什么。
几乎没人处理的情况 · 订阅
如何确认做对了
- 按钮在 app 内容易找到(不是藏在某个外部网页里)。
- 删除之后,个人数据在你的数据库里已经不存在(亲手验证一下)。
- 用户也从 auth 系统里消失(无法再登录)。
- 他留下的东西(订单、评论)没有崩——它们仍在,只是作者是匿名的。
- 如果有订阅,它已被取消,并留下了不含个人数据的会计记录。