更新记录
3.1.1(2026-07-27) 下载此版本
2.0.4(2026-06-09) 下载此版本
修复安卓、鸿蒙真机运行缺少模块
2.0.3(2026-06-09) 下载此版本
修复安卓打包接口报错问题
查看更多平台兼容性
uni-app(5.0)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 | 鸿蒙插件版本 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | 8.0 | 2.0.4 | 12 | 2.0.4 | 9 | 2.0.4 |
| 微信小程序 | 微信小程序插件版本 | 支付宝小程序 | 支付宝小程序插件版本 | 抖音小程序 | 抖音小程序插件版本 | 百度小程序 | 百度小程序插件版本 | 快手小程序 | 快手小程序插件版本 | 京东小程序 | 京东小程序插件版本 | 鸿蒙元服务 | QQ小程序 | QQ小程序插件版本 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1.2.0 | 2.0.4 | 1.0.0 | 2.0.4 | 1.0.0 | 2.0.4 | 1.0.0 | 2.0.4 | 1.0.0 | 2.0.4 | 1.0.0 | 2.0.4 | - | 1.0.0 | 2.0.4 | - | - | - | - |
uni-app x(5.0)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| - | - | - | - | - | - |
szy-healthkit 健康数据管理
iOS · Android · HarmonyOS · 7 种小程序 · 跨平台健康数据 UTS 插件
平台支持
| 平台 | 类型 | 数据能力 |
|---|---|---|
| iOS | App | HealthKit 17+ 类型(步数/心率/睡眠/运动/体重/血压/血氧等),读写全支持 |
| Android | App | 步数传感器 + 心率传感器 + 国内厂商多源降级适配 |
| HarmonyOS | App | 系统传感器(步数、心率),全局 API 零配置可用 |
| 微信小程序 | 小程序 | 微信运动(WeRun)步数 + scope.werun 授权 |
| 支付宝小程序 | 小程序 | 支付宝运动步数 |
| 抖音小程序 | 小程序 | 运动步数 |
| 百度小程序 | 小程序 | 百度运动步数 |
| QQ 小程序 | 小程序 | QQ 运动步数 |
| 快手小程序 | 小程序 | 快手运动步数 |
| 京东小程序 | 小程序 | 京东运动步数 |
安装
将 szy-healthkit 目录放入 uni_modules/ 中即可。
iOS 配置要求
⚠️ iOS 端 HealthKit 需要以下两项配置缺一不可,否则
requestAuthorization会在 0.0s 内返回失败。
1. UTS.entitlements
在插件目录 utssdk/app-ios/ 下创建 UTS.entitlements 文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.developer.healthkit</key>
<true/>
</dict>
</plist>
此文件随插件分发,云端打包时自动合并到主工程 entitlements。
2. Provisioning Profile 必须含 HealthKit
Apple Developer Center 中,App ID 对应的 Capabilities 必须勾选 HealthKit,重新生成 .mobileprovision 描述文件。否则云打包时报错:
Provisioning profile "xxx" doesn't include the HealthKit capability.
使用
🚨 重要:UTS 插件通过 ES Module 导入,不使用
uni.requireNativePlugin()
// ✅ 正确方式
import { getTodaySteps, requestAuthorization } from '@/uni_modules/szy-healthkit'
// check diagnostics on failure
const authResult = await requestAuthorization(readTypes, writeTypes)
if (authResult !== 'SUCCESS') {
const diag = getHealthKitDiagnostics()
console.log('Auth failed:', authResult, 'Diagnostics:', diag)
}
// ❌ 错误方式(无效!UTS 插件不走原生插件注册)
const plugin = uni.requireNativePlugin('szy-healthkit') // 不生效
API 参考
通用
| 方法 | 说明 |
|---|---|
getPlatform() |
返回当前运行平台 |
getPlatformName() |
返回人类可读平台名 |
isHealthDataAvailable() |
App 端:检查设备是否支持健康传感器 / HealthKit |
isMiniProgram() |
检测是否在小程序环境 |
isAvailable() |
判断插件在当前平台是否可用 |
getSupportedDataTypes() |
获取当前平台支持的数据类型列表 |
getHealthKitDiagnostics() |
iOS 专用:返回系统诊断信息(HealthKit 可用性、系统版本、iOS 版本号等) |
授权管理(App 端)
| 方法 | 说明 |
|---|---|
requestAuthorization(readTypes, writeTypes) |
请求健康数据访问授权。返回 String:"SUCCESS" 代表成功,其余为错误详情 |
getAuthorizationStatus(dataType) |
获取指定数据类型的授权状态(authorized / denied / notDetermined) |
重要:
requestAuthorizationiOS 端返回String而非boolean。判断成功需用result === 'SUCCESS'。
import { requestAuthorization } from '@/uni_modules/szy-healthkit'
const result = await requestAuthorization(
['steps', 'heartRate'],
['weight', 'height']
)
if (result === 'SUCCESS') {
console.log('授权成功')
} else {
console.log('授权失败:', result) // result 包含系统错误详情
}
数据查询(App 端)
| 方法 | 说明 |
|---|---|
querySamples(dataType, startDate, endDate, limit?) |
查询原始数据样本 |
queryStatistics(dataType, startDate, endDate) |
统计查询 |
getTodaySteps() |
获取今日步数 |
getTodayDistance() |
获取今日步行距离(米) |
getTodayActiveEnergy() |
获取今日活动能量消耗(千卡) |
getRecentHeartRate(limit?) |
获取最近心率样本 |
Android 专用(v3.0.0+)
| 方法 | 说明 |
|---|---|
getManufacturerName() |
获取设备制造商名称(小米 / 华为 / OPPO 等) |
getDeviceInfo() |
获取完整设备信息(JSON 字符串),含传感器检测、后台限制诊断 |
getStepCollectorDiagnostics() |
获取步数采集器诊断信息(JSON 字符串),含各数据源状态 |
getBatteryWhitelistGuide() |
获取当前厂商的后台白名单设置指引 |
isBatteryOptimizationWhitelisted() |
检查是否已加入电池优化白名单 |
resetStepCache() |
重置今日步数缓存 |
onAppBackground() |
应用进入后台时调用(保存步数累计值) |
onAppForeground() |
应用回到前台时调用(刷新步数数据) |
iOS 专用(写入)
| 方法 | 说明 |
|---|---|
saveWeight(kg, date) |
保存体重 |
saveHeight(cm, date) |
保存身高 |
saveHeartRate(bpm, date) |
保存心率 |
saveSteps(count, startDate, endDate) |
保存步数 |
saveBloodOxygen(percent, date) |
保存血氧 |
saveBodyTemperature(celsius, date) |
保存体温 |
saveWorkout(type, startDate, endDate, energy?, distance?) |
保存运动记录 |
saveSleep(startDate, endDate) |
保存睡眠数据 |
小程序端
| 方法 | 说明 |
|---|---|
getWeRunAuthStatus() |
检测步数数据授权状态 |
requestWeRunAuth() |
请求步数数据授权 |
ensureWeRunAuth() |
推荐:自动完成检测→请求→引导设置 |
getWeRunData() |
获取加密步数数据 |
getTodayWeRunSteps() |
快捷获取今日步数(需服务端解密) |
serverDecryptGuide |
当前平台的服务端解密指引 |
关键类型
/** 健康数据样本 */
type HealthSample = {
dataType: string
value: number
unit: string
startDate: string // ISO 8601
endDate: string // ISO 8601
source: string
}
/** 统计查询结果 */
type HealthStatistics = {
dataType: string
sum: number | null
average: number | null
min: number | null
max: number | null
count: number | null
}
/** 授权状态 */
type AuthStatus = "notDetermined" | "authorized" | "denied"
平台差异说明
| 功能点 | iOS | Android | HarmonyOS | 小程序 |
|---|---|---|---|---|
| 步数 | ✅ HealthKit | ✅ 多源降级 | ✅ 传感器 | ✅ 运动 API |
| 心率 | ✅ HealthKit | ✅ 传感器 | ✅ 传感器 | ❌ |
| 距离 | ✅ HealthKit | ⚠️ 估算 | ⚠️ 估算 | ❌ |
| 能量 | ✅ HealthKit | ⚠️ 估算 | ⚠️ 估算 | ❌ |
| 体重/血氧/体温/睡眠/运动 | ✅ HealthKit | ❌ | ❌ | ❌ |
| 写入健康数据 | ✅ HealthKit | ❌ | ❌ | ❌ |
| 权限管理 | ✅ 系统弹窗 | ⚠️ uni.authorize() | ⚠️ 需手动去设置开启¹ | ✅ scope |
¹ UTS 桥接层限制,
requestPermissionsFromUser无法弹系统对话框。用户需手动前往「设置 → 应用 → 本应用 → 权限 → 身体活动」开启一次。开启后传感器持续可用。
Android 国内厂商适配说明(v3.0.0)
支持的 18 家厂商
小米/Redmi/POCO、华为、荣耀、OPPO、一加、真我、vivo/iQOO、三星、魅族、联想、摩托罗拉、努比亚/红魔、黑鲨、锤子、HTC、中兴、索尼、Google
多源步数降级策略
优先顺序:缓存 > TYPE_STEP_COUNTER > TYPE_STEP_DETECTOR > 厂商ContentProvider > 返回0
| 数据源 | 说明 | 适用场景 |
|---|---|---|
| SharedPreferences 缓存 | 上次读取值 | 当日已读取过 |
| TYPE_STEP_COUNTER | 系统累计步数传感器 | 大多数设备 |
| TYPE_STEP_DETECTOR | 步数检测器,自行累计 | 小米/华为等 COUNTER 异常设备 |
| 厂商 ContentProvider | 小米健康/华为健康等步数 | 安装对应健康 App 的设备 |
厂商诊断 API 示例
import { getManufacturerName, getDeviceInfo, getBatteryWhitelistGuide } from '@/uni_modules/szy-healthkit'
// 获取厂商名称
const mfr = getManufacturerName() // "小米/Redmi/POCO"
console.log('设备厂商:', mfr)
// 获取设备诊断信息
const info = JSON.parse(getDeviceInfo())
console.log('步数传感器:', info.hasStepCounter)
console.log('是否需白名单:', info.backgroundWhitelist)
console.log('已安装健康App:', info.installedHealthApps)
// 获取白名单设置指引
const guide = getBatteryWhitelistGuide()
console.log('设置指引:', guide)
生命周期管理
在 App.vue 中调用生命周期方法:
import { onAppBackground, onAppForeground } from '@/uni_modules/szy-healthkit'
export default {
onHide() { onAppBackground() },
onShow() { onAppForeground() }
}
HarmonyOS 专项说明
核心特性
鸿蒙端使用系统传感器 API(@ohos.sensor),步数和心率传感器为全局 API,无需初始化 Context 即可直接调用,与其他平台体验一致。
import { getTodaySteps, getRecentHeartRate } from '@/uni_modules/szy-healthkit'
// ✅ 零配置,直接可用
const steps = await getTodaySteps()
const hr = await getRecentHeartRate(5)
权限要求
传感器读取需 ohos.permission.ACTIVITY_MOTION 权限。该权限已在插件 module.json5 中声明,HBuilderX 打包时自动合并。
⚠️ 已知限制:UTS 桥接层无法弹出系统权限对话框。首次使用时需引导用户手动前往系统设置开启一次:
设置 → 应用 → 应用管理 → 找到本应用 → 权限 → 身体活动 → 开启
仅需操作一次,开启后传感器持续可用。
Context 机制
插件内置双通道 Context 获取,无需在 EntryAbility 中调用 setGlobalContext:
| 通道 | 方式 | 用于 |
|---|---|---|
| 主通道 | UTSHarmony.onAppAbilityWindowStageCreate → Window 引用 |
requestPermissionsFromUser 等 UI 操作 |
| 备用通道 | setGlobalContext(UIAbilityContext) |
兼容手动注入场景 |
核心传感器 API(getTodaySteps / getRecentHeartRate / getSupportedDataTypes)不需要 Context,两个通道仅用于权限管理函数。
返回 0 排查
| 可能原因 | 检查方法 | 解决 |
|---|---|---|
| 设备无传感器 | getSupportedDataTypes() 返回空 |
换用有传感器的真机 |
| 权限未授予 | getAuthorizationStatus('steps') 返回 notDetermined |
手动去设置开启(见上方) |
| 首次读取缓存未就绪 | 等待 5-8 秒传感器采样周期 | 再次调用即可 |
常见问题
Q: 插件在 Android 上未被检测到?
A: 确认使用 ES Module 导入(import { xxx } from '@/uni_modules/szy-healthkit')而非 uni.requireNativePlugin()。
Q: iOS 上 requestAuthorization 耗时 0.0s 立即返回失败?
A: 0.0s 意味着 HealthKit API 没有被正确调用,常见原因按可能性排序:
- Provisioning Profile 缺少 HealthKit:Apple Developer Center 中 App ID 未勾选 HealthKit 能力。打包日志会明确报错
Provisioning profile doesn't include the HealthKit capability - 缺少 UTS.entitlements:插件
utssdk/app-ios/目录下必须存在UTS.entitlements,内容为<key>com.apple.developer.healthkit</key><true/> - 模拟器:旧版 Xcode 模拟器不支持 HealthKit(Xcode 14 / iOS 16 后的模拟器已支持)。调用
getHealthKitDiagnostics()查看HealthKit.available确认 - iOS < 14:系统版本低于 iOS 14。调用
getHealthKitDiagnostics()查看iOS14Plus
诊断方法:
import { requestAuthorization, getHealthKitDiagnostics } from '@/uni_modules/szy-healthkit'
// 先查看诊断信息
const diag = getHealthKitDiagnostics()
console.log('诊断:', diag)
// 然后请求授权时检查返回值
const result = await requestAuthorization(readTypes, writeTypes)
if (result !== 'SUCCESS') {
console.log('Swift 返回的错误:', result) // 包含具体系统错误描述
}
Q: iOS 线上包授权正常但本地调试授权失败?
A: 本地调试和云打包的 entitlements 生成机制不同。确认两点:
- 本地调试 → 在 HBuilder X 的 manifest.json → App 模块配置 → iOS Capabilities 中勾选 HealthKit
- 云打包 → 插件内的
UTS.entitlements会自动合并;但 Provisioning Profile 必须支持 HealthKit,需要去 Apple Developer Center 启用
Q: Android 上步数始终为 0?
A: 该问题有多个可能原因: A: 该问题有多个可能原因:
- 权限:需在系统设置中开启「身体活动」权限(设置 → 应用 → 本应用 → 权限)
- 厂商限制:小米/华为等设备需要走几步激活 TYPE_STEP_COUNTER,或降级到 TYPE_STEP_DETECTOR。调用
getManufacturerName()和getStepCollectorDiagnostics()查看诊断信息 - 后台限制:通过
getBatteryWhitelistGuide()获取本厂商白名单设置指引
Q: Android 上心率无数据?
A: 大部分手机没有心率传感器。需佩戴穿戴设备(手表/手环)并通过厂商 API 获取。插件只读取系统 TYPE_HEART_RATE 传感器。
Q: requestAuthorization 总是返回 false?
A: Android 运行时权限弹窗需在页面层调用,UTS 插件层只能检测状态。请先调用 uni.authorize()。
Q: 小程序步数需要服务端解密?
A: 微信/支付宝等平台的步数 API 返回加密数据,需配合服务端解密。serverDecryptGuide 提供了各平台的服务端解密指引。
Q: Android 上 getTodaySteps() 返回速度如何?
A: 如果当日已读取过 → 立即返回缓存。首次读取等待约 5-8 秒(TYPE_STEP_DETECTOR 采样周期)。可通过 getStepCollectorDiagnostics() 查看实时诊断状态。
版本历史
3.1.1 (2026-07-27)
- 🦕 鸿蒙传感器深度适配 — 移植自原生 ArkTS 项目,完整验证所有传感器 API
- ⚡ 鸿蒙核心功能零配置可用 — 步数/心率传感器为全局 API,
import即可直接调用,无需setGlobalContext初始化 - 🏗️ UTSHarmony Context 自给 — 权限相关函数(
requestAuthorization/getAuthorizationStatus)采用 Window 引用模式自动获取 Context - ACTIVITY_MOTION 权限链路 —
checkAccessToken+requestPermissionsFromUser,权限信息透传 - 📝 鸿蒙已知限制文档化 — UTS 环境系统弹窗不可用,
ACTIVITY_MOTION需手动去设置开启(仅一次) - 🐛 移除 cachedHeartRate 残留代码 — 清理死代码,消除编译警告
- 🧹 Context 双通道保底 — UTSHarmony 主通道 +
setGlobalContext备用通道,EntryAbility 不可用场景也能工作
3.0.0 (2026-06-10)
- ✨ 国内安卓厂商适配引擎:识别 18 家手机厂商,自动适配各 ROM 差异
- ✨ 多源步数降级采集:TYPE_STEP_COUNTER → TYPE_STEP_DETECTOR → ContentProvider → 缓存,自动降级
- ✨ 厂商诊断 API:
getManufacturerName()/getDeviceInfo()/getStepCollectorDiagnostics()/getBatteryWhitelistGuide() - ✨ 生命周期管理:
onAppBackground()/onAppForeground()/resetStepCache() - 🔧 重构:采用
HealthKitBridge单例架构替代 UTS 层状态管理,彻底解决 UTS 编译兼容问题 - 🐛 修复:
SensorHelper.kt方法签名onSensorEvent→onSensorChanged
2.1.0 (2026-06-09)
- 🐛 修复:改用 ES Module 导入模式(
import替代requireNativePlugin),修复"插件未检测到"问题 - 🐛 修复:Android Kotlin
Java.extend实验性 API 兼容性(改用 SensorHelper.kt) - 🐛 修复:Android 传感器采样率 FASTEST → NORMAL,降低耗电
- 🐛 修复:Android 端类型导入缺失等编译错误
- 🧹 代码审查优化:清理死代码、统一参数类型、修正权限返回
2.0.0 (2024-06-05)
- 三端架构:iOS + Android + HarmonyOS
- 统一 API 接口
1.0.0 (2024-xx-xx)
- 首次发布,仅 iOS HealthKit
许可
MIT License — 作者: szy

收藏人数:
下载插件并导入HBuilderX
赞赏(0)
下载 20
赞赏 0
下载 12459722
赞赏 1935
赞赏
京公网安备:11010802035340号