iOS配网开发

更新时间:2019-04-03 10:07:57

依赖关系

配网SDK依赖以下SDK,在使用配网SDK前务必对相关SDK进行初始化。

依赖SDK 概述
日志 基础依赖SDK,提供客户端统一日志打印,日志等级控制,分模块日志隔离等能力
API 通道 提供API通道能力,和基础环境配置信息

使用说明

设备发现

在前面的章节中讲解了指定待配网设备的几种方案,本节讲解如何通过SDK的接口发现待配网设备。

注:只有某些配网方案可以让手机APP发现待配网设备。

启动发现设备

启动设备发现的代码如下所示:

// 引入头文件
#import <IMSDeviceCenter/IMLDeviceCenter.h>

// 本地发现入口
[[IMLLocalDeviceMgr sharedMgr] startDiscovery:^(NSArray *devices, NSError *err) {
        if (devices && [devices count] > 0) {
            IMSLifeLogVerbose(@"发现本地设备: %@", devices);
            // 将与用户没有绑定关系的设备显示在本地发现设备中
            for (IMLCandDeviceModel *device in devices) {
                if (![self checkBindWithLocalDevice:device]) {
                    [wSelf.localDeviceList addObject:device];
                }
            }
            [wSelf.tableView reloadData];
        } else if (err) {
            IMSLifeLogError(@"本地发现设备出错: %@", err);
        }
    }];

获取所有已发现设备

// 引入头文件
#import <IMSDeviceCenter/IMLDeviceCenter.h>

NSArray *allLanDevicesArray = [kLKLocalDeviceMgr getLanDevices];

终止发现设备

停止发现本地已配和线上待配设备,调用该接口会清除已发现设备列表,确保和startDiscovery成对调用。

// 引入头文件
#import <IMSDeviceCenter/IMLDeviceCenter.h>

// 停止发现设备
[kLKLocalDeviceMgr stopDiscovery];

通用配网流程

设置待添加设备信息

当确定对某个型号的设备或者某个具体设备进行配网后,需要设置相关信息:

// 引入头文件
#import <IMSDeviceCenter/IMLDeviceCenter.h>

// 选取本地发现的待配设备
IMLCandDeviceModel *model = self.localDeviceList[index];
[kLkAddDevBiz setDevice:model];

备注:其中(IMLCandDeviceModel *)model 为本地发现待配设备或者云端拉取产品列表组装的model

其中 IMLCandDeviceModel 属性说明:

属性 类型 是否必选 描述 备注
productKey NSString 设备productKey
deviceName NSString 设备名称
linkType assign 指定配网方式 ForceAliLinkTypeBroadcast 一键广播配网;
ForceAliLinkTypeHotspot 手机热点配网方案;
ForceAliLinkTypeSoftap 设备热点配网方案;

设置配网模式

// 引入头文件
#import <IMSDeviceCenter/IMLDeviceCenter.h>

[kLkAddDevBiz setAliProvisionMode:ForceAliLinkTypeHotspot];

开始设备配网

上述设置好待添加设备信息,进入配网。调用 startAddDevice 接口进入配网流程,并实现监听的协议方法

// 引入头文件
#import <IMSDeviceCenter/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:设备热点配网相关引导
    }


}

-(void)notifyProvisioning 
{
    NSLog(@"notifyProvisioning callback(正在进行配网...) ");
}

/**
手机热点配网状态回掉调,提示用户关闭热点并切回以前的wifi,optional。
 */

- (void)notifyProvisioningNotice{
    NSLog(@"notifyProvisioningNotice");
}

/*
 设备热点状态回调,optional。
status 状态码 1=提示应该切换到设备热点; 2=已经切换到设备热点 3=已发送数据(dic里面会有"token") 4=应该切换回路由器 5=已经切换回路由器

*/

- (void)notifyProvisioningNoticeForSoftAp:(int)status withInfo:(NSDictionary *)dic
{
    NSLog(@"notifyProvisioningNoticeForSoftAp,%d,%@",status,dic);
}



- (void)notifyProvisionResult:(IMLCandDeviceModel *)candDeviceModel withProvisionError:(NSError *)provisionError
{
    NSLog(@"配网成功:%@",candDeviceModel);
}

输入配网 wifi 名称以及密码信息

在收到 - (void)notifyProvisionPrepare:(LKPUserGuideCode)guideCode 回调引导完成相关操作(一键广播指引用户输入 ssid 和密码,热点配网指引用户开启热点,输入 ssid 和密码等)后,调用 - (void)toggleProvision:(NSString )ssid pwd:(NSString )pwd timeout:(int)timeout 方法,传入 WiFi 的 ssid 及 password 信息。 注:一键广播配网和热点配网才会有 notifyProvisionPrepare 回调。

// 引入头文件
#import <IMSDeviceCenter/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 <IMSDeviceCenter/IMLDeviceCenter.h>

- (void)notifyProvisionStatus:(LKProvisonStatus)provisionStatus boolSuccess:(BOOL)boolSuccess;
{
    NSLog(@"notifyProvisionStatus callback provisionStatus:%d boolSuccess:%d", provisionStatus, boolSuccess);
    if(provisionStatus == LKProvisonStatusSwitchAP){
        // 设备回复 switch ap 请求,提示用户切换回之前的 wifi
        NSLog(@"请立即切换回开启热点之前的 wifi 网络");
    }
}

配网结果监听


- (void)notifyProvisionResult:(IMLCandDeviceModel *)candDeviceModel withProvisionError:(NSError *)provisionError
{
    if(candDeviceModel != nil){
        NSLog(@"配网成功:%@",candDeviceModel);
    } else{
        NSLog(@"配网失败,错误信息:%@", provisionError);
    }

}

停止配网

// 引入头文件
#import <IMSDeviceCenter/IMLDeviceCenter.h>

[kLkAddDevBiz stopAddDevice];

results matching ""

    No results matching ""