// // netWorkManager.m // 隐私保护 // // Created by xd h on 2023/10/8. // #import "netWorkManager.h" #import "AFNetworkReachabilityManager.h" #import "AFHTTPSessionManager.h" #import "RcGameWQKeyChain.h" #import "iPhone.h" @interface netWorkManager () { AFHTTPSessionManager *manager; NSString *mCloudService; //NSString *mRequstAPI; AFHTTPSessionManager *managerNAS; } @end @implementation netWorkManager static netWorkManager *Game_NetWorkShareInstance = nil; +(netWorkManager *)shareInstance; { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ Game_NetWorkShareInstance = [[netWorkManager alloc]init]; }); return Game_NetWorkShareInstance; } - (id)init { self = [super init]; if (self) { [self initManager]; } return self; } - (void)initManager { mCloudService = CloudService; if ([mCloudService rangeOfString:@"https"].location != NSNotFound) { manager = [[AFHTTPSessionManager manager] initWithBaseURL:[NSURL URLWithString:mCloudService]]; } else { manager = [AFHTTPSessionManager manager]; } manager.requestSerializer = [AFJSONRequestSerializer serializer]; manager.responseSerializer = [AFJSONResponseSerializer serializer]; [manager.requestSerializer setHTTPShouldHandleCookies:NO]; [manager.requestSerializer setHTTPShouldUsePipelining:NO]; manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", @"text/plain",@"application/xml",@"image/png", @"audio/aac", @"text/x-vcard",nil]; manager.requestSerializer.HTTPMethodsEncodingParametersInURI = [NSSet setWithObjects:@"GET", @"HEAD", nil]; //设置当前语言 NSString * preferredLanguage = @"zh"; //NSArray *arLanguages = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"]; //NSLog(@"arLanguages:%@",arLanguages); ///获取设备当前地区的代码和APP语言环境 NSString *languageCode = [NSLocale preferredLanguages][0]; //目前支持 中文(简体 繁体) 英文 日语 if([languageCode rangeOfString:@"zh-Hans"].location != NSNotFound) { preferredLanguage = @"zh"; } else if([languageCode rangeOfString:@"zh-Hant"].location != NSNotFound) { preferredLanguage = @"zh-TW"; } else if([languageCode rangeOfString:@"ja-"].location != NSNotFound) { preferredLanguage = @"ja"; } else{ preferredLanguage = @"en"; } [manager.requestSerializer setValue:preferredLanguage forHTTPHeaderField:@"Accept-Language"]; // 请求头里添加版本号 //[manager.requestSerializer setValue:@"1.0" forHTTPHeaderField:@"rc-sdk"]; //[manager.requestSerializer setValue:@"1" forHTTPHeaderField:@"rc-platform"]; //iOS 1 安卓0 // NSString *version = [NSString stringWithFormat:@"v%@", [IPhoneInfoAndToolsManager appVersion]]; // NSString *uuid = [IPhoneInfoAndToolsManager phoneDeviceUuid]; // [manager.requestSerializer setValue:version forHTTPHeaderField:@"versionName"]; // [manager.requestSerializer setValue:uuid forHTTPHeaderField:@"devicesId"]; [manager.requestSerializer setValue:@"ios" forHTTPHeaderField:@"Source-Type"]; NSString *DeviceModel = [iTools getCurrentDeviceModel]; if(DeviceModel){ [manager.requestSerializer setValue:DeviceModel forHTTPHeaderField:@"Devices"]; } // NSString *curSN = ksharedAppDelegate.DeviceThirdIdMod.data.changeSn; // if (curSN) { // [manager.requestSerializer setValue:curSN forHTTPHeaderField:@"SN"]; // } NSString *curOaidStr = [RcGameWQKeyChain getOaidStringFun]; if(curOaidStr){ [manager.requestSerializer setValue:curOaidStr forHTTPHeaderField:@"OAID"]; } NSString *vers = [iPhone appVersion]; if(vers){ [manager.requestSerializer setValue:vers forHTTPHeaderField:@"versionName"]; } if ([mCloudService rangeOfString:@"https"].location != NSNotFound) { [manager setSecurityPolicy:[self customSecurityPolicy]]; } // 客户端是否信任非法证书 // manager.securityPolicy.allowInvalidCertificates = YES; // // 是否在证书域字段中验证域名 // [manager.securityPolicy setValidatesDomainName:NO]; manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone]; // manager.securityPolicy.allowInvalidCertificates = YES; //还是必须设成YES // 设置超时时间(设置有效) //[manager.requestSerializer willChangeValueForKey:@"timeoutInterval"]; manager.requestSerializer.timeoutInterval = 180; //[manager.requestSerializer didChangeValueForKey:@"timeoutInterval"]; } - (void)setAFHTTPSessionManagerFunBy:(NSInteger)tcpPort { NSString *ip = @"127.0.0.1"; NSNumber *proxyPort = [NSNumber numberWithInteger:tcpPort]; NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration]; config.connectionProxyDictionary = @ { @"HTTPEnable":@YES, @"HTTPProxy" : ip, @"HTTPPort" : proxyPort, @"HTTPSEnable":@YES, @"HTTPSProxy": ip, @"HTTPSPort": proxyPort }; managerNAS = [[AFHTTPSessionManager alloc] initWithBaseURL:nil sessionConfiguration:config]; managerNAS.requestSerializer = [AFJSONRequestSerializer serializer]; managerNAS.responseSerializer = [AFJSONResponseSerializer serializer]; [managerNAS.requestSerializer setHTTPShouldHandleCookies:NO]; [managerNAS.requestSerializer setHTTPShouldUsePipelining:NO]; managerNAS.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", @"text/plain",@"application/xml",@"image/png", @"audio/aac", @"text/x-vcard",nil]; managerNAS.requestSerializer.HTTPMethodsEncodingParametersInURI = [NSSet setWithObjects:@"GET", @"HEAD", nil]; //if ([NASService rangeOfString:@"https"].location != NSNotFound) if ([ksharedAppDelegate.NASFileByBoxService rangeOfString:@"https"].location != NSNotFound) { [managerNAS setSecurityPolicy:[self customSecurityPolicy]]; } } #pragma - mark 证书相关 - (AFSecurityPolicy*)customSecurityPolicy { // // /先导入证书 // NSString *cerName = @"newrelease"; // if ([@"https://client.phone.androidscloud.com" isEqualToString:CloudService]) // { // cerName = @"newrelease"; // } // else if ([@"https://prese.phone.androidscloud.com" isEqualToString:CloudService]) // { // cerName = @"newrelease"; // } // NSString *cerPath = [[NSBundle mainBundle] pathForResource:cerName ofType:@"cer"];//证书的路径 // NSData *certData = [NSData dataWithContentsOfFile:cerPath]; // AFSSLPinningModeCertificate 使用证书验证模式、、、//AFSSLPinningModeNone 不使用SSLPinning //AFSSLPinningModeCertificate 使用SSLPinning AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone]; // if ([@"https://test.androidscloud.com" isEqualToString:CloudService]) // { // securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone]; // } // else if ([@"https://pre.androidscloud.com" isEqualToString:CloudService]) // { // securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone]; // } // else if ([@"https://a.androidscloud.com" isEqualToString:CloudService]) // { // securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone]; // } // allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO // 如果是需要验证自建证书,需要设置为YES securityPolicy.allowInvalidCertificates = NO; //validatesDomainName 是否需要验证域名,默认为YES; //假如证书的域名与你请求的域名不一致,需把该项设置为NO;如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。 //置为NO,主要用于这种情况:客户端请求的是子域名,而证书上的是另外一个域名。因为SSL证书上的域名是独立的,假如证书上注册的域名是www.google.com,那么mail.google.com是无法验证通过的;当然,有钱可以注册通配符的域名*.google.com,但这个还是比较贵的。 //如置为NO,建议自己添加对应域名的校验逻辑。 securityPolicy.validatesDomainName = YES; // securityPolicy.pinnedCertificates = [[NSSet alloc] initWithObjects:certData, nil]; return securityPolicy; } #pragma - mark 证书相关 //- (AFSecurityPolicy*)customSecurityPolicy //{ // // /先导入证书 // NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"ca" ofType:@"cer"];//证书的路径 // // if ([@"https://client.androidscloud.com" isEqualToString:RC_Game_SDK_CloudService]) // { // cerPath = [[NSBundle mainBundle] pathForResource:@"release" ofType:@"cer"];//证书的路径 // } // // // NSData *certData = [NSData dataWithContentsOfFile:cerPath]; // // // AFSSLPinningModeCertificate 使用证书验证模式、、、//AFSSLPinningModeNone 不使用SSLPinning //AFSSLPinningModeCertificate 使用SSLPinning // AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate]; // // if ([@"https://test.androidscloud.com" isEqualToString:RC_Game_SDK_CloudService]) // { // securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone]; // } // // // // allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO // // 如果是需要验证自建证书,需要设置为YES // securityPolicy.allowInvalidCertificates = YES; // // //validatesDomainName 是否需要验证域名,默认为YES; // //假如证书的域名与你请求的域名不一致,需把该项设置为NO;如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。 // //置为NO,主要用于这种情况:客户端请求的是子域名,而证书上的是另外一个域名。因为SSL证书上的域名是独立的,假如证书上注册的域名是www.google.com,那么mail.google.com是无法验证通过的;当然,有钱可以注册通配符的域名*.google.com,但这个还是比较贵的。 // //如置为NO,建议自己添加对应域名的校验逻辑。 // securityPolicy.validatesDomainName = NO; // // securityPolicy.pinnedCertificates = [[NSSet alloc] initWithObjects:certData, nil]; // // return securityPolicy; //} #pragma mark afnetwork post 请求 - (void)CommonPostCallBackCode:(NSString*)code Parameters:(NSDictionary*)dict success:(netWork_Success)success failure:(netWork_Faild)failure { NSString *curServer = mCloudService; HLog(@"地址:%@ \n接口名称:%@,\n 参数:%@\n",curServer,code,dict); NSString *url = [NSString stringWithFormat:@"%@%@",curServer,code]; [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable) {// 无网络状态 NSDictionary *responseObject = @{@"code" : @(-999), @"msg" : @"当前网络不可用", @"data" : @""}; mainBlock(^{ success(responseObject); }); return; } NSString *curSN = ksharedAppDelegate.DeviceThirdIdMod.data.changeSn; if (curSN) { [manager.requestSerializer setValue:curSN forHTTPHeaderField:@"SN"]; } [manager POST:url parameters:dict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { HLog(@"接口名称:%@ 接口返回:%@,\n ",code,responseObject); success(responseObject); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error, id _Nonnull responseObject) { failure(error); HLog(@"%@", error); }]; } #pragma mark afnetwork get 请求 - (void)CommonGetWithCallBackCode:(NSString *)code Parameters:(NSDictionary *_Nullable)dic success:(netWork_Success)success failure:(netWork_Faild)faildStr { NSString *curServer = mCloudService; NSString *url = [NSString stringWithFormat:@"%@%@",curServer,code]; if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable) {// 无网络状态 NSDictionary *responseObject = @{@"status" : @(-999), @"msg" : @"当前网络不可用", @"data" : @""}; success(responseObject); return; } NSString *curSN = ksharedAppDelegate.DeviceThirdIdMod.data.changeSn; if (curSN) { [manager.requestSerializer setValue:curSN forHTTPHeaderField:@"SN"]; } HLog(@"地址:%@%@,\n 参数:%@\n",curServer,code,dic); [manager GET:url parameters:dic progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { HLog(@"接口名称:%@,返回:%@,\n ",code,responseObject); success(responseObject); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error, id _Nonnull responseObject) { faildStr(error); HLog(@"%@", error); }]; } - (void)doUploadFileToFileServiceWithParams:(NSMutableDictionary *)params data:(NSData *)data success:(netWork_Success)success faild:(netWork_Faild)faildStr { AFHTTPSessionManager *uploadManager = [[AFHTTPSessionManager alloc] init]; uploadManager.requestSerializer = [AFJSONRequestSerializer serializer]; uploadManager.responseSerializer = [AFJSONResponseSerializer serializer]; uploadManager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/json", @"text/javascript",@"text/html",@"text/plain",nil]; uploadManager.requestSerializer.timeoutInterval = 60; NSString *urlString = FileService; [uploadManager.requestSerializer setValue:Const_File_Access_Key forHTTPHeaderField:@"file-access-key"]; [uploadManager POST:urlString parameters:params constructingBodyWithBlock:^(id _Nonnull formData) { //NSString *mimeType =@"application/octet-stream"; NSString *mimeType =@"application/zip"; //[formData appendPartWithFileData:data name:@"file" fileName:params[@"filename"] mimeType:mimeType]; [formData appendPartWithFileData:data name:@"file" fileName:@"webrtc_ios.zip" mimeType:mimeType]; } progress:^(NSProgress * _Nonnull uploadProgress) { } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { success(responseObject); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error, id _Nonnull responseObject) { faildStr(error); }]; } #pragma mark afnetwork post 埋点请求 //eventType 事件模块类型 0 一级模块=1 二级模块=2 三级模块=3 //事件模块值 Scan_code - (void)DataEmbeddingPointBy:(int)eventType withEventValue:(NSString*)eventValue { //test code //return; if(!eventValue){ return; } NSString *curSN = ksharedAppDelegate.DeviceThirdIdMod.data.changeSn; if (curSN) { [manager.requestSerializer setValue:curSN forHTTPHeaderField:@"SN"]; } else{ return; } NSMutableDictionary *dict = [NSMutableDictionary new]; [dict setValue:[NSNumber numberWithInt:eventType] forKey:@"eventType"]; [dict setValue:eventValue forKey:@"eventValue"]; [self CommonPostCallBackCode:clientAddDataPointFun Parameters:dict success:^(id _Nonnull responseObject) { //HLog(@"111"); } failure:^(NSError * _Nonnull error) { }]; } #pragma mark afnetwork post 请求 - (void)cloudPhonePostCallBackCode:(NSString*)code Parameters:(NSDictionary*)dict success:(netWork_Success)success failure:(netWork_Faild)failure { //NSString *curServer = NASService; NSString *curServer = ksharedAppDelegate.NASFileByBoxService; if(!curServer ||curServer.length ==0){ NSDictionary *responseObject = @{@"code" : @(-998), @"msg" : @"ip wrong", @"data" : @""}; mainBlock(^{ success(responseObject); }); return; } NSString *url = [NSString stringWithFormat:@"%@%@",curServer,code]; HLog(@"地址:%@ \n接口名称:%@,\n 参数:%@\n",url,code,dict); [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; if([code isEqualToString:@"delFile"]) { [manager.requestSerializer setValue:@"multipart/from-data" forHTTPHeaderField:@"Content-Type"]; } if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable) {// 无网络状态 NSDictionary *responseObject = @{@"code" : @(-999), @"msg" : @"当前网络不可用", @"data" : @""}; mainBlock(^{ success(responseObject); }); return; } NSMutableURLRequest *request = [manager.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:url parameters:nil constructingBodyWithBlock:^(id _Nonnull formData) { for (NSString *key in [dict allKeys]) { NSArray *arr = dict[key]; NSString *str1 = @"["; NSString *str2 = @"]"; NSMutableString *dataStr = [NSMutableString new]; for (NSString *curStr in arr) { if(dataStr.length != 0){ [dataStr appendString:@","]; } [dataStr appendString:@"\""]; [dataStr appendString:curStr]; [dataStr appendString:@"\""]; } NSMutableString *totalStr = [NSMutableString new]; [totalStr appendString:str1]; [totalStr appendString:dataStr]; [totalStr appendString:str2]; HLog(@"%@",totalStr); [formData appendPartWithFormData:[totalStr dataUsingEncoding:NSUTF8StringEncoding] name:key]; } } error:nil]; NSURLSessionDataTask *task = [manager dataTaskWithRequest:request uploadProgress:nil downloadProgress:nil completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) { if (error) { HLog(@"%@", error); failure(error); return; } success(responseObject); }]; [task resume]; } - (void)cloudPhoneGETCallBackCode:(NSString*)code Parameters:(NSDictionary*)dict success:(netWork_Success)success failure:(netWork_Faild)failure { //NSString *curServer = NASService; NSString *curServer = ksharedAppDelegate.NASFileByBoxService; if(!curServer ||curServer.length ==0){ NSDictionary *responseObject = @{@"code" : @(-998), @"msg" : @"ip wrong", @"data" : @""}; mainBlock(^{ success(responseObject); }); return; } NSString *url = [NSString stringWithFormat:@"%@%@",curServer,code]; HLog(@"地址:%@ \n接口名称:%@,\n 参数:%@\n",url,code,dict); //managerNAS manager [managerNAS.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable) {// 无网络状态 NSDictionary *responseObject = @{@"code" : @(-999), @"msg" : @"当前网络不可用", @"data" : @""}; mainBlock(^{ success(responseObject); }); return; } //managerNAS manager [manager GET:url parameters:dict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { HLog(@"接口名称:%@ 接口返回:%@,\n ",code,responseObject); success(responseObject); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error, id _Nonnull responseObject) { failure(error); HLog(@"%@", error); }]; } #pragma mark afnetwork get 请求 检测文件是否存在 - (void)cloudPhoneCheckUrlCallBackCode:(NSString*)code success:(netWork_Success)success failure:(netWork_Faild)failure { NSString *curServer = code; NSString *url = [NSString stringWithFormat:@"%@",curServer]; HLog(@"地址:%@",url); //managerNAS manager //[managerNAS.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable) {// 无网络状态 NSDictionary *responseObject = @{@"code" : @(-999), @"msg" : @"当前网络不可用", @"data" : @""}; mainBlock(^{ success(responseObject); }); return; } NSString *fullUrl = nil; NSString *paraStr = nil; NSArray *urlArr = [url componentsSeparatedByString:@"?"]; if(urlArr.count == 2){ fullUrl = urlArr.firstObject; paraStr = urlArr.lastObject; paraStr = [paraStr stringByReplacingOccurrencesOfString:@"path=" withString:@""]; NSString *string = paraStr; NSString *filePathBase64 = [iTools base64UrlEncoder:string]; fullUrl = [[NSString alloc] initWithFormat:@"%@/%@",fullUrl,filePathBase64]; }else{ return; } if(!fullUrl){ return; } if([fullUrl containsString:@"getFile"] &&![fullUrl containsString:@"getFiles"]){ fullUrl = [fullUrl stringByReplacingOccurrencesOfString:@"getFile" withString:@"getFiles"]; } HLog(@"%@",fullUrl); //1.创建管理者对象 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; //2.确定请求的URL地址 NSURL *url2222 = [NSURL URLWithString:fullUrl]; //3.创建请求对象 NSURLRequest *request = [NSURLRequest requestWithURL:url2222]; //4.下载任务 __block SuperModel *model = [SuperModel new]; __block NSURLSessionDownloadTask *task = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) { //打印下下载进度 HLog(@"%@",downloadProgress); [task cancel]; } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) { //设置文件保存路径 return [NSURL fileURLWithPath:@""]; } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) { //HLog(@"完成cache:%@",filePath); NSHTTPURLResponse *response1 = (NSHTTPURLResponse *)response; NSInteger statusCode = [response1 statusCode]; HLog(@"statusCode:%ld",statusCode); if (statusCode == 200) { model.code = 0; success(model); }else{ model.code = -1; success(model); } }]; //5.开始启动下载任务 [task resume]; //[task cancel]; } #pragma mark afnetwork get 请求 音乐播放器下载音频缓存 - (void)cloudPhoneDownloadAudioByCode:(NSString*)code withSavePath:(NSString*)savePath success:(netWork_Success)success failure:(netWork_Faild)failure { NSString *curServer = code; NSString *fullUrl = curServer; HLog(@"地址:%@",fullUrl); //managerNAS manager //[managerNAS.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; __block SuperModel *model = [SuperModel new]; if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable) {// 无网络状态 model.code = -1; success(model); return; } if(!fullUrl){ model.code = -1; success(model); return; } if([fullUrl containsString:@"getFile"] &&![fullUrl containsString:@"getFiles"]){ fullUrl = [fullUrl stringByReplacingOccurrencesOfString:@"getFile" withString:@"getFiles"]; } HLog(@"%@",fullUrl); //1.创建管理者对象 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; //2.确定请求的URL地址 NSURL *url2222 = [NSURL URLWithString:fullUrl]; //3.创建请求对象 NSURLRequest *request = [NSURLRequest requestWithURL:url2222]; //4.下载任务 __block NSURLSessionDownloadTask *task = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) { //打印下下载进度 HLog(@"%@",downloadProgress); } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) { //设置文件保存路径 return [NSURL fileURLWithPath:savePath]; } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) { //HLog(@"完成cache:%@",filePath); NSHTTPURLResponse *response1 = (NSHTTPURLResponse *)response; NSInteger statusCode = [response1 statusCode]; HLog(@"statusCode:%ld",statusCode); if (statusCode == 200) { model.code = 0; success(model); }else{ model.code = -1; success(model); } }]; //5.开始启动下载任务 [task resume]; } #pragma mark 根据SN 获取设备信息 - (void)getThridMsgBySN:(NSString*)snStr success:(netWork_Success)success failure:(netWork_Faild)failure; { NSMutableDictionary *paraDict = [NSMutableDictionary new]; [paraDict setValue:snStr forKey:@"sn"]; KWeakSelf [[netWorkManager shareInstance] CommonGetWithCallBackCode:getThirdIdBySn Parameters:paraDict success:^(id _Nonnull responseObject) { DeviceThirdIdModel *model = [[DeviceThirdIdModel alloc] initWithDictionary:responseObject error:nil]; if(model.status == 0 && model.data) {//根据SN 获取到正确的信息 ksharedAppDelegate.DeviceThirdIdMod = model; NSString*desPwdstr = [RSATool AES128Decrypt:model.data.password key:AESCODEKEEYY]; /*密码保持在本地*/ NSDictionary *deviceDict = [HWDataManager getObjectWithKey:Const_Have_Add_Device]; NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithDictionary:deviceDict]; [dict setObject:desPwdstr forKey:Const_Have_Add_Device_PWD]; NSString *sdnid = model.data.sdnId; if(sdnid){ [dict setObject:sdnid forKey:Const_Have_Add_Device_sdnid]; } [HWDataManager setObjectWithKey:Const_Have_Add_Device_Privacy_Mode value:[NSNumber numberWithBool:model.data.isPrivacyMode]]; [HWDataManager setObjectWithKey:Const_Have_Add_Device value:dict]; } else{ } success(model); } failure:^(NSError * _Nonnull error) { HLog("网络报错"); failure(error); }]; } -(void)RefreshThridMsg { NSString *sn = ksharedAppDelegate.DeviceThirdIdMod.data.changeSn; if(sn && sn.length>0){ [self getThridMsgBySN:sn success:^(id _Nonnull responseObject) { } failure:^(NSError * _Nonnull error) { }]; } } #pragma mark 修改隐私模式密码 -(void)updateCardInfoBySN:(NSString*)snStr withPwdStr:(NSString*)pwd didNetEnd:(netWork_DidEndByOK)didNetEndIsOK { NSMutableDictionary *paraDict = [NSMutableDictionary new]; [paraDict setValue:snStr forKey:@"sn"]; NSString* enPwdStr = [RSATool AES128Encrypt:pwd key:AESCODEKEEYY]; if(enPwdStr){ [paraDict setValue:enPwdStr forKey:@"password"]; } //KWeakSelf [[netWorkManager shareInstance] CommonPostCallBackCode:updateCardInfo Parameters:paraDict success:^(id _Nonnull responseObject) { SuperModel*model = [[SuperModel alloc] initWithDictionary:responseObject error:nil]; if(model && model.status == 0) { didNetEndIsOK(YES); ksharedAppDelegate.DeviceThirdIdMod.data.password = enPwdStr; /*密码保持在本地*/ NSDictionary *deviceDict = [HWDataManager getObjectWithKey:Const_Have_Add_Device]; NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithDictionary:deviceDict]; [dict setObject:pwd forKey:Const_Have_Add_Device_PWD]; [HWDataManager setObjectWithKey:Const_Have_Add_Device value:dict]; } else{ didNetEndIsOK(NO); } } failure:^(NSError * _Nonnull error) { HLog("网络报错"); didNetEndIsOK(NO); }]; } @end