iOS SDK 集成指南_v2.5版本履历IOS SDK概述术语定义IOS SDK集成步骤1: 引入lib库步骤2:修改Bundle IDIOS SDK定义说明SDK状态说明设备类别(OMRONDeviceCategory)说明设备信息(OMRONDeviceInfo)说明数据说明用户敏感信息可见等级(OMRONSensitiveLogLevel)说明日志可见等级设置(OMRONLogPrintLevel)说明OMRONLib初始化状态(OMRONLibRegisterStatus)说明血压数据(OMRONBPObject)说明体脂数据(OMRONBFObject)说明血糖数据(OMRONBGObject)说明血氧数据(OMRONBOObject)说明IOS SDK接口说明1. 初始化SDK2. 根据设备类别获取可用设备列表3. 根据设备类别扫描周围设备3.1 扫描周围设备接口(旧版本接口:不区分绑定和同步状态,不推荐)3.2 停止扫描周围设备接口(旧版本接口:不区分绑定和同步状态,不推荐)3.3 调用扫描周围绑定状态设备的接口3.4 停止扫描周围绑定状态设备的接口3.5 扫描周围同步状态设备的接口3.6 停止扫描周围同步状态设备的接口3.7 SDK状态回调4. 取消设备连接绑定5. 血压计5.1 绑定血压设备5.2 获取血压设备数据5.3 血压计开启数据监听(旧版方法:只能监听一个设备,不推荐)5.4 多个血压计开启数据监听6. 体脂6.1 绑定体脂设备6.2 获取体脂设备数据6.3 体脂仪开启数据监听(旧版方法:只能监听一个设备,不推荐)6.4 多个体脂仪开启数据监听7. 血糖7.1 绑定血糖设备7.2 获取血糖设备数据7.3 血糖仪开启数据监听(旧版方法:只能监听一个设备,不推荐)7.4 多个血糖仪开启数据监听8. 血氧8.1 绑定血氧设备8.2 获取血氧设备数据8.3 血氧仪开启数据监听(旧版方法:只能监听一个设备,不推荐)8.4 多个血氧仪开启数据监听9. 数据监听9.1 数据监听是否已开启9.2 停止数据监听(停止数据监听通用接口)10 日志等级10.1 日志等级过滤输出10.2 信息脱敏等级设置11 设备指纹11.1 获取设备指纹SDK使用注意事项1. 个人信息说明2. 绑定个人信息说明3. 同步个人信息说明4. 血压计、体脂仪、血糖仪数据监听和取消监听说明
v2.5:增加独立授权设备限制。
v2.4:增加应用限制、蓝牙连接状态返回、优化日志功能。
v2.3:新增血氧仪HPO-201T,AF血压计U734T等设备的绑定和数据同步功能。
v2.2:无网络时也能访问。
v2.1:新增T50,U32,J732,J751,J760,U36J,U36T,HEM-6231T八款血压和一款HBF-229T体脂仪的绑定,数据监听,取消以及扫描周边设备的功能。
xxxxxxxxxx
本SDK主要提供欧姆龙血压计、血糖仪、体脂秤、血氧仪绑定和同步数据功能。开发者添加jar文件到项目中,调用sdk提供的接口方法,实现对血压和体脂设备的操控。
sdk包含OMRONLib.framework文件
No. | 术语 | 意义 | 欧姆龙开放平台中的位置 | 使用位置 |
---|---|---|---|---|
1 | appKey | 应用的密钥(厂商key)。 | 总览->应用->app-key | 参考《1. 初始化SDK》章节 |
2 | ekiKey | 设备密钥(设备授权key),保存了支持的设备信息。 | 远程设备开放->设备信息一览->EkiKey | 参考《1. 初始化SDK》章节 |
3 | packageName | 应用包名(App包名) | 远程设备开放->开始集成->ios->应用包名 | 参考《1. 初始化SDK》章节 |
4 | packageSecret | 应用秘钥(包名密码),在输入了ios的应用包名后显示。 | 远程设备开放->开始集成->ios->应用秘钥 | 参考《1. 初始化SDK》章节 |
5 | license | 设备独立授权下载的离线License文件 | 远程设备开放->独立设备授权->License离线下载 | |
6 | thirdUserId | 第三方客户应用下用户识别码,可通过thirdUserId 锁定禁止用户使用sdk。thirdUserId长度不超过64位。 |
xxxxxxxxxx
引入OMRONLib.framework到项目中
添加引用(#import <OMRONLib/OMRONLib.h>)
在项目的plist中添加权限说明NSBluetoothPeripheralUsageDescription
xxxxxxxxxx
修改项目的Bundle ID,确保官网申请的IOS下的应用包名与当前Bundle ID一致。
xxxxxxxxxx
OMRON_SDK_Success,(成功)
OMRON_SDK_UnRegister,(未注册)
OMRON_SDK_InValidKey,(厂商id无效)
OMRON_SDK_NoNet,(请在网络连接状态下进行绑定)
OMRON_SDK_UnOpenBlueTooth,(蓝牙未开启,请开启蓝牙)
OMRON_SDK_BlueToothError,(蓝牙异常)
OMRON_SDK_UnSupportDevice,(不支持当前设备)
OMRON_SDK_UnSupportDeviceCategory,(不支持该设备类别)
OMRON_SDK_UnBind,(请先绑定正确的设备)
OMRON_SDK_PINCodeError,(PIN码错误)
OMRON_SDK_BOND_Invalid,(绑定状态错误,请在蓝牙列表中取消配对后再试)
OMRON_SDK_BOND_Cancel,(配对取消)
OMRON_SDK_Disconnected,(蓝牙连接断开)
OMRON_SDK_BindFail,(绑定失败)
OMRON_SDK_NoDevice,(未找到设备)
OMRON_SDK_ConnectFail,(链接失败)
OMRON_SDK_ScanTimeOut(扫描到期)
xxxxxxxxxx
ALL_OMRON_DEVICE = 0, // 所有欧姆龙设备
BLOOD_PRESSURE = 1, // 血压计
BLOOD_GLUCOSE = 2, // 血糖仪
BODY_FAT = 4 // 体脂仪
BLOOD_OXYGEN = 5 // 血氧仪
xxxxxxxxxx
modelName; // 设备类型
serialNumber; // 设备序列号
hardwareVersion; // 硬件版本号
softwareVersion; // 软件版本号
firmwareVersion; // 固件版本号
batteryLevel; // 设备电量
powerSupplyMode; // 供电模式
manufacturerName; // 制造商名称
modelNumber; // 设备代号
systemID; // 设备系统ID
xxxxxxxxxx
OMRONLOG_NONE, //完全不可见:release环境默认
OMRONLOG_DEFAULT, //敏感信息后一半可见,其他部分用“*”代替
OMRONLOG_ALL, //完全可见:debug环境默认
xxxxxxxxxx
OMRONLOG_PRINT_DEBUG, //全部日志: debug环境默认
OMRONLOG_PRINT_INFO, //过滤掉部分的日志
OMRONLOG_PRINT_WARN, //包含警告的日志
OMRONLOG_PRINT_ERROR, //包含错误的日志: release环境默认
OMRONLOG_PRINT_FATAL //异常的日志: 可能导致程序异常,需要注意
xxxxxxxxxx
OMRONLIB_UNREGISTERED, //OMRONLib未初始化
OMRONLIB_REGISTER_SUCCESS, //OMRONLib初始化成功
OMRONLIB_KEY_ERROR, //appKey或ekiKey错误
OMRONLIB_EKIKEY_EXPIRED, //ekiKey过期
OMRONLIB_PACKAGE_ERROR, //包名验证失败
OMRONLIB_THIRD_USER_BLOCKED, //当前用户已冻结
OMRONLIB_FAILED_TO_OVER_FINGERPRINT, //指纹授权量超过
OMRONLIB_ONLINE_ERROR, //请允许网络数据访问或者配置离线license文件
OMRONLIB_FINGER_ERROR //指纹验证失败
xxxxxxxxxx
sbp(收缩压)
dbp(舒张压)
pulse(心率)
ihb_flg(心率不齐状态// 0: normal; 1 abnormal)
bm_flg(身体移动状态// 0:not move; 1 move)
cws_flg(臂带宽松状态 // 0: normal; 1 abnormal)
measureUser(测量使用者// 0:unset; 1:userA; 2:userB)
afMode(房颤测量模式// 0:not support; 1 support)
af_flg(房颤状态// 0:not af; 1 af)
measure_at(测量时间)
device_type(设备类型)
xxxxxxxxxx
bmi;//bmi
basal_metabolism;//基础代谢
body_age;//体年龄
fat_rate;//体脂率
weight;//体重
userIndex;//用户使用者1,2,3,4
visceral_fat;//内脏脂肪水平
skeletal_muscles_rate;//骨骼肌率
measure_at;//测量时间
device_type;//设备类型
height;//身高
birthday;//生日
gender;//0.男, 1.女
xxxxxxxxxx
sequenceNumber;//序号
measureDate;//测量时间
measureUnit;//测量单位
measureValue;//测量值
meal;//用餐状态 未设定、餐前、餐后、空腹、
xxxxxxxxxx
spo;//血氧饱和度
pulse;//心率
measure_at;//测量时间
1.1 授权与用户管理配置
根据使用场景和网络依赖性,SDK 提供两种授权模式,区别如下:
特性 | 在线模式 | 离线模式 |
---|---|---|
网络依赖 | 首次激活需联网验证,后续操作可离线使用 | 完全离线,无需任何网络连接 |
授权文件 | 无需预置文件,license 设置为nil | 需预置离线授权文件(从管理门户下载)通过iTunes或者其他开发者工具放置在当前项目文档目录(/Document)下 |
用户限制功能 | 支持通过thirdUserId 动态封禁用户(需联网同步黑名单) | 依赖本地授权文件,无法动态封禁用户 |
适用场景 | 需定期验证授权状态或动态管理用户权限的场景 | 无网络环境(如医疗设备专用平板)、对数据隐私要求极高的场景 |
激活方式 | 自动联网验证appKey 和packageSecret | 通过读取本地授权文件激活 |
功能限制 | 支持远程更新设备授权列表 | 功能固定,无法远程更新授权 |
配置选择建议
优先选择在线模式
支持动态用户管理(如冻结异常账户)
自动适配最新设备授权规则
首次激活后仍可离线使用核心功能
强制离线场景选择离线模式
需提前在管理门户生成设备指纹绑定的授权文件
授权文件与设备强关联,不可跨设备复用
请根据使用场景选择对应的配置方式。
详细配置如下:
在线模式(无需离线授权文件)
xxxxxxxxxx
license = nil; // 直接设置为nil
离线模式(需预置授权文件)
文件准备 :从管理门户下载独立设备授权文件(格式示例:license.lic
)
文件存放路径 :
/Documents/
激活方式 :
xxxxxxxxxx
NSString *path = [NSString stringWithFormat:@"%@%@",NSHomeDirectory(),@"/Documents/license.lic"];
NSString *license = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; //license文件内容
OMRONLibRegisterStatus result = [[OMRONLib shareInstance] registerApp:厂商key license:license packageName:App包名 packageSecret:包名密码 thirdUserId:第三方客户应用下用户识别码];
用户权限控制(可选)
通过thirdUserId
参数限制特定用户使用SDK。
xxxxxxxxxx
NSString *thirdUserId = "USER_001"; // 长度不超过64字符(字母/数字/下划线)
[[OMRONLib shareInstance] registerApp:厂商key license:license文件内容 packageName:App包名 packageSecret:包名密码 thirdUserId:thirdUserId];
注:被封禁用户将收到错误码(`OMRONLIB_THIRD_USER_BLOCKED`)
返回所支持设备列表
xxxxxxxxxx
[[OMRONLib shareInstance] getDeviceTypeList:BLOOD_PRESSURE];
扫描指定类别的设备,不区分设备绑定状态和同步状态,不推荐
血压、体脂和血氧设备返回字段:status
、deviceName
、deviceId
、deviceSerialNum
血糖设备返回字段:deviceSerialNum
、peripheral
xxxxxxxxxx
[[OMRONLib shareInstance] scanAllDevicescomplete:BLOOD_GLUCOSE deviceType:deviceType deviceSerialNum:serialNum complete:^(OMRONSDKStatus status, NSString * _Nonnull deviceName, NSString * _Nonnull deviceId, NSString * _Nonnull deviceSerialNum, CBPeripheral * _Nonnull peripheral) {
在固定时间范围内,扫描到周围设备,表格需过滤重复设备展示
}]
xxxxxxxxxx
[[OMRONLib shareInstance] stopScanAllDevices];
扫描指定类别的绑定状态的设备
xxxxxxxxxx
[[OMRONLib shareInstance] scanBindDevices:BLOOD_PRESSURE complete:^(OMRONSDKStatus status, OMRONBleDevice * _Nullable bleDevice) {
在固定时间范围内,扫描到周围绑定状态的设备,表格需过滤重复设备展示
}];
扫描周围绑定状态设备接口的停止方法
xxxxxxxxxx
[[OMRONLib shareInstance] stopScanBindDevices];
扫描已绑定的同步状态中的设备
xxxxxxxxxx
[[OMRONLib shareInstance] scanSyncDevices:deviceArray complete:^(OMRONSDKStatus status, OMRONBleDevice * _Nullable bleDevice) {
在固定时间范围内,扫描到周围同步状态的设备,表格需过滤重复设备展示
}];
扫描周围同步状态设备接口的停止方法
xxxxxxxxxx
[[OMRONLib shareInstance] stopScanSyncDevices];
监测当前SDK状态
xxxxxxxxxx
[OMRONLib shareInstance].statusBlock = ^(OMRONLibStatus status){
};
/**
*
typedef NS_ENUM(NSInteger, OMRONLibStatus) {
OMRONLIB_SCAN, //开始扫描
OMRONLIB_CONNECT, //开始链接
OMRONLIB_SYNC_DATA, //开始数据同步
OMRONLIB_SYNC_DATA_SUCCESS, //数据同步成功
OMRONLIB_SYNC_DATA_ERROR, //数据同步失败
OMRONLIB_DISCONNECTED //断开链接
};
*/
调用取消设备连接接口
xxxxxxxxxx
[[[OMRONLib shareInstance] stopConnect:^(BOOL isCancel) {
isCancel用来判断是否可以取消连接,当设备已连接时,isCanel会返回NO,不可取消连接
}];
调用设备绑定接口传入绑定设备
xxxxxxxxxx
[[OMRONLib shareInstance] bindBpDevice:(NSString * _Nonnull) deviceType
deviceSerialNum:(NSString * _Nullable)deviceSerialNum
complete:(void(^)(OMRONSDKStatus status,NSString *deviceType,NSString *deviceSerialNum,NSString *deviceId, OMRONDeviceInfo * deviceInfo,NSArray<OMRONBPObject *> *datas))complete;
返回绑定设备状态、设备类型、设备唯一标识、设备id、设备信息、测量数据
}];
调用获取血压设备数据接口,传入设备类型以及绑定接口中返回的设备唯一码
xxxxxxxxxx
[[OMRONLib shareInstance] getBpDeviceData:(NSString *) deviceType
deviceSerialNum:(NSString *)deviceSerialNum
complete:(void(^)(OMRONSDKStatus status,NSArray<OMRONBPObject *> *datas))complete;
返回获取设备数据状态、测量数据
})
调用血压计数据监听接口,传入设备类型以及绑定接口中返回的设备唯一码,该接口不可与其他设备监听和数据同步接口同时使用
xxxxxxxxxx
[[OMRONLib shareInstance] startBpMonitoring(NSString *) deviceType deviceSerialNum:(NSString *)deviceSerialNum complete:(BpObserverBlock) complete;
返回获取设备数据状态、测量数据
根据当前数据同步结果判断是否需要下次监听 除timeout、connctfail、noDevice、success继续下个周期数据监听 其余OMRONSDKStatus异常状态停止数据监听
}]
调用多个血压计数据监听接口,传入要监听的血压设备,该接口不可与其他设备监听和数据同步接口同时使用 可以同时监听多个设备,推荐。
xxxxxxxxxx
[[OMRONLib shareInstance] startBpMonitoring:deviceArray complete:^(OMRONSDKStatus status, NSArray<OMRONBPObject *> * datas) {
返回获取设备数据状态、测量数据
根据当前数据同步结果判断是否需要下次监听 除timeout、connctfail、noDevice、success继续下个周期数据监听 其余OMRONSDKStatus异常状态停止数据监听
}]
调用设备绑定接口传入绑定设备类型,用户使用者,个人信息
xxxxxxxxxx
[[OMRONLib shareInstance] bindBfDevice:(OMRONDeviceType)deviceType userIndex:(NSInteger)userIndex birthday:(NSDate *)birthday height:(CGFloat)height isMale:(BOOL)isMale complete:(void(^)(OMRONSDKStatus status,NSString *deviceName,NSInteger userIndex,NSString *advertisingName,NSDictionary *userInfo))complete {
返回绑定设备状态
设备名称
设备使用者(1,2,3,4)
设备唯一码
用户个人信息
}];
调用获取体脂设备数据接口,传入设备类型、设备唯一码,用户使用者,用户信息以及绑定接口中返回的设备唯一码
xxxxxxxxxx
[[OMRONLib shareInstance] getBfDeviceData:(OMRONDeviceType)deviceType deviceSerialNum:(NSString *)deviceSerialNum userIndex:(NSInteger)userIndex birthday:(NSDate *)birthday height:(CGFloat)height isMale:(BOOL)isMale complete:(void(^)(OMRONSDKStatus status,NSArray<OMRONBFObject *> *datas, NSDictionary *userInfo))complete {
返回获取设备数据状态
体脂设备数据
用户个人信息
})
调用体脂仪数据监听接口,传入设备类型、设备唯一码,用户使用者,用户信息以及绑定接口中返回的设备唯一码,该接口不可与其他设备监听和数据同步接口同时使用
xxxxxxxxxx
[[OMRONLib shareInstance] startBfMonitoring:deviceType deviceSerialNum:serialNum userIndex:userIndex birthday:(NSDate *)birthday height:(CGFloat)height isMale:(BOOL)isMale complete:^(OMRONSDKStatus status, NSArray<OMRONBFObject *> * _Nonnull datas,NSDictionary *userInfo) {
返回获取设备数据状态、体脂设备数据、用户个人信息
根据当前数据同步结果判断是否需要下次监听 除timeout、connctfail、noDevice、success继续下个周期数据监听 其余OMRONSDKStatus异常状态停止数据监听
}]
调用多个体脂仪数据监听接口,传入要监听的体脂设备,该接口不可与其他设备监听和数据同步接口同时使用 可以同时监听多个设备,推荐。
xxxxxxxxxx
[[OMRONLib shareInstance] startBfMonitoring:deviceArray birthday:birthday height:height isMale:isMale complete:^(OMRONSDKStatus status, NSArray<OMRONBFObject *> * _Nonnull datas,NSDictionary *userInfo) {
返回获取设备数据状态、体脂设备数据、用户个人信息
根据当前数据同步结果判断是否需要下次监听 除timeout、connctfail、noDevice、success继续下个周期数据监听 其余OMRONSDKStatus异常状态停止数据监听
}]
调用设备绑定接口传入绑定设备
xxxxxxxxxx
[[OMRONLib shareInstance] bindBgDevice:(NSString * _Nonnull) deviceType
deviceSerialNum:(NSString * _Nonnull)deviceSerialNum
peripheral:(CBPeripheral * _Nonnull) peripheral
complete:(void(^)(OMRONSDKStatus status,NSArray<OMRONBGObject *> * _Nullable datas))complete{
返回绑定状态、测量数据
}];
xxxxxxxxxx
[[OMRONLib shareInstance] getBgDeviceData:(NSString * _Nonnull) deviceType deviceSerialNum:(NSString * _Nonnull)deviceSerialNum
peripheral:(CBPeripheral * _Nonnull) peripheral
complete:(void(^)(OMRONSDKStatus status,NSArray<OMRONBGObject *> * _Nullable datas))complete{
返回绑定状态、测量数据
}];
调用血糖仪数据监听接口,传入设备类型、设备唯一码,该接口不可与其他设备监听和数据同步接口同时使用
xxxxxxxxxx
[[OMRONLib shareInstance] startBgMonitoring:(NSString *) deviceType deviceSerialNum:(NSString *)deviceSerialNum complete:(BgObserverBlock) complete:(void(^)(OMRONSDKStatus status,NSArray<OMRONBGObject *> * _Nullable datas))complete{
返回获取设备数据状态、测量数据
根据当前数据同步结果判断是否需要下次监听 除 timeout、connctfail、noDevice、success继续下个周期数据监听 其余OMRONSDKStatus异常状态停止数据监听
}];
调用血糖仪数据监听接口,传入设备类型、设备唯一码,该接口不可与其他设备监听和数据同步接口同时使用 可以同时监听多个设备,推荐。
xxxxxxxxxx
[[OMRONLib shareInstance] startBgMonitoring:deviceArray complete:^(OMRONSDKStatus status, NSArray<OMRONBGObject *> * _Nullable datas) {
返回获取设备数据状态、测量数据
根据当前数据同步结果判断是否需要下次监听 除 timeout、connctfail、noDevice、success继续下个周期数据监听 其余OMRONSDKStatus异常状态停止数据监听
}];
调用设备绑定接口传入绑定设备
xxxxxxxxxx
[[OMRONLib shareInstance] bindBoDevice:deviceType deviceSerialNum:deviceSerialNum complete:^(OMRONSDKStatus status, NSString * _Nonnull deviceType, NSString * _Nonnull deviceSerialNum, NSString * _Nonnull deviceId, OMRONDeviceInfo * _Nonnull deviceInfo,NSArray<OMRONBOObject *> *datas) {
返回绑定状态、设备信息、测量数据
}];
xxxxxxxxxx
[[OMRONLib shareInstance] getBoDeviceData:deviceType deviceSerialNum:serialNum complete:^(OMRONSDKStatus status, NSArray<OMRONBOObject *> * _Nonnull datas) {
返回数据读取状态、测量数据
}];
调用血氧仪数据监听接口,传入设备类型、设备唯一码,该接口不可与其他设备监听和数据同步接口同时使用
xxxxxxxxxx
[[OMRONLib shareInstance] startBoMonitoring:deviceType deviceSerialNum:deviceSerialNum complete:^(OMRONSDKStatus status, NSArray<OMRONBOObject *> * datas) {
返回获取设备数据状态、测量数据
根据当前数据同步结果判断是否需要下次监听 除 timeout、connctfail、noDevice、success继续下个周期数据监听 其余OMRONSDKStatus异常状态停止数据监听
}];
调用血氧仪数据监听接口,传入设备类型、设备唯一码,该接口不可与其他设备监听和数据同步接口同时使用 可以同时监听多个设备,推荐。
xxxxxxxxxx
[[OMRONLib shareInstance] startBoMonitoring:deviceArray complete:^(OMRONSDKStatus status, NSArray<OMRONBOObject *> * datas) {
返回获取设备数据状态、测量数据
根据当前数据同步结果判断是否需要下次监听 除 timeout、connctfail、noDevice、success继续下个周期数据监听 其余OMRONSDKStatus异常状态停止数据监听
}];
xxxxxxxxxx
[[OMRONLib shareInstance] isMonitoring]);
调用停止数据监听接口,血压计、体脂仪、血糖仪、血氧仪共用该接口
xxxxxxxxxx
[[OMRONLib shareInstance] åå];
停止数据监听关闭sdk中定时器并停止扫描
xxxxxxxxxx
[[OMRONLib shareInstance] setLogPrintLevel:OMRONLOG_PRINT_DEBUG];
等级介绍详情看.h 文件
xxxxxxxxxx
[[OMRONLib shareInstance] setLogLevel:OMRONLOG_DEFAULT];
等级介绍详情看.h 文件
xxxxxxxxxx
[[OMRONLib shareInstance] getDeviceIDInKeychainUUID];
DEMO的个人信息主要针对个人,绑定多台设备时,所有设备将同步为同一份个人信息
绑定时设备对应机位里面不存在个人信息,demo会把个人信息界面输入的个人信息写入设备
绑定时设备对应机位里面存在个人信息,demo会读出设备里面的个人信息,并且返回
设备个人信息更改,demo个人信息未更改,同步时会读出设备里面的个人信息,并返回
设备个人信息未更改,demo个人信息更改,同步时会往设备里面写入demo更改的个人信息
设备更改一次,demo同时更改个人信息,同步时会往设备里面写入demo更改的个人信息
设备更改多次,demo同时更改个人信息,同步时会读出设备里面的个人信息
停止数据监听需调用 [[OMRONLib shareInstance] åå]