99#import < QCloudCore/QCloudLogger.h>
1010#import < QCloudCore/NSError+QCloudNetworking.h>
1111
12+ #define AppKey @" I79GMXS2ZR8Y"
13+
1214static NSString * kRequestSentKey = @" request_sent" ;
1315static NSString * kRequestFailKey = @" request_failed" ;
1416static NSString * kErrorCodeKey = @" error_code" ;
@@ -48,7 +50,12 @@ + (NSString*)stringWithClass:(Class)cls {
4850@implementation QualityDataUploader
4951
5052NSArray * filterUploadEventClass (){
51- NSArray *arr = @[@" QCloudPutObjectRequest" ,@" QCloudInitiateMultipartUploadRequest" ,@" QCloudUploadPartRequest" ,@" QCloudCompleteMultipartUploadRequest" ,@" QCloudAbortMultipfartUploadRequest" ,@" QCloudGetObjectRequest" ,@" QCloudListMultipartRequest" ,@" QCloudAbortMultipfartUploadRequest" ,@" QCloudPutObjectCopyRequest" ,@" QCloudUploadPartCopyRequest" ];
53+ NSArray *arr = @[@" QCloudHeadObjectRequest" ,
54+ @" QCloudPutObjectRequest" ,
55+ @" QCloudUploadPartRequest" ,
56+ @" QCloudGetObjectRequest" ,
57+ @" QCloudPutObjectCopyRequest" ,
58+ @" QCloudUploadPartCopyRequest" ];
5259 return arr;
5360}
5461
@@ -61,15 +68,16 @@ +(BOOL)isNeedQuality:(Class)cls{
6168 return NO ;
6269}
6370
64- +(NSInteger )internalUploadEvent : (NSString *)eventKey withParamter : (NSDictionary *)paramter {
65-
71+ +(BOOL )isErrorInsterested : (NSError *)error {
72+ return [NSError isNetworkErrorAndRecoverable: error];
73+ }
74+
75+ +(void )internalUploadEvent : (NSString *)eventKey withParamter : (NSDictionary *)paramter {
6676 Class cls = NSClassFromString (@" TACMTA" );
6777 if (cls) {
68- NSInteger result = [[cls performSelector: NSSelectorFromString (@" trackCustomKeyValueEvent:props:" ) withObject: eventKey withObject: paramter] integerValue ];
69- NSLog (@" test result === %ld " ,result);
70- return result;
78+ [self invokeClassMethod: cls sel: NSSelectorFromString (@" trackCustomKeyValueEvent:props:appkey:isRealTime:" )
79+ withObjects: @[eventKey, paramter, AppKey, @(NO )]];
7180 }
72- return 0 ;
7381}
7482
7583+ (void )trackRequestSentWithType : (Class )cls {
@@ -80,15 +88,52 @@ + (void)trackRequestSentWithType:(Class)cls {
8088}
8189
8290+ (void )trackRequestFailWithType : (Class )cls Error : (NSError *)error {
83- if ([self isNeedQuality: cls]) {
91+ if ([self isNeedQuality: cls] && [ self isErrorInsterested: error] ) {
8492 NSMutableDictionary *parameters = [error.toUploadEventParamters mutableCopy ];
8593 parameters[kClassNameKey ] = [NSString stringWithClass: cls];
8694 [self internalUploadEvent: kRequestFailKey withParamter: parameters];
8795 }
8896
8997}
9098
91-
99+ // 可以传多个参数的方法
100+ + (NSInteger )invokeClassMethod : (Class ) cls sel : (SEL )selector withObjects : (NSArray *)objects
101+ {
102+ NSInteger returnValue = -1 ;
103+
104+ // 方法签名
105+ NSMethodSignature *signature = [NSClassFromString (@" TACMTA" ) methodSignatureForSelector: selector];
106+ if (signature == nil ) {
107+ return returnValue;
108+ }
109+
110+ NSInvocation *invocation = [NSInvocation invocationWithMethodSignature: signature];
111+ if (signature.numberOfArguments < 1 ) {
112+ return returnValue;
113+ }
114+
115+ invocation.target = cls;
116+ invocation.selector = selector;
117+
118+ // 设置参数
119+ NSInteger paramsCount = signature.numberOfArguments - 2 ; // 除self、_cmd以外的参数个数
120+ paramsCount = MIN (paramsCount, objects.count );
121+ for (NSInteger i = 0 ; i < paramsCount; i++) {
122+ id object = objects[i];
123+ if ([object isKindOfClass: [NSNull class ]]) continue ;
124+ [invocation setArgument: &object atIndex: i + 2 ];
125+ }
126+
127+ // 调用方法
128+ [invocation invoke ];
129+
130+ // 获取返回值
131+ if (signature.methodReturnLength ) {
132+ [invocation getReturnValue: &returnValue];
133+ }
134+
135+ return returnValue;
136+ }
92137
93138
94139
0 commit comments