| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- //
- // MOOtherNetAPIClient.m
- // MiMoLive
- //
- // Created by SuperC on 2025/4/8.
- //
- #import "MOOtherNetAPIClient.h"
- #import "MOAPIUrl.h"
- static MOOtherNetAPIClient *_sharedClient = nil;
- static dispatch_once_t onceToken;
- //默认的请求超时时间
- const static NSTimeInterval kRequestTimeout = 30.0;
- @implementation MOOtherNetAPIClient
- + (MOOtherNetAPIClient *)sharedJsonClient{
- dispatch_once(&onceToken, ^
- {
- _sharedClient = [[MOOtherNetAPIClient alloc] initWithBaseURL:[NSURL URLWithString:kNetPath_Base]];
- });
- return _sharedClient;
- }
- + (MOOtherNetAPIClient *)jsonClientWithBaseUrl:(NSString *)baseUrl{
- if ([baseUrl isEqualToString:@""] ||baseUrl == nil)
- {
- _sharedClient = [[MOOtherNetAPIClient alloc] initWithBaseURL:[NSURL URLWithString:kNetPath_Base]];
- }
- else
- {
- _sharedClient = [[MOOtherNetAPIClient alloc] initWithBaseURL:[NSURL URLWithString:baseUrl]];
- }
- return _sharedClient;
- }
- + (void)attempDealloc{
- onceToken = 0;
- _sharedClient = nil;
-
- MOLogV(@"setHttpHeaderData:::: dealloc");
- }
- - (id)initWithBaseURL:(NSURL *)url{
- self = [super initWithBaseURL:url];
- if (!self)
- {
- return nil;
- }
-
- self.responseSerializer = [AFJSONResponseSerializer serializer];
- self.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/plain", @"text/javascript", @"text/json", @"text/html",nil];
-
- self.requestSerializer = [AFJSONRequestSerializer serializer];
- self.requestSerializer.timeoutInterval = kRequestTimeout;
- // [self.requestSerializer setValue:@"Content-Type" forHTTPHeaderField:@"application/json; charset=utf-8"];
-
- //证书校验模式为None
- AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
- securityPolicy.allowInvalidCertificates = YES;
- securityPolicy.validatesDomainName = NO;
- self.securityPolicy = securityPolicy;
- return self;
- }
- - (void)requestJsonDataWithPath:(NSString *)aPath withParams:(NSDictionary*)params withMethodType:(int)networkMethodInt andBlock:(void (^)(id data, NSError *error))block
- {
- [self requestJsonDataWithPath:aPath withParams:params withMethodType:networkMethodInt requestTimeout:kRequestTimeout andBlock:block];
- }
- - (void)requestJsonDataWithPath:(NSString *)aPath withParams:(NSDictionary*)params withMethodType:(int)networkMethodInt requestTimeout:(NSTimeInterval)requestTimeout andBlock:(void (^)(id data, NSError *error))block{
- //判断请求超时时间是否符合要求
- if (fabs(requestTimeout - self.requestSerializer.timeoutInterval) > 0.1)
- {
- self.requestSerializer.timeoutInterval = requestTimeout;
- }
-
- [self setHttpHeaderData];
-
- //发起请求
- switch (networkMethodInt)
- {
- case Get:
- {
- [self GET:aPath parameters:params headers:nil progress:^(NSProgress * _Nonnull downloadProgress)
- {
-
- }
- success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject)
- {
- //添加接口访问时长计算
- NSTimeInterval apiEndTime = [[NSDate date] timeIntervalSince1970];
- NSUInteger endTimestamp = apiEndTime * 1000;
-
-
- //DDLogVerbose(@"=====> %@ response:%@",aPath,responseObject);
- id error = [self handleResponse:responseObject];
- if (error)
- {
-
- block(nil, error);
- }
- else
- {
- block(responseObject, nil);
- }
- }
- failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error)
- {
- block(nil, error);
- }];
- break;
- }
- case Post:
- {
- [self POST:aPath parameters:params headers:nil progress:^(NSProgress * _Nonnull uploadProgress)
- {
-
- }
- success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject)
- {
- id error = [self handleResponse:responseObject];
- if (error)
- {
- block(nil, error);
- }
- else
- {
- block(responseObject, nil);
- }
- }
- failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error)
- {
- block(nil, error);
- }];
- break;
- }
- case Put:
- {
- [self PUT:aPath parameters:params headers:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject)
- {
-
- id error = [self handleResponse:responseObject];
- if (error)
- {
- block(nil, error);
- }
- else
- {
- block(responseObject, nil);
- }
- }
- failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error)
- {
- block(nil, error);
- }];
- break;
- }
- case Delete:
- {
- [self DELETE:aPath parameters:params headers:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject)
- {
- id error = [self handleResponse:responseObject];
- if (error)
- {
- block(nil, error);
- }
- else
- {
- block(responseObject, nil);
- }
- }
- failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error)
- {
- block(nil, error);
- }];
- break;
- }
- default:
- break;
- }
- }
- #pragma mark -- 错误码处理 --
- - (id)handleResponse:(id)responseJSON
- {
- NSError *error = nil;
-
- if ([responseJSON isKindOfClass:[NSArray class]])
- {
- return error;
- }
-
- //code为非0值时,表示有错
- NSNumber *resultCode = [responseJSON valueForKeyPath:@"ErrorCode"];
- if (resultCode.intValue!=0)
- {
- error = [NSError errorWithDomain:kNetPath_Base code:resultCode.intValue userInfo:responseJSON];
- return error;
- }
- return error;
- }
- - (void)setHttpHeaderData{
- NSString *currentLanguage = [NSBundle currentLanguage];
- [self.requestSerializer setValue:currentLanguage forHTTPHeaderField:@"Accept-Language"];
-
- // 拼接客户 ID 和客户密钥
- NSString *plainCredentials = [NSString stringWithFormat:@"%@:%@", AgoraAPIID, AgoraAPISecret];
-
- // 使用 base64 编码
- NSData *plainData = [plainCredentials dataUsingEncoding:NSUTF8StringEncoding];
- NSString *base64Credentials = [plainData base64EncodedStringWithOptions:0];
-
- // 创建 Authorization Header
- NSString *authorizationHeader = [NSString stringWithFormat:@"Basic %@", base64Credentials];
- [self.requestSerializer setValue:authorizationHeader forHTTPHeaderField:@"Authorization"];
- }
- @end
|