25、健康与健身数据合规:Health Connect API使用规范、健康数据敏感等级、数据共享限制

健康数据,说白了就是用户身体上的“秘密”。心率、步数、睡眠、血糖……这些数据一旦泄露,后果比通讯录泄露严重得多。我当年刚接触健康类App时,觉得不就是个计步器嘛,能有多大事?直到有一次合规审查,对方直接问:“你们怎么处理用户的心率数据?有没有二次共享?”——嗯,从那以后我再也不敢小看健康合规了。

今天咱们就聊聊Android上的健康数据合规,重点围绕Health Connect API、数据敏感等级划分,以及共享限制。这部分内容,我个人建议你拿小本本记下来,因为踩坑的人实在太多了。

一、Health Connect API 是什么?

Health Connect是Google推出的统一健康数据平台。它不像以前的Google Fit那样“什么都管”,而是更像一个“数据中转站”。App通过它读写健康数据,用户可以在系统设置里统一管理权限。

说白了,它就是健康数据的“守门人”。

我在项目中遇到过这样一个场景:用户同时装了三个运动App,每个都自己存一份心率数据,结果三个App显示的心率还不一样。用户跑来投诉,说我们App不准。后来接入了Health Connect,所有App都读写同一份数据,问题就解决了。

核心要点: Health Connect 不存储数据,它只提供读写接口。数据实际存储在系统安全区内,App无法直接访问文件。

二、健康数据的敏感等级划分

健康数据不是铁板一块。有些数据敏感度极高,比如基因信息、生殖健康数据;有些相对“温和”,比如身高、体重。GDPR和《个人信息保护法》都要求对敏感数据做分级处理。

我个人习惯把健康数据分成三个等级:

等级 数据类型举例 合规要求
L1 极度敏感 基因数据、生殖健康、性传播疾病 必须单独获取用户明确同意,禁止任何形式的共享
L2 高度敏感 心率、血糖、血压、睡眠数据 需要用户授权,共享前必须二次确认
L3 一般敏感 步数、卡路里、身高、体重 常规授权即可,但不得用于非健康目的

你想想看,如果用户的心率数据被广告商拿去分析,那得多可怕?所以Google在Health Connect里也做了类似的等级划分。App申请读取L1数据时,系统会弹出一个特别醒目的警告框。

避坑指南: 我曾经见过一个App,申请了“读取心率”权限,却在隐私政策里写“用于改善用户体验”。这明显不行。健康数据的用途必须具体、明确,不能含糊其辞。

三、数据共享限制:能共享,但有条件

健康数据能不能共享给第三方?答案是:能,但条件非常苛刻。

根据GDPR第9条和《个人信息保护法》第28条,健康数据属于“特殊类别个人信息”,原则上禁止处理。除非满足以下条件之一:

  • 用户明确同意,且同意是“具体的、知情的、不含糊的”
  • 为了预防医学或职业医学目的
  • 为了公共利益领域的公共卫生
  • 数据主体已经自行公开了数据

在实际开发中,我建议你遵循“最小必要原则”。什么意思?就是能读步数就别读心率,能读心率就别读血糖。别贪多。

举个例子:你的App是个计步器,那就只申请读取步数权限。别顺手把睡眠数据也读了。用户一旦发现你“多读”了数据,信任感瞬间崩塌。

我的经验: 在Health Connect的权限申请页面上,最好用一句话说明“为什么需要这个数据”。比如:“我们需要读取心率数据,用于计算您的运动强度。”——用户看到这个,心里就有底了。

四、代码示例:使用 Health Connect 读取步数

下面是一个简单的示例,展示如何通过Health Connect读取用户当天的步数。注意,这里只申请了“步数”这一项权限。

// 1. 检查 Health Connect 是否可用
val healthConnectClient = HealthConnectClient.getOrCreate(context)

// 2. 构建读取请求
val readRequest = ReadRecordsRequest(
    recordType = StepsRecord::class,
    timeRangeFilter = TimeRangeFilter.between(
        startTime = LocalDateTime.now().withHour(0).withMinute(0).withSecond(0),
        endTime = LocalDateTime.now()
    )
)

// 3. 执行读取
try {
    val response = healthConnectClient.readRecords(readRequest)
    val totalSteps = response.records.sumOf { it.count }
    // 显示步数
} catch (e: SecurityException) {
    // 用户未授权,引导用户去设置页面授权
}

这段代码看起来简单,但有几个坑要注意:

  • 一定要捕获 SecurityException,因为用户可能随时撤销授权
  • 时间范围要精确,别读历史数据
  • 步数数据属于L3等级,但如果你同时读心率,就得走L2的授权流程

五、知识体系图:健康数据合规核心逻辑

下面这张图,我画的是健康数据合规的完整流程。从数据采集到共享,每一步都有合规要求。你可以把它当作开发时的检查清单。

健康数据合规核心流程 数据采集 敏感等级判定 用户授权 数据使用(仅限授权用途) 数据共享(需二次确认) L1数据:单独授权 + 禁止共享 L2数据:授权 + 二次确认 L3数据:常规授权

六、总结几个关键点

嗯,说了这么多,最后给你划几个重点:

  • Health Connect 是桥梁,不是仓库。 别想着从它那里直接拿数据存到自己服务器上,除非用户明确同意。
  • 敏感等级决定授权方式。 L1数据必须单独弹窗,L2数据可以合并授权,但用途必须说清楚。
  • 共享限制是红线。 健康数据共享给第三方,必须让用户知道“谁、什么数据、干什么用”。
  • 代码里要处理授权撤销。 用户随时可以在系统设置里关掉权限,你的App得优雅地降级,不能崩溃。

我记得有一次,一个合作方问我:“我们只想读个心率,能不能在隐私政策里写‘用于改善服务’?”我说不行,太模糊了。后来他们改成了“用于计算运动负荷,并生成个性化训练建议”,用户授权率反而提高了。你看,坦诚一点,用户反而更信任你。

健康数据合规,说到底是对用户身体的尊重。别把它当成负担,它其实是建立用户信任的最好机会。

公众号:蓝海资料掘金营,微信 deep3321