跳至内容
WebViewGold 从 Vibe Coding 到 App Store
中文
获取 WebViewGold

Cursor + 健康数据

为您的 Cursor 应用接入 HealthKit 和 Health Connect

用 Cursor 构建的健身追踪、习惯养成和健康教练类应用,可以直接显示用户真实的步数、心率或体重,而不必让用户手动输入。WebViewGold 用同样的两个 URL scheme,在 iOS 上读写 Apple 健康(HealthKit),在 Android 上读写 Health Connect。代码是简单的部分;健康数据的商店规则才最值得您花心思。

每个平台一次性 $109 起,或由我们的团队全程代劳,$698 起。

  • 审核通过保证 – 否则 14 天内退款
  • 无需编程
  • 一次性付费,免费更新
  • 7×24 小时人工支持
  • 2014 年起德国出品 · ISO 27001

健康数据如何到达您的 Web 应用

读取数值

导航到 readhealthkit:// 加上一个类型:iOS 上是 Apple 标识符,例如 HKQuantityTypeIdentifierStepCount;Android 上是记录名称,例如 StepsRecord。结果会以同名 JavaScript 变量的形式注入,内容是“数值加单位”的字符串(例如 "8421.0 steps")。

写入数值

writehealthkit://Identifier//Value 会保存一个数值,例如 iOS 上的 writehealthkit://HKQuantityTypeIdentifierStepCount//100 或 Android 上的 writehealthkit://StepsRecord//1000。在 Android 上,该变量随后会显示 WRITE_SUCCESS 或错误信息。

平台差异

iOS:HealthKit 是 WebViewGold 的一个插件,通过在 HealthKitEnabled(Config.swift)中填入插件令牌并添加 HealthKit capability 来启用。Android:Health Connect 需要 Android 8.0 或更高版本,已内置于 Android 14 及以上版本,返回的是当天的总量,在不可用的设备上会注入 "Health Connect not supported"。

给 Cursor 的提示词

把这段粘贴到 Cursor 中以实现 Web 应用端。检查结果,发布,然后在 WebViewGold 应用中测试。

给 Cursor 代理的提示词
给 Cursor agent 的提示词:为 WebViewGold 封装层添加 HealthKit 和 Health Connect 支持。创建 lib/health.ts,把 steps、weight 和 heartRate 映射为 HKQuantityTypeIdentifierStepCount、HKQuantityTypeIdentifierBodyMass 和 HKQuantityTypeIdentifierHeartRate(User-Agent 包含 WebViewGold-iOS),以及 StepsRecord、WeightRecord 和 HeartRateRecord(WebViewGold-Android)。实现 readHealth(kind):清空 window[key],导航到 "readhealthkit://" + key,并轮询最多 5 秒,同时加一个队列,确保读取永远不会并行执行。添加 parseHealthValue("75.4 kg"),返回数值和单位。把 "Health Connect not supported" 和超时都视为 null,并显示手动输入。使用模拟的 window 编写单元测试,并在 .cursor/rules 中记录该桥接。

把 Web 应用转换成原生应用的绝佳方式!周转速度快,无需开发完整的原生应用就能把应用上架到应用商店!

Kevin Joling · FlightConnections & TrainConnections · Trustpilot

逐步接入健康数据

预留一天时间,包括商店的申报材料。

  1. 只选择您真正用到的少数数据类型

    步行挑战用步数,教练计划用体重,饮水追踪用饮水量。两个商店都要求为每个申请的类型说明理由,所以不要“为以后”申请所有类型。

  2. iOS:启用 HealthKit 插件

    通过 iOS 文档中的联系地址申请插件令牌,在 Config.swift 中设置 HealthKitEnabled,在 Xcode 中添加 HealthKit capability,并在 Info.plist 中写好两条用途说明:Privacy - Health Share Usage Description 和 Privacy - Health Update Usage Description。

  3. Android:把 Health Connect 权限保持在最少

    Health Connect 按记录类型授予访问权限,应用只能读写它申请过的类型。检查 Android 项目清单文件中的健康权限,只保留您用到的,并在 Play Console 中准备好健康应用声明。

  4. 用 User-Agent 检测平台

    设置带有不同标记的自定义 User-Agent,例如一个以 WebViewGold-iOS 结尾(useragent_iphone、useragent_ipad),另一个以 WebViewGold-Android 结尾(USER_AGENT)。这样您的代码就能选用 HealthKit 标识符或 Health Connect 记录名称。

  5. 读取、显示,并准备后备方案

    只在应用内触发读取,稍等片刻获取注入的变量,然后显示数值并清楚标明来源(“来自 Apple 健康”)。在 iOS 上,多次读取要依次执行,不要放在同一个脚本周期里。在浏览器中,提供手动输入。

  6. 只写入真实数据

    只写入用户实际产生或输入的数值,例如一次已记录的步行。把估算值或测试数据写入 Apple 健康违反准则 5.1.3(ii)。

在两个平台上读取今日步数

一个辅助函数,两种类型名称。您决定保留的数值发送到技术栈的服务端:您自己的 API 路由或服务。

javascript
// 自定义 User-Agent: "... WebViewGold-iOS" (Config.swift), "... WebViewGold-Android" (Config.java)
var ua = navigator.userAgent;
var IN_APP = ua.indexOf("WebViewGold") !== -1;
var IS_IOS_APP = ua.indexOf("WebViewGold-iOS") !== -1;

