更新记录

1.3.0(2026-09-16)

  • feat: 基于官方 Android AAR / iOS 静态库 / 微信 Manridy 插件重写,覆盖协议全量 API
  • feat: App-iOS 正式支持(Swift CoreBluetooth + libMRD2019)
  • feat: 扩展压力 / 血糖 / 体温 / 血压 / HRV / ECG / 计步历史 / 设备设置等接口
  • fix: Android Manridy.init、指令队列顺序下发、健康字段兜底解析
  • fix: iOS 禁止导出 init(Swift 保留字),统一使用 initSdk,业务层可兼容 init
  • fix: Vite / 微信小程序提供根目录明文 index.js,避免加密 .uts 导致 Unexpected "�"
  • chore: 插件目录与市场插件 ID 对齐为 ajun-manridy-sdk

1.2.5(2026-08-25)

  • fix(iOS): 按官方规范将全部 .h 与 .a 扁平放入 Libs/libMRD2019/,移除非官方 Headers/ 目录
  • fix(iOS): config.json 去掉非官方字段 headerSearchPaths
  • chore: 普通授权版售价保持 199.00;业务工程恢复 extends.sn(收费插件授权必需)

1.2.4(2026-08-25)

  • fix: 业务工程移除 extends.sn,避免云打包按「普通授权版」加密链路编译本地源码
  • fix: 清理 index.uts / interface.uts 异常隔行空行;删除重复 iOS .a 与废弃 CRP aar
  • fix: Android Kotlin catch (_) / pollFirst 兼容云端编译器
查看更多

平台兼容性

uni-app(5.0)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
× √ - - √ - √ √ -
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
√ - - - - - - - - - - -

uni-app x(5.0)

Chrome Safari Android iOS 鸿蒙 微信小程序
- - - - - -

其他

多语言 暗黑模式 宽屏模式 蒸汽模式
× × × √

Manridy 智能戒指 SDK(UTS)

智能戒指 BLE 能力的 UniApp 插件。统一封装 App-Android、App-iOS 与 微信小程序,提供扫描连接、电量、步数、睡眠、心率、血氧及协议全量能力。

平台 支持 底层能力
App-Android ✅ MRD SDK AAR(sdk_mrd2026_1.3.0)
App-iOS ✅ MRD 静态库(libMRD2019.framework)
微信小程序 ✅ 微信插件 Manridy@1.0.8
H5 / 其他小程序 ❌ 不支持
  • 插件类型:UTS(App)+ 明文 JS(微信小程序)
  • 最低 HBuilderX:3.6.8+
  • Vue3:支持;Vite 微信小程序:支持(勿直接引用加密 .uts)

Vite / 微信小程序重要说明

付费 UTS 上架后,.uts 会被市场加密。Vite/esbuild 无法解析加密二进制,会报 Unexpected "�"。

本插件已处理:

端 入口 说明
微信小程序 / Vite 根目录 index.js → utssdk/mp-weixin/index.js 明文,可直接 import
App-Android utssdk/app-android(UTS) HBuilderX / 云打包处理,可加密
App-iOS utssdk/app-ios(UTS) HBuilderX / 云打包处理,可加密

业务统一写法:

import {
  init,
  initSdk,
  startScan,
  connect
} from '@/uni_modules/ajun-manridy-sdk'

不要再绕开插件单独 requirePlugin('Manridy')(除非自行封装)。插件内部已封装 Manridy。

App-iOS 请优先调用 initSdk()。UTS 会把 init 编成 Swift 保留字导致云打包失败;Android / 微信仍可用 init()。

功能列表

  • 蓝牙扫描、连接、断开
  • 时间同步、用户信息下发
  • 电量 / 固件版本查询
  • 今日步数(距离、卡路里)与计步历史
  • 睡眠数据查询
  • 心率 / 血氧 / 血压 / 体温 / 血糖 / 压力 / HRV / ECG 测量与历史
  • 设备设置:亮度、久坐、喝水、勿扰、翻腕、单位、闹钟、消息等
  • 统一事件回调:连接态、电量、步数、睡眠、心率、血氧、血压、体温等

安装

方式一:插件市场

在 HBuilderX 中从插件市场导入本插件到项目 uni_modules。

方式二:手动拷贝

你的项目/
└─ uni_modules/
   └─ ajun-manridy-sdk/

权限说明(必读)

一、Android 清单权限

插件已内置权限声明,云打包一般会自动合并。若自定义权限或离线打包,请在 manifest.json → app-plus → distribute → android → permissions 中配置:

