# iOS 账号删除功能：提交 Apple 审核前要测的流程

> 删除按钮、关联数据、订阅和重新登录：提交 App Review 前逐项测试账号删除流程。

原始页面：[iOS 账号删除功能：提交 Apple 审核前要测的流程](https://devoria.fr/zh-hans/blog/ios-account-deletion-test-before-app-review)
作者：[Mehdi Azizi](https://devoria.fr/zh-hans/mehdi-azizi)
发布：2026-10-02
内容最后修订：2026-10-09


## 光有按钮不够：要确认哪些东西真的被删了

如果你的 app 允许创建账号，Apple 要求用户能在 app 内发起删除账号。仅仅停用账号不满足这个要求。这个流程要容易找到，并说明删除的后果。如果有一部分要在网页上完成，链接必须直接跳到对应的页面。[来源：Apple 关于账号删除的说明](https://developer.apple.com/support/offering-account-deletion-in-your-app)。

所以工作不只是在设置里放一个红色按钮。你要盘点数据，在服务器端执行删除，处理错误，再确认用户之后看到的是什么。这篇指南给出一套产品和技术层面的测试方案；有法定保留义务的数据，需要根据你的业务做相应处理。

## 先画一张数据地图

拿一个虚构的读书笔记 app 来举例。它有账号、个人资料、私人笔记，还有用户自己添加的封面照片。下面的例子描述的是一个待验证的方案，而不是某个 Devoria app 上已经执行过的删除。

- **登录身份：**删除之后，怎么让这个账号无法再使用？
- **个人资料和笔记：**哪些数据行属于这个人，怎么删除？
- **存储的照片：**用什么流程删除文件以及对它们的引用？
- **手机缓存：**界面是否只在操作真正成功后才清除本地数据？
- **第三方服务：**和这个账号相关的数据是否需要单独删除？
- **需要保留的数据：**哪些数据、出于什么义务保留，又怎样告知用户？

有了这张地图，你就不会事后才发现用户记录已经没了，照片却还能访问。它也给了你测试时要逐一检查的对象。

## 一个清晰的流程，分四个状态

下面是为这个虚构 app 设计的方案，请根据你产品的实际后果调整：

1. **账号设置。**“删除我的账号”入口始终可以找到。
2. **确认。**界面说明涉及哪些数据，并提供一个和删除操作一样容易理解的取消操作。
3. **处理中。**按钮防止重复提交，界面提示操作正在进行。
4. **结果。**确认成功后进入未登录状态。失败时保留有用的提示和重试方式，不要声称账号已经删除。

如果处理需要时间，Apple 接受延迟完成的流程，前提是告知用户并在完成后确认。只是记录了请求的时候，app 不能让人以为删除已经完成。同一份 [Apple 文档](https://developer.apple.com/support/offering-account-deletion-in-your-app)还说明了需要重新验证身份的情况，以及受严格监管行业的例外。

## 用 Supabase 要提前考虑的事

删除一个 Auth 用户，本身并不能证明你产品里的所有对象都已处理。Supabase 特别说明，拥有 Storage 对象的用户，在这个问题解决之前无法被删除。文档还指出，删除用户不会立刻让所有已签发的 JWT 失效：设计时要考虑它们的有效期。[来源：Supabase 用户管理](https://supabase.com/docs/guides/auth/managing-user-data)。

所以要设计一个服务器端流程，验证请求者的身份以及属于他的资源。不要依赖手机随意发来的某个 ID 来决定删除哪个账号。管理员权限留在服务器端，参见 [Supabase 密钥文档](https://supabase.com/docs/guides/getting-started/api-keys)。

如果流程分好几步，要想好：第一步成功、下一步失败时，重试应该怎么做。比如文件已经删掉了，新的请求不能仅仅因为文件不存在就报错。这是测试前要写好的场景，而不是靠猜的行为。

## 账号和订阅：两项独立的检查

用户可能删了账号，Apple 订阅却还在继续。Apple 要求说明账单之后会怎样，并提供管理订阅的入口。如果你用了 Sign in with Apple，还要安排好相应的令牌撤销。这些要点在 [Apple 关于删除的指引](https://developer.apple.com/support/offering-account-deletion-in-your-app)里有详细说明。

所以在测试计划里，要把账号删除、付费权限状态和订阅管理分开测。[订阅还是一次性买断](https://devoria.fr/zh-hans/blog/ios-app-subscription-vs-one-time-purchase)这篇指南能帮你把这个流程放进你的商业模式里考虑。

## 在测试 build 上执行的测试清单

只用测试账号和虚构数据。每项检查都记下 build、设备、观察到的结果和局限。

1. **取消。**账号和数据仍然可以访问。
2. **删除一个有数据的账号。**最终状态和说明的处理一致；相关数据确实被删除。
3. **断网。**app 不会显示虚假的成功。
4. **部分失败后重试。**请求可以完成，且不会波及其他数据。
5. **打开第二个会话。**旧的访问按照设计好的机制处理。
6. **用同一邮箱重新注册（如果允许）。**以前的私人数据不会重新出现。

把这些用例加进 [Devoria 测试清单](https://devoria.fr/zh-hans/resources)。要分发给测试人员，参考 [TestFlight](https://devoria.fr/zh-hans/blog/testflight-guide-test-iphone-app) 指南。控制台没有报错，不能代替对数据和流程的检查。

## 准备提交 App Review

在审核备注里，说明操作入口在哪里、怎么测试。如果某一步依赖某个服务，确保审核期间它可用。不要在备注里承诺提交的 build 中还不存在的功能。

如果已经被指出问题，[被 Apple 拒绝的 app](https://devoria.fr/zh-hans/expertise/app-rejected-by-apple) 这个页面能帮你组织回复。要准备回复，[Apple Review Kit](https://devoria.fr/zh-hans/kits/review-apple) 帮你找到被引用的规则、它的要求，以及修改和回复的示例。

如果你在准备第一次提交，[免费诊断](https://devoria.fr/zh-hans/diagnostic)会告诉你还差什么，并把我的防拒审清单发给你，账号删除也包括在内。如果 Apple 已经拒了你的 app，[和我预约一小时](https://devoria.fr/zh-hans/coaching)：我们视频连线，一起看那条消息。

## 常见问题

### iOS app 必须提供账号删除功能吗？

是的，只要你的 app 允许创建账号：Apple 要求用户能在 app 内发起删除账号。仅仅停用账号不满足这个要求。这个流程要容易找到，并说明删除的后果。如果有一部分要在网页上完成，链接必须直接跳到对应的页面。

### 用户删除账号时要删掉哪些东西？

属于这个人的一切，而不只是用户记录。列一张清单：登录身份、个人资料和创建的内容、存储的文件及其引用、手机缓存、第三方服务里的数据。还要记下需要保留的数据、出于什么义务，并告知用户。没有这份盘点，用户记录没了，照片却可能还能访问。

### Apple 接受不是立即完成的账号删除吗？

接受。如果处理需要时间，Apple 接受延迟完成的流程，前提是告知用户并在完成后确认。只是记录了请求的时候，app 不能让人以为删除已经完成。失败时保留有用的提示和重试方式，不要声称账号已经删除。

### 用户删除账号后，订阅会怎样？

账号删除后，Apple 订阅可能继续。Apple 要求说明账单之后会怎样，并提供管理订阅的入口。如果你用了 Sign in with Apple，还要安排好相应的令牌撤销。在测试计划里，把账号删除、付费权限状态和订阅管理分开测。

### 在 Supabase Auth 里删除用户就够了吗？

不够，删除一个 Auth 用户并不能证明你产品里的所有对象都已处理。根据 Supabase 文档，拥有 Storage 对象的用户，在这个问题解决之前无法被删除。删除用户也不会立刻让所有已签发的 JWT 失效。要设计一个服务器端流程来验证请求者的身份。

### 提交给 Apple 之前怎么测试账号删除？

在测试 build 上使用测试账号和虚构数据。执行六个用例：取消、删除有数据的账号、断网、部分失败后重试、打开第二个会话、在允许的情况下用同一邮箱重新注册。检查数据和流程：控制台没有报错并不够。要分发 build，参考 [TestFlight](https://devoria.fr/zh-hans/blog/testflight-guide-test-iphone-app) 指南。


## 你的项目

[Apple Review Kit](https://devoria.fr/zh-hans/kits/review-apple)：我在用的 App Store 审核检查清单、我被 Apple 拒绝后的修改、给审核员的备注，以及两个审查你 App 的 Claude Code skills。29 €。

[iOS Kit](https://devoria.fr/zh-hans/kits/ios)：用 Claude Code 做你的 iPhone App：我自己 App 的起步代码、检查其工作的 skills，以及 Apple Review Kit、App Store Screenshots Kit 和 ASO Kit。129,99 €。
