//
|
// EZAPWiFiConfigViewController.m
|
// EZOpenSDKDemo
|
//
|
// Created by linyong on 2018/6/4.
|
// Copyright © 2018年 Ezviz. All rights reserved.
|
//
|
|
#import "EZAPWiFiConfigViewController.h"
|
#import "GlobalKit.h"
|
#import <SystemConfiguration/CaptiveNetwork.h>
|
#import <EZOpenSDKFramework/EZHCNetDeviceSDK.h>
|
#import "EZAPConfigResultViewController.h"
|
#import "Toast+UIView.h"
|
|
#define WIFI_PREFROOT_URL @"prefs:root=WIFI"
|
#define WIFI_IOS10_WIFI_URL @"App-Prefs:root=WIFI"
|
|
@interface EZAPWiFiConfigViewController ()
|
|
@property (weak, nonatomic) IBOutlet UILabel *wifiNameLabel;
|
@property (weak, nonatomic) IBOutlet UILabel *wifiPwdLabel;
|
@property (weak, nonatomic) IBOutlet UILabel *stepTwoLabel;
|
@property (weak, nonatomic) IBOutlet UIActivityIndicatorView *processingIndicator;
|
@property (weak, nonatomic) IBOutlet UIButton *addBtn;
|
@property (unsafe_unretained, nonatomic) IBOutlet UILabel *stepThreeLable;
|
@property (unsafe_unretained, nonatomic) IBOutlet UILabel *tipLable;
|
@property (unsafe_unretained, nonatomic) IBOutlet UILabel *step1TipLable;
|
@property (unsafe_unretained, nonatomic) IBOutlet UILabel *passwordLable;
|
@property (unsafe_unretained, nonatomic) IBOutlet UILabel *nameL;
|
|
@property (unsafe_unretained, nonatomic) IBOutlet UIButton *toCopBtn;
|
@property (unsafe_unretained, nonatomic) IBOutlet UIButton *toSetBtn;
|
|
@property (nonatomic,copy) NSString *devicWifiName;
|
@property (nonatomic,strong) NSTimer *timer;
|
|
@end
|
|
@implementation EZAPWiFiConfigViewController
|
|
- (void)viewDidLoad
|
{
|
[super viewDidLoad];
|
self.title = NSLocalizedString(@"wifi_mode_wifi_connect",@"连接到设备Wi-Fi");
|
|
[self initSubviews];
|
}
|
|
- (void) viewDidAppear:(BOOL)animated
|
{
|
[super viewDidAppear:animated];
|
|
[self startTimer];
|
[self addNotifications];
|
}
|
|
- (void) viewWillDisappear:(BOOL)animated
|
{
|
[super viewWillDisappear:animated];
|
|
[self stopTimer];
|
[self stopConfigWifi];
|
[self removeNotifications];
|
}
|
|
#pragma mark - views
|
|
- (void) initSubviews
|
{
|
self.processingIndicator.hidden = YES;
|
|
// self.devicWifiName = [NSString stringWithFormat:@"EZVIZ_%@",[GlobalKit shareKit].deviceSerialNo];
|
self.devicWifiName = [NSString stringWithFormat:@"%@_%@",[GlobalKit shareKit].WiFiConfigPrefix,[GlobalKit shareKit].deviceSerialNo];
|
self.wifiNameLabel.text = self.devicWifiName;
|
// self.wifiPwdLabel.text = [NSString stringWithFormat:@"EZVIZ_%@",[GlobalKit shareKit].deviceVerifyCode];
|
self.wifiPwdLabel.text = [NSString stringWithFormat:@"%@_%@",[GlobalKit shareKit].WiFiConfigPrefix,[GlobalKit shareKit].deviceVerifyCode];
|
NSString *str = [NSString stringWithFormat:NSLocalizedString(@"wifi_step_two_msg",@"进入手机系统Wi-Fi设置界面,选择名称为%@的网络,用提示的密码进行连接"),self.devicWifiName];
|
NSMutableAttributedString *aStr = [[NSMutableAttributedString alloc] initWithString:str];
|
|
//关键字符颜色调整
|
[aStr addAttribute:NSForegroundColorAttributeName
|
value:[UIColor orangeColor]
|
range:[str rangeOfString:self.devicWifiName]];
|
|
//行间距调整
|
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
|
[paragraphStyle setLineSpacing:5];
|
[aStr addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [aStr length])];
|
|
self.stepTwoLabel.attributedText = aStr;
|
|
//第三步
|
NSString *stepThreeStr=HDLEZLocallizedString(@"wifi_config_step_three");
|
NSString *tipStr=HDLEZLocallizedString(@"wifi_config_step_three_tip");
|
NSString *step3FinalStr=[NSString stringWithFormat:@"%@ %@",stepThreeStr,tipStr];
|
NSMutableAttributedString *aTipStr = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@ %@",stepThreeStr,tipStr]];
|
//关键字符颜色调整
|
[aTipStr addAttribute:NSForegroundColorAttributeName
|
value:[UIColor redColor]
|
range:[step3FinalStr rangeOfString:tipStr]];
|
self.stepThreeLable.attributedText = aTipStr;
|
self.stepThreeLable.adjustsFontSizeToFitWidth=YES;
|
|
|
//设置国际化语言
|
self.tipLable.text=HDLEZLocallizedString(@"wifi_config_tip");
|
self.tipLable.adjustsFontSizeToFitWidth=YES;
|
self.step1TipLable.text=HDLEZLocallizedString(@"wifi_config_step_1_tips");
|
self.nameL.text=HDLEZLocallizedString(@"wifi_config_name");
|
self.passwordLable.text=HDLEZLocallizedString(@"wifi_config_step_2_password");
|
[self.toCopBtn setTitle:HDLEZLocallizedString(@"wifi_config_copy_pwd") forState:UIControlStateNormal];
|
[self.toSetBtn setTitle:HDLEZLocallizedString(@"wifi_config_to_setting") forState:UIControlStateNormal];
|
[self.addBtn setTitle:HDLEZLocallizedString(@"wifi_ap_add_device_title") forState:UIControlStateNormal];
|
|
|
}
|
|
-(void) startAction
|
{
|
self.processingIndicator.hidden = NO;
|
self.addBtn.hidden = YES;
|
[self.processingIndicator startAnimating];
|
}
|
|
- (void) stopAction
|
{
|
[self.processingIndicator stopAnimating];
|
self.processingIndicator.hidden = YES;
|
}
|
|
|
#pragma mark - notification
|
|
- (void) applicationDidBecomeActive
|
{
|
[self startTimer];
|
}
|
|
- (void) applicationWillResignActive
|
{
|
[self stopTimer];
|
}
|
|
#pragma mark - actions
|
|
- (IBAction)enterSettingBtnClick:(id)sender
|
{
|
NSString *urlStr = [[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0?WIFI_IOS10_WIFI_URL:WIFI_PREFROOT_URL;
|
NSURL * url = [NSURL URLWithString:urlStr];
|
if([[UIApplication sharedApplication] canOpenURL:url])
|
{
|
[[UIApplication sharedApplication] openURL:url];
|
}
|
}
|
|
- (IBAction)copyPwdBtnClick:(id)sender
|
{
|
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
|
pasteboard.string = self.wifiPwdLabel.text;
|
|
[self.view makeToast:NSLocalizedString(@"done",@"确定") duration:1.5 position:@"center"];
|
}
|
|
- (IBAction)addBtnClick:(id)sender
|
{
|
[self performSegueWithIdentifier:@"go2WifiConfigResult" sender:nil];
|
}
|
|
#pragma mark - support
|
|
- (void) configWifi
|
{
|
[EZOPENSDK startAPConfigWifiWithSsid:self.ssid
|
password:self.password
|
deviceSerial:[GlobalKit shareKit].deviceSerialNo
|
verifyCode:[GlobalKit shareKit].deviceVerifyCode
|
deviceStatus:^(EZWifiConfigStatus status, NSString * _Nonnull deviceSerial) {
|
// EZStrong(self);
|
switch (status) {
|
case DEVICE_WIFI_SENT_SUCCESS:// 向设备发送WiFi信息成功
|
// 等待设备配网,如果wifi密码错误,最后会回调DEVICE_PLATFORM_REGIST_FAILED
|
NSLog(@"向设备发送WiFi信息成功");
|
[self configSuccess];
|
|
// [EZToast show:@"向设备发送WiFi信息成功"];
|
break;
|
case DEVICE_WIFI_SENT_FAILED:// 向设备发送WiFi信息失败
|
// 配网失败,可以重试
|
NSLog(@"配网失败,请稍后重试");
|
// [EZToast show:@"配网失败,请稍后重试"];
|
break;
|
case DEVICE_PLATFORM_REGISTED:// 设备注册平台成功
|
// TODO 将设备添加到自己账号下
|
NSLog(@"设备注册平台成功");
|
// [EZToast show:@"设备注册平台成功"];
|
|
// [self stopAction];
|
// self.addBtn.hidden = NO;
|
break;
|
case DEVICE_PLATFORM_REGIST_FAILED:// 设备注册平台失败
|
// TODO 可以自行开启新一轮轮询
|
NSLog(@"设备注册平台失败");
|
// [EZToast show:@"设备注册平台失败"];
|
[self stopAction];
|
|
break;
|
default:
|
break;
|
}
|
}];
|
// [EZOPENSDK startAPConfigWifiWithSsid:self.ssid
|
// password:self.password
|
// deviceSerial:[GlobalKit shareKit].deviceSerialNo
|
// verifyCode:[GlobalKit shareKit].deviceVerifyCode
|
// result:^(BOOL ret) {
|
// if (ret)
|
// {
|
// [self configSuccess];
|
// }
|
// else
|
// {
|
// [self configFailed];
|
// NSLog(@"config failed");
|
// }
|
// }];
|
}
|
|
- (void) stopConfigWifi
|
{
|
[EZOPENSDK stopAPConfigWifi];
|
}
|
|
- (void) configSuccess
|
{
|
[self stopAction];
|
|
self.addBtn.hidden = NO;
|
}
|
|
- (void) configFailed
|
{
|
[self stopAction];
|
|
[self.view makeToast:@"config wifi fail" duration:1.5 position:@"center"];
|
}
|
|
- (void)addNotifications
|
{
|
[self removeNotifications];
|
|
[[NSNotificationCenter defaultCenter] addObserver:self
|
selector:@selector(applicationDidBecomeActive)
|
name:UIApplicationDidBecomeActiveNotification
|
object:nil];
|
|
[[NSNotificationCenter defaultCenter] addObserver:self
|
selector:@selector(applicationWillResignActive)
|
name:UIApplicationWillResignActiveNotification
|
object:nil];
|
}
|
|
- (void)removeNotifications
|
{
|
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
}
|
|
- (void) startTimer
|
{
|
[self stopTimer];
|
|
self.timer = [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(timerCallback) userInfo:nil repeats:YES];
|
}
|
|
- (void) stopTimer
|
{
|
if (!self.timer)
|
{
|
return;
|
}
|
|
if ([self.timer isValid])
|
{
|
[self.timer invalidate];
|
}
|
self.timer = nil;
|
}
|
|
- (void) timerCallback
|
{
|
if (![self checkSsid])
|
{
|
return;
|
}
|
|
[self stopTimer];
|
|
[self startAction];
|
|
[self configWifi];
|
}
|
|
- (NSString *) currentSsid
|
{
|
NSString *currentSsid = @"";
|
CFArrayRef myArray = CNCopySupportedInterfaces();
|
if (myArray != nil) {
|
CFDictionaryRef myDict = CNCopyCurrentNetworkInfo(CFArrayGetValueAtIndex(myArray, 0));
|
if (myDict != nil) {
|
NSDictionary *dict = (__bridge NSDictionary *)(myDict);
|
currentSsid = [dict valueForKey:@"SSID"];
|
}
|
}
|
return currentSsid;
|
}
|
|
- (BOOL) checkSsid
|
{
|
NSString *ssid = [self currentSsid];
|
|
// if (ssid && [ssid isEqualToString:self.devicWifiName])
|
// {
|
// return YES;
|
// }
|
|
//2021-10-19 判断条件,改为只匹配后面序列号字段
|
if(ssid && [ssid hasSuffix:[GlobalKit shareKit].deviceSerialNo]){//字符串末尾有序列号字符
|
return YES;
|
}
|
|
return NO;
|
}
|
|
#pragma mark - Navigation
|
|
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
|
|
}
|
|
@end
|