function readSteps(callback) {
  if (!IN_APP) { callback(null); return; }              // 浏览器: 手动输入
  var key = IS_IOS_APP ? "HKQuantityTypeIdentifierStepCount" : "StepsRecord";
  window[key] = undefined;
  window.location.href = "readhealthkit://" + key;
  var tries = 0;
  var timer = setInterval(function () {
    var v = window[key];
    if (v !== undefined || ++tries > 20) {             // 最多等待约 5 秒
      clearInterval(timer);
      if (v === "Health Connect not supported") { v = undefined; }
      callback(v === undefined ? null : String(v));    // 例如 "8421.0 steps"
    }
  }, 250);
}

健康数据的商店规则

健康数据是两个商店中最敏感的类别。较早的文章会引用旧版 App Store 审核准则的第 27 节;这些 HealthKit 规则现在主要位于 2.5.1 和 5.1.3。提交前请阅读最新文本。

  • 2.5.1

    HealthKit 仅用于健康和健身

    HealthKit 应当用于健康和健身目的并与“健康”App 集成,并且应在应用描述中注明这一集成。

  • 5.1.3(i)

    不得用于广告或数据挖掘

    健康数据不得用于广告、营销或基于使用情况的数据挖掘,也不得为此披露给第三方。请披露您收集的具体健康数据。

  • 5.1.3(ii)

    不得写入虚假数据,不得存入 iCloud

    不要向 HealthKit 写入虚假或不准确的数据,也不要把个人健康信息存储在 iCloud 中。

  • 5.1.2(i)

    共享前须征得同意,包括 AI

    与第三方共享个人数据(包括第三方 AI 服务)之前,需要清楚披露并获得用户的明确许可。

  • Google Play

    健康应用声明

    使用 Health Connect 的应用需要在 Play Console 中填写健康应用声明,并为每种数据类型说明理由。访问权限按包名审核,数据类型有变更时需要重新声明。

  • Google Play

    处处使用同一份隐私政策

    商店详情中的隐私政策必须与用户在 Health Connect 中通过隐私链接打开的是同一份,并且必须说明您如何处理健康数据。

提交之前

  • App Privacy(Apple)和数据安全(Google)中列出了健康与健身数据及其用途,并说明数据是否会离开设备。参见Web 封装应用的隐私标签。
  • 您存储的健康数值按用户隔离保护,并在账号删除时一并移除(账号删除指南)。
  • 分析和广告脚本绝不会接收健康数值;如有疑问,就把它们从健康相关页面中移除。
  • 审核备注中写明哪个页面读取 Apple 健康或 Health Connect、数据用于什么,并附上演示账号。审核人员的设备上可能没有健康数据,所以也要描述空状态。
  • 健康养生类应用不做任何诊断或治疗方面的声明。医疗类应用会受到更严格的审查(准则 1.4.1),并且可能需要监管审批。

常见问题

Web 应用能读取 Apple 健康数据吗?

在 Safari 中不能:HealthKit 没有 Web API。但在原生应用中可以。WebViewGold 在收到 readhealthkit:// 调用后以原生方式读取数值,并把它作为 JavaScript 变量注入 Web 应用。

HealthKit 和 Health Connect 使用同一套代码吗?

URL scheme 是相同的(readhealthkit:// 和 writehealthkit://),只有类型名称不同:iOS 上是 HKQuantityTypeIdentifierStepCount 这样的 HealthKit 标识符,Android 上是 StepsRecord 这样的记录名称。在一个辅助函数中做好映射即可。

使用 HealthKit 的应用会被 Apple 拒绝吗?

只要健康和健身是应用中真实的组成部分,就不会。被拒的原因通常是:在健康和健身之外使用 HealthKit、把健康数据用于广告、向“健康”写入虚假数据,以及没有解释清楚的集成。请在应用描述中提到 Apple 健康,并在界面中清楚展示这一集成。

我的 Cursor 应用应该把健康数值存在哪里?

最好哪里都不存:读取、显示、丢弃。如果某个功能需要历史记录,就只存储它需要的内容(例如每天一个总数),按用户隔离保护,在隐私政策中说明,并在删除账号时一并删除。

Health Connect 在每部 Android 手机上都能用吗?

它需要 Android 8.0 或更高版本。Android 14 及以上版本已内置;在较旧的版本上,用户需要安装 Health Connect 应用。在不可用的设备上,WebViewGold 会注入 "Health Connect not supported",所以请保留手动输入作为后备。

让您的应用上架商店的三种方式

结果相同,只是您需要投入的工作量不同。三种方式都附带审核通过保证和 7×24 小时人工支持。

自己动手

$109 每个平台,一次性付费

WebViewGold 许可证:一个现成的 Xcode 或 Android Studio 项目。粘贴您的 URL,设置名称和图标,开启所需功能,构建并提交。永久免费更新。

在主页查看方案

Cloud Builder

$349 每个许可证,一次性附加购买

无需 Mac、Xcode 或 Android Studio:在浏览器中完成配置,我们在云端构建两个应用,并将其交付到 App Store Connect 和 Play Console。

Cloud Builder 如何运作 试用免费演示

Full Service

$698 每个平台 $798

把您的 URL 和图标发给我们。我们的团队在 72 小时内完成配置、构建并交付您的应用,白标,附源码项目。两个平台共 $1,158。

Full Service 详情 服务提供方: WeSetupYourWebViewApp

冬季特惠价格有效期至 2026年12月31日。

准备好发布您的 Cursor 应用了吗?

App Store & Google Play 审核通过保证 – 否则 14 天内退款

想直接交给我们?Full Service:我们在 72 小时内完成配置、构建并交付,每个平台 $698 起。有疑问?通过 7×24 小时在线聊天联系我们。

退款依据我们 FAQ 中列出的条件:应用因非内容原因被 Apple 和/或 Google 拒审,并在购买后 14 天内提出申请。