movdo 隐私政策
版本:0.1(草案) 生效日期:待定 更新日期:2026-09-24
⚠️ 这是开发阶段的草案,用于鸿蒙上架材料准备与内部对齐,尚未生效。 正式发布前必须:(1) 补齐运营主体的真实名称与联系方式;(2) 经法务/合规审阅; (3) 部署到公网可访问的 URL(AGC 上架材料不接受仓库内文件路径); (4) 在 App 内提供入口并加上首启同意闸门 —— 已完成(2026-09-24), 首启同意闸门 + 四处入口(同意页、登录页底部、注册页底部、「我的」页); (5) 接入鸿蒙端的登录令牌安全存储(Asset Store Kit),见 2.1 节与合规清单 —— 代码已完成(2026-09-24),真机读写复验待设备可用时补做。 (6) 删掉 4.1 里一条与实现不符的第三方共享声明 —— 已完成(2026-09-24): 原表列有「Apple / Google 推送服务 · 设备推送令牌」,但本工程从未接入任何推送服务 (提醒全部在设备本地排定与触发),该行已删除,并在 2.6 补了「不收集推送令牌」。 上述前置项见
docs/ohos-compliance-checklist.md的 P0-7。本文描述以当前代码为准逐条核对。凡是"接口支持但客户端未实现"的地方, 都按实际不采集来写,并注明了接口预留的事实,避免政策与实现不一致。 但「核对过」不等于「不会再错」:上面第 (6) 条本身就是一条漏网的假声明; 另有一处已知未决 —— 2.1 节「不随应用备份导出」与 Android
allowBackup缺省为 true 相冲突,待法务审阅时一并定稿(合规清单 P1-10)。
一、我们是谁
movdo 是一款运动管理应用,帮助你制定每周运动计划、按时提醒、通过手机传感器 识别运动是否真的发生,并记录由此产生的健康指标。
- 运营主体:待填写(公司/开发者全称)
- 联系方式:待填写(邮箱 / 客服电话)
- 个人信息保护负责人:待填写(姓名与联系方式)
二、我们收集哪些信息,为什么收集
2.1 账号信息(你主动提供)
| 信息 | 用途 | 是否必需 |
|---|---|---|
| 手机号 | 注册与登录的唯一标识 | 是 |
| 登录密码 | 身份校验 | 是 |
| 昵称、头像 | 在动态圈与挑战中展示你的身份 | 否 |
密码使用 bcrypt(cost 10)加盐哈希后存储,我们不保存明文,也无法还原。
登录令牌只保存在设备本地、仅本应用可访问的存储区,不上传服务器,也不随应用备份导出。 分平台说明:
- Android / iOS:通过
flutter_secure_storage写入系统提供的凭据安全存储。 - HarmonyOS:
flutter_secure_storage没有鸿蒙实现,令牌改由系统级的 Asset Store Kit 托管 —— 由操作系统加密保存、仅本应用可访问, 其他应用无法读取。 为支持"退出登录即清除全部令牌",应用沙箱内另存一份键名清单 (形如access_token、refresh_token),用于枚举本应用写入过哪些令牌; 该清单只含键名,不含令牌内容本身。之所以需要它:Asset Store Kit 在当前 适配的系统版本上没有"列出全部条目"的接口,不借助清单就无法保证退出登录时 一条不漏。
2.2 身体与目标信息(你主动提供,属敏感个人信息)
性别、出生日期、身高、体重、运动目标类型。
- 用途:计算 MET-hours、训练负荷、Zone2 心率区间等健康指标。 缺少这些字段时相关指标会显示为不可用,而不是用默认值估算。
- 这部分属于《个人信息保护法》下的敏感个人信息(含生理信息)。 你可以完全不填,此时仅健康中心的部分指标不可用,其余功能不受影响。
2.3 运动传感器数据(自动采集)
| 信息 | 采集时机 | 用途 |
|---|---|---|
| 加速度计三轴数据 | 仅在 App 处于前台时 | 识别跑步/快走/跳绳,统计步数、步频、振幅 |
| 陀螺仪三轴数据 | 仅在 App 处于前台时 | 识别跳绳的手腕旋转、骑行的车身稳定性 |
关于这部分,有几点我们想说得明确一些:
- 原始三轴数据在设备本地完成识别后即丢弃,不上传服务器。 上传的是识别后的结果(运动类型、时长、距离、步数、卡路里)。
- 后台不采集。这是产品的硬性红线:App 退到后台时,正在进行的传感器订阅
会被主动取消(HarmonyOS 上由
WearEnginePlugin的前后台状态监听强制执行, 手表侧的加速度计/陀螺仪订阅同样会被退订)。 - 提醒到点时,我们先把你请回 App 前台,再开始采集 —— 不存在 "在你不知情的情况下后台偷偷记录"的路径。
- 接口层预留了逐秒样本字段(心率、速度、步频、经纬度、海拔), 当前客户端不采集也不上传其中的任何一项。预留字段的存在不改变实际采集范围。
2.4 运动与健康记录(由 2.2 / 2.3 派生)
- 运动记录:运动类型、开始与结束时间、距离(米)、时长(秒)、卡路里。
- 每日健康汇总:步数、距离、卡路里、活跃分钟数、MET-hours、训练负荷、 Zone2 分钟数、平均心率。
- 周计划与日计划:计划周期、运动类型、目标值、开始时间、完成状态、延后次数。
用途:健康中心的完成率、连续天数、趋势图,以及周报生成。 所有汇总按 UTC 聚合,周从周一开始。
2.5 社交内容(你主动发布)
- 动态内容、配图链接、关联的运动类型、可见性设置(公开 / 仅好友 / 仅自己)。
- 评论、点赞。
- 好友关系(通过用户 ID 添加,需要对方同意;可拉黑)。
- 挑战参与记录(你的进度值、报名时间、完成时间)与成就徽章。
关于排行榜,我们做了一个明确的产品选择:应用内不提供任何公开排行榜, 不展示他人昵称、进度或名次,也没有"击败了多少人""超过百分之几"这类文案。 挑战只展示参与总人数和你自己的进度。这是为了避免运动变成攀比, 也因此我们不会为了排名功能去收集或分析你与他人的对比数据。
2.6 我们不收集的信息
- 精确或粗略位置:当前版本没有任何定位代码,
module.json5中也不声明任何 定位权限,不记录运动轨迹。(历史遗留的三条定位权限声明已于 2026-09-23 移除, 见合规清单 P0-2。) - 通讯录、通话记录、短信
- 相机、麦克风、相册:当前版本不请求这些权限。动态配图为 URL 字段, 应用内尚未接入拍摄或选图上传。
- 心率:HarmonyOS 端的人体传感器没有授权通道,心率接口恒返回空值, 不会以估算值或默认值填充。健康中心的 Zone2 指标因此显示为不可用。
- 后台位置、后台运动数据:见 2.3。
- 设备 identifiers 用于广告:我们不接入任何广告 SDK,不做广告归因。
- 推送令牌:不接入任何推送服务(FCM / HMS Push / APNs),运动提醒在设备本地 排定与触发,详见 4.1。
三、信息如何存储与保护
| 项目 | 说明 |
|---|---|
| 存储位置 | 自建后端服务,数据库为 PostgreSQL,缓存为 Redis |
| 存储地域 | 待填写(机房/云区域。如涉及境外存储需单独告知并取得单独同意) |
| 传输加密 | 正式环境要求全程 HTTPS。当前开发版本仍为明文 HTTP,属上架前必修项(合规清单 P1-5) |
| 口令存储 | bcrypt(cost 10)单向哈希 |
| 令牌存储 | 设备安全存储区,不落普通文件 |
| 访问控制 | 后端接口全部要求 JWT;社交内容的可见性过滤在服务端完成,客户端拿不到无权查看的数据 |
| 保留期限 | 账号存续期间保留;注销后按第六节删除 |
我们不会把你的个人信息出售给任何第三方。
四、我们如何共享信息
我们不会向任何第三方出售、出租你的个人信息。仅在以下情形下会涉及第三方:
4.1 系统能力提供方
| 第三方 | 场景 | 涉及的信息 |
|---|---|---|
| 华为终端有限公司(HarmonyOS 系统 / 代理提醒) | 在你设定的时间弹出运动提醒 | 提醒的标题、正文、触发时间。由系统代理提醒服务在本地托管,App 退出后由系统接管 |
| 华为 Wear Engine(穿戴设备数据协同) | 连接华为手表后读取运动传感器数据 | 手表的不透明设备标识、加速度计/陀螺仪读数。当前版本未取得该服务的授权通道,实际不会发起任何读取;心率在任何情况下都不读取 |
运动提醒不经过任何推送服务。 提醒完全在设备上排定与触发:HarmonyOS 端交给系统的
代理提醒服务在本地托管(上表第一行),Android 端由 AlarmManager 排定、
NotificationManager 本地弹出(android/app/src/main/kotlin/.../AlarmReceiver.kt,
清单里只有 AlarmReceiver 与 BootReceiver 两个广播接收器)。App 不接入
FCM / HMS Push / APNs,因此不存在也不会获取、上传任何推送令牌。
iOS 端目前没有构建产物(见合规清单 P1-6)。
上述第三方各自适用其自己的隐私政策。我们只提供实现功能所必需的最小信息。
4.2 其他用户
你在动态圈发布内容时,可见性由你选择:
- 公开:所有用户在广场可见(按时间排序,不提供热门或排名);
- 仅好友:只有已互相同意的好友可见;
- 仅自己:只存在于你的账号下,任何其他用户都看不到。
可见性过滤在服务端完成。设为"仅自己"的内容不会因为客户端漏洞而下发给别人。 你的昵称与头像会随你发布的动态、评论一起展示给能看到该内容的人。
4.3 法律要求
在法律法规明确要求、或司法/行政机关依法定程序要求时,我们可能被迫披露。 在这种情况下我们会核验请求的合法性,并在允许的前提下告知你。
五、你的权利
你可以随时行使以下权利。撤回同意的入口在 App 的"我的"页面,其余按下表就地行使:
| 权利 | 如何行使 |
|---|---|
| 查阅 | 健康中心、动态圈、挑战页展示的就是你的全部数据;也可通过联系方式索取副本 |
| 更正 | 自己发布的动态可随时改可见性(公开/仅好友/仅自己);身高、体重与运动目标在制定周计划时填写,可随时重新设置;昵称、头像的自助修改页尚未实现,需通过第九节的联系方式提出 |
| 删除 | 自己发布的动态与评论可在动态圈逐条删除;运动记录与健康汇总需通过第九节的联系方式申请删除 |
| 撤回同意 | App 内:我的 → 撤回同意,确认后立即回到首启同意页并停止一切采集;也可在系统设置中关闭通知、卸载 App |
| 注销账号 | 见第六节 |
| 拒绝自动化决策 | 我们不使用你的个人信息做自动化决策或用户画像 |
| 投诉 | 通过第九节的联系方式提出,我们会在 15 个工作日内答复 |
撤回同意或关闭权限不影响撤回之前基于同意已进行的处理活动的合法性。
六、账号注销与数据删除
- 注销入口:应用内的自助注销页尚未实现,目前请通过第九节的联系方式提出注销请求。
- 注销后果:账号、个人资料、周计划与日计划、运动记录、健康汇总、动态、评论、 点赞、好友关系、挑战参与记录、成就徽章将被删除或匿名化。
- 例外:为满足法律法规的留存要求(如交易日志),部分数据可能在法定期限内 以隔离形式保留,期满后删除。
- 他人可见内容:你发布的公开动态在注销后不再展示;他人对你动态的评论 归属于评论者,会保留但不再关联到你的身份。
- 时限:注销请求在验证身份后 15 个工作日内完成。
七、未成年人保护
本应用面向成年人。我们不会主动收集不满 14 周岁未成年人的个人信息。 若你是未成年人的监护人并发现孩子在未经你同意的情况下提交了个人信息, 请通过第九节联系我们,我们会及时删除。
出生日期为你自行填写。若我们发现账号属于不满 14 周岁的未成年人且无监护人同意, 将注销该账号并删除相关数据。
八、本政策的更新
发生以下变化时我们会更新本政策,并在 App 内以弹窗或站内信方式再次征得你的同意:
- 处理个人信息的目的、方式或范围发生变化;
- 新增第三方共享或系统能力;
- 你的权利行使方式发生变化;
- 运营主体或联系方式发生变化。
仅修正错别字、调整排版这类不影响你权益的改动,只更新"更新日期",不再单独通知。
历史版本会保留在 待填写(公网 URL) 供查阅。
九、联系我们
- 运营主体:待填写(公司/开发者全称)
- 个人信息保护邮箱:待填写(邮箱)
- 通讯地址:待填写(通讯地址)
我们会在收到请求后 15 个工作日内答复。若你对答复不满意, 可以向履行个人信息保护职责的部门投诉或举报。
十、附录:权限与实现对照表
审核人员可据此逐条核对本政策的描述。权限声明位于
ohos/entry/src/main/module.json5,授权方式取自 SDK
openharmony/toolchains/lib/PermissionDefinitions.json。
| HarmonyOS 权限 | 授权方式 | 实际用途 | 代码位置 | 本版本是否必需 |
|---|---|---|---|---|
ohos.permission.ACCELEROMETER |
system_grant | 前台运动识别 | ohos/.../plugins/SensorPlugin.ets |
是 |
ohos.permission.GYROSCOPE |
system_grant | 前台运动识别(跳绳/骑行) | 同上 | 是 |
ohos.permission.PUBLISH_AGENT_REMINDER |
system_grant | 运动提醒(App 退出后由系统投递) | ohos/.../plugins/AlarmNotificationPlugin.ets |
是 |
ohos.permission.INTERNET |
system_grant | 访问自建后端 | lib/core/network/api_client.dart |
是 |
上表即 module.json5 中的全部权限声明,四条均为 system_grant / normal,
不含任何需要用户授权的敏感权限,也不声明任何后台运行模式。
2026-09-23 的一轮收敛中移除了以下历史遗留声明(移除原因均为「声明了但没有实现」):
LOCATION、APPROXIMATELY_LOCATION、LOCATION_IN_BACKGROUND(无任何定位代码)、
VIBRATE(鸿蒙端无震动实现)、KEEP_BACKGROUND_RUNNING 与 backgroundModes
(闹钟由系统代理提醒接管、运动检测在前台完成,不存在长时任务场景)。
数据流概览
前台传感器采集(加速度计 / 陀螺仪)
│ 原始三轴数据仅在内存中
▼
设备端识别(RunningDetector / WalkingDetector / JumpRopeDetector / CyclingDetector)
│ + 防作弊校验(AntiCheatEngine)
▼
识别结果(运动类型、步数、时长、距离、卡路里)
│ HTTPS(正式环境)
▼
后端 ActivityRecord / DailyHealthSummary
│
▼
健康中心仪表盘、趋势图、周报、成就卡片
原始三轴数据不进入上图的后半段:识别在设备上完成,上传的只有结果字段。
本文件为草案。生效前请替换所有 __待填写(…)__ 占位并完成合规清单 P0-7。