iOS配网SDK
本SDK包含Aqara设备配网的逻辑部分和UI界面; SDK依赖 的iOS版本 不能低于11.0
编译器环境: XCode14.0
以上版本
语言:Object-C
集成SDK
1.环境搭建
配网SDK需要用到Homekit和Wi-Fi的权限功能,需要宿主工程添加以下Capability:
1. Homeikit
2. Wireless Accessory Configuration
2.权限配置
SDK需要向iOS申请以下系统权限:
1.
NSHomeKitUsageDescription
Homekit的访问权限 2.NSCameraUsageDescription
摄像机访问权限(扫描设备上的二维码进行配网) 3.NSLocalNetworkUsageDescription
本地网络查找权限(局域网配网) 4.NSLocationWhenInUseUsageDescription
使用地理位置权限(手机获取WiFi名称,iOS 13 需要确认App已开启地理位置权限。 iOS 14 需要确认App开启精确位置权限。 如果上述配置后仍然获取不到WiFi名称,则需要开发者另外处理,比如手动输入WiFi名称)
NSBluetoothAlwaysUsageDescription
获取蓝牙权限 (蓝牙配网)NSBonjourServices
使用mDNS服务发现绿米设备,设置服务名称"_aqara._tcp."
可以在宿主项目的info.plist文件中快捷添加如下配置:
<plist version="1.0">
<key>NSBonjourServices</key>
<array>
<string>_aqara._tcp.</string>
</array>
<key>NSCameraUsageDescription</key>
<string>允许本App使用相机去添加配件</string>
<key>NSHomeKitUsageDescription</key>
<string>允许本App控制支持HomeKit的设备</string>
<key>NSLocalNetworkUsageDescription</key>
<string>需要使用本地网络以发现局域网上的设备信息</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>需要您的位置信息提供更好的服务</string>
<key>NSBluetoothAlwaysUsageDescription</key>
<string>允许本App使用蓝牙连接</string>
</dict>
</plist>
3.所需第三方pod依赖
SDK需要用到如下第三方框架:
pod 'Masonry'
pod 'TTTAttributedLabel'
pod 'ZBarSDK', '~>1.3.1'
pod 'SDWebImage', '5.3.0'
pod 'YYModel'
pod 'MJRefresh'
pod 'KVOController'
pod 'AFNetworking', '3.2.0'
pod 'SVProgressHUD'
4.导入SDK
需要在宿主工程中导入如下SDK:
LMDeviceAccessNet.framework
配网UI封装成的SDKLMSmartConnect.framework
蓝牙模块和AP配网逻辑 SDKLMAppleHomeConnect.framework
Homekit相关API封装 SDKLMFramework.framework
基础SDK,Aqara的基础配置,宏定义以及通用逻辑的封装
资源文件:
LMAccessNet.bundle
配网相关的图片资源LMFramework.bundle
Aqara 多语言文件
SDK初始化
在需要拉起Aqara配网的Controller引入头文件:
#import <LMDeviceAccessNet/LMDeviceAccessNet.h>
#import <LMFramework/LMFramework.h>
配置SDK
+ (void)setServer:(NSString*)host appId:(NSString*)appId appKey:(NSString*)appKey iconBaseUrl:(NSString *)iconBaseUrl;
参数 | 说明 |
---|---|
host | Aqara配网域名(见开放平台) |
appId | 从开放平台申请的APPID |
appKey | 与APPID配套的APPKey |
iconBaseUrl | 配网UI层部分CDN图片的路径 |
示例代码:
[LMOpenSDK setServer:@"https://aiot.aqara.com/" appId:@"7be19xxxxxxxxxxxxx" appKey:@"JddzxxxxxxxxxxIHfW8E3" iconBaseUrl:@"https://cdn.aqara.com/cdn/common/mainland"];
配置设备的服务器地址以及服务器区域码
+ (void)setCoapServer:(NSString*)coapServer;
+ (void)setCountryCode:(NSString*)countryCode;
参数 | 说明 |
---|---|
coapServer | 设备的服务器地址 |
countryCode | 国家码 |
示例代码:
[LMOpenSDK setCoapServer:@"aiot-coap.aqara.cn"];
[LMOpenSDK setCountryCode:@"CHN"];
配置从开放平台申请到的用户信息和家庭信息
- (void)setAccessNetHomeId:(NSString *)homeId;
+ (void)setUserId:(NSString*)userId token:(NSString*)token;
参数 | 说明 |
---|---|
homeId | 家庭位置ID |
userId | 用户ID |
token | 用户的token |
[LMAccessNetUISDK.sharedInstance setAccessNetHomeId:@"real1.103xxxxxx4"];
[LMOpenSDK setUserId:@"431xxxxxx.xxxxxxx153527809" token:@"ad46dbxxxxxxxxx1fcee1"];
带配网设备列表
在宿主APP中跳转到Aqara的配网页面:
[LMAccessNetUISDK.sharedInstance pushSupportedDeviceListPage];
进入单设备配网流程
参数 | 说明 |
---|---|
model | 设备的模型值(从开放平台查询) |
completion | 返回 controller对象/ error信息 |
-(void)presentSingleDeviceAccessNetWithModel:(NSString *)model completion:(void (^)(UIViewController *controller, NSError *error))completion;
示例代码:
[[LMAccessNetUISDK sharedInstance] presentSingleDeviceAccessNetWithModel:@"lumi.plug.macn01" completion:^(UIViewController * _Nonnull controller, NSError * _Nonnull error) {
if(controller) {
LMNavigationController *navi = [[LMNavigationController alloc] initWithRootViewController:controller];
navi.modalPresentationStyle = UIModalPresentationFullScreen;
[self presentViewController:navi animated:YES completion:nil];
} else {
[LHTipsUtils showError:error];
}
}];
配网成功以后的回掉方法:
LMAccessNetUISDK.sharedInstance.accessNetCallBack = ^(id _Nonnull response, NSError * _Nonnull error) {
NSLog(@"accessNetCallBack = %@", response);
};