UseAccountManage.m 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137
  1. //
  2. // UseAccountManage.m
  3. // VclustersGemini
  4. //
  5. // Created by APPLE on 2019/6/13.
  6. // Copyright © 2019 APPLE. All rights reserved.
  7. //
  8. #import "UseAccountManage.h"
  9. #import "AFNetworkReachabilityManager.h"
  10. #import "VclCrash.h"
  11. #import "AppDelegate.h"
  12. #import "iPhone.h"
  13. #import "Notification.h"
  14. #import "CloudPhoneAPI.h"
  15. #define CloudServiceForDevice @"http://47.98.158.194:8014"
  16. #define PayCloudService @"http://193.112.153.4"
  17. @interface UseAccountManage ()<NSURLSessionDelegate,NSURLConnectionDelegate,NSURLSessionTaskDelegate>
  18. {
  19. ;
  20. }
  21. @property (nonatomic) SSLAuthenticate authenticated;
  22. @property (nonatomic,strong) NSURLConnection *urlConnection;
  23. @end
  24. @implementation UseAccountManage
  25. @synthesize manager;
  26. @synthesize mCloudService;
  27. @synthesize mRequstAPI;
  28. static UseAccountManage *shareInstance = nil;
  29. + (UseAccountManage *)shareInstance
  30. {
  31. static dispatch_once_t onceToken;
  32. dispatch_once(&onceToken, ^{
  33. shareInstance = [[UseAccountManage alloc]init];
  34. });
  35. return shareInstance;
  36. }
  37. - (id)init
  38. {
  39. self = [super init];
  40. if (self) {
  41. [self initManager];
  42. }
  43. return self;
  44. }
  45. - (void)initManager
  46. {
  47. mCloudService = CloudService;
  48. if ([mCloudService rangeOfString:@"https"].location != NSNotFound)
  49. {
  50. manager = [[AFHTTPSessionManager manager] initWithBaseURL:[NSURL URLWithString:mCloudService]];
  51. }
  52. else
  53. {
  54. manager = [AFHTTPSessionManager manager];
  55. }
  56. manager.requestSerializer = [AFJSONRequestSerializer serializer];
  57. manager.responseSerializer = [AFJSONResponseSerializer serializer];
  58. [manager.requestSerializer setHTTPShouldHandleCookies:NO];
  59. [manager.requestSerializer setHTTPShouldUsePipelining:NO];
  60. 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];
  61. manager.requestSerializer.HTTPMethodsEncodingParametersInURI = [NSSet setWithObjects:@"GET", @"HEAD", nil];
  62. // manager.accessibilityLanguage = @"zh-CN,zh";
  63. manager.requestSerializer.timeoutInterval = 20;
  64. // 请求头里添加版本号
  65. NSString *version = [NSString stringWithFormat:@"v%@", [iPhone appVersion]];
  66. NSString *uuid = [iPhone phoneDeviceUuid];
  67. [manager.requestSerializer setValue:version forHTTPHeaderField:@"versionName"];
  68. [manager.requestSerializer setValue:uuid forHTTPHeaderField:@"devicesId"];
  69. [manager.requestSerializer setValue:@"2" forHTTPHeaderField:@"client"];
  70. [manager.requestSerializer setValue:@"zh-CN,zh" forHTTPHeaderField:@"Accept-Language"];
  71. [manager.requestSerializer setValue:@"iosSigned" forHTTPHeaderField:@"channelCode"];
  72. if ([mCloudService rangeOfString:@"https"].location != NSNotFound)
  73. {
  74. [manager setSecurityPolicy:[self customSecurityPolicy]];
  75. }
  76. }
  77. #pragma mark 网络请求 异常情况处理
  78. // 账号冻结、系统维护、账号注销、异地登陆
  79. - (BOOL)isDidHandelCustomStatusFun:(id)responseObject task:(NSURLSessionDataTask *)task {
  80. if(responseObject && [responseObject isKindOfClass:[NSDictionary class]] && [[responseObject allKeys] containsObject:@"status"])
  81. {
  82. NSNumber * status = responseObject[@"status"];
  83. if (status && status.intValue == 3003 ) {// 1、账号冻结
  84. [[NSNotificationCenter defaultCenter] postNotificationName:NotNameAccountFreeze object:nil userInfo:responseObject];
  85. return YES;
  86. }else if (status && status.intValue == 5100 ) {// 2、系统维护中
  87. [[NSNotificationCenter defaultCenter] postNotificationName:NotNameSystemMaintain object:nil userInfo:responseObject];
  88. return YES;
  89. }else if (status && status.intValue == 3004 ) {// 3、账号已注销
  90. [[NSNotificationCenter defaultCenter] postNotificationName:NotNameAccountDestroy object:nil userInfo:responseObject];
  91. return YES;
  92. }else if (status && status.intValue == 6013 ) {// 4、异地登陆
  93. [[NSNotificationCenter defaultCenter] postNotificationName:AccountLoginWithOtherDeviceNotification object:nil userInfo:responseObject];
  94. return YES;
  95. }else if (status && status.intValue == 6014 ) {// 5、token失效
  96. [[NSNotificationCenter defaultCenter] postNotificationName:TokenIsInvalidNotification object:nil userInfo:responseObject];
  97. return YES;
  98. }
  99. }
  100. // http请求错误码statusCode
  101. NSHTTPURLResponse *response = (NSHTTPURLResponse *)task.response;
  102. NSInteger statusCode = response.statusCode; // 正常:200
  103. NSString *urlString = task.currentRequest.URL.absoluteString;
  104. HLog(@"statusCode:%ld status:%@ url:%@", statusCode,responseObject[@"status"],urlString);
  105. if (statusCode == 6013) { // 4、异地登陆
  106. [[NSNotificationCenter defaultCenter] postNotificationName:AccountLoginWithOtherDeviceNotification object:nil userInfo:responseObject];
  107. return YES;
  108. }else if (statusCode == 6014) {
  109. [[NSNotificationCenter defaultCenter] postNotificationName:TokenIsInvalidNotification object:nil userInfo:responseObject];
  110. return YES;
  111. }
  112. return NO;
  113. }
  114. // 系统繁忙
  115. - (NSMutableDictionary *)systemBusyDict {
  116. if (!_systemBusyDict) {
  117. _systemBusyDict = [NSMutableDictionary dictionary];
  118. [_systemBusyDict setObject:@"系统繁忙,请稍后再试!" forKey:@"msg"];
  119. [_systemBusyDict setObject:@(-1) forKey:@"status"];
  120. [_systemBusyDict setObject:@"" forKey:@"data"];
  121. }
  122. return _systemBusyDict;
  123. }
  124. // 网络异常
  125. - (NSMutableDictionary *)networkErrorDict {
  126. if (!_networkErrorDict) {
  127. _networkErrorDict = [NSMutableDictionary dictionary];
  128. [_networkErrorDict setObject:@"网络异常,请稍后重试!" forKey:@"msg"];
  129. [_networkErrorDict setObject:@(-999) forKey:@"status"];
  130. [_networkErrorDict setObject:[NSDictionary new] forKey:@"data"];
  131. }
  132. return _networkErrorDict;
  133. }
  134. - (id)check401And403WithObject:(id)responseObject {
  135. if (CODE == 401 || CODE == 403) {
  136. return self.systemBusyDict;
  137. }else {
  138. return responseObject;
  139. }
  140. }
  141. // 弹出设备已在别处登录
  142. -(void)showLoginOutTip:(NSString*)msgStr
  143. {
  144. // NSString *msg = msgStr.length != 0 ? msgStr : @"设备已在别处登录";
  145. //
  146. // UINavigationController *curNav = ksharedAppDelegate.MainTabbar.navigationController;
  147. //
  148. // UIAlertController *alertController = [UIAlertController alertControllerWithTitle:nil message:msg preferredStyle:UIAlertControllerStyleAlert];
  149. // UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
  150. //
  151. // [curNav popToRootViewControllerAnimated:YES];
  152. // }];
  153. // [alertController addAction:cancelAction];
  154. //
  155. // [curNav presentViewController:alertController animated:YES completion:nil];
  156. }
  157. #pragma mark 获取链接
  158. - (void)requestWithPostparameters:(NSDictionary*)parameters complteteBlock:(CloudServiceCompletionBlock)complteteBlock
  159. {
  160. if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable)
  161. {
  162. complteteBlock(nil, self.networkErrorDict);
  163. return;
  164. }
  165. NSString *url = [mCloudService stringByAppendingString:mRequstAPI];
  166. HLog(@"\n------Post请求连接->%@",url);
  167. HLog(@"\n------Post请求体->%@",parameters);
  168. // // RSA签名
  169. // if ([url containsString:GetOrderNumberAPI] ||
  170. // [url containsString:STARCOINPAYAPI] ||
  171. // [url containsString:GETAIRPAYCONNECTIONAPI] ||
  172. // [url containsString:GETWXPAYCONNECTIONAPI]) {
  173. //
  174. // NSString *jsonStr = [RSATool sortArrWithDictionary:parameters];
  175. // NSString *signStr = [RSATool RSASignEncrypt:jsonStr key:Const_Pay_PrivateKey];
  176. // signStr = [RSATool deleteNewlineCharactersWithString:signStr];
  177. // if (signStr.length == 0) {
  178. // dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  179. // [self requestWithPostparameters:parameters complteteBlock:complteteBlock];
  180. // });
  181. // return;
  182. // }
  183. // [manager.requestSerializer setValue:signStr forHTTPHeaderField:@"sign"];
  184. // }else { // 清空签名
  185. [manager.requestSerializer setValue:@"" forHTTPHeaderField:@"sign"];
  186. // }
  187. [manager POST:url
  188. parameters:parameters
  189. progress:^(NSProgress * _Nonnull uploadProgress) {
  190. ;
  191. }
  192. success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  193. if ([self isDidHandelCustomStatusFun:responseObject task:task]) {
  194. return;
  195. }
  196. complteteBlock(nil,[self check401And403WithObject:responseObject]);
  197. }
  198. failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error, id _Nonnull responseObject) {
  199. if ([self isDidHandelCustomStatusFun:responseObject task:task]) {
  200. return;
  201. }
  202. complteteBlock(error,[self check401And403WithObject:responseObject]);
  203. }];
  204. }
  205. - (void)requestWithDeleteparameters:(NSDictionary*)parameters complteteBlock:(CloudServiceCompletionBlock)complteteBlock
  206. {
  207. if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable)
  208. {
  209. complteteBlock(nil, self.networkErrorDict);
  210. return;
  211. }
  212. NSString *url = [mCloudService stringByAppendingString:mRequstAPI];
  213. HLog(@"\n------Delete请求连接->%@",url);
  214. HLog(@"\n------Delete请求体->%@",parameters);
  215. [manager DELETE:url
  216. parameters:parameters
  217. success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  218. if ([self isDidHandelCustomStatusFun:responseObject task:task]) {
  219. return;
  220. }
  221. complteteBlock(nil,[self check401And403WithObject:responseObject]);
  222. }
  223. failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error,id _Nonnull responseObject) {
  224. if ([self isDidHandelCustomStatusFun:responseObject task:task]) {
  225. return;
  226. }
  227. complteteBlock(error,[self check401And403WithObject:responseObject]);
  228. }];
  229. }
  230. - (void)requestWithPutparameters:(NSDictionary*)parameters complteteBlock:(CloudServiceCompletionBlock)complteteBlock
  231. {
  232. if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable)
  233. {
  234. complteteBlock(nil, self.networkErrorDict);
  235. return;
  236. }
  237. NSString *url = [mCloudService stringByAppendingString:mRequstAPI];
  238. HLog(@"\n------Put请求连接->%@",url);
  239. HLog(@"\n------Put请求体->%@",parameters);
  240. [manager PUT:url
  241. parameters:parameters
  242. success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  243. if ([self isDidHandelCustomStatusFun:responseObject task:task]) {
  244. return;
  245. }
  246. complteteBlock(nil,[self check401And403WithObject:responseObject]);
  247. }
  248. failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error,id _Nonnull responseObject) {
  249. if ([self isDidHandelCustomStatusFun:responseObject task:task]) {
  250. return;
  251. }
  252. complteteBlock(error,[self check401And403WithObject:responseObject]);
  253. }];
  254. }
  255. - (void)requestWithGetparameters:(NSDictionary*)parameters complteteBlock:(CloudServiceCompletionBlock)complteteBlock
  256. {
  257. if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable)
  258. {
  259. complteteBlock(nil,self.networkErrorDict);
  260. return;
  261. }
  262. NSString *url = [mCloudService stringByAppendingString:mRequstAPI];
  263. HLog(@"\n------Get请求连接->%@",url);
  264. // HLog(@"\n------Get请求体->%@",parameters);
  265. [manager GET:url parameters:parameters progress:^(NSProgress * _Nonnull downloadProgress) {
  266. ;
  267. }
  268. success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  269. if ([self isDidHandelCustomStatusFun:responseObject task:task]) {
  270. return;
  271. }
  272. complteteBlock(nil,[self check401And403WithObject:responseObject]);
  273. }
  274. failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error,id _Nonnull responseObject) {
  275. if ([self isDidHandelCustomStatusFun:responseObject task:task]) {
  276. return;
  277. }
  278. complteteBlock(error,[self check401And403WithObject:responseObject]);
  279. }];
  280. }
  281. - (void)requestWithPatchparameters:(NSDictionary*)parameters complteteBlock:(CloudServiceCompletionBlock)complteteBlock
  282. {
  283. if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable)
  284. {
  285. complteteBlock(nil, self.networkErrorDict);
  286. return;
  287. }
  288. NSString *url = [mCloudService stringByAppendingString:mRequstAPI];
  289. // HLog(@"\n------Get请求连接->%@",url);
  290. // HLog(@"\n------Get请求体->%@",parameters);
  291. [manager PATCH:url
  292. parameters:parameters
  293. success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  294. if ([self isDidHandelCustomStatusFun:responseObject task:task]) {
  295. return;
  296. }
  297. complteteBlock(nil,[self check401And403WithObject:responseObject]);
  298. }
  299. failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error, id _Nonnull responseObject) {
  300. if ([self isDidHandelCustomStatusFun:responseObject task:task]) {
  301. return;
  302. }
  303. complteteBlock(error,[self check401And403WithObject:responseObject]);
  304. }];
  305. }
  306. #pragma mark hxd 重新封装 afnetwork get 请求
  307. - (void)commonGetCanWithOutTokenCallBackUrl:(NSString *)url Parameters:(NSDictionary *_Nullable)dic success:(Success)success failure:(Faild)faildStr
  308. {
  309. ////
  310. if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable)
  311. {// 无网络状态
  312. success(self.networkErrorDict);
  313. return;
  314. }
  315. url = [NSString stringWithFormat:@"%@%@",CloudService,url];
  316. // if ([url rangeOfString:AppVersionCheckAPI].location != NSNotFound) {
  317. // url = [url stringByReplacingOccurrencesOfString:@"https" withString:@"http"];
  318. // }
  319. [manager GET:url parameters:dic progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  320. [[VclCrash sharedInstance] writeContent:[NSString stringWithFormat:@"%s__error = %@_data = %@__",__FUNCTION__,@"",[responseObject description]]];
  321. if ([self isDidHandelCustomStatusFun:responseObject task:task]) {
  322. return;
  323. }
  324. HLog(@"接口名称:%@,返回:%@,\n ",url,responseObject);
  325. success([self check401And403WithObject:responseObject]);
  326. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error, id _Nonnull responseObject) {
  327. [[VclCrash sharedInstance] writeContent:[NSString stringWithFormat:@"%s__error = %@_data = %@__",__FUNCTION__,[error description],[responseObject description]]];
  328. if ([self isDidHandelCustomStatusFun:responseObject task:task]) {
  329. return;
  330. }
  331. faildStr(error);
  332. }];
  333. }
  334. - (void)CommonGetWithCallBackCode:(NSString *)code Parameters:(NSDictionary *_Nullable)dic success:(Success)success failure:(Faild)faildStr
  335. {
  336. NSString *url = [NSString stringWithFormat:@"%@%@",CloudService,code];
  337. url = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
  338. NSDictionary *dictLogin = [self getLoginInfo];
  339. if (dictLogin && [[dictLogin allKeys] containsObject:@"token"])
  340. {
  341. NSString *tokenStr = [dictLogin objectForKey:@"token"];
  342. [manager.requestSerializer setValue:tokenStr forHTTPHeaderField:@"Authorization"];
  343. }
  344. else
  345. {
  346. //用户协议和隐私协议无需登录也可返回数据 //蜂芒开关 无需登录也可返回数据
  347. if ([code rangeOfString:@"/api/public/v4/agreement/content?agreementCoding=XYPZYHXY2002"].location != NSNotFound || [code rangeOfString:@"/api/public/v4/agreement/content?agreementCoding=XYPZYSXY2001"].location != NSNotFound) {
  348. }
  349. else
  350. {//获取维护系统公告与否时候特殊处理
  351. NSDictionary *responseObject = @{@"status" : @(6013), @"msg" : @"设备已在别处登录", @"data" : @""};
  352. success(responseObject);
  353. [self logout];
  354. [self showLoginOutTip:MSG];
  355. return;
  356. }
  357. }
  358. if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable)
  359. {// 无网络状态
  360. success(self.networkErrorDict);
  361. return;
  362. }
  363. HLog(@"接口名称:%@,\n 参数:%@\n",code,dic);
  364. [manager GET:url parameters:dic progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  365. [[VclCrash sharedInstance] writeContent:[NSString stringWithFormat:@"%s__error = %@_data = %@__",__FUNCTION__,@"",[responseObject description]]];
  366. if ([self isDidHandelCustomStatusFun:responseObject task:task]) {
  367. return;
  368. }
  369. HLog(@"接口名称:%@,返回:%@,\n ",code,responseObject);
  370. success([self check401And403WithObject:responseObject]);
  371. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error, id _Nonnull responseObject) {
  372. [[VclCrash sharedInstance] writeContent:[NSString stringWithFormat:@"%s__error = %@_data = %@__",__FUNCTION__,[error description],[responseObject description]]];
  373. if ([self isDidHandelCustomStatusFun:responseObject task:task]) {
  374. return;
  375. }
  376. faildStr(error);
  377. }];
  378. }
  379. #pragma mark hxd 重新封装 afnetwork post 请求
  380. - (void)CommonPostCallBackCode:(NSString*)code Parameters:(NSDictionary *_Nullable)dict success:(Success)success failure:(Faild)failure
  381. {
  382. HLog(@"接口名称:%@,\n 参数:%@\n",code,dict);
  383. NSString *url = [NSString stringWithFormat:@"%@%@",CloudService,code];
  384. NSDictionary *dictLogin = [self getLoginInfo];
  385. if (dictLogin && [[dictLogin allKeys] containsObject:@"token"])
  386. {
  387. NSString *tokenStr = [dictLogin objectForKey:@"token"];
  388. [manager.requestSerializer setValue:tokenStr forHTTPHeaderField:@"Authorization"];
  389. [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
  390. // HLog(@"URL:%@---Params:%@---token:%@", url, dict, tokenStr);
  391. }
  392. else
  393. {
  394. NSDictionary *responseObject = @{@"status" : @(6013), @"msg" : @"设备已在别处登录", @"data" : @""};
  395. mainBlock(^{
  396. success(responseObject);
  397. [self showLoginOutTip:MSG];
  398. });
  399. return;
  400. }
  401. if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable)
  402. {// 无网络状态
  403. success(self.networkErrorDict);
  404. return;
  405. }
  406. // // RSA签名
  407. // if ([url containsString:GetOrderNumberAPI] ||
  408. // [url containsString:STARCOINPAYAPI] ||
  409. // [url containsString:GETAIRPAYCONNECTIONAPI] ||
  410. // [url containsString:GETWXPAYCONNECTIONAPI]) {
  411. //
  412. // NSString *jsonStr = [RSATool sortArrWithDictionary:dict];
  413. // NSString *signStr = [RSATool RSASignEncrypt:jsonStr key:Const_Pay_PrivateKey];
  414. // signStr = [RSATool deleteNewlineCharactersWithString:signStr];
  415. // if (signStr.length == 0) {
  416. // dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  417. // [self CommonPostCallBackCode:code Parameters:dict success:success failure:failure];
  418. // });
  419. // return;
  420. // }
  421. // [manager.requestSerializer setValue:signStr forHTTPHeaderField:@"sign"];
  422. //
  423. // }else { // 清空签名
  424. [manager.requestSerializer setValue:@"" forHTTPHeaderField:@"sign"];
  425. // }
  426. [manager POST:url parameters:dict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  427. HLog(@"接口名称:%@ 接口返回:%@,\n ",code,responseObject);
  428. [[VclCrash sharedInstance] writeContent:[NSString stringWithFormat:@"%s__error = %@_data = %@__",__FUNCTION__,@"",[responseObject description]]];
  429. if ([self isDidHandelCustomStatusFun:responseObject task:task]) {
  430. return;
  431. }
  432. success([self check401And403WithObject:responseObject]);
  433. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error, id _Nonnull responseObject) {
  434. [[VclCrash sharedInstance] writeContent:[NSString stringWithFormat:@"%s__error = %@_data = %@__",__FUNCTION__,[error description],[responseObject description]]];
  435. if ([self isDidHandelCustomStatusFun:responseObject task:task]) {
  436. return;
  437. }
  438. failure(error);
  439. }];
  440. }
  441. - (void)CommonPostCallBackCode:(NSString*)code Params:(id)dict success:(Success)success failure:(Faild)failure
  442. {
  443. HLog(@"接口名称:%@,\n 参数:%@\n",code,dict);
  444. NSString *url = [NSString stringWithFormat:@"%@%@",CloudService,code];
  445. NSDictionary *dictLogin = [self getLoginInfo];
  446. if (dictLogin && [[dictLogin allKeys] containsObject:@"token"])
  447. {
  448. NSString *tokenStr = [dictLogin objectForKey:@"token"];
  449. [manager.requestSerializer setValue:tokenStr forHTTPHeaderField:@"Authorization"];
  450. [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
  451. // HLog(@"URL:%@---Params:%@---token:%@", url, dict, tokenStr);
  452. }
  453. else
  454. {
  455. NSDictionary *responseObject = @{@"status" : @(6013), @"msg" : @"设备已在别处登录", @"data" : @""};
  456. mainBlock(^{
  457. success(responseObject);
  458. [self showLoginOutTip:MSG];
  459. });
  460. return;
  461. }
  462. if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable)
  463. {// 无网络状态
  464. success(self.networkErrorDict);
  465. return;
  466. }
  467. [manager POST:url parameters:dict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  468. HLog(@"接口名称:%@ 接口返回:%@,\n ",code,responseObject);
  469. [[VclCrash sharedInstance] writeContent:[NSString stringWithFormat:@"%s__error = %@_data = %@__",__FUNCTION__,@"",[responseObject description]]];
  470. if ([self isDidHandelCustomStatusFun:responseObject task:task]) {
  471. return;
  472. }
  473. success([self check401And403WithObject:responseObject]);
  474. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error, id _Nonnull responseObject) {
  475. [[VclCrash sharedInstance] writeContent:[NSString stringWithFormat:@"%s__error = %@_data = %@__",__FUNCTION__,[error description],[responseObject description]]];
  476. if ([self isDidHandelCustomStatusFun:responseObject task:task]) {
  477. return;
  478. }
  479. failure(error);
  480. }];
  481. }
  482. - (void)commonPostCanWithOutTokenCallBackCode:(NSString*)code Parameters:(NSDictionary*)dict success:(Success)success failure:(Faild)failure
  483. {
  484. HLog(@"接口名称:%@,\n 参数:%@\n",code,dict);
  485. NSString *url = [NSString stringWithFormat:@"%@%@",CloudService,code];
  486. NSDictionary *dictLogin = [self getLoginInfo];
  487. if (dictLogin && [[dictLogin allKeys] containsObject:@"token"])
  488. {
  489. NSString *tokenStr = [dictLogin objectForKey:@"token"];
  490. [manager.requestSerializer setValue:tokenStr forHTTPHeaderField:@"Authorization"];
  491. [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
  492. // HLog(@"URL:%@---Params:%@---token:%@", url, dict, tokenStr);
  493. }
  494. // if ([code isEqualToString:RegAPI] && [[dict allKeys] containsObject:@"registerTime"]){
  495. // NSString *timeStr = [dict objectForKey:@"registerTime"];
  496. // NSMutableString *data1 = [RSATool sha256_64:[@"Register_SZX_2023:" stringByAppendingString:timeStr]];
  497. // [manager.requestSerializer setValue:data1 forHTTPHeaderField:@"registerSign"];
  498. // }
  499. if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable)
  500. {// 无网络状态
  501. success(self.networkErrorDict);
  502. return;
  503. }
  504. [manager POST:url parameters:dict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  505. [[VclCrash sharedInstance] writeContent:[NSString stringWithFormat:@"%s__error = %@_data = %@__",__FUNCTION__,@"",[responseObject description]]];
  506. HLog(@"接口名称:%@ 接口返回:%@,\n ",code,responseObject);
  507. if ([self isDidHandelCustomStatusFun:responseObject task:task]) {
  508. return;
  509. }
  510. success([self check401And403WithObject:responseObject]);
  511. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error, id _Nonnull responseObject) {
  512. [[VclCrash sharedInstance] writeContent:[NSString stringWithFormat:@"%s__error = %@_data = %@__",__FUNCTION__,[error description],[responseObject description]]];
  513. if ([self isDidHandelCustomStatusFun:responseObject task:task]) {
  514. return;
  515. }
  516. failure(error);
  517. }];
  518. }
  519. #pragma mark hxd 重新封装 afnetwork put 请求
  520. - (void)CommonPutCallBackCode:(NSString*)code Parameters:(NSDictionary*)dict success:(Success)success failure:(Faild)failure
  521. {
  522. HLog(@"接口名称:%@,\n 参数:%@\n",code,dict);
  523. NSString *url = [NSString stringWithFormat:@"%@%@",CloudService,code];
  524. NSDictionary *dictLogin = [self getLoginInfo];
  525. if (dictLogin && [[dictLogin allKeys] containsObject:@"token"])
  526. {
  527. NSString *tokenStr = [dictLogin objectForKey:@"token"];
  528. [manager.requestSerializer setValue:tokenStr forHTTPHeaderField:@"Authorization"];
  529. [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
  530. // HLog(@"URL:%@---Params:%@---token:%@", url, dict, tokenStr);
  531. }
  532. else
  533. {
  534. NSDictionary *responseObject = @{@"status" : @(6013), @"msg" : @"设备已在别处登录", @"data" : @""};
  535. mainBlock(^{
  536. success(responseObject);
  537. [self showLoginOutTip:MSG];
  538. });
  539. return;
  540. }
  541. if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable)
  542. {// 无网络状态
  543. success(self.networkErrorDict);
  544. return;
  545. }
  546. [manager PUT:url parameters:dict success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  547. [[VclCrash sharedInstance] writeContent:[NSString stringWithFormat:@"%s__error = %@_data = %@__",__FUNCTION__,@"",[responseObject description]]];
  548. HLog(@"接口返回:%@,\n ",responseObject);
  549. if ([self isDidHandelCustomStatusFun:responseObject task:task]) {
  550. return;
  551. }
  552. success([self check401And403WithObject:responseObject]);
  553. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error, id _Nonnull responseObject) {
  554. [[VclCrash sharedInstance] writeContent:[NSString stringWithFormat:@"%s__error = %@_data = %@__",__FUNCTION__,[error description],[responseObject description]]];
  555. if ([self isDidHandelCustomStatusFun:responseObject task:task]) {
  556. return;
  557. }
  558. failure(error);
  559. }];
  560. }
  561. - (void)commonPutCanWithoutTokenCallBackCode:(NSString*)code Parameters:(NSDictionary*)dict success:(Success)success failure:(Faild)failure
  562. {
  563. HLog(@"接口名称:%@,\n 参数:%@\n",code,dict);
  564. NSString *url = [NSString stringWithFormat:@"%@%@",CloudService,code];
  565. if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable)
  566. {// 无网络状态
  567. success(self.networkErrorDict);
  568. return;
  569. }
  570. [manager PUT:url parameters:dict success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  571. [[VclCrash sharedInstance] writeContent:[NSString stringWithFormat:@"%s__error = %@_data = %@__",__FUNCTION__,@"",[responseObject description]]];
  572. HLog(@"接口返回:%@,\n ",responseObject);
  573. if ([self isDidHandelCustomStatusFun:responseObject task:task]) {
  574. return;
  575. }
  576. success([self check401And403WithObject:responseObject]);
  577. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error, id _Nonnull responseObject) {
  578. [[VclCrash sharedInstance] writeContent:[NSString stringWithFormat:@"%s__error = %@_data = %@__",__FUNCTION__,[error description],[responseObject description]]];
  579. if ([self isDidHandelCustomStatusFun:responseObject task:task]) {
  580. return;
  581. }
  582. failure(error);
  583. }];
  584. }
  585. #pragma mark hxd 重新封装 afnetwork delete 请求
  586. - (void)CommonDeleteCallBackCode:(NSString*)code Parameters:(NSDictionary *_Nullable)dict success:(Success)success failure:(Faild)failure
  587. {
  588. HLog(@"接口名称:%@,\n 参数:%@\n",code,dict);
  589. NSString *url = [NSString stringWithFormat:@"%@%@",CloudService,code];
  590. NSDictionary *dictLogin = [self getLoginInfo];
  591. if (dictLogin && [[dictLogin allKeys] containsObject:@"token"])
  592. {
  593. NSString *tokenStr = [dictLogin objectForKey:@"token"];
  594. [manager.requestSerializer setValue:tokenStr forHTTPHeaderField:@"Authorization"];
  595. [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
  596. // HLog(@"URL:%@---Params:%@---token:%@", url, dict, tokenStr);
  597. }
  598. else
  599. {
  600. NSDictionary *responseObject = @{@"status" : @(6013), @"msg" : @"设备已在别处登录", @"data" : @""};
  601. mainBlock(^{
  602. success(responseObject);
  603. [self showLoginOutTip:MSG];
  604. });
  605. return;
  606. }
  607. if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable)
  608. {// 无网络状态
  609. success(self.networkErrorDict);
  610. return;
  611. }
  612. [manager DELETE:url parameters:dict success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  613. [[VclCrash sharedInstance] writeContent:[NSString stringWithFormat:@"%s__error = %@_data = %@__",__FUNCTION__,@"",[responseObject description]]];
  614. HLog(@"接口返回:%@,\n ",responseObject);
  615. if ([self isDidHandelCustomStatusFun:responseObject task:task]) {
  616. return;
  617. }
  618. success([self check401And403WithObject:responseObject]);
  619. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error, id _Nonnull responseObject) {
  620. [[VclCrash sharedInstance] writeContent:[NSString stringWithFormat:@"%s__error = %@_data = %@__",__FUNCTION__,[error description],[responseObject description]]];
  621. if ([self isDidHandelCustomStatusFun:responseObject task:task]) {
  622. return;
  623. }
  624. failure(error);
  625. }];
  626. }
  627. #pragma - mark 证书相关
  628. - (AFSecurityPolicy*)customSecurityPolicy
  629. {
  630. // // /先导入证书
  631. // NSString *cerName = @"newrelease";
  632. // if ([@"https://client.phone.androidscloud.com" isEqualToString:CloudService])
  633. // {
  634. // cerName = @"newrelease";
  635. // }
  636. // else if ([@"https://prese.phone.androidscloud.com" isEqualToString:CloudService])
  637. // {
  638. // cerName = @"newrelease";
  639. // }
  640. // NSString *cerPath = [[NSBundle mainBundle] pathForResource:cerName ofType:@"cer"];//证书的路径
  641. // NSData *certData = [NSData dataWithContentsOfFile:cerPath];
  642. // AFSSLPinningModeCertificate 使用证书验证模式、、、//AFSSLPinningModeNone 不使用SSLPinning //AFSSLPinningModeCertificate 使用SSLPinning
  643. AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
  644. // if ([@"https://test.androidscloud.com" isEqualToString:CloudService])
  645. // {
  646. // securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
  647. // }
  648. // else if ([@"https://pre.androidscloud.com" isEqualToString:CloudService])
  649. // {
  650. // securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
  651. // }
  652. // else if ([@"https://a.androidscloud.com" isEqualToString:CloudService])
  653. // {
  654. // securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
  655. // }
  656. // allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO
  657. // 如果是需要验证自建证书,需要设置为YES
  658. securityPolicy.allowInvalidCertificates = NO;
  659. //validatesDomainName 是否需要验证域名,默认为YES;
  660. //假如证书的域名与你请求的域名不一致,需把该项设置为NO;如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。
  661. //置为NO,主要用于这种情况:客户端请求的是子域名,而证书上的是另外一个域名。因为SSL证书上的域名是独立的,假如证书上注册的域名是www.google.com,那么mail.google.com是无法验证通过的;当然,有钱可以注册通配符的域名*.google.com,但这个还是比较贵的。
  662. //如置为NO,建议自己添加对应域名的校验逻辑。
  663. securityPolicy.validatesDomainName = YES;
  664. // securityPolicy.pinnedCertificates = [[NSSet alloc] initWithObjects:certData, nil];
  665. return securityPolicy;
  666. }
  667. // 清空Cookie
  668. - (void)clearCookies {
  669. NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];
  670. NSArray *cookieArray = [NSArray arrayWithArray:[cookieJar cookies]];
  671. for(id obj in cookieArray)
  672. {
  673. [cookieJar deleteCookie:obj];
  674. }
  675. }
  676. #pragma mark 云手机列表缓存信息
  677. - (void)setCloudPhoneListModel:(CloudPhoneListModel *)cloudPhoneListModel {
  678. _cloudPhoneListModel = cloudPhoneListModel;
  679. // 1、保存或更新云手机列表缓存数据
  680. // [HWDataManager saveCloudPhoneList];
  681. }
  682. #pragma mark 直接使用外部链接请求数据 请求
  683. - (void)commonGetWithUrl:(NSString *)url Parameters:(NSDictionary *_Nullable)dic success:(Success)success failure:(Faild)faildStr
  684. {
  685. if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable)
  686. {// 无网络状态
  687. success(self.networkErrorDict);
  688. return;
  689. }
  690. HLog(@"接口名称:%@,\n 参数:%@\n",url,dic);
  691. [manager GET:url parameters:dic progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  692. [[VclCrash sharedInstance] writeContent:[NSString stringWithFormat:@"%s__error = %@_data = %@__",__FUNCTION__,@"",[responseObject description]]];
  693. if ([self isDidHandelCustomStatusFun:responseObject task:task]) {
  694. return;
  695. }
  696. HLog(@"接口名称:%@,返回:%@,\n ",url,responseObject);
  697. success([self check401And403WithObject:responseObject]);
  698. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error, id _Nonnull responseObject) {
  699. [[VclCrash sharedInstance] writeContent:[NSString stringWithFormat:@"%s__error = %@_data = %@__",__FUNCTION__,[error description],[responseObject description]]];
  700. if ([self isDidHandelCustomStatusFun:responseObject task:task]) {
  701. return;
  702. }
  703. faildStr(error);
  704. }];
  705. }
  706. //获取登录信息
  707. - (NSDictionary *)getLoginInfo {
  708. NSDictionary *loginInfoDict = [HWDataManager getObjectWithKey:Const_HWLoginDictionary];
  709. //只获取一次token 上报频繁调用获取token会奔溃)
  710. if (loginInfoDict && [[loginInfoDict allKeys] containsObject:@"token"])
  711. {
  712. if ([HWDataManager getStringWithKey:@"XD_getLoginInfo"].length == 0) {
  713. NSString *tokenStr = [loginInfoDict objectForKey:@"token"];
  714. [HWDataManager setStringWithKey:@"XD_getLoginInfo" value:tokenStr];
  715. }
  716. }
  717. return loginInfoDict;
  718. }
  719. //登出操作
  720. - (BOOL)logout
  721. {
  722. [[NSNotificationCenter defaultCenter] postNotificationName:NotNameAlertClose object:self];
  723. //清除广告的token,重登时,重新获取广告token
  724. [HWDataManager setStringWithKey:@"XD_getLoginInfo" value:@""];
  725. NSDictionary *dictLogin = self.getLoginInfo;
  726. [[NSNotificationCenter defaultCenter] postNotificationName:WebSocketDisconnectNotification object:dictLogin];
  727. BOOL resultSetLoginInfo = NO;
  728. if ([self setLoginInfo:[NSDictionary new]])
  729. {
  730. resultSetLoginInfo = YES;
  731. }
  732. else
  733. {
  734. if ([self setLoginInfo:[NSDictionary new]])
  735. {
  736. resultSetLoginInfo = YES;
  737. }
  738. else
  739. {
  740. resultSetLoginInfo = [self setLoginInfo:[NSDictionary new]];
  741. }
  742. }
  743. [self.useBaseInfo removeAllObjects];
  744. self.useBaseInfo = nil;
  745. [self.cloudPhoneListModel.diskInfo removeAllObjects];
  746. self.cloudPhoneListModel.diskInfo = nil;
  747. [self.useLeftInfo removeAllObjects];
  748. self.useLeftInfo = nil;
  749. [self.manager.requestSerializer setValue:nil forHTTPHeaderField:@"Authorization"];
  750. [[NSNotificationCenter defaultCenter] postNotificationName:ChangeAccountNotification object:nil];
  751. //清空保存的账号
  752. [HWDataManager setStringWithKey:Const_HWAccountPhoneNumber value:@""];
  753. return resultSetLoginInfo;
  754. }
  755. #pragma - mark 设置用户登录信息
  756. //设置登录信息
  757. - (BOOL)setLoginInfo:(NSDictionary *)loginInfo {
  758. // 保存登录字典
  759. [HWDataManager setObjectWithKey:Const_HWLoginDictionary value:loginInfo];
  760. // 保存登录账号
  761. NSString *number = loginInfo[@"account"];
  762. [HWDataManager setStringWithKey:Const_HWAccountPhoneNumber value:number];
  763. return YES;
  764. }
  765. //保存当前设备漂浮窗位置信息
  766. - (void)saveDviceDriftInfoWith:(CGFloat)pointx ponitY:(CGFloat)ponity hidden:(BOOL)hidden deviceSN:(NSString *)sn
  767. {
  768. NSDictionary *dictLogin = [[UseAccountManage shareInstance] getLoginInfo];
  769. if ([[dictLogin allKeys] containsObject:@"account"])
  770. {
  771. NSString *account = [dictLogin objectForKey:@"account"];
  772. /*数据保存到本地*/
  773. NSString *deviceDriftPath = [HWDataManager pathForDeviceDriftWithAccount:account sn:sn];
  774. NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:
  775. [NSNumber numberWithFloat:pointx],@"pointx",
  776. [NSNumber numberWithFloat:ponity],@"pointy",
  777. [NSNumber numberWithBool:hidden],@"hidden",nil];
  778. [dict writeToFile:deviceDriftPath atomically:YES];
  779. }
  780. }
  781. //保存当前设备sn信息
  782. - (NSDictionary *)getDviceDriftInfoWithdeviceSN:(NSString *)sn
  783. {
  784. NSDictionary *dictLogin = [[UseAccountManage shareInstance] getLoginInfo];
  785. NSDictionary *dict = nil;
  786. if ([[dictLogin allKeys] containsObject:@"account"])
  787. {
  788. NSString *account = [dictLogin objectForKey:@"account"];
  789. /*数据保存到本地*/
  790. NSString *deviceDriftPath = [HWDataManager pathForDeviceDriftWithAccount:account sn:sn];
  791. dict = [[NSDictionary alloc] initWithContentsOfFile:deviceDriftPath];
  792. }
  793. return dict;
  794. }
  795. - (void)extensionCloudPhoneToGetDeviceStatesWithDeviceId:(NSInteger )deviceId coordinatesLat:(NSString *)coordinatesLat coordinatesLng:(NSString *)coordinatesLng success:(Success)success faild:(Faild)faildStr
  796. {
  797. self.mCloudService = CloudService;
  798. self.mRequstAPI = GETDEVICESTATESAPI;
  799. NSDictionary *parameters;
  800. NSDictionary *dictLogin = [self getLoginInfo];
  801. if (dictLogin && [[dictLogin allKeys] containsObject:@"token"])
  802. {
  803. NSString *tokenStr = [dictLogin objectForKey:@"token"];
  804. [self.manager.requestSerializer setValue:tokenStr forHTTPHeaderField:@"Authorization"];
  805. }
  806. else
  807. {
  808. return;
  809. }
  810. NSString *userOperatorNetwork = [iPhone getCarrierInfo];
  811. parameters = [[NSDictionary alloc] initWithObjectsAndKeys:[NSNumber numberWithInt:1],@"deviceStatus",[NSNumber numberWithInteger:deviceId],@"userCardId", coordinatesLat, @"coordinatesLat", coordinatesLng, @"coordinatesLng", userOperatorNetwork, @"userOperatorNetwork", nil];
  812. [self requestWithPostparameters:parameters complteteBlock:^(NSError *error , id data){
  813. [[VclCrash sharedInstance] writeContent:[NSString stringWithFormat:@"%s__error = %@_data = %@__",__FUNCTION__,[error description],[data description]]];
  814. if (error)
  815. {
  816. faildStr(error);
  817. }
  818. else
  819. {
  820. success(data);
  821. }
  822. }];
  823. }
  824. //获取云手机推流页面指令通道URL
  825. - (NSString *)getInstructionsChannelUrlWithInternetHttp:(NSString *)internetHttp localIp:(NSString *)localIp cardToken:(NSString *)cardToken
  826. {
  827. NSDictionary *dictLogin = [[UseAccountManage shareInstance] getLoginInfo];
  828. if ([[dictLogin allKeys] containsObject:@"userName"]) {
  829. NSString *tokenStr = @"";
  830. if ([[dictLogin allKeys] containsObject:@"token"]) {
  831. tokenStr = [dictLogin objectForKey:@"token"];
  832. }
  833. NSString *url = [NSString stringWithFormat:@"ws://%@/businessChannel?cardIp=%@&token=%@&type=directives",internetHttp,localIp,cardToken];
  834. return url;
  835. }else
  836. {
  837. return nil;
  838. }
  839. }
  840. //获取云手机推流页面业务通道URL
  841. - (NSString *)getBusinessChannelUrlWithInternetHttp:(NSString *)internetHttp localIp:(NSString *)localIp cardToken:(NSString *)cardToken
  842. {
  843. NSDictionary *dictLogin = [[UseAccountManage shareInstance] getLoginInfo];
  844. if ([[dictLogin allKeys] containsObject:@"userName"]) {
  845. NSString *tokenStr = @"";
  846. if ([[dictLogin allKeys] containsObject:@"token"]) {
  847. tokenStr = [dictLogin objectForKey:@"token"];
  848. }
  849. NSString *url = [NSString stringWithFormat:@"ws://%@/businessChannel?cardIp=%@&token=%@&type=business",internetHttp,localIp,cardToken];
  850. return url;
  851. }else{
  852. return nil;
  853. }
  854. }
  855. /**
  856. * @brief 埋点
  857. *
  858. * @param array 参数,埋点数据
  859. *
  860. *
  861. */
  862. - (void)extensionPublicToBuryPointPostCallBackCode:(NSString*)code Parameters:(NSMutableArray*)array success:(Success)success failure:(Faild)failure
  863. {
  864. HLog(@"接口名称:%@,\n 参数:%@\n",code,array);
  865. NSString *url = [NSString stringWithFormat:@"%@%@",CloudService,code];
  866. NSDictionary *dictLogin = [self getLoginInfo];
  867. // 用户登录
  868. if (dictLogin && [[dictLogin allKeys] containsObject:@"token"])
  869. {
  870. NSString *tokenStr = [dictLogin objectForKey:@"token"];
  871. [self.manager.requestSerializer setValue:tokenStr forHTTPHeaderField:@"Authorization"];
  872. }
  873. [self.manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
  874. //设备类型 ,1:Android、2:ios、3:PC,必传
  875. [self.manager.requestSerializer setValue:@"2" forHTTPHeaderField:@"platform"];
  876. //渠道,必传
  877. [self.manager.requestSerializer setValue:@"app store" forHTTPHeaderField:@"channel"];
  878. // app版本
  879. NSString *version = [NSString stringWithFormat:@"v%@", [iPhone appVersion]];
  880. [self.manager.requestSerializer setValue:version forHTTPHeaderField:@"versionName"];
  881. if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable)
  882. {// 无网络状态
  883. success(self.networkErrorDict);
  884. return;
  885. }
  886. [self.manager POST:url parameters:array progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  887. HLog(@"接口名称:%@ 接口返回:%@,\n ",code,responseObject);
  888. if ([self isDidHandelCustomStatusFun:responseObject task:task]) {
  889. return;
  890. }
  891. success(responseObject);
  892. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error, id _Nonnull responseObject) {
  893. if ([self isDidHandelCustomStatusFun:responseObject task:task]) {
  894. return;
  895. }
  896. failure(error);
  897. }];
  898. }
  899. @end