iOS 配网SDK(Homekit认证类设备)
本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>
4.导入SDK
需要在宿主工程中导入如下SDK:
LMAppleHomeConnect.framework
Homekit相关API封装 SDKLMFramework.framework
基础SDK,Aqara的基础配置,宏定义以及通用逻辑的封装
资源文件:
LMFramework.bundle
Aqara 多语言文件
5.时序图及说明
引用头文件
#import <LMAppleHomeConnect/LMAppleHomeConnect.h>
在合适的时机获取Homekit权限:
- (void)requestHomeKitAuthroization:(void (^)(NSError *error))completion;
接口1
- (void)getHomekitHomes:(void (^)(NSArray<HMHome *> * _Nullable homeList, NSError *error))compleiton;
返回值 | 说明 |
---|---|
homeList | HomeKit的家庭列表 |
这个接口会在闭包内返回HomeKit下的家庭信息列表。 如果接口返回数据为空,可能是以下原因:
- 检查AppleID是否开启了钥匙串权限
- 打开Apple的Home APP看是否存在家庭数据
接口2
- (void)addAccessoryWithHome:(HMHome *)home settingDoneCompletion:(void (^)(NSArray <HMAccessory *> *accessoryList, NSError *error))completion;
参数 | 说明 |
---|---|
home | HomeKit的Home对象 |
调用这个接口会弹出HomeKit的配网窗口:
在方法闭包返回HMAccessory
对象数据以后, 向AIoT发起获取bindkey请求。
请求3
向AIoT获取bindkey请求,
/app/v1.0/lumi/dev/bindkey
请求实例:
{
"positionId": "real2.550691449629310976",
"appUrl": "https://aiot-rpc.aqara.cn"
}
返回数据: |名称|类型 |备注| |----|----|---| |bindKey|string|入网使用bindKey| |controlUnitId|string|入网miot设备返回的参数|
返回示例:
{
"code": 0,
"requestId": "",
"message": "Success",
"result": {
"bindKey": "HVFLFgHgPy56X"
}
}
具体参见开放平台接口文档。
接口4
- (void)bindAccessory:(HMAccessory *)accessory countryDomain:(NSString *)countryDomain bindKey:(NSString *)bindKey compeltion:(void (^)(NSError *error))completion;
参数 | 说明 |
---|---|
accessory | HomeKit的HMAccessory对象 |
countryDomain | coapServer 地址 |
bindKey | 向私有云请求的绑定key |
请求5
向AIoT轮询请求结果
/app/v1.0/lumi/dev/bind/query
请求数据
参数名称 | 是否必须 | 备注 |
---|---|---|
bindKey | 否 | bindKey随机码 (优先参数,二选一) |
did | 否 | 设备id |
返回数据
名称 | 类型 | 是否必须 | 默认值 | 备注 |
---|---|---|---|---|
code | integer | 必须 | 0-成功、1-绑定中,2-非法 616设备模型不支持(可用于串货提醒) |
返回示例:
{
"code": 0,
"requestId": "",
"message": "Success",
"result": {
"code": 0
}
}
具体参见开放平台接口文档。