更新时间:2023-06-05 02:50:00下载pdf
Wi-Fi 快连配网又称 快连模式(Easy-Connect)、SmartConfig 或 EZ 配网。用户将手机连接到路由器后,利用路由器广播报文与设备进行通信配对。对用户操作简单,但对手机和路由器有兼容性要求,成功率低于 热点配网。
在 iOS 14.5 及以上版本中,推荐您使用 热点模式(即 AP 模式) 代替 Wi-Fi 快连模式(即 EZ 模式)。主要原因如下:
com.apple.developer.networking.multicast
的权限。这个权限需要向苹果额外申请,等审批通过后才能够使用。目前临时的解决方案是降低 Xcode 版本,但仍推荐使用 热点模式。开始配网之前,SDK 需要在联网状态下从涂鸦查询配网 Token,然后才可以开始快连模式配网。Token 的有效期为 10 分钟,且配置成功后就会失效。再次配网时,需要重新查询 Token。
接口说明
- (void)getTokenWithHomeId:(long long)homeId
success:(ThingSuccessString)success
failure:(ThingFailureError)failure;
参数说明
参数 | 说明 |
---|---|
homeId | 设备将要绑定到的家庭的 ID |
success | 成功回调,返回配网 Token |
failure | 失败回调,返回失败原因 |
示例代码
Objc:
- (void)getToken {
ThingSmartActivator *ezActivator = [[ThingSmartActivator alloc] init];
[ezActivator getTokenWithHomeId:homeId success:^(NSString *token) {
NSLog(@"getToken success: %@", token);
// TODO: startConfigWiFi
} failure:^(NSError *error) {
NSLog(@"getToken failure: %@", error.localizedDescription);
}];
}
Swift:
func getToken() {
let ezActivator = ThingSmartActivator()
ezActivator.getTokenWithHomeId(homeId, success: { token in
print("getToken success: \(token)")
// TODO: startConfigWiFi
}, failure: { error in
print("getToken failure: \(error.localizedDescription)")
})
}
接口说明
- (void)activator:(ThingSmartActivator *)activator didReceiveDevice:(ThingSmartDeviceModel *)deviceModel error:(NSError *)error;
参数说明
参数 | 说明 |
---|---|
activator | 配网使用 ThingSmartActivator 对象实例 |
deviceModel | 配网成功时,返回此次配网的设备模型,失败时返回 nil |
error | 配网失败时,标示错误信息,成功时为 nil |
接口说明
- (void)startConfigWiFi:(ThingActivatorMode)mode
ssid:(NSString *)ssid
password:(NSString *)password
token:(NSString *)token
timeout:(NSTimeInterval)timeout;
参数说明
参数 | 说明 |
---|---|
mode | 配网模式 |
ssid | Wi-Fi 名称 |
password | Wi-Fi 密码 |
token | 配网 Token |
timeout | 超时时间,默认 100 秒 |
示例代码
Objc :
- (void)startConfigWiFi:(NSString *)ssid password:(NSString *)password token:(NSString *)token {
// 设置 ThingSmartActivator 的 delegate,并实现 delegate 方法
self.ezActivator.delegate = self;
// 开始配网,快连模式对应 mode 为 ThingActivatorModeEZ
[self.ezActivator startConfigWiFi:ThingActivatorModeEZ ssid:ssid password:password token:token timeout:100];
}
- (ThingSmartActivator *)ezActivator {
if (!_ezActivator) {
_ezActivator = [[ThingSmartActivator alloc] init];
}
return _ezActivator;
}
#pragma mark - ThingSmartActivatorDelegate
- (void)activator:(ThingSmartActivator *)activator didReceiveDevice:(ThingSmartDeviceModel *)deviceModel error:(NSError *)error {
if (!error && deviceModel) {
//配网成功
}
if (error) {
//配网失败
}
}
Swift :
func startConfigWiFi(ssid: String, password: String, token: String) {
// 设置 ThingSmartActivator 的 delegate,并实现 delegate 方法
ezActivator.delegate = self
// 开始配网,快连模式对应 mode 为 ThingActivatorModeEZ
ezActivator.startConfigWiFi(.ez, ssid: ssid, password: password, token: token, timeout: 100)
}
lazy var ezActivator: ThingSmartActivator = {
let activator = ThingSmartActivator()
return activator
}()
// 实现 ThingSmartActivatorDelegate 协议方法
func activator(_ activator: ThingSmartActivator, didReceiveDevice deviceModel: ThingSmartDeviceModel?, error: Error?) {
if let error = error {
// 配网失败
print("Config WiFi failed: \(error.localizedDescription)")
} else if let deviceModel = deviceModel {
// 配网成功
print("Config WiFi success: \(deviceModel)")
}
}
开始配网操作后,App 会持续广播配网信息,直到配网成功,或者超时。如果需要中途取消操作或配网完成,请调用 [ThingSmartActivator stopConfigWi-Fi]
方法。
接口说明
- (void)stopConfigWiFi;
示例代码
Objc:
- (void)stopConfigWifi {
self.ezActivator.delegate = nil;
[self.ezActivator stopConfigWiFi];
}
Swift:
func stopConfigWifi() {
ezActivator.delegate = nil
ezActivator.stopConfigWiFi()
}
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