界面提示"账号已注销",但数据库、缓存、云端 Token 里还留着数据。

文章封面

用户点了"注销账号",界面显示"注销成功"。用户走了。

但真的删干净了吗?数据库里的用户表删了,缓存里的文件还在,云端的 Token 还没失效,第三方 SDK 里的数据也没人管。

这就是数据生命周期的问题。删除不是"删一张表"就完了。

一、先想清楚:数据存在哪些地方

先把最基础的问题想明白。

用户数据存在好几个地方:

位置数据类型
本地数据库用户信息、笔记、设置
本地缓存图片、文件、Preferences
云端账号、笔记、备份
第三方 SDK统计数据、认证 Token

每个地方都要删。漏一个,就没删干净。

二、删除账号要删哪些东西

完整的删除链路:

  1. 本地数据库:删用户表、笔记表;
  2. 本地缓存:删图片、文件、Preferences;
  3. 云端:调用云端 API 删账号、删数据;
  4. 第三方 SDK:通知 SDK 删用户数据;
  5. Token:失效所有 Token;
  6. 日志:清理用户标识。

这段代码解决什么问题: 账号注销数据清理。
文件: 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 里还留着用户数据。

第五个坑:删除进行到一半失败却给用户显示成功。用户以为删了,实际没删。

第六个坑:日志继续记录已注销用户标识。日志里还有用户数据。

第七个坑:退出登录和注销账号混为一谈。退出只是登出,注销才是删除。

这次做数据删除最大的体会是:删除不是"点一下按钮",是一条完整的数据清理链。

真正做的时候,最容易忽略的不是怎么删数据,而是数据都存在哪里、哪些地方要删、删失败了怎么办。每一个角落都要想到。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