Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Global/EZHttpUtil.h
@@ -11,7 +11,6 @@ NS_ASSUME_NONNULL_BEGIN /// 河东接口网络请求工具类 @interface EZHttpUtil : NSObject Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Global/ResponseData.h
@@ -23,6 +23,7 @@ - (id)initWithDictionary:(NSDictionary *)dic; /**是否成功*/ - (BOOL)success; @end NS_ASSUME_NONNULL_END Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Global/ResponseData.m
@@ -10,16 +10,17 @@ @implementation ResponseData /// Description - (BOOL)success { //河东code为0 ,萤石为200 代表成功 return [self.code isEqual: @"0"] || [self.code isEqual: @"200"] ; /// init -(id)init { if (self = [super init]) { self.code = @"-1"; self.message = @"请求服务器失败,请稍后再试!"; } return self; } /// 解析返回字典参数 /// 初始化并解析返回字典参数 /// @param dic 返回参数 - (id)initWithDictionary:(NSDictionary *)dic { @@ -35,15 +36,16 @@ self.data = mData; } else { //没有返回数据 self.message = @"网络错误"; self.message = @"请求服务器失败,请稍后再试!"; self.data = nil; self.code = @"-2"; self.code = @"-1"; } } //接收到异常 @catch (NSException *exception) { self.message = @"数据解析错误"; self.data = dic; self.code = @"-1"; self.code = @"-2"; } @finally { @@ -51,4 +53,12 @@ } return self; } /// Description - (BOOL)success { //河东code为0 ,萤石为200 代表成功 return [self.code isEqual: @"0"] || [self.code isEqual: @"200"] ; } @end Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/TableViewCells/DeviceListCell.m
@@ -35,6 +35,7 @@ } self.nameLabel.text = [NSString stringWithFormat:@"%@",deviceInfo.deviceName]; // self.cameraImageView.contentMode = UIViewContentModeScaleAspectFit; [self.cameraImageView sd_setImageWithURL:[NSURL URLWithString:deviceInfo.deviceCover] placeholderImage:[UIImage imageNamed:@"device_default"]]; // [EZOPENSDK capturePicture:cameraInfo.deviceSerial channelNo:cameraInfo.channelNo completion:^(NSString *url, NSError *error) { // if(!error){ Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/EZDeviceResultViewController.m
@@ -178,7 +178,7 @@ if (error.code == EZ_HTTPS_DEVICE_ADDED_MYSELF || error.code == EZ_HTTPS_DEVICE_ONLINE_ADDED) { self.statusLabel.textColor = [UIColor blackColor]; self.statusLabel.text = NSLocalizedString(@"ad_already_added",@"您已添加过此设备"); self.statusLabel.text = NSLocalizedString(@"ad_already_added",@"此设备已被添加"); self.statusLabel.hidden = NO; } else if (error.code == EZ_HTTPS_DEVICE_ONLINE_IS_ADDED || error.code == EZ_HTTPS_DEVICE_OFFLINE_IS_ADDED) Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/zh-Hans.lproj/Localizable.strings
@@ -31,7 +31,7 @@ "ad_restart_tip"="长按设备上的reset键10秒后松开,并等待大约30秒直到设备启动完成"; "ad_restart_done"="我已重启好"; "ad_get_device_info_msg"="正在查询设备信息,请稍后..."; "ad_already_added"="您已添加过此设备"; "ad_already_added"="此设备已被添加"; "ad_added_by_others"="此设备已被别人添加"; "get_info_fail"="查询失败,网络不给力"; "ad_input_manual"="手动输入"; EZSDK.IOS/EZSDK.IOS/ApiDefinition.cs
@@ -20,6 +20,11 @@ [Export("setEZAccessToken:")] void SetEZAccessToken(string accessToken); // +(void)setHDlAccessToken:(NSString *)accessToken refreshToken:(NSString *)refreshToken; [Static] [Export("setHDlAccessToken:refreshToken:")] void SetHDlAccessToken(string accessToken, string refreshToken); // +(void)go2EZvizMonitor; [Static] [Export("go2EZvizMonitor")] EZSDK.IOS/EZSDK.IOS/Library/libEZSDK.aBinary files differ
EZSDK.IOS/EZSDK.IOS/Properties/AssemblyInfo.cs
@@ -25,7 +25,7 @@ // The form "{Major}.{Minor}.*" will automatically update the build and revision, // and "{Major}.{Minor}.{Build}.*" will update just the revision. [assembly: AssemblyVersion("1.0.6")] [assembly: AssemblyVersion("1.0.7")] // The following attributes are used to specify the signing key for the assembly, // if desired. See the Mono documentation for more information about signing. EZSDK/EZSDK.xcodeproj/project.pbxproj
@@ -7,6 +7,8 @@ objects = { /* Begin PBXBuildFile section */ B965BE0325EE0B0D00E58AFB /* EZHttpUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = B965BDFF25EE0B0D00E58AFB /* EZHttpUtil.m */; }; B965BE0425EE0B0D00E58AFB /* ResponseData.m in Sources */ = {isa = PBXBuildFile; fileRef = B965BE0025EE0B0D00E58AFB /* ResponseData.m */; }; B9BC92FF25C0FC3500C024FE /* EZSDK.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC92FE25C0FC3500C024FE /* EZSDK.m */; }; B9BC930025C0FC3500C024FE /* EZSDK.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = B9BC92FD25C0FC3500C024FE /* EZSDK.h */; }; B9BC956225C0FC6C00C024FE /* DeviceInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC94D125C0FC6B00C024FE /* DeviceInfo.m */; }; @@ -159,6 +161,10 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ B965BDFF25EE0B0D00E58AFB /* EZHttpUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EZHttpUtil.m; sourceTree = "<group>"; }; B965BE0025EE0B0D00E58AFB /* ResponseData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ResponseData.m; sourceTree = "<group>"; }; B965BE0125EE0B0D00E58AFB /* EZHttpUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZHttpUtil.h; sourceTree = "<group>"; }; B965BE0225EE0B0D00E58AFB /* ResponseData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ResponseData.h; sourceTree = "<group>"; }; B9BC92FA25C0FC3500C024FE /* libEZSDK.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libEZSDK.a; sourceTree = BUILT_PRODUCTS_DIR; }; B9BC92FD25C0FC3500C024FE /* EZSDK.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EZSDK.h; sourceTree = "<group>"; }; B9BC92FE25C0FC3500C024FE /* EZSDK.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EZSDK.m; sourceTree = "<group>"; }; @@ -1008,10 +1014,10 @@ isa = PBXGroup; children = ( B9BC991A25C0FFBA00C024FE /* CameraListCell.h */, B9BC991B25C0FFBA00C024FE /* DeviceListCell.h */, B9BC991C25C0FFBA00C024FE /* MessageListCell.h */, B9BC991D25C0FFBA00C024FE /* DeviceListCell.m */, B9BC991E25C0FFBA00C024FE /* CameraListCell.m */, B9BC991B25C0FFBA00C024FE /* DeviceListCell.h */, B9BC991D25C0FFBA00C024FE /* DeviceListCell.m */, B9BC991C25C0FFBA00C024FE /* MessageListCell.h */, B9BC991F25C0FFBA00C024FE /* MessageListCell.m */, ); path = TableViewCells; @@ -1115,6 +1121,10 @@ children = ( B9BC997125C0FFBB00C024FE /* GlobalKit.h */, B9BC997025C0FFBB00C024FE /* GlobalKit.m */, B965BE0125EE0B0D00E58AFB /* EZHttpUtil.h */, B965BDFF25EE0B0D00E58AFB /* EZHttpUtil.m */, B965BE0225EE0B0D00E58AFB /* ResponseData.h */, B965BE0025EE0B0D00E58AFB /* ResponseData.m */, ); path = Global; sourceTree = "<group>"; @@ -1389,6 +1399,7 @@ B9BC99F325C0FFBD00C024FE /* UIButton+WebCache.m in Sources */, B9BC99B925C0FFBD00C024FE /* MWTapDetectingImageView.m in Sources */, B9BC99DE25C0FFBD00C024FE /* AFHTTPRequestOperationManager.m in Sources */, B965BE0425EE0B0D00E58AFB /* ResponseData.m in Sources */, B9BC999F25C0FFBD00C024FE /* DALabeledCircularProgressView.m in Sources */, B9BC99B825C0FFBD00C024FE /* UIImage+MWPhotoBrowser.m in Sources */, B9BC99E025C0FFBD00C024FE /* AFHTTPRequestOperation.m in Sources */, @@ -1418,6 +1429,7 @@ B9BC9A0E25C0FFBD00C024FE /* EZLocalDeviceListViewController.m in Sources */, B9BC9A1125C0FFBD00C024FE /* EZDeviceRestartTipsViewController.m in Sources */, B9BC99CA25C0FFBD00C024FE /* UIImageView+DDKit.m in Sources */, B965BE0325EE0B0D00E58AFB /* EZHttpUtil.m in Sources */, B9BC9A2825C0FFBD00C024FE /* EZPlaybackViewController.m in Sources */, B9BC9A1C25C0FFBD00C024FE /* EZSupportViewController.m in Sources */, B9BC92FF25C0FC3500C024FE /* EZSDK.m in Sources */, EZSDK/EZSDK/EZ/Global/EZHttpUtil.h
New file @@ -0,0 +1,53 @@ // // EZHttpUtil.h // EZOpenSDKDemo // // Created by 陈嘉乐 on 2021/2/26. // Copyright © 2021 hikvision. All rights reserved. // #import <Foundation/Foundation.h> #import "ResponseData.h" NS_ASSUME_NONNULL_BEGIN /// 河东接口网络请求工具类 @interface EZHttpUtil : NSObject #pragma mark -接口 /** * @since 河东获取子账号token的接口 * * @param block 回调block */ + (void)getChildToken:(void (^)(NSString *accessToken))block; /** * @since 河东添加设备的接口 * 根据设备序列号和设备验证码添加设备接口 * * @param deviceSerial 设备序列号 * @param verifyCode 设备验证码 * @param completion 回调block,error为空时表示添加成功 * * @return operation */ + (void)addDeviceByHDL:(NSString *)deviceSerial verifyCode:(NSString *)verifyCode completion:(void (^)(ResponseData *responseData))completion; /** * @since 河东删除设备的接口 * 根据设备序列号删除设备接口 * * @param deviceSerial 设备序列号 * @param completion 回调block,error为空时表示添加成功 * * @return operation */ + (void)deleteDeviceByHDL:(NSString *)deviceSerial completion:(void (^)(ResponseData *responseData))completion; @end NS_ASSUME_NONNULL_END EZSDK/EZSDK/EZ/Global/EZHttpUtil.m
New file @@ -0,0 +1,297 @@ // // EZHttpUtil.m // EZOpenSDKDemo // // Created by 陈嘉乐 on 2021/2/26. // Copyright © 2021 hikvision. All rights reserved. // #import "EZHttpUtil.h" #import <Foundation/Foundation.h> #import <CommonCrypto/CommonDigest.h> #import "AFNetworking.h" #pragma mark API #define API_POST_EZ_AddDevice @"/home-wisdom/platform/childAddDevice" #define API_POST_EZ_GetChildToken @"/home-wisdom/platform/childToken" #define API_POST_EZ_ChildDelDevice @"/home-wisdom/platform/childDelDevice" #define API_POST_EZ_RefreshToken @"/smart-footstone/member/oauth/login" #pragma mark APP_KEY #define APP_KEY @"HDL-HOME-APP-TEST" #define SECRET_KEY @"WeJ8TY88vbakCcnvH8G1tDUqzLWY8yss" @implementation EZHttpUtil #pragma mark -接口请求部分 /** * @since 河东获取子账号token的接口 * * @param block 回调block */ + (void)getChildToken:(void (^)(NSString *accessToken))block{ //2.设置请求参数 NSMutableDictionary *parameters = [NSMutableDictionary dictionary]; parameters = [self GetSignRequestDictionary:parameters]; [self requestHttpsPost:API_POST_EZ_GetChildToken parameters:parameters completion:^(ResponseData *responseData) { if (block) { NSString * token = @""; if(responseData.success){ token = responseData.data[@"accessToken"]; } block(token); } }]; // return task; } /** * @since 河东添加设备的接口 * 根据设备序列号和设备验证码添加设备接口 * * @param deviceSerial 设备序列号 * @param verifyCode 设备验证码 * @param completion 回调block,error为空时表示添加成功 * * @return operation */ + (void)addDeviceByHDL:(NSString *)deviceSerial verifyCode:(NSString *)verifyCode completion:(void (^)(ResponseData *responseData))completion{ //2.设置请求参数 NSMutableDictionary *parameters = [NSMutableDictionary dictionary]; [parameters setValue:deviceSerial forKey:@"deviceSerial"]; [parameters setValue:verifyCode forKey:@"validateCode"]; parameters = [self GetSignRequestDictionary:parameters]; [self requestHttpsPost:API_POST_EZ_AddDevice parameters:parameters completion:^(ResponseData *responseData) { if (completion) { completion (responseData); } }]; // return task; } /** * @since 河东删除设备的接口 * 根据设备序列号删除设备接口 * * @param deviceSerial 设备序列号 * @param completion 回调block,error为空时表示添加成功 * * @return operation */ + (void)deleteDeviceByHDL:(NSString *)deviceSerial completion:(void (^)(ResponseData *responseData))completion{ //1.设置请求参数 NSMutableDictionary *parameters = [NSMutableDictionary dictionary]; [parameters setValue:deviceSerial forKey:@"deviceSerial"]; parameters = [self GetSignRequestDictionary:parameters]; [self requestHttpsPost:API_POST_EZ_ChildDelDevice parameters:parameters completion:^(ResponseData *responseData) { if (completion) { completion (responseData); } }]; // return task; } /// 刷新token /// @param block 结果 + (void)refreshHDLToken:(void (^)(BOOL isSuccess))block{ //1.设置请求参数 NSMutableDictionary *parameters = [NSMutableDictionary dictionary]; [parameters setValue:GlobalKit.shareKit.hdlRefreshToken forKey:@"refreshToken"]; [parameters setValue:@"refresh_token" forKey:@"grantType"]; [parameters setValue:@"APP" forKey:@"platform"]; parameters = [self GetSignRequestDictionary:parameters]; [self requestHttpsBase:API_POST_EZ_RefreshToken parameters:parameters completion:^(ResponseData *responseData) { if (block) { if (responseData) { if(responseData.success){ [EZSDK setHDlAccessToken: [NSString stringWithFormat:@"%@%@",responseData.data[@"headerPrefix"], responseData.data[@"accessToken"]] refreshToken:responseData.data[@"refreshToken"]]; block(YES); return; } } block(NO); } }]; // return task; } #pragma mark HttpUtil /// 通用 请求服务器方法 /// @param apiPath 接口地址 /// @param parameters 请求参数 /// @param completion 请求响应参数 + (void)requestHttpsPost:(NSString *)apiPath parameters:(NSMutableDictionary *)parameters completion:(void (^)(ResponseData *responseData))completion{ [self requestHttpsBase:apiPath parameters:parameters completion:^(ResponseData *responseData) { if (completion) { if([responseData.code isEqual:@"10001"]){ //刷新token [self refreshHDLToken:^(BOOL isSuccess) { if (isSuccess) { //刷新token成功,重新请求一次 [self requestHttpsBase:apiPath parameters:parameters completion:^(ResponseData *responseData) { completion(responseData); return; }]; } }]; } completion(responseData); } }]; } /// 通用 请求服务器方法 /// @param apiPath 接口地址 /// @param parameters 请求参数 /// @param completion 请求响应参数 + (void)requestHttpsBase:(NSString *)apiPath parameters:(NSMutableDictionary *)parameters completion:(void (^)(ResponseData *responseData))completion{ //1,创建你得请求url NSString *URL = @""; if([GlobalKit shareKit].GlobalRequestHttpsHost == NULL){ URL = @"https://test-gz.hdlcontrol.com"; } URL = [NSString stringWithFormat:@"%@%@", URL, apiPath]; // NSURLSessionDataTask * task=nil; AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; AFHTTPResponseSerializer *responseSerializer = [AFHTTPResponseSerializer serializer]; manager.responseSerializer = responseSerializer; //3.request NSMutableURLRequest * request = [[AFJSONRequestSerializer serializer] requestWithMethod:@"post" URLString:URL parameters:parameters error:nil]; request.timeoutInterval = 10.0f; [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; [request setValue:GlobalKit.shareKit.hdlAccessToken forHTTPHeaderField:@"Authorization"]; //4.dataTaskWithRequest [[manager dataTaskWithRequest:request completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) { if (completion) { ResponseData *responseData = [[ResponseData alloc] init]; responseData.code = @"-1"; if(responseObject != NULL){ //4.解析拿到的响应数据 NSLog(@"%@",[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding]); NSDictionary * outDic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil]; responseData = [[ResponseData alloc] initWithDictionary:outDic]; } if (!responseData) { responseData = [[ResponseData alloc] init]; } completion(responseData); } }]resume]; // return task; } /** * 基础服务的接口都要校验sign */ +(NSMutableDictionary *)GetSignRequestDictionary:(NSMutableDictionary *)params{ if(params == NULL){ params =[NSMutableDictionary dictionary]; } UInt64 recordTime = [[NSDate date] timeIntervalSince1970]*1000; [params setValue:APP_KEY forKey:@"appKey"]; [params setValue:[NSString stringWithFormat:@"%llu",recordTime] forKey:@"timestamp"]; //1.对KEY升序 NSArray *keyArray = [params allKeys]; NSArray *sortKeyArray = [keyArray sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) { return [obj1 compare:obj2 options:NSNumericSearch]; }]; //2.2 拼接按URL键值对 NSString *newString = @""; for(NSString *key in sortKeyArray){ if(params[key] != NULL){ NSString *valueStr = params[key]; //检测当前参数是否需要参与校验 if([self IfValueNeedSign:valueStr]){ newString = [newString stringByAppendingString:[NSString stringWithFormat:@"%@=%@&", key,valueStr]]; } } } //2.3 拼接SECRET_KEY newString = [newString substringToIndex:[newString length] - 1]; newString = [newString stringByAppendingString: SECRET_KEY]; //2.4 MD5转换+转小写 if(newString == nil || newString == NULL){ newString = @""; } NSString* signstr = [self signMD5Encrypt:newString]; [params setValue:signstr forKey:@"sign"]; return params; } /** MD5转换+转小写 */ + (NSString*)signMD5Encrypt:(NSString *)str { const char *cStr = [str UTF8String]; unsigned char digest[CC_MD5_DIGEST_LENGTH]; CC_MD5( cStr, strlen(cStr),digest ); NSMutableString *result = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2]; for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) [result appendFormat:@"%02x", digest[i]]; return result; } /// <summary> /// 判断当前值是否需要参与签名,保持跟云端一致 /// 空字符串不参与 /// 数组,集合,对象不参与 /// </summary> /// <param name="valueStr"></param> /// <returns></returns> +(bool)IfValueNeedSign:(NSString *)valueStr{ if (( (valueStr == nil || [valueStr isKindOfClass:[NSNull class]] || valueStr.length == 0))//判空字符 || ([[valueStr substringToIndex:1] isEqual:@"{"])//判断是否为对象 || ([[valueStr substringToIndex:1] isEqual:@"["])//判断是否为数组 ) { return false; } return true; } @end EZSDK/EZSDK/EZ/Global/GlobalKit.h
@@ -10,16 +10,17 @@ //#define CURR_LANG ([[NSLocale preferredLanguages] objectAtIndex:0]) //#define LanguageIsChinese ([CURR_LANG rangeOfString:@"zh-Hans"].location != NSNotFound) ////中文走国内, 不是中文走海外 #define EZOPENSDK LanguageIsChinese ? [EZOpenSDK class] : [EZGlobalSDK class] //2021-02-01 不考虑海外先,默认国内 //2021-02-01 不考虑海外先 #define LanguageIsChinese true @interface GlobalKit : NSObject @property (nonatomic, copy) NSString *GlobalRequestHttpsHost; @property (nonatomic, copy) NSString *hdlAccessToken; @property (nonatomic, copy) NSString *hdlRefreshToken; @property (nonatomic, copy) NSString *accessToken; @property (nonatomic, copy) NSString *deviceSerialNo; //设备序列号 @@ -35,4 +36,7 @@ - (void)clearDeviceInfo; //+(void)hello; @end EZSDK/EZSDK/EZ/Global/GlobalKit.m
@@ -8,6 +8,10 @@ #import "GlobalKit.h" #define EZOpenSDKAccessToken @"EZOpenSDKAccessToken" #define EZhdlAccessToken @"EZhdlAccessToken" #define EZhdlRefreshToken @"EZhdlRefreshToken" @implementation GlobalKit + (instancetype)shareKit @@ -25,7 +29,10 @@ self = [super init]; if (self) { _accessToken = [[NSUserDefaults standardUserDefaults] objectForKey:@"EZOpenSDKAccessToken"]; _accessToken = [[NSUserDefaults standardUserDefaults] objectForKey:EZOpenSDKAccessToken]; _hdlAccessToken = [[NSUserDefaults standardUserDefaults] objectForKey:EZhdlAccessToken]; _hdlRefreshToken = [[NSUserDefaults standardUserDefaults] objectForKey:EZhdlRefreshToken]; _deviceVerifyCodeBySerial = [NSMutableDictionary new]; } return self; @@ -35,14 +42,31 @@ - (void)setAccessToken:(NSString *)accessToken { _accessToken = accessToken; [[NSUserDefaults standardUserDefaults] setObject:accessToken?:@"" forKey:@"EZOpenSDKAccessToken"]; [[NSUserDefaults standardUserDefaults] setObject:accessToken?:@"" forKey:EZOpenSDKAccessToken]; [[NSUserDefaults standardUserDefaults] synchronize]; } - (void)setHdlAccessToken:(NSString *)hdlAccessToken { _hdlAccessToken = hdlAccessToken; [[NSUserDefaults standardUserDefaults] setObject:hdlAccessToken?:@"" forKey:EZhdlAccessToken]; [[NSUserDefaults standardUserDefaults] synchronize]; } - (void)setHdlRefreshToken:(NSString *)hdlRefreshToken { _hdlRefreshToken = hdlRefreshToken; [[NSUserDefaults standardUserDefaults] setObject:hdlRefreshToken?:@"" forKey:EZhdlRefreshToken]; [[NSUserDefaults standardUserDefaults] synchronize]; } - (void)clearSession { _accessToken = nil; [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"EZOpenSDKAccessToken"]; _hdlRefreshToken = nil; _hdlRefreshToken = nil; [[NSUserDefaults standardUserDefaults] removeObjectForKey:EZOpenSDKAccessToken]; [[NSUserDefaults standardUserDefaults] synchronize]; } EZSDK/EZSDK/EZ/Global/ResponseData.h
New file @@ -0,0 +1,29 @@ // // ResponseData.h // EZOpenSDKDemo // // Created by 陈嘉乐 on 2021/3/1. // Copyright © 2021 hikvision. All rights reserved. // #import <Foundation/Foundation.h> NS_ASSUME_NONNULL_BEGIN /** ResponseData */ @interface ResponseData : NSObject /** 响应状态码 */ @property (nonatomic, copy) NSString *code; /** 错误信息*/ @property (nonatomic, copy) NSString *message; /** 接收数据的字典 */ @property (nonatomic, strong) NSDictionary * __nullable data; /** 字典处理 */ - (id)initWithDictionary:(NSDictionary *)dic; /**是否成功*/ - (BOOL)success; @end NS_ASSUME_NONNULL_END EZSDK/EZSDK/EZ/Global/ResponseData.m
New file @@ -0,0 +1,64 @@ // // ResponseData.m // EZOpenSDKDemo // // Created by 陈嘉乐 on 2021/3/1. // Copyright © 2021 hikvision. All rights reserved. // #import "ResponseData.h" @implementation ResponseData /// init -(id)init { if (self = [super init]) { self.code = @"-1"; self.message = @"请求服务器失败,请稍后再试!"; } return self; } /// 初始化并解析返回字典参数 /// @param dic 返回参数 - (id)initWithDictionary:(NSDictionary *)dic { if (self = [super init]) { @try { if (dic) { //1.取出返回数据的状态码 self.code = [NSString stringWithFormat:@"%@", dic[@"code"]]; //2.提示信息 self.message = [dic objectForKey:@"message"]; //3.返回数据 NSDictionary *mData = (NSDictionary *)[dic objectForKey:@"data"]; self.data = mData; } else { //没有返回数据 self.message = @"请求服务器失败,请稍后再试!"; self.data = nil; self.code = @"-1"; } } //接收到异常 @catch (NSException *exception) { self.message = @"数据解析错误"; self.data = dic; self.code = @"-2"; } @finally { } } return self; } /// Description - (BOOL)success { //河东code为0 ,萤石为200 代表成功 return [self.code isEqual: @"0"] || [self.code isEqual: @"200"] ; } @end EZSDK/EZSDK/EZ/TableViewCells/DeviceListCell.m
@@ -35,12 +35,14 @@ } self.nameLabel.text = [NSString stringWithFormat:@"%@",deviceInfo.deviceName]; [self.cameraImageView sd_setImageWithURL:[NSURL URLWithString:deviceInfo.deviceCover] placeholderImageScale:nil]; // self.cameraImageView.contentMode = UIViewContentModeScaleAspectFit; [self.cameraImageView sd_setImageWithURL:[NSURL URLWithString:deviceInfo.deviceCover] placeholderImage:[UIImage imageNamed:@"device_default"]]; // [EZOPENSDK capturePicture:cameraInfo.deviceSerial channelNo:cameraInfo.channelNo completion:^(NSString *url, NSError *error) { // if(!error){ // [self.cameraImageView sd_setImageWithURL:[NSURL URLWithString:url]]; // } // }]; // [EZOPENSDK cap] self.messageButton.hidden = NO; self.settingButton.hidden = NO; EZSDK/EZSDK/EZ/UIViewControllers/EZDeviceResultViewController.m
@@ -14,7 +14,7 @@ #import "EZWifiConfigViewController.h" #import "EZWifiTipsViewController.h" #import "MBProgressHUD.h" #import "EZSDK.h" @interface EZDeviceResultViewController ()<UIAlertViewDelegate> @@ -82,12 +82,21 @@ [GlobalKit shareKit].deviceVerifyCode = [alertView textFieldAtIndex:0].text; __weak MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; hud.labelText = NSLocalizedString(@"ad_adding_msg", @"正在添加,请稍候..."); [EZOPENSDK addDevice:[GlobalKit shareKit].deviceSerialNo verifyCode:[GlobalKit shareKit].deviceVerifyCode completion:^(NSError *error) { [hud hide:YES]; [self handleTheError:error]; }]; // [EZOPENSDK addDevice:[GlobalKit shareKit].deviceSerialNo // verifyCode:[GlobalKit shareKit].deviceVerifyCode // completion:^(NSError *error) { // [hud hide:YES]; // [self handleTheError:error]; // }]; [EZHttpUtil addDeviceByHDL:[GlobalKit shareKit].deviceSerialNo verifyCode:[GlobalKit shareKit].deviceVerifyCode completion:^(ResponseData *responseData) { [hud hide:YES]; [self handleTheError:responseData]; }]; } else if (alertView.tag == 0xbb && buttonIndex == 1) { @@ -112,12 +121,20 @@ { __weak MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; hud.labelText = NSLocalizedString(@"ad_adding_msg", @"正在添加,请稍候..."); [EZOPENSDK addDevice:[GlobalKit shareKit].deviceSerialNo verifyCode:[GlobalKit shareKit].deviceVerifyCode completion:^(NSError *error) { [hud hide:YES]; [self handleTheError:error]; }]; // [EZOPENSDK addDevice:[GlobalKit shareKit].deviceSerialNo // verifyCode:[GlobalKit shareKit].deviceVerifyCode // completion:^(NSError *error) { // [hud hide:YES]; // [self handleTheError:error]; // }]; [EZHttpUtil addDeviceByHDL:[GlobalKit shareKit].deviceSerialNo verifyCode:[GlobalKit shareKit].deviceVerifyCode completion:^(ResponseData *responseData) { [hud hide:YES]; [self handleTheError:responseData]; }]; } else { @@ -161,7 +178,7 @@ if (error.code == EZ_HTTPS_DEVICE_ADDED_MYSELF || error.code == EZ_HTTPS_DEVICE_ONLINE_ADDED) { self.statusLabel.textColor = [UIColor blackColor]; self.statusLabel.text = NSLocalizedString(@"ad_already_added",@"您已添加过此设备"); self.statusLabel.text = NSLocalizedString(@"ad_already_added",@"此设备已被添加"); self.statusLabel.hidden = NO; } else if (error.code == EZ_HTTPS_DEVICE_ONLINE_IS_ADDED || error.code == EZ_HTTPS_DEVICE_OFFLINE_IS_ADDED) @@ -212,24 +229,24 @@ } - (void)handleTheError:(NSError *)error - (void)handleTheError:(ResponseData *)responseData { if (!error) if (responseData.success) { [self performSegueWithIdentifier:@"go2WifiResult" sender:nil]; return; } if (error.code == 105002) if ([responseData.code isEqual: @"20010"]) { UIAlertView *retryAlertView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"device_verify_code_wrong", @"验证码错误") message:nil delegate:self cancelButtonTitle:NSLocalizedString(@"cancel", @"取消") otherButtonTitles:NSLocalizedString(@"retry", @"重试"), nil]; retryAlertView.tag = 0xbb; [retryAlertView show]; } else if (error.code == 105000) else if ([responseData.code isEqual: @"20017"]) { [UIView dd_showMessage:NSLocalizedString(@"ad_already_added",@"您已添加过此设备")]; } else if (error.code == 105001) else if ([responseData.code isEqual: @"20013"]) { [UIView dd_showMessage:NSLocalizedString(@"ad_added_by_others",@"此设备已被别人添加")]; } EZSDK/EZSDK/EZ/UIViewControllers/EZDeviceTableViewController.m
@@ -51,7 +51,9 @@ - (void)viewDidLoad { [super viewDidLoad]; // [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60) // forBarMetrics:UIBarMetricsDefault]; // Uncomment the following line to preserve selection between presentations. // self.clearsSelectionOnViewWillAppear = NO; @@ -64,6 +66,8 @@ // self.title. self.logoutBtn.title = NSLocalizedString(@"Logout", @"注销"); self.logoutBtn.title = @""; [self.logoutBtn setEnabled: NO]; [self checkEZIsLogin]; } EZSDK/EZSDK/EZ/UIViewControllers/EZSettingViewController.m
@@ -360,8 +360,25 @@ { __weak MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; hud.labelText = NSLocalizedString(@"message_deleting", @"正在删除,请稍候..."); [EZOPENSDK deleteDevice:self.deviceInfo.deviceSerial completion:^(NSError *error) { if(!error) // [EZOPENSDK deleteDevice:self.deviceInfo.deviceSerial completion:^(NSError *error) { // if(!error) // { // [hud hide:YES]; // NSArray *viewControllers = self.navigationController.viewControllers; // for (UIViewController *vc in viewControllers) // { // if([vc isKindOfClass:[EZDeviceTableViewController class]]) // { // ((EZDeviceTableViewController *)vc).needRefresh = YES; // [self.navigationController popToViewController:vc animated:YES]; // break; // } // } // } // }]; [EZHttpUtil deleteDeviceByHDL:self.deviceInfo.deviceSerial completion:^(ResponseData *responseData) { if(responseData.success) { [hud hide:YES]; NSArray *viewControllers = self.navigationController.viewControllers; @@ -376,6 +393,8 @@ } } }]; } } EZSDK/EZSDK/EZSDK.h
@@ -7,6 +7,7 @@ #import <Foundation/Foundation.h> @interface EZSDK : NSObject /** 初始化SDK @@ -17,6 +18,10 @@ 设置SDK的accessToken */ +(void)setEZAccessToken:(NSString *) accessToken; /** 设置HDLSDK的accessToken */ +(void)setHDlAccessToken:(NSString *) accessToken refreshToken:(NSString *) refreshToken; /** 直接跳转到萤石摄像头列表 */ @@ -37,9 +42,5 @@ 回放播放历史 */ +(void)playBackVideo:(NSObject*)deviceInfo; @end EZSDK/EZSDK/EZSDK.m
@@ -6,8 +6,7 @@ // #import "EZSDK.h" #import "DeviceInfo.h" #import "EZDeviceInfo.h" //#import "DeviceInfo.h" #import "EZDeviceInfo.h" #import "EZOpenSDK.h" #import "GlobalKit.h" @@ -19,6 +18,10 @@ #import "EZPlaybackViewController.h" #import "EZDeviceTableViewController.h" #import "EZHCNetDeviceSDK.h" @implementation EZSDK @@ -58,7 +61,14 @@ [EZOPENSDK setAccessToken:accessToken]; } /** 设置HDLSDK的accessToken */ +(void)setHDlAccessToken:(NSString *) accessToken refreshToken:(NSString *) refreshToken { [[GlobalKit shareKit] setHdlAccessToken:accessToken]; [[GlobalKit shareKit] setHdlRefreshToken:refreshToken]; } //获取当前屏幕显示的viewcontroller (这里面获取的相当于rootViewController) +(UINavigationController *)getCurrentVC @@ -278,4 +288,6 @@ // } //} @end