# 鸿蒙个人中心与设置模块实战|隐私数据管控、用户中心闭环与合规收尾

一、前言

心晴驿站已正式上架华为应用市场,经过前十篇的迭代开发,项目已完成架构搭建、路由封装、组件化体系、隐私树洞、本地持久化存储、双量表心理测评、四大治愈游戏核心模块,产品核心业务能力已全部落地。

一款能够顺利上架、通过隐私审核与体验检测的鸿蒙应用,除了核心业务功能,还必须具备完善的用户数据管理、隐私操控能力、标准化设置中心、合规声明展示。很多功能完整的项目,往往因为缺少隐私清空入口、无版本说明、无合规页面,最终上架被驳回。

本篇作为项目业务收尾核心篇章,将完整落地个人中心 + 设置中心全套模块,实现测评数据可视化展示、一键清空隐私数据、隐私政策展示、版本信息、应用介绍等刚需合规能力,彻底补齐项目上架最后一块短板,完成全业务闭环。

二、模块功能规划与上架合规要求

2.1 核心功能清单

结合华为应用市场上架规范,本次个人中心与设置模块包含以下刚需功能:

  • 用户数据看板:展示历史测评等级、情绪状态、测评分数,数据可视化回显;

  • 隐私数据管控:一键清空所有本地测评数据、配置数据,完全由用户自主掌控;

  • 标准化设置中心:包含基础配置、隐私入口、功能说明;

  • 合规页面展示:隐私政策、应用介绍、版本信息展示;

  • 友好无数据兜底:无测评记录时展示空态占位,UI整洁规范。

2.2 上架硬性合规规范

所有鸿蒙应用上架必须满足以下隐私规范,也是本篇重点落地内容:

  • 用户产生的所有隐私数据,必须提供主动删除/一键清空入口;

  • 应用必须展示版本信息、隐私协议、产品介绍,做到内容透明化;

  • 禁止应用私自留存用户数据,用户清空后必须彻底销毁,无隐性残留;

  • 页面逻辑完整,无死页面、无空白页面、无无效跳转。

三、模块整体架构设计

延续项目统一分层架构,个人中心模块依旧遵循数据解耦、视图复用、逻辑统一的开发思想:

  1. 数据层:复用第八篇 Preferences 存储工具与 StoreKey 常量,读取、清空用户数据;

  2. 逻辑层:封装数据读取、数据清空、弹窗提示、版本获取通用方法;

  3. 视图层:全局复用 WarmCard、EmptyPlaceholder、WarmButton 公共组件,统一UI风格;

  4. 路由层:基于全局路由工具,实现设置、隐私协议、关于页面无缝跳转。

四、通用工具方法封装

新增用户中心通用工具方法,用于读取用户测评数据、获取应用版本、统一数据格式化。

arkts 复制代码
/**
 * 用户中心通用工具
 * 数据读取、版本获取、隐私清空方法
 */
import { getStoreData, clearAllStoreData } from '../utils/store_utils'
import StoreKey from '../constant/store_key'
import appInfo from '@ohos.appinfo'

/**
 * 获取用户测评完整数据
 */
export async function getUserTestData() {
  const score = await getStoreData<number>(StoreKey.PHQ9_SCORE, 0)
  const level = await getStoreData<string>(StoreKey.TEST_LEVEL, '')
  const desc = await getStoreData<string>(StoreKey.TEST_DESC, '')
  return {
    hasRecord: score > 0 && level,
    score,
    level,
    desc
  }
}

/**
 * 清空用户所有隐私数据
 */
export async function clearUserPrivateData() {
  await clearAllStoreData()
}

/**
 * 获取应用版本号
 */
export async function getAppVersion() {
  try {
    const info = await appInfo.getApplicationInfo()
    return info.versionName || '1.0.0'
  } catch (e) {
    return '1.0.0'
  }
}
    

五、个人中心主页完整落地代码

实现用户情绪数据看板、空态兜底、跳转设置、底部导航联动,完全复用项目现有组件与架构。

arkts 复制代码
/**
 * 个人中心页面
 * 数据可视化展示、设置入口、合规闭环
 */
import { WarmCard, WarmButton, EmptyPlaceholder } from '../components/common'
import { RouteUtils } from '../utils/route_utils'
import RoutePath from '../constant/route_const'
import { getUserTestData } from '../utils/user_utils'

@Entry
@Component
struct MinePage {
  // 测评数据
  @State hasRecord: boolean = false
  @State testScore: number = 0
  @State testLevel: string = ''
  @State testDesc: string = ''
  // 底部导航下标
  @State currentTabIndex: number = 3

