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名称)

  1. NSBluetoothAlwaysUsageDescription 获取蓝牙权限 (蓝牙配网)
  2. 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:

  1. LMAppleHomeConnect.framework Homekit相关API封装 SDK
  2. LMFramework.framework 基础SDK,Aqara的基础配置,宏定义以及通用逻辑的封装

资源文件:

  1. LMFramework.bundle Aqara 多语言文件

5.时序图及说明

HomeKit配网流程图

引用头文件 #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下的家庭信息列表。 如果接口返回数据为空,可能是以下原因:

  1. 检查AppleID是否开启了钥匙串权限
  2. 打开Apple的Home APP看是否存在家庭数据
接口2
- (void)addAccessoryWithHome:(HMHome *)home settingDoneCompletion:(void (^)(NSArray <HMAccessory *> *accessoryList, NSError *error))completion;
参数 说明
home HomeKit的Home对象

调用这个接口会弹出HomeKit的配网窗口:

IMG_DD2086AFFE17-1

在方法闭包返回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
    }
}  

具体参见开放平台接口文档

Copyright © 2023 深圳绿米联创科技有限公司 all right reserved,powered by Gitbook文档修改时间: 2024-02-21 09:55:50

results matching ""

    No results matching ""