- @interface
BJAppClient : AFHTTPSessionManager -
- +
(instancetype)sharedClient; -
- @end
- static
NSString * const APIBaseURLString = @"xxxxx"; -
- @implementation
BJAppClient -
- +
(instancetype)sharedClient - {
-
static BJAppClient *_sharedClient = nil; -
static dispatch_once_t onceToken; -
dispatch_once(&onceToken, ^{ -
-
_sharedClient = [[BJAppClient alloc] initWithBaseURL:[NSURL URLWithString:APIBaseURLString]]; -
-
}); -
-
return _sharedClient; - }
-
- #pragma
mark - 重写initWithBaseURL -
-
- -(instancetype)initWithBaseURL:(NSURL
*)url - {
-
if (self = [super initWithBaseURL:url]) { -
-
self.requestSerializer.timeoutInterval = 3; -
-
self.requestSerializer.cachePolicy = NSURLRequestReloadIgnori ngLocalCacheData; -
-
self.requestSerializer = [AFHTTPRequestSerializer serializer]; -
AFJSONResponseSerializer * response = [AFJSONResponseSerializer serializer]; -
response.removesKeysWithNullValue s = YES; -
self.responseSerializer = response; -
-
-
-
[self.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; -
-
-
[self.responseSerializer setAcceptableContentType s:[NSSet setWithObjects:@"text/plain",@"application/json",@"text/json",@"text/javascript",@"text/html", nil nil]]; -
-
} -
-
return self; - }
- typedef
NS_ENUM(NSUInteger,HTTPSRequestType) - {
-
HTTPSRequestTypeGet = 0, -
HTTPSRequestTypePost - };
-
- typedef
void(^completeBlock)( NSDictionary *_Nullable object,NSError * _Nullable error); -
- @interface
BJHTTPSession : NSObject -
- +
(nullable NSURLSessionDataTask *)GET:(nonnull NSString *)urlString -
paraments:(nullable id)paraments -
completeBlock:(nullable completeBlock)completeBlock; -
- +
(nullable NSURLSessionDataTask *)POST:(nonnull NSString *)urlString -
paraments:(nullable id)paraments -
completeBlock:(nullable completeBlock)completeBlock; -
- +
(nullable NSURLSessionDataTask *)requestWithRequestType:(HTTPSRequestType)type -
urlString:(nonnull NSString *)urlString -
paraments:(nullable id)paraments -
completeBlock:(nullable completeBlock)completeBlock; -
- -
(void)AFNetworkStatus; -
-
-
-
- @end
- //
- //
BJHTTPSession.m - //
VRMax - //
- //
Created by VRGATE on 16/5/12. - //
Copyright © 2016年 AngieMita. All rights reserved. - //
-
- #import
"BJHTTPSession.h" - #import
"BJAppClient.h" - #import
- #import
- #import
- #import
"UIImage+compressIMG.h" -
- @implementation
BJHTTPSession -
- +
(nullable NSURLSessionDataTask *)GET:(nonnull NSString *)urlString -
paraments:(nullable id)paraments -
completeBlock:(nullable completeBlock)completeBlock - {
-
return [[BJAppClient sharedClient] GET:urlString -
parameters:paraments -
progress:^(NSProgress * _Nonnull downloadProgress) { -
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { -
completeBlock(responseObject,nil); -
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { -
completeBlock(nil,error); -
}]; - }
-
- +
(nullable NSURLSessionDataTask *)POST:(nonnull NSString *)urlString -
paraments:(nullable id)paraments -
completeBlock:(nullable completeBlock)completeBlock - {
-
// 不加上这句话,会报“Request failed: unacceptable content-type: text/plain”错误 -
-
[BJAppClient sharedClient].requestSerializer = [AFJSONRequestSerializer serializer];//请求 -
[BJAppClient sharedClient].responseSerializer = [AFHTTPResponseSerializer serializer];//响应 -
-
// post请求 -
return [[BJAppClient sharedClient] POST:urlString -
parameters:paraments -
constructingBodyWithBloc k:^(id _Nonnull formData) { -
// 拼接data到请求体,这个block的参数是遵守AFMultipartFormData协议的。 -
} progress:^(NSProgress * _Nonnull uploadProgress){ -
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { -
NSLog(@"%@", responseObject); -
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableCont ainers error:nil]; -
NSLog(@"dict start ----\n%@ \n ---- end -- ", dict); -
// 请求成功,解析数据 -
completeBlock(responseObject,nil); -
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { -
NSLog(@"%@", [error localizedDescription]); -
// 请求失败 -
completeBlock(nil,error); -
}]; - }
-
- #pragma
mark - 简化 - +
(nullable NSURLSessionDataTask *)requestWithRequestType:(HTTPSRequestType)type -
urlString:(nonnull NSString *)urlString -
paraments:(nullable id)paraments -
completeBlock:(nullable completeBlock)completeBlock - {
-
switch (type) { -
case HTTPSRequestTypeGet: -
{ -
return [BJHTTPSession GET:urlString -
paraments:paraments -
completeBlock:^(NSDictionary * _Nullable object, NSError * _Nullable error) { -
completeBlock(object,error); -
}]; -
} -
case HTTPSRequestTypePost: -
return [BJHTTPSession POST:urlString -
paraments:paraments -
completeBlock:^(NSDictionary * _Nullable object, NSError * _Nullable error) { -
completeBlock(object,error); -
}]; -
} -
- }
-
- #pragma
mark - 取消所有的网络请求 -
-
-
- +(void)cancelAllRequest
- {
-
[[BJAppClient sharedClient].operationQueue cancelAllOperations]; - }
-
-
-
- #pragma
mark - 取消指定的url请求/ -
-
- +(void)cancelHttpRequestWithReq
uestType:(NSString *)requestType -
requestUrlString:(NSString *)string - {
-
NSError * error; -
-
NSString * urlToPeCanced = [[[[BJAppClient sharedClient].requestSerializer -
requestWithMethod:requestType URLString:string parameters:nil error:&error] URL] path]; -
-
for (NSOperation * operation in [BJAppClient sharedClient].operationQueue.operations) { -
//如果是请求队列 -
if ([operation isKindOfClass:[NSURLSessionTask class]]) { -
//请求的类型匹配 -
BOOL hasMatchRequestType = [requestType isEqualToString:[[(NSURLSessionTask *)operation currentRequest] HTTPMethod]]; -
//请求的url匹配 -
BOOL hasMatchRequestUrlString = [urlToPeCanced isEqualToString:[[[(NSURLSessionTask *)operation currentRequest] URL] path]]; -
//两项都匹配的话 取消该请求 -
if (hasMatchRequestType&&hasMatchRequestUrlString ) { -
[operation cancel]; -
} -
} -
} - }
-
- -
(void)AFNetworkStatus - {
-
-
//1.创建网络监测者 -
AFNetworkReachabilityMan ager *manager = [AFNetworkReachabilityMan ager sharedManager]; -
-
-
-
[manager setReachabilityStatusCha ngeBlock:^(AFNetworkReachabilitySta tus status) { -
//这里是监测到网络改变的block 可以写成switch方便 -
//在里面可以随便写事件 -
switch (status) { -
case AFNetworkReachabilitySta tusUnknown: -
NSLog(@"未知网络状态"); -
break; -
case AFNetworkReachabilitySta tusNotReachable: -
NSLog(@"无网络"); -
networkReachabilityStatu sUnknown(); -
break; -
-
case AFNetworkReachabilitySta tusReachableViaWWAN: -
NSLog(@"蜂窝数据网"); -
networkReachabilityStatu sReachableViaWWAN(); -
break; -
-
case AFNetworkReachabilitySta tusReachableViaWiFi: -
NSLog(@"WiFi网络"); -
-
break; -
-
default: -
break; -
} -
-
}] ; - }
-
- void
networkReachabilityStatu sUnknown() - {
-
UIAlertController *alert = [UIAlertController alertControllerWithTitle :@"已为”VRMAX“关闭蜂窝移动数据" -
message:@"您可以在”设置“中为此应用程序打开蜂窝移动数据。" -
preferredStyle:UIAlertControllerStyleAl ert]; -
[alert addAction:[UIAlertAction actionWithTitle:@"设置" -
style:UIAlertActionStyleDefaul t -
handler:^(UIAlertAction * _Nonnull action) { -
canOpenURLString(@"prefs:root=MOBILE_DATA_SETTINGS_ID"); -
}]]; -
[alert addAction:[UIAlertAction actionWithTitle:@"好" -
style:UIAlertActionStyleCancel handler:nil]]; - }
-
- void
networkReachabilityStatu sReachableViaWWAN() - {
-
UIAlertController *alert = [UIAlertController alertControllerWithTitle :@"“VRMAX”正在使用流量,确定要如此土豪吗?" -
message:@"建议开启WIFI后观看视频。" -
preferredStyle:UIAlertControllerStyleAl ert]; -
[alert addAction:[UIAlertAction actionWithTitle:@"设置" -
style:UIAlertActionStyleDefaul t -
handler:^(UIAlertAction * _Nonnull action) { -
canOpenURLString(@"prefs:root=MOBILE_DATA_SETTINGS_ID"); -
}]]; -
[alert addAction:[UIAlertAction actionWithTitle:@"好" -
style:UIAlertActionStyleCancel handler:nil]]; - }
- @end