门锁SDK使用
一、概述
本文主要介绍如何使用门锁SDK进行入网、设备控制
二、前置条件
三、使用
门锁SDK使用RN插件的形式支持不同设备,每一个设备单独一个插件文件。
3.1 SDK 配置
在 APP 启动的地方(如 AppDelegate),引入头文件并按以下步骤完成初始化。各参数获取方式详见环境搭建。
#import <LMFramework/LMFramework.h>
#import <LMRnFramework/LMRnFramework.h>
统一初始化
/**
必须最先按顺序设置以下两项,且必须在其他 SDK 配置之前调用。
setAppChannel 与 setAppGroupId 需与宿主 App 的实际配置保持一致。
*/
[LMOpenSDK setAppChannel:@"Your AppChannel"];
[LMOpenSDK setAppGroupId:@"Your AppGroupId"];
LMRegionModel *regionModel = [[LMRegionModel alloc] init];
regionModel.appId = @"Your appId";
regionModel.appKey = @"Your appKey";
regionModel.supportDeviceArea = @"Your SupportDeviceArea";
regionModel.serverCode = @"Your ServerCode";
regionModel.countryCode = @"Your CountryCode";
regionModel.server = @"Your Server";
regionModel.coapServer = @"Your CoapServer";
regionModel.staticsResPrefix = @"Your StaticsResPrefix";
regionModel.appImgPrefix = @"Your AppImgPrefix";
[LMOpenSDK setRegionModel:regionModel];
[LMOpenSDK setH5UrlPrefix:@"Your H5UrlPrefix"];
/**
setLanguage:
"en" 英文
"ru" 俄文
"ko" 韩文
"zh-Hans" 简体中文
"zh-HK" 香港繁体
"zh-Hant-TW" 台湾繁体
*/
[LMOpenSDK setLanguage:@"zh-Hans"];
[LMOpenSDK setUserId:@"Your UserId" token:@"Your AccessToken"];
/**
初始化 RN Bridge,门锁 SDK 必须调用
*/
[[LHRNManager shareManager] prepareBridge];
LMRegionModel 参数说明
| 字段 | 说明 | 获取渠道 |
|---|---|---|
| appId | 开放平台颁发的 App ID | 开放平台 |
| appKey | 与 AppId 配套的 AppKey | 开放平台 |
| supportDeviceArea | 设备入网地区 | 开放平台 |
| serverCode | 服务器地区码 | 开放平台 |
| countryCode | 国家码 | 开放平台 |
| server | Aqara 服务域名 | 开放平台 |
| coapServer | 设备接入服务器地址 | 开放平台 |
| staticsResPrefix | 静态资源路径 | 开放平台 |
| appImgPrefix | CDN 图片路径前缀 | 开放平台 |
其他初始化参数
| 字段 | 说明 | 获取渠道 |
|---|---|---|
| h5UrlPrefix | SDK 内 H5 资源路径 | 开放平台 |
| userId | 用户 ID | 开放平台 |
| token | 用户访问令牌 | 开放平台 |
| language | SDK 多语言 | 见上表 |
旧版
[LMOpenSDK setServer:appId:appKey:iconBaseUrl:]、setCoapServer:、setCountryCode:等接口已废弃,请统一使用setRegionModel:方式初始化。
3.2 跳转门锁入网
在需要的地方,导入 LMRnFramework 的头文件,点击跳转头文件,可查看相应接口说明
#import <LMRnFramework/LMBusiRnSDK.h>
API - 跳转门锁入网插件
/**
@param deviceModel 设备 model
@param positionId 位置 id
@param navC 导航控制器,默认获取最上层控制器
*/
- (void)startRnAccessPage: (NSString *)deviceModel
positionId:(NSString *)positionId
navC: (UINavigationController * _Nullable)navC;
参数说明
| 字段 | 数据类型 | 描述 | 获取渠道 |
|---|---|---|---|
| deviceModel | String | 设备模型值 | 参见附录支持的门锁设备清单 |
| positionId | String | 房间位置 | 接口获取,详情参见Aqara开发者平台 |
示例代码:
[[LMBusiRnSDK shareManager] startRnAccessPage: @"aqara.lock.agl002" positionId:@"real1.xxxxxxxxxxxxxxxxxxx512" navC:nil];
3.3 跳转门锁控制插件
在需要的地方,导入 LMRnFramework 的头文件,点击跳转头文件,可查看相应接口说明
#import <LMRnFramework/LMBusiRnSDK.h>
API - 跳转门锁控制插件
/**
@param deviceId 设备 id
@param deviceModel 设备 model
@param navC 导航控制器,默认获取最上层控制器
*/
- (void)startRnDevicePage:(NSString *)deviceId
deviceModel: (NSString *)deviceModel
navC: (UINavigationController * _Nullable)navC;
| 字段 | 数据类型 | 描述 | 获取渠道 |
|---|---|---|---|
| deviceModel | String | 设备模型值 | 参见附录支持的门锁设备清单 |
| deviceId | String | 设备Id | 设备配网成功后,会生成该设备id |
示例代码:
[[LMBusiRnSDK shareManager] startRnDevicePage:@"lumi.54efxxxxxxxxxxxxxc88b" deviceModel:@"aqara.lock.agl002" navC:nil];
3.4 插件消息订阅
API - 注册 rn 插件消息监听
/// @param callback 消息监听回调
/// @note message NSDictionary, 结构: { action: 'action_xxx_xxx', param: {... ... } }
/// --action:
/// action_access_success 门锁入网成功
/// action_add_gateway 添加网关
/// action_open_ifttt 打开自动化
/// action_open_scene 打开场景
- (void)registerRnPluginMessageNotification:(void(^_Nullable)(NSDictionary * _Nullable message))callback;
| 字段 | 数据类型 | 描述 | 获取渠道 |
|---|---|---|---|
| callback | Block | 消息监听回调 | 无 |
| message | NSDictionary | 消息体 | 无 |
note: 请根据您项目的需要,订阅并解析相关action,自行处理消息事件
示例代码:
[[LMBusiRnSDK shareManager] registerRnPluginMessageNotification:^(NSDictionary * _Nullable message) {
NSLog(@"messsge: %@", message);
if (message && [message objectForKey: @"action_access_success"]) {
NSDictionary *param = [message objectForKey: @"param"];
/// TODO: 处理入网成功提示, 设备名称修改等
NSLog(@"--- 门锁入网成功 ---");
}
}];
API - 移除 rn 插件消息监听
- (void)unregisterRnPluginMessageNotification;
| 字段 | 数据类型 | 描述 | 获取渠道 |
|---|---|---|---|
| 无 | 无 | 无 | 无 |
note: 请根据您项目的需要,如已注册插件消息监听,请在 dealloc 等适当的地方移除,以免内存泄漏
示例代码:
[[LMBusiRnSDK shareManager] unregisterRnPluginMessageNotification];