This commit is contained in:
2025-12-02 21:32:49 +08:00
parent 2f55e7bfa1
commit 6be90ebb10
4 changed files with 128 additions and 2 deletions

View File

@@ -4,8 +4,13 @@
//
#import "KBNetworkManager.h"
#import <TargetConditionals.h>
#import "AFNetworking.h"
#import "KBAuthManager.h"
#import "KBBizCode.h"
// App HUD
#import "KBUserSessionManager.h"
#import "KBHUD.h"
NSErrorDomain const KBNetworkErrorDomain = @"com.company.keyboard.network";
@@ -209,19 +214,37 @@ NSErrorDomain const KBNetworkErrorDomain = @"com.company.keyboard.network";
NSString *pretty = [self kb_prettyJSONStringFromObject:json] ?: @"(null)";
pretty = [self kb_trimmedString:pretty maxLength:4096];
NSInteger status = [response isKindOfClass:NSHTTPURLResponse.class] ? ((NSHTTPURLResponse *)response).statusCode : 0;
KBLOG(@"响应成功(JSON)\nURL: %@\n状态: %ld\nContent-Type: %@\n数据: %@",
KBLOG(@"\n[KBNetwork] 响应成功(JSON)\nURL: %@\n状态: %ld\nContent-Type: %@\n数据: %@\n",
req.URL.absoluteString,
(long)status,
ct ?: @"",
pretty);
#endif
// code { code, message, data }
if ([json isKindOfClass:NSDictionary.class]) {
NSInteger bizCode = KBBizCodeFromJSONObject(json);
if (bizCode != NSNotFound && bizCode != KBBizCodeSuccess) {
// code token error
[self kb_handleBizCode:bizCode json:json response:response];
NSString *msg = KBBizMessageFromJSONObject(json) ?: KBLocalized(@"Server error");
NSError *bizErr = [NSError errorWithDomain:KBNetworkErrorDomain
code:KBNetworkErrorBusiness
userInfo:@{
NSLocalizedDescriptionKey : msg,
@"code" : @(bizCode)
}];
if (completion) completion(json, response, bizErr);
return;
}
}
// code
if (completion) completion(json, response, nil);
} else {
#if DEBUG
NSString *text = [self kb_textFromData:data];
text = [self kb_trimmedString:text maxLength:4096];
NSInteger status = [response isKindOfClass:NSHTTPURLResponse.class] ? ((NSHTTPURLResponse *)response).statusCode : 0;
KBLOG(@"响应成功(Data)\nURL: %@\n状态: %ld\nContent-Type: %@\n数据: %@",
KBLOG(@"\n[KBNetwork] 响应成功(Data)\nURL: %@\n状态: %ld\nContent-Type: %@\n数据: %@\n",
req.URL.absoluteString,
(long)status,
ct ?: @"",
@@ -251,6 +274,43 @@ NSErrorDomain const KBNetworkErrorDomain = @"com.company.keyboard.network";
#pragma mark - Private helpers
/// codetoken 线
- (void)kb_handleBizCode:(NSInteger)bizCode
json:(id)json
response:(NSURLResponse *)response {
// 宿 App
// Darwin App Group
(void)bizCode;
(void)json;
(void)response;
return;
switch (bizCode) {
case KBBizCodeTokenInvalid:
case KBBizCodeTokenExpired:
case KBBizCodeAccountKicked: {
//
NSString *msg = KBBizMessageFromJSONObject(json);
if (msg.length == 0) {
msg = KBLocalized(@"Your session has expired. Please sign in again.");
}
dispatch_async(dispatch_get_main_queue(), ^{
// Keychain +
[[KBUserSessionManager shared] logout];
//
[KBHUD showInfo:msg];
// 广便 UI
NSDictionary *info = @{ @"code": @(bizCode),
@"message": msg ?: @"" };
[[NSNotificationCenter defaultCenter] postNotificationName:@"KBUserSessionInvalidNotification"
object:nil
userInfo:info];
});
} break;
default:
break;
}
}
- (void)fail:(KBNetworkError)code completion:(KBNetworkCompletion)completion {
NSString *msg = KBLocalized(@"Network error");
switch (code) {
@@ -258,6 +318,7 @@ NSErrorDomain const KBNetworkErrorDomain = @"com.company.keyboard.network";
case KBNetworkErrorInvalidURL: msg = KBLocalized(@"Invalid URL"); break;
case KBNetworkErrorInvalidResponse: msg = KBLocalized(@"Invalid response"); break;
case KBNetworkErrorDecodeFailed: msg = KBLocalized(@"Parse failed"); break;
case KBNetworkErrorBusiness: msg = KBLocalized(@"Server error"); break;
default: break;
}
NSError *e = [NSError errorWithDomain:KBNetworkErrorDomain