十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

OpenClaw iOS HealthKit 摘要:从 iPhone/iPad 节点安全读取当日健康聚合数据

OpenClaw iOS HealthKit 摘要:从 iPhone/iPad 节点安全读取当日健康聚合数据 OpenClaw iOS HealthKit 摘要从 iPhone/iPad 节点安全读取当日健康聚合数据【免费下载链接】openclawThe AI that really does things. Any OS. Any Platform. The lobster way. 项目地址: https://gitcode.com/GitHub_Trending/cl/openclawOpenClaw 支持通过已连接并授权的 iPhone/iPad 节点以只读方式获取当前自然日的健康数据摘要HealthKit summaries。设备端完成聚合计算后仅将步数、睡眠时长、静息心率均值与运动记录汇总返回原始样本不离开设备。本指南讲解如何启用该功能默认关闭、需双端授权、通过 CLI 或 Agent 的 nodes 工具请求当日摘要、理解返回字段与隐私边界并排查常见故障。功能概述与适用范围health.summary是 OpenClaw iOS 节点的命令之一用于从连接的 iPhone 或 iPad 获取只读的当日健康摘要。其核心设计遵循最小化数据暴露原则聚合计算在设备本地完成仅返回以下四类指标步数step count睡眠时长sleep duration静息心率均值average resting heart rate运动次数与总时长workout count/duration以下数据与能力明确不支持单个 HealthKit 样本、数据来源source、元数据、临床记录clinical records、后台持续采集background ingestion以及任何写入操作。该功能默认关闭启用需要两步授权iOS 设备上的独立同意在 Apple Health 权限页选择可读类别Gateway 端对health.summary命令的显式放行该命令被归类为隐私敏感命令iOS 平台默认白名单不包含它。前置条件运行 OpenClaw iOS 应用、且 HealthKit 报告健康数据可用的 iPhone 或 iPad已连接并获批的 iOS 节点参见 iOS 应用设置 或仓库中的 iOS 应用文档能够访问 iOS 节点的当前 Gateway期望读取的指标在 Apple Health 中已有可读数据。Apple Watch 可向 Apple Health 写入数据但 OpenClaw 的 watchOS 应用并非 HealthKit 摘要的前提条件。启用访问双端授权1. 在 Gateway 放行命令在openclaw.json的gateway.nodes.commands.allow数组中追加health.summary并保留原有命令{ gateway: { nodes: { commands: { allow: [health.summary] }, }, }, }health.summary被归类为隐私敏感privacy-heavy命令iOS 平台默认白名单不包含它因此必须显式加入commands.allow。同时注意gateway.nodes.commands.deny中的条目优先级高于 allow 条目若 deny 中包含health.summary则仍会被拦截。完整的平台默认白名单与命令策略说明见 节点命令策略。从源码实现看命令白名单的三重校验节点声明 → 配对记录批准 → Gateway 平台/审批派生白名单中health.summary正是典型的需要一次性持久 opt-in命令与camera.snap、camera.clip、contacts.add、calendar.add、reminders.add、sms.send、sms.search等同属该类别见 command-policy.md 中的危险/隐私敏感命令清单。2. 在 iOS 设备上开启共享在 iOS 应用中操作打开设置 - 权限Settings - Permissions在始终可见的Apple Health分区中找到Apple Health Summaries点击Enable Apple Health Summaries阅读披露说明然后在 Apple 的权限选择页中选择 OpenClaw 可读取的健康类别。该开关记录的是你明确做出的 OpenClaw 共享选择并不表示 Apple 已授予所有请求的类别——HealthKit 刻意不暴露读取被拒这一状态。底层实现上这个开关对应 HealthSummaryService.swift 中的UserDefaults.standard.bool(forKey: health.summary.enabled)且enable()在请求 Apple 授权成功后才置位该标志注释明确说明该标志只记录用户显式的 OpenClaw 共享选择绝不推断授权状态。3. 批准节点能力更新开启健康摘要后iOS 节点会将health.summary加入其声明的命令面declared command surface因此需要批准配对更新openclaw nodes pending openclaw nodes approve requestId然后确认已连接的 iOS 设备暴露了有效的health.summary命令openclaw nodes describe --node iOS device name从 GatewayConnectionControllerCapabilities.swift 可以看到HealthAuthorization.isEnabled为真时才会把health能力加入能力列表capabilities进而才会把OpenClawHealthCommand.summary.rawValue加入connect.commands。也就是说设备端开关关闭时health.summary根本不会出现在节点声明的命令表面。请求当日摘要仅支持today一个时间段覆盖范围为 iOS 设备当地时区的当日零点到请求时刻openclaw nodes invoke \ --node iOS device name \ --command health.summary \ --params {period:today} \ --jsonAgent 可通过nodes工具调用同一命令{ action: invoke, node: iOS device name, invokeCommand: health.summary, invokeParamsJson: {\period\:\today\} }返回字段说明摘要负载包含以下字段字段含义period恒为todaystartISO本地当日零点编码为 ISO 时间戳endISO请求时刻编码为 ISO 时间戳timeZoneIdentifieriOS 设备时区标识stepCount四舍五入的累计步数sleepDurationMinutes去重后的入睡时长分钟并裁剪到当日范围restingHeartRateBpm静息心率均值次/分workoutCount今日开始的运动次数workoutDurationMinutes上述运动的总时长分钟指标字段均为可选当 HealthKit 无可读值时会被省略。睡眠时长计算前会合并不同睡眠阶段与重叠来源确保同一分钟不会被重复计数。协议层与源码实现印证health.summary命令的线协议定义在共享框架中HealthCommands.swift 定义了OpenClawHealthCommand.summary health.summaryOpenClawHealthSummaryPeriod枚举CaseIterable且当前仅含today一个取值OpenClawHealthSummaryParams含periodOpenClawHealthSummaryPayload含 9 个字段指标字段均为Optional。对应测试 HealthCommandsTests.swift 验证了period的唯一合法线格式就是{period:today}与本文档的 CLI 参数保持一致。设备端聚合实现在 HealthSummaryService.swift日期范围通过dateRange(now:calendar:)计算即calendar.startOfDay(for: now)到now步数用HKStatisticsQueryDescriptor的.cumulativeSum聚合静息心率用.discreteAverage求均值睡眠用HKSampleQueryDescriptor拉取sleepAnalysis类别样本仅保留入睡相关阶段allAsleepValues再经mergedDuration合并重叠区间、裁剪到当日并去重运动用.workout谓词统计今日开始的样本数并累加时长。健康数据可读性由HKHealthStore.isHealthDataAvailable()把关请求的读取类型集合步数、睡眠、静息心率、运动定义在readTypes中。iOS 应用的 Info.plist 声明了 NSHealthShareUsageDescription 与 NSHealthUpdateUsageDescription其中明确写明OpenClaw 只读、不写入 Apple Health。隐私行为设备端聚合聚合发生在 iOS 设备上原始样本不离开设备。聚合结果传输路径请求的聚合值经你的 Gateway 离开设备。当 Agent 请求时聚合值会到达配置的 AI 提供商并可能保留在聊天记录中直接 CLI 调用则仅返回给 CLI 操作者。只读访问OpenClaw 仅请求读取权限不能添加或修改健康数据。按需读取仅在调用health.summary时读取 HealthKit无后台健康数据采集。不可区分的缺失HealthKit 刻意不透露读取是否被拒绝。某个指标缺失可能意味着访问被拒、当日无匹配样本、或该数据类型不可用OpenClaw 无法区分这三种情况。用途边界该摘要用于个人健康与健身上下文不构成诊断或医疗建议。要停止共享返回Apple Health Summaries并点击Turn Off Summaries。此时 iOS 设备会从其节点表面移除健康能力与health.summary命令同时也可以将health.summary从gateway.nodes.commands.allow中移除关闭 Gateway 一侧的门禁。设备端的关闭逻辑在 HealthSummaryService.swift 的disable()中体现删除health.summary.enabled键后能力列表与命令表面自然不再包含健康相关项。故障排查命令未被节点声明Command is not declared by the node确认 iOS 应用中 Apple Health Summaries 已开启且设备已连接。运行openclaw nodes pending并批准任何能力更新然后重新检查openclaw nodes describe --node iOS device name。命令需要显式 opt-inCommand requires explicit opt-in将health.summary加入gateway.nodes.commands.allow同时检查gateway.nodes.commands.deny是否包含它——deny 列表优先。HEALTH_ACCESS_DISABLED应用侧共享开关未打开。请在 iOS 设备的设置 - 权限 - Apple Health下启用Apple Health Summaries。该错误码来自 HealthSummaryService.swift 的summary(params:)HealthAuthorization.isEnabled为假时抛出HEALTH_ACCESS_DISABLED: enable Apple Health Summaries in OpenClaw Settings。摘要成功但指标缺失Summary succeeds but metrics are missing打开 Apple 的健康应用确认今天已有数据。在 Apple 健康设置中复核 OpenClaw 的访问权限但不要将空结果视为访问被拒的证据HealthKit 刻意隐藏了这种区分被拒、无样本、类型不可用均表现为缺失。旧时间段请求失败Older ranges fail该命令只接受{period:today}。不支持多日与历史摘要——这与OpenClawHealthSummaryPeriod枚举只定义today一个 case 的实现一致。相关资源iOS 应用设置节点概述节点命令策略Gateway 配置参考Gateway 安全审计共享协议定义HealthCommands.swift设备端实现HealthSummaryService.swift线格式测试HealthCommandsTests.swift【免费下载链接】openclawThe AI that really does things. Any OS. Any Platform. The lobster way. 项目地址: https://gitcode.com/GitHub_Trending/cl/openclaw创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表