netWorkManager.m 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388
  1. //
  2. // netWorkManager.m
  3. // 隐私保护
  4. //
  5. // Created by xd h on 2023/10/8.
  6. //
  7. #import "netWorkManager.h"
  8. #import "AFNetworkReachabilityManager.h"
  9. #import "AFHTTPSessionManager.h"
  10. @interface netWorkManager ()
  11. {
  12. AFHTTPSessionManager *manager;
  13. NSString *mCloudService;
  14. //NSString *mRequstAPI;
  15. }
  16. @end
  17. @implementation netWorkManager
  18. static netWorkManager *Game_NetWorkShareInstance = nil;
  19. +(netWorkManager *)shareInstance;
  20. {
  21. static dispatch_once_t onceToken;
  22. dispatch_once(&onceToken, ^{
  23. Game_NetWorkShareInstance = [[netWorkManager alloc]init];
  24. });
  25. return Game_NetWorkShareInstance;
  26. }
  27. - (id)init
  28. {
  29. self = [super init];
  30. if (self) {
  31. [self initManager];
  32. }
  33. return self;
  34. }
  35. - (void)initManager
  36. {
  37. mCloudService = CloudService;
  38. if ([mCloudService rangeOfString:@"https"].location != NSNotFound)
  39. {
  40. manager = [[AFHTTPSessionManager manager] initWithBaseURL:[NSURL URLWithString:mCloudService]];
  41. }
  42. else
  43. {
  44. manager = [AFHTTPSessionManager manager];
  45. }
  46. manager.requestSerializer = [AFJSONRequestSerializer serializer];
  47. manager.responseSerializer = [AFJSONResponseSerializer serializer];
  48. [manager.requestSerializer setHTTPShouldHandleCookies:NO];
  49. [manager.requestSerializer setHTTPShouldUsePipelining:NO];
  50. 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];
  51. manager.requestSerializer.HTTPMethodsEncodingParametersInURI = [NSSet setWithObjects:@"GET", @"HEAD", nil];
  52. //设置当前语言
  53. NSString * preferredLanguage = @"zh";
  54. //NSArray *arLanguages = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"];
  55. //NSLog(@"arLanguages:%@",arLanguages);
  56. ///获取设备当前地区的代码和APP语言环境
  57. NSString *languageCode = [NSLocale preferredLanguages][0];
  58. //目前支持 中文(简体 繁体) 英文 日语
  59. if([languageCode rangeOfString:@"zh-Hans"].location != NSNotFound)
  60. {
  61. preferredLanguage = @"zh";
  62. }
  63. else if([languageCode rangeOfString:@"zh-Hant"].location != NSNotFound)
  64. {
  65. preferredLanguage = @"zh-TW";
  66. }
  67. else if([languageCode rangeOfString:@"ja-"].location != NSNotFound)
  68. {
  69. preferredLanguage = @"ja";
  70. }
  71. else{
  72. preferredLanguage = @"en";
  73. }
  74. [manager.requestSerializer setValue:preferredLanguage forHTTPHeaderField:@"Accept-Language"];
  75. // 请求头里添加版本号
  76. //[manager.requestSerializer setValue:@"1.0" forHTTPHeaderField:@"rc-sdk"];
  77. //[manager.requestSerializer setValue:@"1" forHTTPHeaderField:@"rc-platform"]; //iOS 1 安卓0
  78. // NSString *version = [NSString stringWithFormat:@"v%@", [IPhoneInfoAndToolsManager appVersion]];
  79. // NSString *uuid = [IPhoneInfoAndToolsManager phoneDeviceUuid];
  80. // [manager.requestSerializer setValue:version forHTTPHeaderField:@"versionName"];
  81. // [manager.requestSerializer setValue:uuid forHTTPHeaderField:@"devicesId"];
  82. // [manager.requestSerializer setValue:@"4" forHTTPHeaderField:@"client"];
  83. if ([mCloudService rangeOfString:@"https"].location != NSNotFound)
  84. {
  85. //[manager setSecurityPolicy:[self customSecurityPolicy]];
  86. }
  87. // 客户端是否信任非法证书
  88. // manager.securityPolicy.allowInvalidCertificates = YES;
  89. // // 是否在证书域字段中验证域名
  90. // [manager.securityPolicy setValidatesDomainName:NO];
  91. manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
  92. // manager.securityPolicy.allowInvalidCertificates = YES; //还是必须设成YES
  93. // 设置超时时间(设置有效)
  94. //[manager.requestSerializer willChangeValueForKey:@"timeoutInterval"];
  95. manager.requestSerializer.timeoutInterval = 30;
  96. //[manager.requestSerializer didChangeValueForKey:@"timeoutInterval"];
  97. }
  98. #pragma - mark 证书相关
  99. //- (AFSecurityPolicy*)customSecurityPolicy
  100. //{
  101. // // /先导入证书
  102. // NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"ca" ofType:@"cer"];//证书的路径
  103. //
  104. // if ([@"https://client.androidscloud.com" isEqualToString:RC_Game_SDK_CloudService])
  105. // {
  106. // cerPath = [[NSBundle mainBundle] pathForResource:@"release" ofType:@"cer"];//证书的路径
  107. // }
  108. //
  109. //
  110. // NSData *certData = [NSData dataWithContentsOfFile:cerPath];
  111. //
  112. // // AFSSLPinningModeCertificate 使用证书验证模式、、、//AFSSLPinningModeNone 不使用SSLPinning //AFSSLPinningModeCertificate 使用SSLPinning
  113. // AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
  114. //
  115. // if ([@"https://test.androidscloud.com" isEqualToString:RC_Game_SDK_CloudService])
  116. // {
  117. // securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
  118. // }
  119. //
  120. //
  121. // // allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO
  122. // // 如果是需要验证自建证书,需要设置为YES
  123. // securityPolicy.allowInvalidCertificates = YES;
  124. //
  125. // //validatesDomainName 是否需要验证域名,默认为YES;
  126. // //假如证书的域名与你请求的域名不一致,需把该项设置为NO;如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。
  127. // //置为NO,主要用于这种情况:客户端请求的是子域名,而证书上的是另外一个域名。因为SSL证书上的域名是独立的,假如证书上注册的域名是www.google.com,那么mail.google.com是无法验证通过的;当然,有钱可以注册通配符的域名*.google.com,但这个还是比较贵的。
  128. // //如置为NO,建议自己添加对应域名的校验逻辑。
  129. // securityPolicy.validatesDomainName = NO;
  130. //
  131. // securityPolicy.pinnedCertificates = [[NSSet alloc] initWithObjects:certData, nil];
  132. //
  133. // return securityPolicy;
  134. //}
  135. #pragma mark afnetwork post 请求
  136. - (void)CommonPostCallBackCode:(NSString*)code Parameters:(NSDictionary*)dict success:(netWork_Success)success failure:(netWork_Faild)failure
  137. {
  138. NSString *curServer = mCloudService;
  139. HLog(@"地址:%@ \n接口名称:%@,\n 参数:%@\n",curServer,code,dict);
  140. NSString *url = [NSString stringWithFormat:@"%@%@",curServer,code];
  141. [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
  142. if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable)
  143. {// 无网络状态
  144. NSDictionary *responseObject = @{@"code" : @(-999), @"msg" : @"当前网络不可用", @"data" : @""};
  145. mainBlock(^{
  146. success(responseObject);
  147. });
  148. return;
  149. }
  150. [manager POST:url parameters:dict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  151. HLog(@"接口名称:%@ 接口返回:%@,\n ",code,responseObject);
  152. success(responseObject);
  153. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error, id _Nonnull responseObject) {
  154. failure(error);
  155. HLog(@"%@", error);
  156. }];
  157. }
  158. #pragma mark afnetwork get 请求
  159. - (void)CommonGetWithCallBackCode:(NSString *)code Parameters:(NSDictionary *_Nullable)dic success:(netWork_Success)success failure:(netWork_Faild)faildStr
  160. {
  161. NSString *curServer = mCloudService;
  162. NSString *url = [NSString stringWithFormat:@"%@%@",curServer,code];
  163. if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable)
  164. {// 无网络状态
  165. NSDictionary *responseObject = @{@"status" : @(-999), @"msg" : @"当前网络不可用", @"data" : @""};
  166. success(responseObject);
  167. return;
  168. }
  169. HLog(@"地址:%@%@,\n 参数:%@\n",curServer,code,dic);
  170. [manager GET:url parameters:dic progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  171. HLog(@"接口名称:%@,返回:%@,\n ",code,responseObject);
  172. success(responseObject);
  173. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error, id _Nonnull responseObject) {
  174. faildStr(error);
  175. HLog(@"%@", error);
  176. }];
  177. }
  178. - (void)doUploadFileToFileServiceWithParams:(NSMutableDictionary *)params data:(NSData *)data success:(netWork_Success)success faild:(netWork_Faild)faildStr {
  179. AFHTTPSessionManager *uploadManager = [[AFHTTPSessionManager alloc] init];
  180. uploadManager.requestSerializer = [AFJSONRequestSerializer serializer];
  181. uploadManager.responseSerializer = [AFJSONResponseSerializer serializer];
  182. uploadManager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/json", @"text/javascript",@"text/html",@"text/plain",nil];
  183. uploadManager.requestSerializer.timeoutInterval = 60;
  184. NSString *urlString = FileService;
  185. [uploadManager.requestSerializer setValue:Const_File_Access_Key forHTTPHeaderField:@"file-access-key"];
  186. [uploadManager POST:urlString parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
  187. NSString *mimeType =@"application/octet-stream";
  188. [formData appendPartWithFileData:data name:@"file" fileName:params[@"filename"] mimeType:mimeType];
  189. } progress:^(NSProgress * _Nonnull uploadProgress) {
  190. } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  191. success(responseObject);
  192. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error, id _Nonnull responseObject) {
  193. faildStr(error);
  194. }];
  195. }
  196. #pragma mark afnetwork post 请求
  197. - (void)cloudPhonePostCallBackCode:(NSString*)code Parameters:(NSDictionary*)dict success:(netWork_Success)success failure:(netWork_Faild)failure
  198. {
  199. NSString *curServer = NASService;
  200. if(!curServer ||curServer.length ==0){
  201. NSDictionary *responseObject = @{@"code" : @(-998), @"msg" : @"ip wrong", @"data" : @""};
  202. mainBlock(^{
  203. success(responseObject);
  204. });
  205. return;
  206. }
  207. NSString *url = [NSString stringWithFormat:@"%@/%@",curServer,code];
  208. HLog(@"地址:%@ \n接口名称:%@,\n 参数:%@\n",url,code,dict);
  209. [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
  210. if([code isEqualToString:@"delFile"])
  211. {
  212. [manager.requestSerializer setValue:@"multipart/from-data" forHTTPHeaderField:@"Content-Type"];
  213. }
  214. if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable)
  215. {// 无网络状态
  216. NSDictionary *responseObject = @{@"code" : @(-999), @"msg" : @"当前网络不可用", @"data" : @""};
  217. mainBlock(^{
  218. success(responseObject);
  219. });
  220. return;
  221. }
  222. NSMutableURLRequest *request = [manager.requestSerializer multipartFormRequestWithMethod:@"POST"
  223. URLString:url
  224. parameters:nil
  225. constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
  226. for (NSString *key in [dict allKeys])
  227. {
  228. NSArray *arr = dict[key];
  229. NSString *str1 = @"[";
  230. NSString *str2 = @"]";
  231. NSMutableString *dataStr = [NSMutableString new];
  232. for (NSString *curStr in arr) {
  233. if(dataStr.length != 0){
  234. [dataStr appendString:@","];
  235. }
  236. [dataStr appendString:@"\""];
  237. [dataStr appendString:curStr];
  238. [dataStr appendString:@"\""];
  239. }
  240. NSMutableString *totalStr = [NSMutableString new];
  241. [totalStr appendString:str1];
  242. [totalStr appendString:dataStr];
  243. [totalStr appendString:str2];
  244. HLog(@"%@",totalStr);
  245. [formData appendPartWithFormData:[totalStr dataUsingEncoding:NSUTF8StringEncoding] name:key];
  246. }
  247. } error:nil];
  248. NSURLSessionDataTask *task = [manager dataTaskWithRequest:request uploadProgress:nil downloadProgress:nil completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
  249. if (error) {
  250. HLog(@"%@", error);
  251. failure(error);
  252. return;
  253. }
  254. success(responseObject);
  255. }];
  256. [task resume];
  257. }
  258. - (void)cloudPhoneGETCallBackCode:(NSString*)code Parameters:(NSDictionary*)dict success:(netWork_Success)success failure:(netWork_Faild)failure
  259. {
  260. NSString *curServer = NASService;
  261. if(!curServer ||curServer.length ==0){
  262. NSDictionary *responseObject = @{@"code" : @(-998), @"msg" : @"ip wrong", @"data" : @""};
  263. mainBlock(^{
  264. success(responseObject);
  265. });
  266. return;
  267. }
  268. NSString *url = [NSString stringWithFormat:@"%@/%@",curServer,code];
  269. HLog(@"地址:%@ \n接口名称:%@,\n 参数:%@\n",url,code,dict);
  270. [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
  271. if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable)
  272. {// 无网络状态
  273. NSDictionary *responseObject = @{@"code" : @(-999), @"msg" : @"当前网络不可用", @"data" : @""};
  274. mainBlock(^{
  275. success(responseObject);
  276. });
  277. return;
  278. }
  279. [manager GET:url parameters:dict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  280. HLog(@"接口名称:%@ 接口返回:%@,\n ",code,responseObject);
  281. success(responseObject);
  282. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error, id _Nonnull responseObject) {
  283. failure(error);
  284. HLog(@"%@", error);
  285. }];
  286. }
  287. @end