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中添加权限说明NSBluetoothPeripheralUsageDescriptionxxxxxxxxxx修改项目的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 // 血氧仪xxxxxxxxxxmodelName; // 设备类型serialNumber; // 设备序列号hardwareVersion; // 硬件版本号softwareVersion; // 软件版本号firmwareVersion; // 固件版本号batteryLevel; // 设备电量powerSupplyMode; // 供电模式manufacturerName; // 制造商名称modelNumber; // 设备代号systemID; // 设备系统IDxxxxxxxxxx OMRONLOG_NONE, //完全不可见:release环境默认 OMRONLOG_DEFAULT, //敏感信息后一半可见,其他部分用“*”代替 OMRONLOG_ALL, //完全可见:debug环境默认xxxxxxxxxxOMRONLOG_PRINT_DEBUG, //全部日志: debug环境默认OMRONLOG_PRINT_INFO, //过滤掉部分的日志OMRONLOG_PRINT_WARN, //包含警告的日志OMRONLOG_PRINT_ERROR, //包含错误的日志: release环境默认OMRONLOG_PRINT_FATAL //异常的日志: 可能导致程序异常,需要注意xxxxxxxxxxOMRONLIB_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 //指纹验证失败xxxxxxxxxxsbp(收缩压)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(设备类型)xxxxxxxxxxbmi;//bmibasal_metabolism;//基础代谢body_age;//体年龄fat_rate;//体脂率weight;//体重userIndex;//用户使用者1,2,3,4visceral_fat;//内脏脂肪水平skeletal_muscles_rate;//骨骼肌率measure_at;//测量时间device_type;//设备类型height;//身高birthday;//生日gender;//0.男, 1.女xxxxxxxxxxsequenceNumber;//序号measureDate;//测量时间measureUnit;//测量单位measureValue;//测量值meal;//用餐状态 未设定、餐前、餐后、空腹、xxxxxxxxxxspo;//血氧饱和度pulse;//心率measure_at;//测量时间1.1 授权与用户管理配置
根据使用场景和网络依赖性,SDK 提供两种授权模式,区别如下:
| 特性 | 在线模式 | 离线模式 |
|---|---|---|
| 网络依赖 | 首次激活需联网验证,后续操作可离线使用 | 完全离线,无需任何网络连接 |
| 授权文件 | 无需预置文件,license设置为nil | 需预置离线授权文件(从管理门户下载)通过iTunes或者其他开发者工具放置在当前项目文档目录(/Document)下 |
| 用户限制功能 | 支持通过thirdUserId动态封禁用户(需联网同步黑名单) | 依赖本地授权文件,无法动态封禁用户 |
| 适用场景 | 需定期验证授权状态或动态管理用户权限的场景 | 无网络环境(如医疗设备专用平板)、对数据隐私要求极高的场景 |
| 激活方式 | 自动联网验证appKey和packageSecret | 通过读取本地授权文件激活 |
| 功能限制 | 支持远程更新设备授权列表 | 功能固定,无法远程更新授权 |
配置选择建议
优先选择在线模式
支持动态用户管理(如冻结异常账户)
自动适配最新设备授权规则
首次激活后仍可离线使用核心功能
强制离线场景选择离线模式
需提前在管理门户生成设备指纹绑定的授权文件
授权文件与设备强关联,不可跨设备复用
请根据使用场景选择对应的配置方式。
详细配置如下:
在线模式(无需离线授权文件)
xxxxxxxxxxlicense = nil; // 直接设置为nil离线模式(需预置授权文件)
文件准备 :从管理门户下载独立设备授权文件(格式示例:license.lic)
文件存放路径 :
/Documents/
激活方式 :
xxxxxxxxxxNSString *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。
xxxxxxxxxxNSString *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] åå]