[
  "<uses-permission android:name=\"android.permission.BLUETOOTH\"/>",
  "<uses-permission android:name=\"android.permission.BLUETOOTH_ADMIN\"/>",
  "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
  "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
  "<uses-permission android:name=\"android.permission.INTERNET\"/>",
  "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
  "<uses-permission android:name=\"android.permission.BLUETOOTH_SCAN\"/>",
  "<uses-permission android:name=\"android.permission.BLUETOOTH_CONNECT\"/>"
]

二、Android 运行时动态权限

扫描前必须动态申请,并引导用户打开系统蓝牙;Android 6–11 还需打开定位服务。

系统版本 动态申请权限
Android 6–11 ACCESS_FINE_LOCATION、ACCESS_COARSE_LOCATION
Android 12+(API 31+) BLUETOOTH_SCAN、BLUETOOTH_CONNECT(建议同时申请定位)
function requestRingPermissions() {
  return new Promise((resolve, reject) => {
    // #ifdef APP-PLUS
    const permissions = [
      'android.permission.ACCESS_FINE_LOCATION',
      'android.permission.ACCESS_COARSE_LOCATION',
      'android.permission.BLUETOOTH_SCAN',
      'android.permission.BLUETOOTH_CONNECT'
    ]
    plus.android.requestPermissions(
      permissions,
      (result) => {
        const denied = (result.deniedAlways || []).concat(result.deniedPresent || [])
        if (denied.length) {
          reject(new Error('权限被拒绝: ' + denied.join(',')))
          return
        }
        resolve(result)
      },
      (err) => reject(err)
    )
    // #endif
    // #ifndef APP-PLUS
    resolve()
    // #endif
  })
}

三、微信小程序权限与插件

  1. 在微信公众平台为当前小程序申请使用插件:
插件 AppID(provider):wxfedd2dfd173a9f40
插件名称:Manridy
版本:1.0.8
  1. 在 manifest.json → 微信小程序配置 → 插件配置:
{
  "Manridy": {
    "version": "1.0.8",
    "provider": "wxfedd2dfd173a9f40"
  }
}
  1. 小程序需开通:蓝牙、位置(用于 BLE 扫描,部分安卓机型依赖定位服务)。

四、隐私与数据说明

  • 本插件不含广告
  • 本插件不采集、不上报用户数据
  • 蓝牙数据仅在手机与戒指之间本地传输

快速使用

1. 引入

import {
  init,
  initSdk,
  startScan,
  stopScan,
  connect,
  disconnect,
  onDeviceFound,
  onConnectionStateChange,
  onBatteryChange,
  onStepsChange,
  onSleepChange,
  onHeartRateChange,
  onBloodOxygenChange,
  onData,
  syncTime,
  queryBattery,
  queryFirmwareVersion,
  queryCurrentSteps,
  queryHistorySleep,
  startMeasureHeartRate,
  stopMeasureHeartRate,
  startMeasureBloodOxygen,
  stopMeasureBloodOxygen,
  sendUserInfo
} from '@/uni_modules/ajun-manridy-sdk'

2. 推荐调用顺序

initSdk() / init()
  → 申请权限 / 打开蓝牙(及定位服务)
  → 注册 onXxx 回调
  → startScan()
  → connect({ deviceId })
  → syncTime() / sendUserInfo()
  → queryXxx() / startMeasureXxx()

3. 完整示例

initSdk()

onDeviceFound((device) => {
  console.log('发现设备', device.name, device.deviceId, device.rssi)
})

onConnectionStateChange((res) => {
  // res.state: connecting | connected | disconnected | disconnecting
  console.log('连接状态', res.state, res.code)
})

onBatteryChange((res) => {
  console.log('电量', res.battery)
})

onStepsChange((res) => {
  console.log('步数', res.steps, res.distance, res.calories)
})

onSleepChange((res) => {
  console.log('睡眠', res.totalTime, res.deepTime, res.lightTime)
})

onHeartRateChange((res) => {
  console.log('心率', res.heartRate)
})

onBloodOxygenChange((res) => {
  console.log('血氧', res.bloodOxygen)
})

onData((res) => {
  console.log('原始事件', res)
})

// App 端请先 await requestRingPermissions()
startScan({
  timeout: 10000,
  fail(err) {
    console.error(err)
  }
})

connect({
  deviceId: 'XX:XX:XX:XX:XX:XX',
  success() {
    syncTime()
    sendUserInfo({
      height: 170,
      weight: 65,
      gender: 1, // 0 女 / 1 男
      age: 28,
      stepLength: 70
    })
    queryBattery()
    queryCurrentSteps()
  },
  fail(err) {
    console.error(err)
  }
})

API 说明

常用方法