  aboutToAppear() {
    this.getUserData()
  }

  // 读取用户本地测评数据
  async getUserData() {
    const res = await getUserTestData()
    this.hasRecord = res.hasRecord
    this.testScore = res.score
    this.testLevel = res.level
    this.testDesc = res.desc
  }

  // 底部导航切换
  onTabChange(index: number) {
    this.currentTabIndex = index
    switch (index) {
      case 0:
        RouteUtils.clearAllPush(RoutePath.INDEX_PAGE)
        break
      case 1:
        RouteUtils.clearAllPush(RoutePath.EVAL_PAGE)
        break
      case 2:
        RouteUtils.clearAllPush(RoutePath.GAME_PAGE)
        break
      case 3:
        break
    }
  }

  build() {
    Column() {
      // 头部个人信息卡片
      this.UserHeadCard()

      // 情绪测评数据看板
      this.UserDataPanel()

      // 功能入口列表
      this.FunctionEntryList()

      Blank().layoutWeight(1)

      // 底部导航
      TabBar({ currentIndex: this.currentTabIndex, onTabChange: this.onTabChange })
    }
    .width('100%')
    .height('100%')
    .padding({ left: 16, right: 16, top: 20 })
    .backgroundColor('#F8FAFF')
  }

  // 头部卡片
  @Builder
  UserHeadCard() {
    WarmCard() {
      Column() {
        Text('心晴驿站 · 个人中心')
          .fontSize(18)
          .fontWeight(FontWeight.Medium)
        Text('守护你的每一份情绪与温柔')
          .fontSize(13)
          .fontColor('#999')
          .margin({ top: 6 })
      }
      .width('100%')
      .alignItems(HorizontalAlign.Start)
    }
  }

  // 数据看板
  @Builder
  UserDataPanel() {
    WarmCard({ title: '我的情绪测评记录' }) {
      if (this.hasRecord) {
        Column({ space: 12 }) {
          Text(`综合得分:${this.testScore} 分`)
            .fontSize(15)
          Text(`情绪状态:${this.testLevel}`)
            .fontSize(15)
            .fontColor('#7FB8F7')
          Text(this.testDesc)
            .fontSize(13)
            .fontColor('#666')
            .lineHeight(22)
        }
        .width('100%')
        .alignItems(HorizontalAlign.Start)
      } else {
        EmptyPlaceholder({ emptyText: '暂无测评记录,快去测测你的情绪状态吧~' })
      }
    }
    .margin({ top: 16 })
  }

  // 功能入口
  @Builder
  FunctionEntryList() {
    Column({ space: 12 }) {
      WarmCard() {
        Text('通用设置')
          .fontSize(15)
          .width('100%')
      }
      .onClick(() => RouteUtils.push(RoutePath.SETTING_PAGE))

      WarmCard() {
        Text('隐私政策')
          .fontSize(15)
          .width('100%')
      }
      .onClick(() => RouteUtils.push(RoutePath.PRIVACY_PAGE))

      WarmCard() {
        Text('关于我们')
          .fontSize(15)
          .width('100%')
      }
      .onClick(() => RouteUtils.push(RoutePath.ABOUT_PAGE))
    }
    .margin({ top: 16 })
  }
}
    

六、设置中心与隐私清空核心页面

设置页面为项目隐私合规核心页面,重点实现一键清空用户隐私数据、数据重置能力,搭配弹窗二次确认,防止误操作。

arkts 复制代码
/**
 * 设置中心页面
 * 隐私数据一键清空、合规核心功能
 */
import { WarmCard, WarmButton } from '../components/common'
import { RouteUtils } from '../utils/route_utils'
import { clearUserPrivateData } from '../utils/user_utils'
import promptAction from '@ohos.promptAction'

@Entry
@Component
struct SettingPage {
  // 清空用户数据
  async function clearAllData() {
    // 二次确认弹窗
    let res = await promptAction.showDialog({
      title: '温馨提示',
      message: '确定要清空所有本地测评数据与配置数据吗?清空后无法恢复!',
      primaryButton: '取消',
      secondaryButton: '确认清空'
    })
    if (res.index === 1) {
      await clearUserPrivateData()
      promptAction.showToast({ message: '数据已清空' })
      // 返回个人中心刷新数据
      RouteUtils.back()
    }
  }

