《HarmonyOS 7 应用上架与隐私合规工程化》04:用户点了删除账号之后,数据真的删干净了吗【鸿蒙心迹】
·
界面提示"账号已注销",但数据库、缓存、云端 Token 里还留着数据。

用户点了"注销账号",界面显示"注销成功"。用户走了。
但真的删干净了吗?数据库里的用户表删了,缓存里的文件还在,云端的 Token 还没失效,第三方 SDK 里的数据也没人管。
这就是数据生命周期的问题。删除不是"删一张表"就完了。
一、先想清楚:数据存在哪些地方
先把最基础的问题想明白。
用户数据存在好几个地方:
| 位置 | 数据类型 |
|---|---|
| 本地数据库 | 用户信息、笔记、设置 |
| 本地缓存 | 图片、文件、Preferences |
| 云端 | 账号、笔记、备份 |
| 第三方 SDK | 统计数据、认证 Token |
每个地方都要删。漏一个,就没删干净。
二、删除账号要删哪些东西
完整的删除链路:
- 本地数据库:删用户表、笔记表;
- 本地缓存:删图片、文件、Preferences;
- 云端:调用云端 API 删账号、删数据;
- 第三方 SDK:通知 SDK 删用户数据;
- Token:失效所有 Token;
- 日志:清理用户标识。
这段代码解决什么问题: 账号注销数据清理。
文件: utils/DataCleaner.ets
用途: 数据删除链
接入位置: 注销账号流程
class DataCleaner {
async deleteAccount(userId: string): Promise<boolean> {
try {
// 1. 删本地数据库
await rdbStore.deleteTables(userId);
// 2. 删本地缓存
await fileCache.cleanAll(userId);
// 3. 删云端数据
await cloudApi.deleteUser(userId);
// 4. 通知 SDK 清理
await sdkManager.cleanUserData(userId);
// 5. 失效 Token
await authManager.revokeTokens();
return true;
} catch (e) {
console.error('删除失败:', e);
return false;
}
}
}

三、删除中途失败怎么办
还有个问题:删除进行到一半失败了怎么办?
比如:本地删完了,云端删的时候网络断了。这时候用户看到的是"注销成功"还是"注销失败"?
| 阶段 | 失败处理 |
|---|---|
| 本地删完,云端失败 | 标记为待删除,重试 |
| 云端删完,SDK 失败 | 后台异步重试 |
| 全部失败 | 给用户显示失败,不显示成功 |
四、几个容易踩的坑
第一个坑:只删账号表。缓存、文件、SDK 数据都没管。
第二个坑:缓存和附件没删。数据库删了,文件还在。
第三个坑:云端删了本地还在。两边不同步。
第四个坑:第三方 SDK 数据没人管。SDK 里还留着用户数据。
第五个坑:删除进行到一半失败却给用户显示成功。用户以为删了,实际没删。
第六个坑:日志继续记录已注销用户标识。日志里还有用户数据。
第七个坑:退出登录和注销账号混为一谈。退出只是登出,注销才是删除。
这次做数据删除最大的体会是:删除不是"点一下按钮",是一条完整的数据清理链。
真正做的时候,最容易忽略的不是怎么删数据,而是数据都存在哪里、哪些地方要删、删失败了怎么办。每一个角落都要想到。
更多推荐




所有评论(0)