方法 参数 说明
initSdk() / init() — 初始化 SDK(iOS 请用 initSdk)
startScan(options?) timeout?: number 开始扫描
stopScan() — 停止扫描
connect(options) deviceId: string 连接设备
disconnect() — 断开连接
syncTime(options?) 回调可选 同步手机时间到戒指
queryBattery() — 查询电量(结果走 onBatteryChange)
queryFirmwareVersion() — 查询固件版本
queryCurrentSteps() — 查询今日步数
queryHistorySleep() — 查询睡眠
startMeasureHeartRate() — 开始心率测量
stopMeasureHeartRate() — 停止心率测量
startMeasureBloodOxygen() — 开始血氧测量
stopMeasureBloodOxygen() — 停止血氧测量
sendUserInfo(info) 见下表 下发用户信息
invoke(action, params?) action 名 + 参数 透传协议动作(全量扩展入口)

sendUserInfo 字段

字段 类型 说明
height number 身高(cm)
weight number 体重(kg)
gender number 0 女 / 1 男
age number 年龄
stepLength number 步长(cm)

事件回调

方法 回调数据 说明
onDeviceFound(cb) { name, deviceId, rssi } 扫描到设备
onConnectionStateChange(cb) { state, code } 连接状态变化
onBatteryChange(cb) { battery } 电量
onStepsChange(cb) { steps, distance, calories, time } 步数
onSleepChange(cb) { totalTime, deepTime, lightTime, awakeTime, remTime } 睡眠
onHeartRateChange(cb) { heartRate } 心率
onBloodOxygenChange(cb) { bloodOxygen } 血氧
onBloodPressureChange(cb) 血压字段 血压
onTemperatureChange(cb) 体温字段 体温
onGlucoseChange(cb) 血糖字段 血糖
onStressChange(cb) 压力字段 压力
onHrvChange(cb) HRV 字段 HRV
onData(cb) { event, data } 原始/扩展事件

健康类接口请先注册对应 onXxx,再调用 query / measure。

历史查询通用 type:0 最近一次 / 1 历史详情 / 2 历史条数。可通过 getHrData、getBoData、getBpData、getTempData、getGluData、getHrvData、getSleep 等接口传入。

混淆配置(Android 发行包)

-keep class com.manridy.** { *; }
-dontwarn com.manridy.**

注意事项

  1. 必须真机调试:模拟器无法完成 BLE 扫描与连接。
  2. 先权限后扫描:未授权或未开定位服务时,Android 常见现象是“扫不到设备”。
  3. 先监听后查询:queryBattery、queryCurrentSteps、测量类接口的结果通过 onXxx 回调返回。
  4. 两端底层不同:Android / iOS 走官方 MRD 协议库 + 自研 BLE;微信走厂商插件 Manridy。
  5. 微信插件授权:未在公众平台申请 Manridy 插件时,小程序端无法 requirePlugin。
  6. 断开重连:Android 建议 disconnect 后稍候再 connect,提高成功率。
  7. App 调试:Android / iOS 需制作 UTS 自定义基座。
  8. 收费授权:云打包正式包请保留插件市场下发的 extends.sn。

常见问题

Q:扫描列表一直为空?
A:检查蓝牙开关、定位权限、定位服务;Android 12+ 检查 BLUETOOTH_SCAN / BLUETOOTH_CONNECT;尽量靠近设备并摘下戒指充电座。

Q:已连接但无心率/步数回调?
A:确认已先 onHeartRateChange / onStepsChange,再调用测量或查询接口。

Q:微信端报找不到插件?
A:确认 manifest.json 已配置 plugins,且小程序 AppID 已通过厂商插件授权。

Q:Vite 报 Unexpected "�"?
A:不要直接引用加密 .uts,请从 @/uni_modules/ajun-manridy-sdk(根目录明文 index.js)引入。

Q:云打包后崩溃 / 找不到类?
A:确认发行包已配置 ProGuard keep;确认插件 libs 内 AAR 已随插件提交。

兼容性

项目 要求
HBuilderX 3.6.8+
Android minSdk 21+
iOS 12.0+
微信小程序基础库 建议 2.27.3+
uni-app Vue3

反馈

使用中如遇问题,请提供:系统版本、机型、戒指型号/固件版本、复现步骤与日志,便于排查。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

Android:BLUETOOTH、BLUETOOTH_ADMIN、BLUETOOTH_SCAN、BLUETOOTH_CONNECT、ACCESS_FINE_LOCATION、ACCESS_COARSE_LOCATION、INTERNET、ACCESS_NETWORK_STATE。微信小程序:蓝牙、位置(用于 BLE 扫描)。

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据。蓝牙通信数据仅在本地设备与手机之间传输,不会上传至服务器。

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无