处理网络

This commit is contained in:
2026-02-03 20:22:28 +08:00
parent 822a814f85
commit 61095a379f
4 changed files with 62 additions and 21 deletions

View File

@@ -33,6 +33,29 @@ NSErrorDomain const KBNetworkErrorDomain = @"com.company.keyboard.network";
@implementation KBNetworkManager
static NSString *KBSignStringFromObject(id obj) {
if (!obj || obj == (id)kCFNull) {
return nil;
}
if ([obj isKindOfClass:[NSString class]]) {
return (NSString *)obj;
}
if ([obj isKindOfClass:[NSNumber class]]) {
return [(NSNumber *)obj stringValue];
}
if ([obj isKindOfClass:[NSArray class]] || [obj isKindOfClass:[NSDictionary class]]) {
NSJSONWritingOptions options = 0;
if (@available(iOS 11.0, *)) {
options = NSJSONWritingSortedKeys;
}
NSData *data = [NSJSONSerialization dataWithJSONObject:obj options:options error:nil];
if (data.length > 0) {
return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}
}
return [obj description];
}
+ (instancetype)shared {
static KBNetworkManager *m; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ m = [KBNetworkManager new]; });
return m;
@@ -73,14 +96,24 @@ NSErrorDomain const KBNetworkErrorDomain = @"com.company.keyboard.network";
signParams[@"nonce"] = nonce;
// body
[bodyParams enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
if ([obj isKindOfClass:[NSString class]]) {
signParams[key] = obj;
} else {
signParams[key] = [obj description];
NSString *value = KBSignStringFromObject(obj);
if (value.length == 0) {
return;
}
signParams[key] = value;
}];
NSString *signSource = [KBSignUtils signSourceStringWithParams:signParams secret:secret];
NSString *sign = [KBSignUtils signWithParams:signParams secret:secret];
#if DEBUG
if (signSource.length > 0) {
NSString *secretPart = [NSString stringWithFormat:@"secret=%@", [KBSignUtils urlEncode:secret ?: @""]];
NSString *masked = [signSource stringByReplacingOccurrencesOfString:secretPart withString:@"secret=***"];
KBLOG(@"[KBNetwork] sign source: %@", masked);
KBLOG(@"[KBNetwork] sign value: %@", sign ?: @"");
}
#endif
//
NSMutableDictionary<NSString *, NSString *> *headers =
[self.defaultHeaders mutableCopy] ?: [NSMutableDictionary dictionary];
@@ -202,6 +235,7 @@ autoShowBusinessError:YES
parameters:(NSDictionary *)parameters
headers:(NSDictionary<NSString *,NSString *> *)headers
completion:(KBNetworkDataCompletion)completion {
[self getSignWithParare:parameters];
if (!self.isEnabled) {
NSError *e = [NSError errorWithDomain:KBNetworkErrorDomain
code:KBNetworkErrorDisabled
@@ -243,6 +277,7 @@ autoShowBusinessError:YES
completion:(KBNetworkCompletion)completion
{
NSLog(@"[KBNetworkManager] UPLOAD called, enabled=%d, path=%@", self.isEnabled, path);
[self getSignWithParare:@{}];
if (![self ensureEnabled:completion]) return nil;
NSString *urlString = [self buildURLStringWithPath:path];
@@ -330,6 +365,7 @@ autoShowBusinessError:YES
parameters:(NSDictionary *)parameters
headers:(NSDictionary<NSString *, NSString *> *)headers
completion:(KBNetworkCompletion)completion {
[self getSignWithParare:parameters ?: @{}];
if (!fileURL || !fileURL.isFileURL) {
if (completion) {
NSError *e = [NSError errorWithDomain:KBNetworkErrorDomain