react-native-lefu-sdk
v0.4.2
Published
lefu-sdk
Readme
react-native-lefu-sdk
乐福 (Lefu) 体脂秤 SDK 的 React Native 封装插件。支持 Android 和 iOS,提供设备扫描、连接、实时称重数据获取以及身体成分分析功能。
功能特性
- 📱 多平台支持:完整支持 Android 和 iOS。
- 🔍 设备扫描:快速发现周边的乐福蓝牙秤。
- 🔗 稳定连接:支持多种型号的乐福秤(包括 4 电极和 8 电极)。
- ⚖️ 实时数据:获取实时称重过程数据、锁定数据。
- 📊 深度分析:集成身体成分计算库,返回 BMI、体脂率、肌肉量等详细指标。
- 🔐 权限引导:原生层内置美观的蓝牙与定位权限/开关引导。
- 📂 统一存储:用户信息在 JS 侧统一管理(使用 AsyncStorage),实时同步至原生计算库。
安装
yarn add react-native-lefu-sdk
# 或
npm install react-native-lefu-sdk依赖安装
本插件依赖于 @react-native-async-storage/async-storage 进行用户信息持久化,请确保已安装:
yarn add @react-native-async-storage/async-storage配置指南
Android
- 权限声明:在
android/app/src/main/AndroidManifest.xml中添加:
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- Android 12+ -->
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />- Maven 仓库配置:在
android/build.gradle中添加乐福原生 SDK 的仓库:
allprojects {
repositories {
maven { url "https://raw.githubusercontent.com/LefuHengqi/PPBaseKit-Android/main" }
// 修复 AsyncStorage 3.0+ 的构建问题
maven {
url "$rootDir/../node_modules/@react-native-async-storage/async-storage/android/local_repo"
}
}
}iOS
- 权限声明:在
Info.plist中添加蓝牙权限描述:
<key>NSBluetoothAlwaysUsageDescription</key>
<string>我们需要蓝牙权限来连接您的乐福秤</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>我们需要蓝牙权限来连接您的乐福秤</string>- Pod 安装:
cd ios && pod install快速上手
1. 初始化 SDK
建议在 App 启动时进行初始化:
import { initSdk } from 'react-native-lefu-sdk';
const APP_KEY = '您的AppKey';
const APP_SECRET = '您的AppSecret';
await initSdk(APP_KEY, APP_SECRET);2. 权限与硬件状态检查
本插件提供了强大的引导功能:
import { requestPermissions, getHardwareStatus } from 'react-native-lefu-sdk';
// 检查并引导用户开启蓝牙和定位
const status = await getHardwareStatus();
if (!status.bluetoothEnabled || !status.locationEnabled) {
// 原生层会自动弹出美观的 AlertDialog 引导用户开启
await requestPermissions();
}3. 用户信息管理 (计算身体指标必选)
为了准确计算体脂率等指标,必须先设置用户信息。建议在 JS 侧管理用户列表:
import { saveCurrentUser } from 'react-native-lefu-sdk';
const user = {
userID: 'user_123',
memberId: 'member_456',
age: 25,
userHeight: 180, // 单位:cm
sex: 1, // 1: 男, 0: 女
isAthleteMode: false,
};
// 此方法会自动持久化并同步到原生 SDK 的计算内存中
await saveCurrentUser(JSON.stringify(user));4. 扫描与连接
import { startScan, addScanListener, connect } from 'react-native-lefu-sdk';
// 监听扫描结果
const sub = addScanListener((device) => {
console.log('发现设备:', device.name, device.address);
// 连接设备
connect(device.address);
});
startScan();5. 接收测量数据
import { addScaleDataListener } from 'react-native-lefu-sdk';
addScaleDataListener((data) => {
switch(data.type) {
case 'process':
console.log('测量中...', data.weight);
break;
case 'lock':
console.log('数据已锁定', data.weight);
break;
case 'calculation_success':
// 身体成分分析结果
const analysis = JSON.parse(data.data);
console.log('BMI:', analysis.ppBMI);
console.log('体脂率:', analysis.ppFat);
break;
case 'overweight':
console.warn('超重!');
break;
}
});API 概览
方法
| 方法名 | 说明 |
| :--- | :--- |
| initSdk(key, secret) | 初始化乐福 SDK |
| requestPermissions() | 请求蓝牙/定位权限(含 Android 原生引导弹窗) |
| getHardwareStatus() | 获取详细硬件状态(权限、蓝牙开关、定位开关) |
| startScan() | 开始扫描周边设备 |
| stopScan() | 停止扫描 |
| connect(address) | 连接指定 Mac 地址的设备 |
| saveCurrentUser(json) | 保存当前用户并同步至原生计算库 |
| getCurrentUser() | 获取当前持久化的用户信息 |
| saveUserList(json) | 保存用户列表(JS 侧持久化) |
| getUserList() | 获取用户列表 |
| startLogListener() | 开启原生日志监听 |
事件监听
addScanListener(callback): 扫描到新设备。addScaleDataListener(callback): 称重数据更新。addScanStateListener(callback): 扫描状态变更。addBluetoothStateListener(callback): 蓝牙状态变更。addLogListener(callback): 原生日志输出。
数据模型
身体分析结果 (calculation_success)
分析结果包含以下关键指标(取决于秤的型号):
ppBMI: BMI 指数ppFat: 体脂率ppMuscle: 肌肉量ppBMR: 基础代谢ppVisceralFat: 内脏脂肪等级ppWater: 体水分ppBone: 骨量ppProtein: 蛋白质ppBodyAge: 身体年龄- ... 以及 8 电极特有的肢体分析数据。
开源协议
MIT
