This commit is contained in:
2025-12-04 20:57:39 +08:00
parent 6ac6514f89
commit 40d9b5aad4
5 changed files with 67 additions and 7 deletions

View File

@@ -6,7 +6,8 @@
#import "KBNetworkManager.h" #import "KBNetworkManager.h"
#import "AFNetworking.h" #import "AFNetworking.h"
#import "KBAuthManager.h" #import "KBAuthManager.h"
#import "KBUserSessionManager.h"
#import "KBSignUtils.h"
NSErrorDomain const KBNetworkErrorDomain = @"com.company.keyboard.network"; NSErrorDomain const KBNetworkErrorDomain = @"com.company.keyboard.network";
@interface KBNetworkManager () @interface KBNetworkManager ()
@@ -28,8 +29,11 @@ NSErrorDomain const KBNetworkErrorDomain = @"com.company.keyboard.network";
_timeout = 10.0; _timeout = 10.0;
// Accept + 使 Accept-Language // Accept + 使 Accept-Language
NSString *lang = [KBLocalizationManager shared].currentLanguageCode ?: KBLanguageCodeEnglish; NSString *lang = [KBLocalizationManager shared].currentLanguageCode ?: KBLanguageCodeEnglish;
NSString *token = [KBUserSessionManager shared].accessToken ? [KBUserSessionManager shared].accessToken : @"";
_defaultHeaders = @{ _defaultHeaders = @{
@"Accept": @"*/*", @"Accept": @"*/*",
@"auth-token" : token,
@"Accept-Language": lang @"Accept-Language": lang
}; };
// //
@@ -38,12 +42,49 @@ NSErrorDomain const KBNetworkErrorDomain = @"com.company.keyboard.network";
return self; return self;
} }
- (void)getSignWithParare:(NSDictionary *)bodyParams{
NSString *appId = @"loveKeyboard";
NSString *secret = @"kZJM39HYvhxwbJkG1fmquQRVkQiLAh2H"; //
NSString *timestamp = [KBSignUtils currentTimestamp];
NSString *nonce = [KBSignUtils generateNonceWithLength:16];
// 1.
NSMutableDictionary<NSString *, NSString *> *signParams = [NSMutableDictionary dictionary];
signParams[@"appId"] = appId;
signParams[@"timestamp"] = timestamp;
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 *sign = [KBSignUtils signWithParams:signParams secret:secret];
//
NSMutableDictionary<NSString *, NSString *> *headers =
[self.defaultHeaders mutableCopy] ?: [NSMutableDictionary dictionary];
if (sign.length > 0) {
headers[@"X-Sign"] = sign;
}
headers[@"X-App-Id"] = appId;
headers[@"X-Timestamp"] = timestamp;
headers[@"X-Nonce"] = nonce;
// copy
self.defaultHeaders = headers;
}
#pragma mark - Public #pragma mark - Public
- (NSURLSessionDataTask *)GET:(NSString *)path - (NSURLSessionDataTask *)GET:(NSString *)path
parameters:(NSDictionary *)parameters parameters:(NSDictionary *)parameters
headers:(NSDictionary<NSString *,NSString *> *)headers headers:(NSDictionary<NSString *,NSString *> *)headers
completion:(KBNetworkCompletion)completion { completion:(KBNetworkCompletion)completion {
[self getSignWithParare:parameters];
if (![self ensureEnabled:completion]) return nil; if (![self ensureEnabled:completion]) return nil;
NSString *urlString = [self buildURLStringWithPath:path]; NSString *urlString = [self buildURLStringWithPath:path];
if (!urlString) { [self fail:KBNetworkErrorInvalidURL completion:completion]; return nil; } if (!urlString) { [self fail:KBNetworkErrorInvalidURL completion:completion]; return nil; }
@@ -67,6 +108,8 @@ NSErrorDomain const KBNetworkErrorDomain = @"com.company.keyboard.network";
jsonBody:(id)jsonBody jsonBody:(id)jsonBody
headers:(NSDictionary<NSString *,NSString *> *)headers headers:(NSDictionary<NSString *,NSString *> *)headers
completion:(KBNetworkCompletion)completion { completion:(KBNetworkCompletion)completion {
[self getSignWithParare:jsonBody];
if (![self ensureEnabled:completion]) return nil; if (![self ensureEnabled:completion]) return nil;
NSString *urlString = [self buildURLStringWithPath:path]; NSString *urlString = [self buildURLStringWithPath:path];
if (!urlString) { [self fail:KBNetworkErrorInvalidURL completion:completion]; return nil; } if (!urlString) { [self fail:KBNetworkErrorInvalidURL completion:completion]; return nil; }
@@ -87,6 +130,7 @@ NSErrorDomain const KBNetworkErrorDomain = @"com.company.keyboard.network";
parameters:(NSDictionary *)parameters parameters:(NSDictionary *)parameters
headers:(NSDictionary<NSString *,NSString *> *)headers headers:(NSDictionary<NSString *,NSString *> *)headers
completion:(KBNetworkDataCompletion)completion { completion:(KBNetworkDataCompletion)completion {
[self getSignWithParare:parameters];
if (!self.isEnabled) { if (!self.isEnabled) {
NSError *e = [NSError errorWithDomain:KBNetworkErrorDomain NSError *e = [NSError errorWithDomain:KBNetworkErrorDomain
code:KBNetworkErrorDisabled code:KBNetworkErrorDisabled

View File

@@ -672,6 +672,8 @@
0477BD942EBAFF4E0055D639 /* Utils */ = { 0477BD942EBAFF4E0055D639 /* Utils */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
0498BD832EE1B255006CC1D5 /* KBSignUtils.h */,
0498BD842EE1B255006CC1D5 /* KBSignUtils.m */,
); );
path = Utils; path = Utils;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -908,8 +910,6 @@
0498BD822EE1B246006CC1D5 /* Utils */ = { 0498BD822EE1B246006CC1D5 /* Utils */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
0498BD832EE1B255006CC1D5 /* KBSignUtils.h */,
0498BD842EE1B255006CC1D5 /* KBSignUtils.m */,
); );
path = Utils; path = Utils;
sourceTree = "<group>"; sourceTree = "<group>";

View File

@@ -63,9 +63,7 @@ NSErrorDomain const KBNetworkErrorDomain = @"com.company.keyboard.network";
} }
- (void)getSignWithParare:(NSDictionary *)bodyParams{ - (void)getSignWithParare:(NSDictionary *)bodyParams{
if (bodyParams == nil) {
return;
}
NSString *appId = @"loveKeyboard"; NSString *appId = @"loveKeyboard";
NSString *secret = @"kZJM39HYvhxwbJkG1fmquQRVkQiLAh2H"; // NSString *secret = @"kZJM39HYvhxwbJkG1fmquQRVkQiLAh2H"; //
NSString *timestamp = [KBSignUtils currentTimestamp]; NSString *timestamp = [KBSignUtils currentTimestamp];
@@ -84,7 +82,20 @@ NSErrorDomain const KBNetworkErrorDomain = @"com.company.keyboard.network";
} }
}]; }];
NSString *sign = [KBSignUtils signWithParams:signParams secret:secret]; NSString *sign = [KBSignUtils signWithParams:signParams secret:secret];
//
NSMutableDictionary<NSString *, NSString *> *headers =
[self.defaultHeaders mutableCopy] ?: [NSMutableDictionary dictionary];
if (sign.length > 0) {
headers[@"X-Sign"] = sign;
}
headers[@"X-App-Id"] = appId;
headers[@"X-Timestamp"] = timestamp;
headers[@"X-Nonce"] = nonce;
// copy
self.defaultHeaders = headers;
} }
# #
@@ -97,6 +108,7 @@ NSErrorDomain const KBNetworkErrorDomain = @"com.company.keyboard.network";
autoShowBusinessError:(BOOL)autoShowBusinessError autoShowBusinessError:(BOOL)autoShowBusinessError
completion:(KBNetworkCompletion)completion { completion:(KBNetworkCompletion)completion {
NSLog(@"[KBNetworkManager] GET called, enabled=%d, path=%@", self.isEnabled, path); NSLog(@"[KBNetworkManager] GET called, enabled=%d, path=%@", self.isEnabled, path);
[self getSignWithParare:parameters];
if (![self ensureEnabled:completion]) return nil; if (![self ensureEnabled:completion]) return nil;
NSString *urlString = [self buildURLStringWithPath:path]; NSString *urlString = [self buildURLStringWithPath:path];
if (!urlString) { [self fail:KBNetworkErrorInvalidURL completion:completion]; return nil; } if (!urlString) { [self fail:KBNetworkErrorInvalidURL completion:completion]; return nil; }
@@ -131,6 +143,8 @@ NSErrorDomain const KBNetworkErrorDomain = @"com.company.keyboard.network";
parameters:(NSDictionary *)parameters parameters:(NSDictionary *)parameters
headers:(NSDictionary<NSString *,NSString *> *)headers headers:(NSDictionary<NSString *,NSString *> *)headers
completion:(KBNetworkCompletion)completion { completion:(KBNetworkCompletion)completion {
[self getSignWithParare:parameters];
return [self GET:path return [self GET:path
parameters:parameters parameters:parameters
headers:headers headers:headers
@@ -145,6 +159,7 @@ autoShowBusinessError:YES
autoShowBusinessError:(BOOL)autoShowBusinessError autoShowBusinessError:(BOOL)autoShowBusinessError
completion:(KBNetworkCompletion)completion { completion:(KBNetworkCompletion)completion {
NSLog(@"[KBNetworkManager] POST called, enabled=%d, path=%@", self.isEnabled, path); NSLog(@"[KBNetworkManager] POST called, enabled=%d, path=%@", self.isEnabled, path);
[self getSignWithParare:jsonBody];
if (![self ensureEnabled:completion]) return nil; if (![self ensureEnabled:completion]) return nil;
NSString *urlString = [self buildURLStringWithPath:path]; NSString *urlString = [self buildURLStringWithPath:path];
if (!urlString) { [self fail:KBNetworkErrorInvalidURL completion:completion]; return nil; } if (!urlString) { [self fail:KBNetworkErrorInvalidURL completion:completion]; return nil; }
@@ -176,6 +191,7 @@ autoShowBusinessError:YES
jsonBody:(id)jsonBody jsonBody:(id)jsonBody
headers:(NSDictionary<NSString *,NSString *> *)headers headers:(NSDictionary<NSString *,NSString *> *)headers
completion:(KBNetworkCompletion)completion { completion:(KBNetworkCompletion)completion {
[self getSignWithParare:jsonBody];
return [self POST:path return [self POST:path
jsonBody:jsonBody jsonBody:jsonBody
headers:headers headers:headers