  build() {
    Column() {
      // 顶部标题
      Row() {
        Text('← 返回')
          .fontSize(16)
          .fontColor('#7FB8F7')
          .onClick(() => RouteUtils.back())
        Text('设置中心')
          .layoutWeight(1)
          .textAlign(TextAlign.Center)
          .fontSize(17)
          .fontWeight(FontWeight.Medium)
      }
      .width('100%')
      .height(40)

      // 隐私设置模块
      WarmCard({ title: '隐私与数据管理' }) {
        Column({ space: 10 }) {
          Text('清空所有本地测评数据、个性化配置,数据清空后无任何残留')
            .fontSize(12)
            .fontColor('#999')
            .lineHeight(20)

          WarmButton({
            text: '一键清空隐私数据',
            primary: true,
            onClick: () => this.clearAllData()
          })
          .margin({ top: 10 })
        }
      }
      .margin({ top: 20 })

      Blank().layoutWeight(1)
    }
    .width('100%')
    .height('100%')
    .padding(16)
    .backgroundColor('#F8FAFF')
  }
}
    

七、关于页面与版本信息落地

展示应用名称、版本号、产品介绍,完善应用合规信息展示,补齐上架信息完整性要求。

arkts 复制代码
/**
 * 关于我们页面
 * 版本信息、产品介绍合规展示
 */
import { WarmCard } from '../components/common'
import { RouteUtils } from '../utils/route_utils'
import { getAppVersion } from '../utils/user_utils'

@Entry
@Component
struct AboutPage {
  @State versionName: string = '1.0.0'

  aboutToAppear() {
    this.getVersion()
  }

  async getVersion() {
    this.versionName = await getAppVersion()
  }

  build() {
    Column() {
      Row() {
        Text('← 返回')
          .fontSize(16)
          .fontColor('#7FB8F7')
          .onClick(() => RouteUtils.back())
        Text('关于我们')
          .layoutWeight(1)
          .textAlign(TextAlign.Center)
          .fontSize(17)
          .fontWeight(FontWeight.Medium)
      }
      .width('100%')
      .height(40)

      WarmCard() {
        Column({ space: 15 }) {
          Text('心晴驿站')
            .fontSize(20)
            .fontWeight(FontWeight.Bold)

          Text(`当前版本:${this.versionName}`)
            .fontSize(14)
            .fontColor('#666')

          Text('产品介绍')
            .fontSize(16)
            .fontWeight(FontWeight.Medium)
            .margin({ top: 10 })

          Text('心晴驿站是一款轻量化治愈系心理工具应用,提供专业心理测评、私密情绪树洞、治愈解压游戏、白噪音冥想等功能。全程离线可用、高隐私零留存,专注为用户提供温柔、无负担的情绪陪伴体验。')
            .fontSize(13)
            .fontColor('#666')
            .lineHeight(24)
        }
        .width('100%')
        .alignItems(HorizontalAlign.Center)
      }
      .margin({ top: 20 })

      Blank().layoutWeight(1)
    }
    .width('100%')
    .height('100%')
    .padding(16)
    .backgroundColor('#F8FAFF')
  }
}
    

八、隐私政策页面极简合规实现

上架应用必备页面,展示标准隐私说明,内容贴合项目离线、无采集、零留存的产品特性。

arkts 复制代码
/**
 * 隐私政策页面
 * 上架合规必备页面
 */
import { RouteUtils } from '../utils/route_utils'

@Entry
@Component
struct PrivacyPage {
  build() {
    Column() {
      Row() {
        Text('← 返回')
          .fontSize(16)
          .fontColor('#7FB8F7')
          .onClick(() => RouteUtils.back())
        Text('隐私政策')
          .layoutWeight(1)
          .textAlign(TextAlign.Center)
          .fontSize(17)
          .fontWeight(FontWeight.Medium)
      }
      .width('100%')
      .height(40)

      Scroll() {
        Column() {
          Text('隐私政策')
            .fontSize(18)
            .fontWeight(FontWeight.Medium)
            .width('100%')

          Text(`
心晴驿站高度重视用户隐私与数据安全,本应用严格遵循隐私最小化原则,郑重说明如下:

1. 本应用全程离线运行,无任何网络上传、数据采集、信息上报行为。
2. 情绪树洞内容仅内存临时存储,退出页面立即销毁,无本地留存。
3. 测评数据仅保存在用户设备本地私有目录,仅用户本人可查看。
4. 所有用户数据支持一键彻底清空,无隐性缓存、无后台留存。
5. 本应用不获取手机设备信息、不获取隐私权限、不收集个人信息。

我们将持续守护用户隐私安全,为用户提供安全、纯净、无负担的治愈体验。`)
            .fontSize(13)
            .lineHeight(26)
            .fontColor('#555')
            .margin({ top: 15 })
        }
        .padding(5)
      }
      .margin({ top: 20 })
      .layoutWeight(1)
    }
    .width('100%')
    .height('100%')
    .padding(16)
    .backgroundColor('#F8FAFF')
  }
}
    

