设备管理
对于一款新的智能设备, 需要跟某一用户进行绑定, 才能够进行控制, 设备的绑定操作可以分为两步, 设备配网和设备绑定. 设备系统需要使用ACBindManager
类, 所以需要在项目相关的类的头部添加如下代码:
#import "ACBindManager.h"
- 对于WIFI设备,则需要先经过设备配网后,APP拿到配网的回调调用bindDevice接口绑定设备。
- 对于GPRS设备,则无需以上设备激活的流程,通过扫码或其他方式获取物理Id后调用bindDevice进行绑定即可。建议流程:若设备上有是否连接上AbleCloud云端的指示灯,则可以提示用户在指示灯亮起的时候绑定设备。若无指示灯,则可在用户点击开始绑定之后,建议通过CountDownTimer每隔2s钟绑定一次设备,在连续绑定几次之后再提示用户失败或成功。
绑定设备
SDK中提供了两种绑定模式, 分别是 通过设备ID绑定 和 通过扫分享码绑定 两种模式. 每一台设备, 拥有两个ID: 物理ID(设备的唯一标识)和 逻辑ID(云端下发的ID, 类比UID)
通过设备ID进行绑定
完成设备配网之后, 可以拿到设备的Id, 然后调用绑定接口, 将设备和用户添加绑定. 例如(设备ID:18FF18C2CAAD19EF, 设备子域:test, 设备名称:卧室空调):
[ACBindManager bindDeviceWithSubDomain:@"test" physicalDeviceId:@"18FF18C2CAAD19EF" name:@"卧室空调" callback:^(ACUserDevice *userDevice, NSError *error) {
if (!error) {
//TODO...
}
}];
相关注意事项如下:
- 请在绑定设备之前确认设备以及配网成功, 成功连接到云端, 否则可能会反馈设备不存在, 设备不在线等错误.
- 设备的ID可以通过多种手段获取, 包括但不限于配网获取, 设备实体上扫码获取, 设备显示屏上展示等等
- 如果绑定失败, 请检查子域和设备ID是否正确, 是否传入了空值等原因
- 蓝牙设备不支持进行设备绑定
- 默认第一个绑定设备人是是该设备的管理员
通过分享码进行绑定
设备的管理员可以通过生成设备分享码, 让其他用户对设备进行绑定, 这一过程分为两步, 分别是管理员生成分享码, 普通用户使用分享码进行绑定
(1) 管理员生成分享码
示例如下, 例如(设备逻辑ID:4, 分享码有效期:一小时):
[ACBindManager fetchShareCodeWithSubDomain:@"test" deviceId:4 timeout:60 * 60 callback:^(NSString *shareCode, NSError *error) {
if (!error) {
//TODO...
}
}];
相关注意事项如下:
- 设备的逻辑ID可以通过调用
listDevice
接口获取.- 若已存在未过期二维码则返回原有二维码并更新timeout时间,若原有二维码已过期则返回新的二维码.
- 如果获取失败, 请检查子域和设备逻辑ID是否在正确.
- 该接口只有设备管理员才可以调用.
- 建议开发者将分享码做成二维码, 然后让其他用户通过扫码绑定
同时还提供了重新生成分享码的接口(原分享码会失效)
[ACBindManager regenerateShareCodeWithSubDomain:@"test" deviceId:4 timeout:60 * 60 callback:^(NSString *shareCode, NSError *error) {
if (!error) {
//TODO...
}
}];
相关注意事项如下:
- 设备的逻辑ID可以通过调用
listDevice
接口获取.- 如果获取失败, 请检查子域和设备逻辑ID是否在正确.
- 该接口只有设备管理员才可以调用.
- 建议开发者将分享码做成二维码, 然后让其他用户通过扫码绑定
(2) 普通用户使用分享码进行绑定
建议将分享码做成二维码, 然后让其他用户通过扫码来绑定设备. 示例如下, 例如分享码是T47MbgBDG0KYSpwv2FZM0y05kd7Ba4AJ#32
[ACBindManager bindDeviceWithShareCode:@"T47MbgBDG0KYSpwv2FZM0y05kd7Ba4AJ#32" callback:^(ACUserDevice *userDevice, NSError *error) {
if (!error) {
//TODO...
}
}];
相关注意事项如下:
- 如果绑定失败, 请检查是否是分享码已经过期.
- 如果该接口返回错误, 请根据错误信息自行检查, 包括网络是否通畅, 参数是否正确等.
解绑设备
- 管理员或普通用户解绑设备
[ACBindManager unbindDeviceWithSubDomain:@"test" deviceId:@"18FF18C2CAAD19EF" callback:^(NSError *error) {
if (!error) {
//TODO...
}
}];
相关注意事项如下:
- 如果管理员解绑设备, 则所有绑定该设备的用户失去设备控制权
- 管理员取消其他普通成员对该设备的控制权
[ACBindManager unbindDeviceWithUserSubDomain:@"test" userId:@"userId" deviceId:@"18FF18C2CAAD19EF" callback:^(NSError *error) {
if (!error) {
//TODO...
}
}];