一、项目背景

在开发HarmonyOS应用过程中,隐私合规是应用上架审核的必要条件。根据《个人信息保护法》和相关规范,应用必须在获取用户个人信息前,明确告知并获得用户同意。

开发环境

  • DevEco Studio: 5.0.4
  • API Level: 16
  • 系统版本: HarmonyOS NEXT

二、遇到的合规问题

在应用提审过程中,收到了两个关键的隐私合规问题反馈:

问题一:缺少隐私政策提示

官方反馈: 注册登录界面未明确提示用户阅读隐私政策

影响: 用户无法在登录前了解应用的隐私政策,不符合合规要求。

问题二:提前获取个人信息

官方反馈: 在用户同意隐私政策前,应用获取了用户的个人信息(如位置)

影响: 违反了"最小必要原则",必须在用户同意后才能请求权限。

三、问题分析

根本原因

  1. 流程设计缺陷: 应用启动直接进入登录页,未设置隐私政策同意流程
  2. 权限请求时机错误: 在应用启动时就尝试获取位置等敏感权限
  3. 缺少持久化记录: 未保存用户的隐私政策同意状态

合规要求

  • 首次启动时,必须展示隐私政策并获得用户明确同意
  • 用户同意前,不得收集任何个人信息
  • 提供拒绝选项,用户拒绝后不得强制使用
  • 隐私政策内容必须可查看,且易于理解

四、解决方案

整体架构设计

应用启动流程:

应用启动 → SplashPage(启动页)

     ↓

检查隐私政策同意状态

     ↓

未同意 → PrivacyAgreementPage(隐私政策同意页)

     ↓

用户同意并保存状态

     ↓

LoginPage(登录页)

     ↓

MainPage(主页)

实施步骤

  1. 1:  创建启动检查页面

创建 pages/SplashPage.ets,负责检查用户是否已同意隐私政策。

核心功能:

  • 读取本地存储的隐私政策同意状态
  • 已同意:跳转到登录页
  • 未同意:跳转到隐私政策同意页
  1. 2:  创建隐私政策同意页面

创建 pages/PrivacyAgreementPage.ets,这是核心的合规页面。

关键功能点:

  • 明确列出需要的权限及用途
  • 提供隐私政策链接,支持在线查看(使用WebView组件)
  • 必须勾选复选框才能继续
  • 提供"不同意"选项并退出应用
  1. 3:  修改登录页面

在登录页面添加隐私政策勾选框作为二次确认。

实现要点:

  • 添加Checkbox组件让用户勾选同意
  • 提供可点击的《隐私政策》链接
  • 未勾选时禁用登录按钮(通过enabled和opacity属性控制)
  1. 4:  配置应用入口

修改 EntryAbility.ets,设置启动页为SplashPage。

windowStage.loadContent('pages/SplashPage', ...)

  1. 5:  配置权限声明

module.json5 中添加权限配置。

需要声明的权限:

  • INTERNET:网络访问权限
  • APPROXIMATELY_LOCATION:粗略位置权限
  • LOCATION:精确位置权限
  1. 6:  权限请求时机控制

关键: 只在用户同意隐私政策后才请求权限。

实现流程:

  • 检查隐私政策同意状态(从preferences读取)
  • 未同意则拒绝权限请求
  • 已同意则使用abilityAccessCtrl请求权限
  • 权限通过后才能获取位置等个人信息

五、踩坑记录

坑点一:Context类型错误

问题现象: 使用 getContext(this).terminateSelf() 时报错

Property 'terminateSelf' does not exist on type 'Context'

原因分析: terminateSelf()是UIAbilityContext特有的方法,普通Context没有。

解决方案:

import common from '@ohos.app.ability.common';

const context = getContext(this) as common.UIAbilityContext;

context.terminateSelf();

坑点二:Preferences初始化失败

问题现象: 首次启动时 preferences.getPreferences() 可能失败。

解决方案: 添加异常处理,失败时默认跳转到隐私政策页面。

坑点三:WebView加载隐私政策需要网络权限

问题现象: 隐私政策页面的WebView无法加载在线内容。

解决方案: 确保 module.json5 中已声明INTERNET权限。

六、总结与建议

核心要点

  • 流程优先: 隐私政策同意必须在任何个人信息收集之前
  • 持久化存储: 使用preferences保存用户同意状态
  • 明确告知: 清晰列出所需权限及用途
  • 提供选择: 允许用户拒绝并退出

合规检查清单

  • 首次启动展示隐私政策页面
  • 提供完整的隐私政策查看方式
  • 用户未同意前不请求任何权限
  • 明确列出所需权限及用途
  • 提供"不同意"选项
  • 持久化保存用户同意状态
  • 登录页面添加隐私政策勾选

开发建议

隐私合规不仅是法律要求,更是建立用户信任的基础。建议在项目初期就规划好隐私保护机制,避免后期返工。在实际开发中,要特别注意以下几点:

  • 将隐私政策URL配置化,方便后续更新
  • 记录用户同意的时间戳,便于追溯
  • 在应用设置中提供查看隐私政策的入口
  • 定期审查应用收集的个人信息,确保符合最小必要原则

Logo

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

更多推荐