UniFit
统一健身器材蓝牙接入APP技术方案
UniFit是一款面向家庭健身用户的移动端APP,专注解决"不同品牌健身器材各自为政、数据孤岛、无法统一追踪"的核心痛点,通过蓝牙连接跑步机、划船机、动感单车、椭圆机、智能跳绳等各类健身器材,实现一键连接、实时追踪、数据统一存储与分析的完整体验。
151.86亿美元2033年全球联网健身器材市场预测 · CAGR 31.7%
一、项目定位
联网健身器材市场正处于高速增长通道。2024年全球联网健身器材市场估值为12.74亿美元,预计到2033年将增长至151.86亿美元,年复合增长率为31.7%。Bluetooth和Wi-Fi是目前最主要的连接方式。
蓝牙已成为智能健身器材的标准配置,但各厂商私有协议的碎片化问题仍然突出——这正是UniFit要解决的核心技术难题。
二、整体技术架构
🏗️ 架构概览
四层架构设计
- 前端层:跨平台应用(React Native)——设备扫描、数据看板、训练记录、个人中心、数据报表
- 蓝牙抽象层:react-native-ble-plx + 设备适配层——FTMS解析器、私有协议解析器、统一数据模型
- 蓝牙设备层:跑步机、动感单车、划船机、椭圆机、智能跳绳、心率带、哑铃等
- 云端层(可选):Supabase数据库、数据同步、AI分析、用户管理
🔧 技术栈选型
| 层级 | 选型 | 选择理由 |
|---|---|---|
| 前端框架 | React Native | 支持iOS和Android双平台复用代码;成熟的蓝牙BLE插件生态 |
| 蓝牙通信库 | react-native-ble-plx | 超4万周下载量;支持扫描、连接、读/写/通知特性 |
| 设备适配层 | 自研适配器框架 | 基于抽象工厂模式,统一管理FTMS标准和私有协议设备差异 |
| 数据存储 | Expo SQLite + Supabase | 本地优先架构保证离线可用;云端同步支持多设备统一管理 |
| 权限管理 | react-native-permissions | 统一且健壮的Android/iOS权限请求机制 |
三、核心功能设计
📡 设备扫描与连接
- 自动发现:高实时性设备扫描,实时刷新附近的蓝牙健身器材列表
- 主动配对:用户手动发起连接,或通过NFC标签快速绑定
- 智能重连:应用后台运行时自动尝试重连上次使用的设备
- 多设备连接:支持同时连接多台设备(如划船机+心率带)
📊 实时数据监控
| 设备类型 | 实时数据 |
|---|---|
| 跑步机 | 速度、坡度、距离、卡路里、心率、步频 |
| 动感单车/功率计 | 功率、踏频、阻力等级、卡路里、心率 |
| 划船机/椭圆机 | 划频/步频、阻力等级、总划数/步数、距离、卡路里、心率 |
| 智能跳绳 | 次数、时长、绊绳次数、最高连续次数、卡路里 |
💾 数据存储与分析
- 每一分钟的训练数据自动记录,形成训练日志
- 按日、周、月、年生成训练趋势图表
- 分析训练强度分布、卡路里消耗趋势、心率区间分布
- 多次训练对比分析,帮助用户了解进步趋势
🤖 训练计划与AI建议
- 内置多套科学的燃脂、增肌、心肺训练方案
- 用户可自定义训练目标(时长、卡路里、心率区间等)
- AI教练在用户训练中实时反馈,提供语音指导建议
- 自定义训练目标和参数设置训练方案
🎮 设备控制(可选进阶功能)
- 启动/暂停训练
- 调节速度/坡度/阻力等级
- 自动调参:用户心率偏离目标区间时,自动调整器材参数
四、蓝牙协议接入层技术详解
📋 设备协议分类体系
| 分类 | 设备特征 | 数据来源 |
|---|---|---|
| FTMS标准设备 | 支持BT SIG官方Fitness Machine Service(0x1826) | 从0x2ACD、0x2AD2等标准特征读取数据 |
| 私有协议设备 | 厂商自定义GATT服务和特征 | 需要逆向分析或获取厂商SDK |
| 混合模式 | 部分使用标准,部分使用私有扩展 | FTMS基础数据 + 厂商扩展特征 |
🔑 FTMS关键UUID一览
| UUID | 服务/特征名称 | 用途 |
|---|---|---|
| 0x1826 | Fitness Machine Service | FTMS服务UUID |
| 0x2ACC | Fitness Machine Feature | 设备能力宣告 |
| 0x2AD2 | Indoor Bike Data | 室内单车数据(速度、踏频等) |
| 0x2AD3 | Treadmill Data | 跑步机数据(速度、坡度、心率等) |
| 0x2AD4 | Cross Trainer Data | 椭圆机数据 |
| 0x2AD5 | Rower Data | 划船机数据(划频、功率) |
| 0x2AD9 | Fitness Machine Control Point | 控制点(速度调节、急停) |
🔌 统一设备适配器框架设计
TypeScript · 统一设备接口
interface FitnessDevice {
// 设备基本信息
deviceId: string;
deviceName: string;
deviceType: DeviceType;
manufacturer: string;
model: string;
// 统一连接管理
connect(): Promise;
disconnect(): Promise;
// 统一数据订阅
onData(callback: (data: StandardizedWorkoutData) => void): void;
// 统一控制(可选)
startWorkout(): Promise;
stopWorkout(): Promise;
setSpeed?(speed: number): Promise;
setIncline?(incline: number): Promise;
setResistance?(level: number): Promise;
} 🏭 厂商识别表
| 厂商 | 服务UUID范围 | 协议类型 | 对接方式 |
|---|---|---|---|
| Keep | 固定私有Service UUID | 私有协议 | 需对接其智能硬件SDK |
| NordicTrack | 开放iFit API | 私有+FTMS混合 | 部分新款已支持FTMS |
| SOLE | FTMS 0x1826 | FTMS标准 | 新款全面支持 |
| Wahoo | FTMS + 专有功率服务 | 混合模式 | 有专用GATT实现 |
| 小米 | FTMS + 私有扩展 | 混合模式 | 家用健身生态 |
| 华为 | Gym Profile | 华为运动健康生态 | 加入认证 |
📊 FTMS数据解析示例
Kotlin · Indoor Bike Data(0x2AD2)解析
fun parseIndoorBikeData(value: ByteArray): IndoorBikeData {
var offset = 0
val flags = value[offset].toInt() and 0xFF
offset += 1
var instantaneousSpeed: Float? = null
var averageSpeed: Float? = null
var instantaneousCadence: Int? = null
var distance: Int? = null
if ((flags and 0x01) != 0) {
instantaneousSpeed = (value[offset].toInt() and 0xFF).toFloat() / 100
offset += 2
}
if ((flags and 0x04) != 0) {
instantaneousCadence = value[offset].toInt() and 0xFF
offset += 2
}
if ((flags and 0x10) != 0) {
distance = value[offset].toInt() and 0xFF
offset += 2
}
return IndoorBikeData(
instantaneousSpeed = instantaneousSpeed,
distance = distance
)
}五、跨平台开发选型建议
⚖️ React Native vs Flutter vs 原生
| 对比维度 | React Native | Flutter | 原生开发 |
|---|---|---|---|
| 蓝牙支持成熟度 | ⭐⭐⭐⭐⭐ 最成熟 | ⭐⭐⭐⭐ 生态略新 | ⭐⭐⭐⭐⭐ 最稳定 |
| BLE后台支持 | ✅ 完整支持 | ✅ 主流插件支持 | ✅ 系统级支持 |
| 开发成本 | 中低 | 中低 | 高(两套代码) |
| 性能 | 良好 | 优秀 | 优秀 |
| 社区活跃度 | 极高 | 高 | 极高 |
综合结论:MVP阶段强烈推荐React Native + react-native-ble-plx组合,一套代码跑通双平台,蓝牙社区足够成熟,后期如有性能瓶颈可针对复杂场景生成原生模块。
六、iOS vs Android差异适配
| 差异点 | iOS | Android | 开发策略 |
|---|---|---|---|
| 蓝牙权限 | 需NSBluetoothAlwaysUsageDescription | 需BLUETOOTH_SCAN和BLUETOOTH_CONNECT(Android 12+) | 统一通过permissions库请求 |
| 后台扫描 | 需申请Uses Bluetooth LE Accessory Background Mode | 需申请ACCESS_BACKGROUND_LOCATION权限 | 双平台都需要单独配置 |
| 连接稳定性 | 相对稳定 | 设备厂商碎片化,某些品牌易掉线 | 重点针对Android进行重连优化 |
| 通知特性 | 完全支持,需重设MTU | 兼容性好 | 统一处理NOTIFY |
七、数据架构设计
🔄 数据流转设计
五步数据流转
- 步骤1:设备数据采集——App扫描、连接、订阅设备通知
- 步骤2:协议解析层适配——根据设备类型选择FitnessDeviceAdapter
- 步骤3:标准化——所有解析结果转为StandardizedWorkoutData格式
- 步骤4:App本地存储——Expo SQLite存储标准化运动记录
- 步骤5:云端同步(可选)——Supabase批量上传,支持Google Fit/Apple HealthKit
📋 Workout Session完整结构
TypeScript · 训练会话数据模型
interface WorkoutSession {
sessionId: string; // 唯一会话ID
userId: string; // 用户ID
deviceId: string; // 设备ID
deviceType: DeviceType;
startTime: number; // 开始Unix时间戳
endTime: number; // 结束时间戳
durationMs: number;
totalDistance: number; // 总距离(米)
totalCalories: number;
avgSpeed: number; // 平均速度(km/h)
avgHeartRate?: number;
maxHeartRate?: number;
samples: WorkoutDataPoint[]; // 详细时间序列数据
summary: {
avgCadence?: number;
avgPower?: number;
totalStrokes?: number; // 总划数/步数
totalClimb?: number; // 总爬升(米)
};
}八、开发路线与预算规划
📅 MVP开发路线图(一人全职,约5-6周)
第1周:环境与基础
React Native项目初始化;集成react-native-ble-plx;权限配置与蓝牙状态管理;基础扫描/连接功能
第2周:扫描与设备识别
设备发现与RSSI信号显示;厂商白名单过滤;FTMS服务检测;连接状态管理
第3-4周:标准设备数据解析
FTMS Indoor Bike Data(0x2AD2)解析;Treadmill Data(0x2AD3)解析;统一标准化数据模型实现
第5周:UI与数据存储
运动数据仪表盘界面;本地SQLite数据存储;训练历史记录列表
第6周:稳定与测试
实际设备连接测试;边缘场景异常处理;重连机制优化;发布到TestFlight/内部测试
30天一人全职开发完成MVP核心功能
💰 成本预算(OPC模式)
| 支出类别 | 明细 | 金额 | 备注 |
|---|---|---|---|
| 开发人力 | 全职6周开发(自有能力) | ¥0 | 自有开发能力为0成本 |
| React Native BLE库 | react-native-ble-plx | ¥0 | 开源MIT协议免费 |
| 后端服务 | Supabase免费额度 | ¥0 | 500MB数据库/月 |
| 云存储(可选) | 阿里云OSS按量付费 | ≈¥5/月 | 用户运动数据备份 |
| 苹果开发者账号 | 99美元/年 | ≈¥700 | iOS App Store上架必备 |
| 谷歌开发者账号 | 一次性25美元 | ≈¥180 | Google Play上架一次性 |
| 域名与SSL | 可选 | ¥50-100/年 | 云端API域名 |
| 测试设备 | 2-3款健身器材 | 因人而异 | 需要实际设备或借用验证 |
💡 如果没有编程能力:将以上MVP约6周的外包成本,外包价格在5-15万元之间(取决于FTMS私有支持程度、服务商地域和所需工作量)。
📊 MVP验证指标
| 指标 | 目标值 | 说明 |
|---|---|---|
| 成功连接率 | 95% | 扫描成功到完成连接的手续完成率 |
| 实时数据延迟 | <500ms | 从器材推送数据到App显示延迟 |
| 核心设备品类支持 | 2-3类 | 跑步机、动感单车、可选心率带 |
| 用户留存(7日) | 30% | 作为基础实用工具目标值参考 |
| 日活用户 | 50-100人 | 验证产品在家庭场景的需求存在 |
九、商业模式建议
💰 核心收入来源
| 收入模式 | 说明 | 定价建议 |
|---|---|---|
| 免费基础版 | 设备连接、实时数据展示、最近7天历史 | 免费(获客) |
| Pro订阅 | 无限历史存储、详细运动分析、心率区间分析、多设备对比 | ¥29/月或¥199/年 |
| AI教练(高级版) | 实时语音指导、个性化训练计划、数据分析报告 | 包含在Pro中或单独¥49/月 |
| 硬件联名收费 | 向智能健身设备厂商收取认证对接费用 | 50元/台出货量付费分成 |
🎯 市场差异化
- 专注桌面工具体验:极简连接速度、轻量无干扰、纯粹数据记录
- 开放通用:不捆绑厂商生态,任何支持FTMS的健身器材均可直连
- 数据所有感:用户的运动数据归用户所有,支持导出分析报告
十、技术挑战与应对方案
| 挑战 | 应对方案 |
|---|---|
| 私有协议设备广泛存在 | 建立私有协议配置机制和适配器模式,支持动态加载规则;优先支持FTMS |
| 蓝牙连接稳定性 | 建立完善的连接状态机管理;实现自动重连机制;增加连接诊断工具 |
| 高并发数据接收导致UI卡顿 | 数据采集与UI渲染解耦;采用节流与数据压缩写入存储 |
| iOS/Android后台连接限制 | iOS需配置后台模式;Android利用前台Service延长后台扫描时间 |
| 不同厂商数据含义不一致 | 提供原始数据查看能力;每个厂商建立独立映射层,标准化产出 |
| 电池续航压力大 | 控制BLE扫描窗口;设置扫描周期动态调整;避免无谓的频繁连接 |
本方案基于一人公司(OPC)视角编制,优先级支持FTMS国际标准设备,力争在小团队、低成本前提下,实现全品类蓝牙健身器材的通用接入平台。
UniFit · 统一健身器材蓝牙接入APP技术方案
基于OPC一人公司视角 · 低成本快速验证
基于OPC一人公司视角 · 低成本快速验证
夜雨聆风