九、模块核心亮点与上架合规总结

9.1 完整隐私管控闭环

从数据存储、数据展示、数据删除全链路闭环,用户可随时查看、随时清空个人隐私数据,完全满足华为应用市场隐私合规审核硬性标准,彻底杜绝「数据无法手动删除」的驳回问题。

9.2 页面信息完整合规

补齐版本信息、产品介绍、隐私政策三大必备页面,应用信息透明化,符合鸿蒙应用上架内容规范,无合规缺失项。

9.3 极致用户体验优化

增加空态兜底、二次确认弹窗、Toast提示,避免用户误操作,交互逻辑严谨、体验流畅,无功能BUG、无逻辑漏洞。

9.4 架构高度复用

全程复用全局组件、路由工具、存储工具,无冗余代码、无重复逻辑,页面简洁轻量化,低内存、低功耗,适配全机型。

十、开发踩坑复盘(上架关键避坑)

10.1 清空数据后页面数据不刷新

问题:一键清空数据后返回个人中心,旧数据依旧展示,需要手动刷新。

解决方案:清空数据后返回个人中心页面,页面重新声明周期加载,自动读取最新空数据,完成刷新。

10.2 无二次确认导致误操作投诉风险

问题:直接点击清空立即删除数据,用户容易误触,体验极差。

解决方案:增加系统弹窗二次确认,区分取消/确认操作,规避误操作问题。

10.3 缺少隐私页面导致上架驳回

问题:很多个人项目因无隐私政策页面、无合规说明,直接审核不通过。

解决方案:标配隐私政策页面,内容与项目实际逻辑完全匹配,不虚假、不套用模板。

10.4 版本号固定写死不规范

问题:硬编码版本号,后续迭代需要手动修改,维护麻烦且不规范。

解决方案:读取系统应用版本信息,动态渲染,适配后续版本迭代更新。

十一、本篇总结与下篇预告

本篇我们完整落地了心晴驿站个人中心、设置中心、合规页面全套功能,实现了用户数据可视化、隐私数据一键清空、版本展示、隐私政策、关于页面等上架刚需能力,彻底完成项目所有业务功能与合规体系闭环。

至此,心晴驿站项目架构、路由、组件、隐私功能、测评业务、治愈游戏、用户中心、合规体系全部开发完毕,项目整体达到完整上架、商用、参赛标准。

下篇预告(第十二篇) :项目全局适配、性能终极优化与上架打包全流程,详解多机型弹性适配、内存优化、功耗优化、冗余资源清理、APP签名打包、上架提审流程,完成项目从开发到正式上架的最后一公里。

相关推荐
不爱吃糖的程序媛3 小时前
Tauri + 鸿蒙PC:在鸿蒙系统上运行跨平台桌面应用
华为·harmonyos
想你依然心痛4 小时前
HarmonyOS 6 悬浮导航 + 沉浸光感:打造鸿蒙智能体驱动的沉浸式代码评审助手
华为·ar·harmonyos·智能体
TechPioneer_lp4 小时前
就业指导|中九非科班毕业,华为 OD 做 Java 后端想转 C++,能找到深度学习挂钩的岗工作吗?
java·c++·华为od·华为·就业指导·校招指导
想你依然心痛4 小时前
HarmonyOS 6 悬浮导航 + 沉浸光感:打造鸿蒙智能体驱动的沉浸式编程学习伴侣
学习·华为·ar·harmonyos·智能体
前端不太难4 小时前
鸿蒙 PC 正在重新定义“软件”
状态模式·harmonyos
枫叶丹44 小时前
【HarmonyOS 6.0】Graphics Accelerate Kit:基于Vulkan的顶点标记技术
华为·harmonyos
想你依然心痛6 小时前
HarmonyOS 6(API 23)实战:基于悬浮导航、沉浸光感与HMAF的“数智视界“——PC端AI智能体沉浸式数据可视化分析工作台
华为·ar·harmonyos·智能体
前端不太难14 小时前
从单页面到系统化:鸿蒙 App 演进路径
华为·状态模式·harmonyos
想你依然心痛16 小时前
HarmonyOS 6(API 23)实战:基于悬浮导航、沉浸光感与HMAF的“文思智脑“——PC端AI智能体沉浸式智能写作工作台
人工智能·ar·harmonyos·ai写作