健康数据授权是通过移动平台系统API获取用户明确同意以读取和写入医疗及健身数据的过程。在iOS上,授权通过HealthKit实现,使用HKHealthStore和HKObjectType类;在Android上,则通过Google Fit API配合OAuth 2.0和FitnessOptions实现。根据Apple HealthKit Documentation, 2025,健康数据被归类为高度机密类别。医疗准确性和遵守法规是处理此类数据时的关键要求。
要点
健康数据授权是一种机制,要求在访问用户的医疗和健身指标之前获得其明确且已记录的同意。与标准权限(联系人、日历)不同,健康数据受额外的法律规范约束:美国的HIPAA、欧洲的GDPR以及俄罗斯的152-FZ。
在iOS上,健康授权通过HealthKit实现:用户会看到一个屏幕,列出应用请求的所有数据类型,并可以选择特定类别来授予访问权限。在Android上,使用Google Fit API通过OAuth 2.0进行授权,每种数据类型都需要单独的作用域。
根据App Annie(2025)的数据,健康和健身应用是移动市场中增长最快的细分市场之一,年增长率为28%。同时,如果应用未提供关于收集目的明确说明,71%的用户会拒绝访问其健康数据。
关键区别在于健康授权与其他权限相比,能够提供部分访问权限。用户可以允许读取步数,但禁止访问心率数据或医疗记录。
HealthKit是Apple在iOS 8中引入的框架,提供统一的集中式健康数据存储库。应用无法直接访问HealthKit — 它们通过HKHealthStore请求授权,用户决定提供哪些数据类型。所有数据在设备上加密,并通过iCloud使用端到端加密进行同步。
授权过程从创建HKHealthStore实例并调用requestAuthorization(toShare:read:)方法开始。应用传递两组类型:用于读取(应用想要读取的HKObjectType)和用于写入(应用想要保存的HKSampleType)。系统显示同意屏幕,用户可以在该屏幕上单独启用或禁用每种类型。
一个重要特性:HealthKit不会向开发者显示用户在同意屏幕上具体允许了哪些类型。调用requestAuthorization后,需要通过HKHealthStore.authorizationStatus(for:)单独检查每种类型的访问权限。根据WWDC Session 11108(2024),Apple建议在每次读取或写入操作之前检查授权状态。
HealthKit支持数百种数据类型,分为以下几类:定量(步数、脉搏、卡路里)、特征(身高、体重、出生日期)、临床记录(过敏、疫苗接种、检测结果)、症状和月经周期。每种类型由HKObjectType的子类表示:HKQuantityType用于数值指标,HKCategoryType用于分类数据。
从iOS 18开始,Apple扩展了HealthKit,通过FHIR(快速医疗互操作性资源)支持来自医疗机构的数据。如果用户已将医院或诊所连接到健康应用,应用可以请求访问结构化的医疗记录。
Google Fit是在Android上处理健身数据的平台,使用OAuth 2.0进行授权。与HealthKit不同,Google Fit并未在系统级别嵌入到操作系统中 — 它是一个独立的Google Play Services服务,需要通过Google Play Console连接并创建OAuth 2.0凭据。
要访问Google Fit,应用必须在Google Cloud Console中注册OAuth 2.0客户端ID。授权通过GoogleSignInAccount和GoogleSignIn.requestPermissions()请求。用户会看到标准的Google同意屏幕,列出请求的作用域:fitness.activity.read、fitness.body.read、fitness.nutrition.write等。
Google Fit针对每种数据类型区分读取和写入权限。应用可以在不请求写入权限的情况下请求读取步数的访问权限。从Google Fit API v2开始,所有授权请求必须包含数据使用目的的说明 — 否则请求将被Google审核拒绝。
FitnessOptions类允许声明式地指定需要访问哪些数据类型。每种类型可以设置访问级别:ACCESS_READ、ACCESS_WRITE或两者。权限集与用户帐户一起传递到GoogleSignin.requestPermissions()。
可用类型列表包括:步数(DataType.TYPE_STEP_COUNT_DELTA)、卡路里(TYPE_CALORIES_EXPENDED)、脉搏(TYPE_HEART_RATE_BPM)、距离(TYPE_DISTANCE_DELTA)、活动(TYPE_ACTIVITY_SEGMENT)和睡眠(TYPE_SLEEP_SEGMENT)。每种类型都有自己的更新频率和权限要求。
健康数据授权请求的实现在iOS和Android上存在显著差异。以下是针对HealthKit和Google Fit API的工作示例。
在Swift中,HealthKit授权请求通过HKHealthStore执行,指定读取和写入的类型。示例演示了请求访问步数和脉搏数据。
import HealthKit
let healthStore = HKHealthStore()
let readTypes: Set<HKObjectType> = [
HKObjectType.quantityType(forIdentifier: .stepCount)!,
HKObjectType.quantityType(forIdentifier: .heartRate)!
]
let writeTypes: Set<HKSampleType> = [
HKObjectType.quantityType(forIdentifier: .stepCount)!
]
guard HKHealthStore.isHealthDataAvailable() else {
fatalError("HealthKit在此设备上不可用")
}
healthStore.requestAuthorization(toShare: writeTypes, read: readTypes) { success, error in
if success {
// 单独检查每种类型的状态
let status = healthStore.authorizationStatus(for: readTypes.first!)
print("HealthKit授权状态:\(status.rawValue)")
} else {
print("HealthKit授权错误:\(error?.localizedDescription ?? "未知")")
}
}
在Android上,Google Fit授权通过GoogleSignIn和FitnessOptions执行。示例演示了请求访问步数和卡路里数据。
val fitnessOptions = FitnessOptions.builder()
.addDataType(DataType.TYPE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ)
.addDataType(DataType.TYPE_CALORIES_EXPENDED, FitnessOptions.ACCESS_READ)
.build()
val account = GoogleSignIn.getAccountForExtension(this, fitnessOptions)
if (!GoogleSignIn.hasPermissions(account, fitnessOptions)) {
GoogleSignIn.requestPermissions(
this,
REQUEST_GOOGLE_FIT,
account,
fitnessOptions
)
} else {
// 权限已授予 — 正在读取数据
readGoogleFitData(account)
}
// 处理权限请求结果
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == REQUEST_GOOGLE_FIT && resultCode == RESULT_OK) {
val account = GoogleSignIn.getSignedInAccountFromIntent(data)
account?.let { readGoogleFitData(it) }
}
}
健康数据属于特别敏感的个人数据类别。使用HealthKit或Google Fit的应用开发者必须遵守用户所在地区适用的法规要求。
在美国,健康数据受HIPAA(健康保险便携性和责任法案)管辖,该法案对医疗信息的存储、传输和处理制定了严格要求。如果数据以加密形式发送到服务器且访问受到限制,使用HealthKit的应用可以符合HIPAA要求。
在欧盟,根据GDPR(第9条),健康数据被视为个人数据的特殊类别。处理此类数据需要用户的明确同意,并且在大多数情况下,需要进行数据保护影响评估。违反GDPR要求可能导致高达2000万欧元或公司年营业额4%的罚款。
在俄罗斯,健康数据的收集受152-FZ《个人数据法》的管辖。自2025年起,所有处理俄罗斯联邦公民医疗数据的应用必须使用经过认证的加密工具,并将数据存储在位于俄罗斯联邦境内的服务器上,以符合Roskomnadzor的要求。
建议:在发布处理健康数据的应用之前,请咨询法律部门以检查是否符合当地法规。如果应用的隐私政策不符合要求,Apple和Google保留拒绝该应用的权利。
常见问题解答
HealthKit — 内置的iOS框架,带有本地加密的健康数据存储库。Google Fit — 基于Google Play Services的云服务,使用OAuth 2.0进行授权。HealthKit可离线工作,Google Fit需要互联网连接进行同步。
是的,在两个平台上都可以。在iOS上,用户在HealthKit同意屏幕上选择特定的数据类型(步数、脉搏、睡眠)。在Android上,用户可以看到Google Fit作用域的列表,并可以通过Google帐户设置撤销单独的权限。
HKHealthStore — iOS上HealthKit框架的核心类。它管理所有健康数据的授权、读取和写入。应用无法直接访问HealthKit存储库 — 所有操作都通过HKHealthStore进行,这保证了统一的访问接口并遵守用户的访问权限。
用户可以通过Google设置 — 管理帐户 — 安全性 — 具有访问权限的第三方应用来撤销访问权限。选择该应用并单击“删除访问权限”。还可以通过Google Play Console撤销访问权限:关联服务 — Google Fit — 管理应用。
如果应用处理美国用户的健康数据并将其发送到服务器,则必须符合HIPAA要求。如果所有数据都保留在设备本地且不传输给第三方,应用可能不需要符合HIPAA,但Apple建议无论司法管辖区如何,都应遵循最佳安全实践。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。