cdts/xdts-ios 3/TreeHole/CYHResetCode/CYH/NetworkingTool/NetworkingManager.m

470 lines
19 KiB
Mathematica
Raw Permalink Normal View History

2023-07-27 09:20:00 +08:00
//
// NetworkingManager.m
// SRKnow
//
// Created by CYH on 2020/7/21.
// Copyright © 2020 shirong. All rights reserved.
//
#import "NetworkingManager.h"
#import "NetworkingTool.h"
#import <AFNetworkActivityIndicatorManager.h>
#import "NetworkingInterface.h"
@interface NetworkingManager ()
///
@property(nonatomic, readonly, assign)BOOL isDynamicMainHost;
///
@property(nonatomic, copy)NSString *mainHost;
@property(nonatomic, strong)NSMutableDictionary *scheduledRequestHeaders;
@end
@implementation NetworkingManager
@synthesize mainHost = _mainHost;
#pragma mark -
///
- (void)scheduledInit {
_isDynamicMainHost = NO;
self.networkingContextType = NetworkingContextType_Release;
///退
__weak typeof(self) weakSelf = self;
[NSNotificationCenter.defaultCenter addObserverForName:LoginSuccessNotification object:nil queue:nil usingBlock:^(NSNotification * _Nonnull note) {
//,
NSString *userToken = [LoginService token];
NSLog(@"CYH===%@", userToken);
[weakSelf setScheduleRequestHeader:@{
@"Authorization" : [@"Bearer " stringByAppendingString:userToken]
}];
}];
[NSNotificationCenter.defaultCenter addObserverForName:LogoutSuccessNotification object:nil queue:nil usingBlock:^(NSNotification * _Nonnull note) {
//退,
[weakSelf setScheduleRequestHeader:nil];
}];
NSString *userToken = [LoginService token];
if (userToken.length) {
[weakSelf setScheduleRequestHeader:@{
@"Authorization" : [@"Bearer " stringByAppendingString:userToken]
}];
}
[NetworkingTool setRequestSerializer:CYHRequestSerializerHTTP];
[NetworkingTool setRequestTimeout:8.0f];
[NetworkingTool setResponseSerializer:CYHResponseSerializerJSON];
// [NetworkingTool.sessionManager.requestSerializer setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
/*
_isDynamicMainHost = NO;
/
NSString *token = WLUserManager.share.token.token;
token = [NSString stringWithFormat:@"Bearer%@", token];
_scheduledHeaders = @{
@"App" : @"iOS",
@"App-Model" : [WLTool getCurrentDeviceModel],
@"App-Version" : VERSION_CODE,
@"iOS_App_Version" : VERSION_CODE,
@"deviceID" : [WLTool currentIdentifier],
@"App-Channel" : @"app_store",
@"User-Agent" : @"iOS",
@"Authorization" : token
};
///-JSON
AFJSONRequestSerializer *jsonRequestSerializer = [AFJSONRequestSerializer serializer];
//
httpRequestSerializer.timeoutInterval = 8.0f;
NetworkingTool.sessionManager.requestSerializer = httpRequestSerializer;
[NetworkingTool.sessionManager.requestSerializer setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
/// - HTTP
AFHTTPResponseSerializer *httpResponseSerializer = [AFHTTPResponseSerializer serializer];
//response
httpResponseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/html", @"text/json", @"text/javascript", @"text/plain", @"image/jpeg", nil];
NetworkingTool.sessionManager.responseSerializer = httpResponseSerializer;
*/
/**
* - AFSecurityPolicy - AFSSLPinningMode
* AFSSLPinningModeNone(): 使 CA
* AFSSLPinningModePublicKey: PublicKey
* AFSSLPinningModeCertificate:
// 使
NetworkingTool.sessionManager.securityPolicy.allowInvalidCertificates = YES;
// domain
NetworkingTool.sessionManager.securityPolicy.validatesDomainName = NO;
//
[AFNetworkActivityIndicatorManager sharedManager].enabled = YES;
*/
}
+ (NSString *)fullUrlWithPath:(NSString *)path {
//V2,V1
return [[self.shared mainHost] stringByAppendingFormat:@"/api/%@", path];
}
#pragma mark -
//#ifdef DEBUG
/////: ;
//- (NetworkingContextType)getDebugNetworkingContextType {
// return NetworkingContextType_Test;
//}
//#endif
///
- (void)setNetworkingContextType:(NetworkingContextType)networkingContextType {
#ifdef DEBUG //
#else //
// networkingContextType = NetworkingContextType_Release;
#endif
// _networkingContextType = NetworkingContextType_Test;
_networkingContextType = networkingContextType;
if (!_isDynamicMainHost) {
///
self.mainHost = BaseHostUrl;
return;
}
///
if (networkingContextType == NetworkingContextType_Release) {
///
///
NSString *host = @"http://chat.yuantiyu.com";
if (!host) {
///nil, self.mainHost,
[self requestMainHost];
}
return;
}
if (networkingContextType == NetworkingContextType_PreRelease) {
///
self.mainHost = @"http://chat.yuantiyu.com";
return;
}
///
self.mainHost = @"http://chat.yuantiyu.com";
}
///
//- (NSString *)mainHost {
// if (!_mainHost) {
//#ifdef DEBUG //
// self.networkingContextType = [self getDebugNetworkingContextType];
//#else //
// self.networkingContextType = NetworkingContextType_Release;
//#endif
// }
// return _mainHost;
//}
//+ (NSDictionary *)scheduledHeaders {
// NSMutableDictionary *dicM = [NSMutableDictionary dictionary];
//// dicM[@"X-Token"] = LQInteractorManager.sharedInstance.userInfoManager.userInfoModel.token;
// return dicM;
//}
#pragma mark - ()
///, ? (,) : ()
- (void)requestMainHost {
[NetworkingTool BasePOST:@"" parameters:nil headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
}];
}
#pragma mark - POST
/**
* _POST
* @param targetUrl url
* @param paramDic
* @param successBlock
* @param failureBlock
*/
+ (nullable NSURLSessionDataTask *)scheduledPOST:(NSString *)targetUrl parameters:(nullable id)paramDic success:(nullable void (^)(NSURLSessionDataTask *task, NetResponseModel* _Nullable responseModel))successBlock failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failureBlock {
__weak typeof(self) weakSelf = self;
NSString *fullUrl = [self fullUrlWithPath:targetUrl];
NSMutableDictionary *paramDicM = [NSMutableDictionary dictionaryWithDictionary:paramDic];
///
[weakSelf scheduledParam:paramDicM];
return [NetworkingTool BasePOST:fullUrl parameters:paramDicM headers:NetworkingManager.shared.scheduledRequestHeaders progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
///
NetResponseModel *responseModel = [weakSelf modelWithJSON:responseObject];
/*
if (responseModel.code == 1002) {
///
[GraceHudTool.sharedInstance showText:responseModel.msg inView:UIApplication.sharedApplication.keyWindow];
// [LQInteractorManager showLandingContainerViewControllerForWindowsRootViewController:LQLandingShowType_Landing];
return;
}
if (responseModel.code == 1003) {
///
[GraceHudTool.sharedInstance showText:responseModel.msg inView:UIApplication.sharedApplication.keyWindow];
return;
}
if (responseModel.code == 1001) {
///
[GraceHudTool.sharedInstance showText:responseModel.msg inView:UIApplication.sharedApplication.keyWindow];
return;
}
*/
///:
// NetResponseModel *responseDataModel = [NetResponseModel new];
// responseDataModel.code = responseModel.code;
// responseDataModel.data = responseModel.data[@"info"];
// responseDataModel.msg = responseModel.msg;
if (responseModel.code != 0) {
///
// [GraceHudTool.sharedInstance showText:responseModel.message inView:UIApplication.sharedApplication.windows.firstObject];
return;
}
if (successBlock) {
successBlock(task, responseModel);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if (failureBlock) {
failureBlock(task, error);
return;
}
// [GraceHudTool.sharedInstance showText:error.domain inView:UIApplication.sharedApplication.windows.firstObject];
}];
}
#pragma mark - GET
/**
* GET
* @param targetUrl URL
* @param paramDic
* @param successBlock
* @param failureBlock
*/
+ (nullable NSURLSessionDataTask *)scheduledGET:(NSString *)targetUrl parameters:(NSDictionary *)paramDic success:(nullable void (^)(NSURLSessionDataTask *task, NetResponseModel* _Nullable responseModel))successBlock failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failureBlock {
__weak typeof(self) weakSelf = self;
NSString *fullUrl = [self fullUrlWithPath:targetUrl];
NSMutableDictionary *paramDicM = [NSMutableDictionary dictionaryWithDictionary:paramDic];
///
[self scheduledParam:paramDicM];
return [NetworkingTool BaseGet:fullUrl parameters:paramDicM headers:NetworkingManager.shared.scheduledRequestHeaders progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
///
NetResponseModel *responseModel = [weakSelf modelWithJSON:responseObject];
if (responseModel.code != 0) {
///
// [GraceHudTool.sharedInstance showText:responseModel.message inView:UIApplication.sharedApplication.windows.firstObject];
return;
}
if (successBlock) {
successBlock(task, responseModel);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if (failureBlock) {
failureBlock(task, error);
return;
}
// [GraceHudTool.sharedInstance showText:error.domain inView:UIApplication.sharedApplication.windows.firstObject];
}];
}
///:
+ (void)scheduledParam:(NSMutableDictionary *)parameterM {
/*
NSString *const kRequestSalt = @"479b2e5623028967e78ee79aa5aa8a6613d6e4e93d83fa50252b9984af5db4e0c00e7de564d12f6aa4deec7837e2829c";
NSString *app_name = @"iOS";
NSString *app_secret = kRequestSalt;
NSString *time = [NSString stringWithFormat:@"%.0f", [[NSDate date] timeIntervalSince1970]];
[parameterM setObject:app_name forKey:@"app_name"];
[parameterM setObject:time forKey:@"time"];
[parameterM setObject:app_secret forKey:@"app_secret"];
[parameterM setObject:@"1" forKey:@"check_sign"];
//parameterMkey==>sign.
NSArray *sortKeys = [parameterM allKeysSorted];
NSMutableString *sign = [NSMutableString string];
[sortKeys enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSString *value = parameterM[obj];
if ([value isKindOfClass:NSString.class]) {
value = [value stringByURLEncode];
// value = value.wl_encodingUrlParameterString;
}
[sign appendFormat:@"%@=%@%@", obj, value, ((idx == (sortKeys.count-1)) ? @"" : @"&")];
}];
[parameterM setObject:sign.md5String forKey:@"sign"];
[parameterM removeObjectForKey:@"app_secret"];
*/
}
#pragma mark -
/// upload
/// @param url URL
/// @param data
/// @param uploadProgress
/// @param completionHandler
+ (nullable NSURLSessionUploadTask *)scheduleUploadFile:(NSString *)url fileData:(NSData *)data progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgress completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler {
// __weak typeof(self) weakSelf = self;
NSString *fullUrl = [self fullUrlWithPath:url];
// NSMutableDictionary *paramDicM = [NSMutableDictionary dictionaryWithDictionary:paramDic];
///
// [self scheduledParam:paramDicM];
return [NetworkingTool upload:fullUrl fileData:data progress:uploadProgress completionHandler:completionHandler];
}
/// upload
/// @param url URL
/// @param data
/// @param uploadProgress
/// @param completionHandler
+ (void)scheduleUploadFiles:(NSString *)url fileDatas:(NSArray <NSData *>*)datas progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgress completionHandler:(void (^)(NSArray <NSString *>*fileUrlPaths))completionHandler {
NSMutableArray *paths = [NSMutableArray array];
dispatch_queue_t globalQuene = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_t group = dispatch_group_create();
for (NSData *data in datas) {
dispatch_group_enter(group);
dispatch_async(globalQuene, ^{
[self scheduleUploadFile:url fileData:data progress:uploadProgress completionHandler:^(NSURLResponse * _Nonnull response, id _Nonnull responseObject, NSError * _Nonnull error) {
NSLog(@"%@", response);
if (!error) {
[paths addObject:responseObject];
}
dispatch_group_leave(group);
}];
});
}
//
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
NSLog(@"完成");
if (completionHandler) {
completionHandler(paths);
}
});
}
/// From
/// - POST - Form( "POST " "NSURLSessionDataTask")
/// @param URLString URLString
/// @param paramDic
/// @param headerDic
/// @param block HTTP bodyblock`AFMultipartFormData`
/// @param uploadProgress
/// @param successBlock ---> Model
/// @param failureBlock
+ (nullable NSURLSessionDataTask *)upload_POST:(NSString *)URLString parameters:(nullable id)paramDic headers:(nullable NSDictionary <NSString *, NSString *> *)headerDic constructingBodyWithBlock:(nullable void (^)(id <AFMultipartFormData> formData))block progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgress success:(nullable void (^)(NSURLSessionDataTask *task, NetResponseModel* _Nullable responseModel))successBlock failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failureBlock {
NSString *fullUrl = [self fullUrlWithPath:URLString];
// [BaseUrl stringByAppendingString:URLString];
__weak typeof(self) weakSelf = self;
return [NetworkingTool upload_BasePOST:fullUrl parameters:paramDic headers:headerDic constructingBodyWithBlock:block progress:uploadProgress success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NetResponseModel *responseModel = [weakSelf modelWithJSON:responseObject];
if (successBlock) {
successBlock(task, responseModel);
}
} failure:failureBlock];
}
+ (NetResponseModel *)modelWithJSON:(NSDictionary *)dic {
return [NetResponseModel yy_modelWithJSON:dic];
}
//MARK: - Get&Set
- (void)setScheduleRequestHeader:(NSDictionary *)reqHeader {
[self.scheduledRequestHeaders removeAllObjects];
[self.scheduledRequestHeaders setDictionary:reqHeader];
self.scheduledRequestHeaders[@"device_brand"] = @"Apple";
self.scheduledRequestHeaders[@"device_model"] = [THNetworkInterfaceService deviceModel];
self.scheduledRequestHeaders[@"app_version_name"] = [THNetworkInterfaceService version];
self.scheduledRequestHeaders[@"app_version_code"] = [THNetworkInterfaceService bundleVersion];
self.scheduledRequestHeaders[@"interface_version"] = [THNetworkInterfaceService version];;
self.scheduledRequestHeaders[@"device_platform"] = @"iOS";
self.scheduledRequestHeaders[@"os_version"] = [THNetworkInterfaceService deviceSystemVersion];
}
- (void)setMainHost:(NSString *)mainHost {
_mainHost = mainHost;
///:
[NSNotificationCenter.defaultCenter postNotificationName:MainHostURL_DidChangeNotifyKEY object:nil userInfo:nil];
}
- (NSMutableDictionary *)scheduledRequestHeaders {
if (!_scheduledRequestHeaders) {
_scheduledRequestHeaders = [NSMutableDictionary dictionary];
}
return _scheduledRequestHeaders;
}
#pragma mark -
+ (instancetype)shared {
return [[self alloc] init];
}
// 访
static NetworkingManager *_instance;
+ (instancetype)allocWithZone:(struct _NSZone *)zone {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
if (_instance == nil) {
_instance = [super allocWithZone:zone];
[_instance scheduledInit];
}
});
return _instance;
}
// copyWithZone mutableCopyWithZone
-(id)copyWithZone:(NSZone *)zone {
return _instance;
}
-(id)mutableCopyWithZone:(NSZone *)zone {
return _instance;
}
@end