提供了把Wi-Fi设备配置上家庭路由器以及局域网内已联网设备的发现能力,具体方案包括一键广播配网、手机热点配网、蓝牙辅助配网、智能路由器配网以及设备间相互配网等。
依赖SDK | 概述 |
---|---|
日志 | 基础依赖SDK,提供客户端统一日志打印,日志等级控制,分模块日志隔离等能力 |
API通道 | 提供API通道能力,和基础环境配置信息 |
Breeze SDK | 提供蓝牙辅助配网支持 |
初始化
使用说明
- 设备发现
提供获取局域网内已经配网的设备,包括Wi-Fi设备、以太网设备,以及局域网内已上电的待配设备(前提是当前局域网内已经有一个已配网的智能设备,且该待配设备支持本地发现的配网能力)。
- 启动发现设备
发现本地的已配网设备,或者已配网设备、路由器等发现的待配设备。发现的待配设备信息可以作为后续设备配网的入参信息。
// 引入头文件 #import <IMLDeviceCenter/IMLDeviceCenter.h> // 本地发现入口 [[IMLLocalDeviceMgr sharedMgr] startDiscovery:^(NSArray *devices, NSError *err) { //devices为IMLCandDeviceModel对象array, // 可根据IMLCandDeviceModel中的devType区分待配网设备联网类型 // 0代表Wi-Fi设备;1代表ethernet设备(网线连接);2代表路由器 // 例如@"ble_subtype_2" 代表蓝牙辅助配网设备 }];
- 获取所有已发现设备
// 引入头文件 #import <IMLDeviceCenter/IMLDeviceCenter.h> NSArray *allLanDevicesArray = [kLKLocalDeviceMgr getLanDevices];
- 终止发现设备
停止发现本地已配和线上待配设备,调用该接口会清除已发现设备列表,确保与startDiscovery成对调用。
// 引入头文件 #import <IMLDeviceCenter/IMLDeviceCenter.h> // 停止发现设备 [kLKLocalDeviceMgr stopDiscovery];
- 启动发现设备
- 通用配网流程
- 设置待添加设备信息
待添加设备信息来源可以为上面本地发现的待配设备,也可以通过扫码等其他途径获取待配设备信息。
// 引入头文件 #import <IMLDeviceCenter/IMLDeviceCenter.h> // 选取本地发现的待配设备 IMLCandDeviceModel *model = self.localDeviceList[index]; // 自行创建待配设备信息 IMLCandDeviceModel *model = [[IMLCandDeviceModel alloc] init]; model.productKey = @"xxxx"; model.linkType = ForceAliLinkTypeXXX; ... // 针对设备端SDK V1.6.0版本以上固件,配网SDK需升级至1.12.0及以上版本,并指定数据中心的信息 model.enableGlobalCloudToken = YES; model.regionNode = LKRegionNodeCustomID; model.customRegionID = [[ALBBOpenAccountSDK sharedInstance] getRegionModel].shortRegionId ?: @"0"; [kLkAddDevBiz setDevice:model];
其中,(IMLCandDeviceModel *)model为本地发现待配设备或者云端拉取产品列表组装的model。 IMLCandDeviceModel属性说明如下。
属性 类型 是否必选 描述 productKey NSString 是 设备的ProductKey deviceName NSString 否 设备名称 productId NSString 否 待配设备产品ID,蓝牙辅助配网时为必选参数 linkType assign 否 指定配网方式 - ForceAliLinkTypeBroadcast:一键广播配网
- ForceAliLinkTypeHotspot:手机热点配网
- ForceAliLinkTypeSoftap:设备热点配网
- ForceAliLinkTypeQR:摄像头扫码配网
- ForceAliLinkTypeBLE:蓝牙辅助配网
- 设置配网模式
// 引入头文件 #import <IMLDeviceCenter/IMLDeviceCenter.h> [kLkAddDevBiz setAliProvisionMode:ForceAliLinkTypeHotspot];
- 开始设备配网
设置好待添加设备信息,进入配网。调用
startAddDevice
接口进入配网流程,并实现监听的协议方法。// 引入头文件 #import <IMLDeviceCenter/IMLDeviceCenter.h> [kLkAddDevBiz startAddDevice:self]; 其中self为配网过程中notifier监听回调对象(代理) - (void)notifyPrecheck:(BOOL)success withError:(NSError *)err { NSLog(@"notifyPrecheck callback err : %@", err); dispatch_async(dispatch_get_main_queue(), ^{ [self.addVC notifyProgress:LKAddStatePrechecking result:nil withError:err]; }); } // 用户引导页(一键配网和热点配网会有相关回调,指引用户接入相关操作) - (void)notifyProvisionPrepare:(LKPUserGuideCode)guideCode { NSLog(@"notifyProvisionPrepare callback guide code : %ld", guideCode); if(guideCode == LKPGuideCodeOnlyInputPwd){ // TODO:一键广播配网相关引导 } else if(guideCode == LKPGuideCodeWithUserGuide){ // TODO:手机热点配网相关引导 } else if(guideCode == LKPGuideCodeWithUserGuideForSoftAp) { // TODO:设备热点配网相关引导 } else if(guideCode == LKPGuideCodeWithUserGuideForQR) { // TODO:摄像头扫码配网相关引导 } } -(void)notifyProvisioning { NSLog(@"notifyProvisioning callback(正在进行配网...) "); } /** (可选)手机热点配网状态回调,提示用户关闭热点并切回以前的Wi-Fi */ - (void)notifyProvisioningNotice{ NSLog(@"notifyProvisioningNotice"); } /* (可选)设备热点状态回调 status 状态码 1=提示应该切换到设备热点; 2=已经切换到设备热点 3=已发送数据(dic里面会有"token") 4=应该切换回路由器 5=已经切换回路由器 */ - (void)notifyProvisioningNoticeForSoftAp:(int)status withInfo:(NSDictionary *)dic { NSLog(@"notifyProvisioningNoticeForSoftAp,%d,%@",status,dic); } /** (可选)摄像头二维码配网模式相关回调 @param qrcode:需要UI展现的二维码内容 */ - (void)notifyProvisioningNoticeForQR:(NSString *) qrcode; /** 通知上层UI:配网完成结果回调 @param candDeviceModel:配网结果设备信息返回:配网失败时为nil @param provisionError:错误信息 */ - (void)notifyProvisionResult:(IMLCandDeviceModel *)candDeviceModel withProvisionError:(NSError *)provisionError { NSLog(@"配网成功:%@",candDeviceModel); }
- 输入配网Wi-Fi名称以及密码信息
在收到
- (void)notifyProvisionPrepare:(LKPUserGuideCode)guideCode
回调引导完成相关操作(一键广播指引用户输入ssid和密码,热点配网指引用户开启热点,输入ssid和密码等)后,调用- (void)toggleProvision:(NSString) ssid pwd:(NSString) pwd timeout:(int)timeout
方法,传入Wi-Fi的ssid和password信息。说明 一键广播配网和热点配网才会有notifyProvisionPrepare回调。// 引入头文件 #import <IMLDeviceCenter/IMLDeviceCenter.h> - (void)notifyProvisionPrepare:(LKPUserGuideCode)guideCode { NSLog(@"notifyProvisionPrepare callback guide code : %ld", guideCode); [self inputSsidAndPassword]; } - (void)inputSsidAndPassword { NSSstring *ssid = @"example ssid"; NSString *password = @"1qaz@WSX"; NSInterger timeout = 60;(单位秒,s); [kLkAddDevBiz toggleProvision:ssid pwd:password timeout:timeout]; }
- 配网过程关键节点监听处理
针对热点配网必须监听该回调。
// 引入头文件 #import <IMLDeviceCenter/IMLDeviceCenter.h> - (void)notifyProvisionStatus:(LKProvisonStatus)provisionStatus boolSuccess:(BOOL)boolSuccess; { NSLog(@"notifyProvisionStatus callback provisionStatus:%d boolSuccess:%d", provisionStatus, boolSuccess); if(provisionStatus == LKProvisonStatusSwitchAP){ // 设备回复switch AP请求,提示用户切换回之前的Wi-Fi NSLog(@"请立即切换回开启热点之前的Wi-Fi网络"); } }
- 配网结果监听
- (void)notifyProvisionResult:(IMLCandDeviceModel *)candDeviceModel withProvisionError:(NSError *)provisionError { if(candDeviceModel != nil){ NSLog(@"配网成功:%@",candDeviceModel); } else{ NSLog(@"配网失败,错误信息:%@", provisionError); } }
- 停止配网
// 引入头文件 #import <IMLDeviceCenter/IMLDeviceCenter.h> [kLkAddDevBiz stopAddDevice];
- 设置待添加设备信息
- 设备绑定
当完成设备配网之后,还需要将设备与用户或者与家庭进行关联绑定,绑定过程中需要调用SDK的获取token方法,取得设备token,然后进行设备绑定。获取token的代码如下。
// 引入头文件 #import <IMLDeviceCenter/IMLDeviceCenter.h> // self.productKey和self.deviceName是配网成功后返回的设备模型中的productKey和deviceName [[IMLLocalDeviceMgr sharedMgr] getDeviceToken:self.productKey deviceName:self.deviceName timeout:20 resultBlock:^(NSString *token, BOOL boolSuccess) { NSLog(@"主动获取设备token:%@,boolSuccess:%d", token, boolSuccess); if(token){ // 调用绑定接口进行设备绑定 } else{ NSLog(@"获取token失败(超时)"); } }]; /** 针对设备端SDK 1.6.0及以上版本的SDK,App配网开启了enableGlobalCloudToken功能时,调用以下接口获取绑定信息。 resultInfo 包括: - BOOL isBind:是否云端Token已经发起绑定,如果是,则通过iotID、error字段查看绑定结果;如果否,则查看bindToken字段做后续绑定 - NSString bindToken:可发起后续绑定的Token - NSString iotID:通过云端Token已完成绑定的设备ID - NSString pageRouterUrl:通过云端Token已完成绑定的设备面板URL,可忽略 - NSError error:通过云端Token设备绑定失败 } */ [[IMLLocalDeviceMgr sharedMgr] getDeviceTokenAndBindResult:self.productKey deviceName:self.deviceName timeout:30 interval:3 resultBlock:^(NSDictionary *resultInfo, BOOL boolSuccess) { NSLog(@"获取设备resultInfo结果:%@,boolSuccess:%d", resultInfo, boolSuccess); }];
使用配网插件
您可以接入Bone容器,使用配网插件来完成配网的业务逻辑,这样只需关注配网之后的业务逻辑即可。
目前配网插件ID如下所示。
- 插件ID国内版:a123kfz2KdRdrfYc
- 插件ID国际版:a223c2beCJQ2Xpk2
插件ID的具体使用方式,参考见Bone容器部分。也可以参见配网开发指南中调用平台提供的配网插件的内容。

在文档使用中是否遇到以下问题
更多建议
匿名提交