5
This commit is contained in:
@@ -53,12 +53,15 @@ NSErrorDomain const KBNetworkErrorDomain = @"com.company.keyboard.network";
|
||||
return self;
|
||||
}
|
||||
|
||||
#
|
||||
#pragma mark - Public
|
||||
|
||||
// JSON GET:可控制业务错误是否由内部弹出
|
||||
- (NSURLSessionDataTask *)GET:(NSString *)path
|
||||
parameters:(NSDictionary *)parameters
|
||||
headers:(NSDictionary<NSString *,NSString *> *)headers
|
||||
completion:(KBNetworkCompletion)completion {
|
||||
parameters:(NSDictionary *)parameters
|
||||
headers:(NSDictionary<NSString *,NSString *> *)headers
|
||||
autoShowBusinessError:(BOOL)autoShowBusinessError
|
||||
completion:(KBNetworkCompletion)completion {
|
||||
NSLog(@"[KBNetworkManager] GET called, enabled=%d, path=%@", self.isEnabled, path);
|
||||
if (![self ensureEnabled:completion]) return nil;
|
||||
NSString *urlString = [self buildURLStringWithPath:path];
|
||||
@@ -84,14 +87,30 @@ NSErrorDomain const KBNetworkErrorDomain = @"com.company.keyboard.network";
|
||||
req.allHTTPHeaderFields ?: @{},
|
||||
paramStr);
|
||||
#endif
|
||||
return [self startJSONTaskWithRequest:req completion:completion];
|
||||
return [self startJSONTaskWithRequest:req
|
||||
autoShowBusinessError:autoShowBusinessError
|
||||
completion:completion];
|
||||
}
|
||||
|
||||
// 默认 GET:自动弹业务错误
|
||||
- (NSURLSessionDataTask *)GET:(NSString *)path
|
||||
parameters:(NSDictionary *)parameters
|
||||
headers:(NSDictionary<NSString *,NSString *> *)headers
|
||||
completion:(KBNetworkCompletion)completion {
|
||||
return [self GET:path
|
||||
parameters:parameters
|
||||
headers:headers
|
||||
autoShowBusinessError:YES
|
||||
completion:completion];
|
||||
}
|
||||
|
||||
// JSON POST:可控制业务错误是否由内部弹出
|
||||
- (NSURLSessionDataTask *)POST:(NSString *)path
|
||||
jsonBody:(id)jsonBody
|
||||
headers:(NSDictionary<NSString *,NSString *> *)headers
|
||||
completion:(KBNetworkCompletion)completion {
|
||||
NSLog(@"=====");
|
||||
jsonBody:(id)jsonBody
|
||||
headers:(NSDictionary<NSString *,NSString *> *)headers
|
||||
autoShowBusinessError:(BOOL)autoShowBusinessError
|
||||
completion:(KBNetworkCompletion)completion {
|
||||
NSLog(@"[KBNetworkManager] POST called, enabled=%d, path=%@", self.isEnabled, path);
|
||||
if (![self ensureEnabled:completion]) return nil;
|
||||
NSString *urlString = [self buildURLStringWithPath:path];
|
||||
if (!urlString) { [self fail:KBNetworkErrorInvalidURL completion:completion]; return nil; }
|
||||
@@ -113,7 +132,21 @@ NSErrorDomain const KBNetworkErrorDomain = @"com.company.keyboard.network";
|
||||
req.allHTTPHeaderFields ?: @{},
|
||||
bodyStr);
|
||||
#endif
|
||||
return [self startJSONTaskWithRequest:req completion:completion];
|
||||
return [self startJSONTaskWithRequest:req
|
||||
autoShowBusinessError:autoShowBusinessError
|
||||
completion:completion];
|
||||
}
|
||||
|
||||
// 默认 POST:自动弹业务错误
|
||||
- (NSURLSessionDataTask *)POST:(NSString *)path
|
||||
jsonBody:(id)jsonBody
|
||||
headers:(NSDictionary<NSString *,NSString *> *)headers
|
||||
completion:(KBNetworkCompletion)completion {
|
||||
return [self POST:path
|
||||
jsonBody:jsonBody
|
||||
headers:headers
|
||||
autoShowBusinessError:YES
|
||||
completion:completion];
|
||||
}
|
||||
|
||||
// 原始二进制 GET,用于下载 zip、图片等
|
||||
@@ -190,6 +223,7 @@ NSErrorDomain const KBNetworkErrorDomain = @"com.company.keyboard.network";
|
||||
}
|
||||
|
||||
- (NSURLSessionDataTask *)startJSONTaskWithRequest:(NSURLRequest *)req
|
||||
autoShowBusinessError:(BOOL)autoShowBusinessError
|
||||
completion:(KBNetworkCompletion)completion {
|
||||
NSLog(@"[KBNetworkManager] startAFTaskWithRequest: %@", req.URL.absoluteString);
|
||||
// 响应先用原始数据返回,再按 Content-Type 解析 JSON(与原实现一致)
|
||||
@@ -266,18 +300,23 @@ NSErrorDomain const KBNetworkErrorDomain = @"com.company.keyboard.network";
|
||||
// 统一解析业务 code:约定后端顶层包含 { code, message, data }
|
||||
NSInteger bizCode = KBBizCodeFromJSONObject(dict);
|
||||
if (bizCode != NSNotFound && bizCode != KBBizCodeSuccess) {
|
||||
// 非成功业务 code:执行通用处理(如 token 失效)并通过 error 方式回调
|
||||
[self kb_handleBizCode:bizCode json:dict response:response];
|
||||
NSString *msg = KBBizMessageFromJSONObject(json) ?: KBLocalized(@"Server error");
|
||||
NSError *bizErr = [NSError errorWithDomain:KBNetworkErrorDomain
|
||||
code:KBNetworkErrorBusiness
|
||||
userInfo:@{
|
||||
NSLocalizedDescriptionKey : msg,
|
||||
@"code" : @(bizCode)
|
||||
}];
|
||||
if (completion) completion(dict, response, bizErr);
|
||||
return;
|
||||
// 非成功业务 code:执行通用处理(如 token 失效)并通过 error 方式回调
|
||||
BOOL handledByAuth = [self kb_handleBizCode:bizCode json:dict response:response];
|
||||
NSString *msg = KBBizMessageFromJSONObject(dict) ?: KBLocalized(@"Server error");
|
||||
if (autoShowBusinessError && !handledByAuth) {
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
[KBHUD showInfo:msg];
|
||||
});
|
||||
}
|
||||
NSError *bizErr = [NSError errorWithDomain:KBNetworkErrorDomain
|
||||
code:KBNetworkErrorBusiness
|
||||
userInfo:@{
|
||||
NSLocalizedDescriptionKey : msg,
|
||||
@"code" : @(bizCode)
|
||||
}];
|
||||
if (completion) completion(dict, response, bizErr);
|
||||
return;
|
||||
}
|
||||
// code 缺失或为成功,按正常成功回调
|
||||
if (completion) completion(dict, response, nil);
|
||||
} else {
|
||||
@@ -328,8 +367,9 @@ NSErrorDomain const KBNetworkErrorDomain = @"com.company.keyboard.network";
|
||||
|
||||
#pragma mark - Private helpers
|
||||
|
||||
/// 处理通用业务 code(token 失效、被踢下线等)
|
||||
- (void)kb_handleBizCode:(NSInteger)bizCode
|
||||
/// 处理通用业务 code(token 失效、被踢下线等);
|
||||
/// 返回 YES 表示该 code 已在此处消费(例如已清理登录态并提示),外部无需再提示。
|
||||
- (BOOL)kb_handleBizCode:(NSInteger)bizCode
|
||||
json:(id)json
|
||||
response:(NSURLResponse *)response {
|
||||
switch (bizCode) {
|
||||
@@ -361,10 +401,12 @@ NSErrorDomain const KBNetworkErrorDomain = @"com.company.keyboard.network";
|
||||
object:nil
|
||||
userInfo:info];
|
||||
});
|
||||
return YES;
|
||||
} break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (void)fail:(KBNetworkError)code completion:(KBNetworkCompletion)completion {
|
||||
|
||||
Reference in New Issue
Block a user