升级topon sdk版本2.1.5, 升级平台插件版本至最新

This commit is contained in:
2025-03-13 17:49:41 +08:00
parent 3d31d2023b
commit 81d55a534f
74 changed files with 811 additions and 180 deletions

View File

@@ -8,9 +8,9 @@
#import "ATBaseUnityWrapper.h"
#import "ATUnityUtilities.h"
#import "ATUnitySafeThreadDictionary.h"
@interface ATBaseUnityWrapper()
@property(nonatomic, readonly) NSMutableDictionary<NSString*, NSValue*> *callbacks;
@property(nonatomic, readonly) dispatch_queue_t callbackAccessQueue;
@property(nonatomic, strong) ATUnitySafeThreadDictionary<NSString*, NSValue*> *callbacks;
@end
@implementation ATBaseUnityWrapper
+(instancetype) sharedInstance {
@@ -20,35 +20,29 @@
-(instancetype) init {
self = [super init];
if (self != nil) {
_callbacks = [NSMutableDictionary<NSString*, NSValue*> dictionary];
_callbackAccessQueue = dispatch_queue_create("com.anythink.UnityPackage", DISPATCH_QUEUE_CONCURRENT);
_callbacks = [ATUnitySafeThreadDictionary<NSString*, NSValue*> dictionary];
}
return self;
}
-(void) setCallBack:(void (*)(const char *, const char *))callback forKey:(NSString *)key {
__weak ATBaseUnityWrapper* weakSelf = self;
if (callback != NULL && [key length] > 0)
dispatch_barrier_async(_callbackAccessQueue, ^{
weakSelf.callbacks[key] = [NSValue valueWithPointer:(void*)callback];
});
if (callback != NULL && [key length] > 0) {
[self.callbacks setValue:[NSValue valueWithPointer:(void*)callback] forKey:key];
}
}
-(void) removeCallbackForKey:(NSString *)key {
__weak ATBaseUnityWrapper* weakSelf = self;
if ([key length] > 0)
dispatch_barrier_async(_callbackAccessQueue, ^{
[weakSelf.callbacks removeObjectForKey:key];
});
if ([key length] > 0) {
[self.callbacks removeObjectForKey:key];
}
}
-(void(*)(const char*, const char *)) callbackForKey:(NSString*)key {
__block void(*callback)(const char*, const char *) = NULL;
if ([key length] > 0) {
__weak ATBaseUnityWrapper* weakSelf = self;
dispatch_barrier_sync(_callbackAccessQueue, ^{
callback = (void(*)(const char*, const char *))[weakSelf.callbacks[key] pointerValue];
});
callback = (void(*)(const char*, const char *))[self.callbacks[key] pointerValue];
}
return callback;
}
@@ -61,89 +55,100 @@
return nil;
}
-(void) invokeCallback:(NSString*)callback placementID:(NSString*)placementID error:(NSError*)error extra:(NSDictionary*)extra {
if ([self callbackForKey:placementID] != NULL) {
if ([callback isKindOfClass:[NSString class]] && [callback length] > 0) {
-(void) invokeCallback:(NSString*)callback placementID:(NSString*)placementID error:(NSError*)error extra:(NSDictionary*)extraParams {
__block NSDictionary* extra = extraParams;
dispatch_async(dispatch_get_main_queue(), ^{
@try {
NSMutableDictionary *paraDict = [NSMutableDictionary dictionaryWithObject:callback forKey:@"callback"];
NSMutableDictionary *msgDict = [NSMutableDictionary dictionary];
if (![ATUnityUtilities isEmpty:extra]) {
// SDK user_load_extra_data
if (extra[kATUnityUserExtraDataKey] != nil) {
NSMutableDictionary *extraDictM = [NSMutableDictionary dictionaryWithDictionary:extra];
NSMutableDictionary *extraDataTemp = [NSMutableDictionary dictionary];
NSMutableDictionary *extraDataDictM = [NSMutableDictionary dictionaryWithDictionary:extra[kATUnityUserExtraDataKey]];
for (NSString *key in extraDataDictM.allKeys) {
if ([extraDataDictM[key] isKindOfClass:[NSString class]] || [extraDataDictM[key] isKindOfClass:[NSNumber class]]) {
[extraDataTemp setValue:extraDataDictM[key] forKey:key];
if ([self callbackForKey:placementID] != NULL) {
if ([callback isKindOfClass:[NSString class]] && [callback length] > 0) {
NSMutableDictionary *paraDict = [NSMutableDictionary dictionaryWithObject:callback forKey:@"callback"];
NSMutableDictionary *msgDict = [NSMutableDictionary dictionary];
if (![ATUnityUtilities isEmpty:extra]) {
// SDK user_load_extra_data
if (extra[kATUnityUserExtraDataKey] != nil) {
NSMutableDictionary *extraDictM = [NSMutableDictionary dictionaryWithDictionary:extra];
NSMutableDictionary *extraDataTemp = [NSMutableDictionary dictionary];
NSMutableDictionary *extraDataDictM = [NSMutableDictionary dictionaryWithDictionary:extra[kATUnityUserExtraDataKey]];
for (NSString *key in extraDataDictM.allKeys) {
if ([extraDataDictM[key] isKindOfClass:[NSString class]] || [extraDataDictM[key] isKindOfClass:[NSNumber class]]) {
[extraDataTemp setValue:extraDataDictM[key] forKey:key];
}
}
if ([extraDataTemp count]) {
[extraDictM setValue:extraDataTemp forKey:kATUnityUserExtraDataKey];
} else {
[extraDictM removeObjectForKey:kATUnityUserExtraDataKey];
}
extra = extraDictM;
}
if (extra[@"extra"] != nil) {
msgDict[@"extra"] = extra[@"extra"];
msgDict[@"rewarded"] = extra[@"rewarded"];
} else {
msgDict[@"extra"] = extra;
}
}
if ([extraDataTemp count]) {
[extraDictM setValue:extraDataTemp forKey:kATUnityUserExtraDataKey];
} else {
[extraDictM removeObjectForKey:kATUnityUserExtraDataKey];
paraDict[@"msg"] = msgDict;
if ([placementID isKindOfClass:[NSString class]] && ![ATUnityUtilities isEmpty:placementID]) {
msgDict[@"placement_id"] = placementID;
};
if ([error isKindOfClass:[NSError class]]) {
NSMutableDictionary *errorDict = [NSMutableDictionary dictionaryWithObject:[NSString stringWithFormat:@"%ld", error.code] forKey:@"code"];
if (![ATUnityUtilities isEmpty:error.userInfo[NSLocalizedDescriptionKey]]) {
errorDict[@"desc"] = [NSString stringWithFormat:@"%@",error.userInfo[NSLocalizedDescriptionKey]];
} else {
errorDict[@"desc"] = @"";
}
if (![ATUnityUtilities isEmpty:error.userInfo[NSLocalizedFailureReasonErrorKey]]) {
errorDict[@"reason"] = [NSString stringWithFormat:@"%@",error.userInfo[NSLocalizedFailureReasonErrorKey]];
} else {
errorDict[@"reason"] = @"";
}
msgDict[@"error"] = errorDict;
}
extra = extraDictM;
}
if (extra[@"extra"] != nil) {
msgDict[@"extra"] = extra[@"extra"];
msgDict[@"rewarded"] = extra[@"rewarded"];
} else {
msgDict[@"extra"] = extra;
[self callbackForKey:placementID]([self scriptWrapperClass].UTF8String, paraDict.jsonString.UTF8String);
}
}
} @catch (NSException *exception) {
paraDict[@"msg"] = msgDict;
if ([placementID isKindOfClass:[NSString class]] && ![ATUnityUtilities isEmpty:placementID]) {
msgDict[@"placement_id"] = placementID;
};
if ([error isKindOfClass:[NSError class]]) {
NSMutableDictionary *errorDict = [NSMutableDictionary dictionaryWithObject:[NSString stringWithFormat:@"%ld", error.code] forKey:@"code"];
if (![ATUnityUtilities isEmpty:error.userInfo[NSLocalizedDescriptionKey]]) {
errorDict[@"desc"] = [NSString stringWithFormat:@"%@",error.userInfo[NSLocalizedDescriptionKey]];
} else {
errorDict[@"desc"] = @"";
}
if (![ATUnityUtilities isEmpty:error.userInfo[NSLocalizedFailureReasonErrorKey]]) {
errorDict[@"reason"] = [NSString stringWithFormat:@"%@",error.userInfo[NSLocalizedFailureReasonErrorKey]];
} else {
errorDict[@"reason"] = @"";
}
msgDict[@"error"] = errorDict;
}
[self callbackForKey:placementID]([self scriptWrapperClass].UTF8String, paraDict.jsonString.UTF8String);
}
}
} @finally {}
});
}
- (NSArray *)jsonStrToArray:(NSString *)jsonString{
NSError *error;
NSArray *array = [NSArray array];
@try {
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
array = [NSJSONSerialization JSONObjectWithData:jsonData
options:NSJSONReadingMutableContainers
error:&error];
options:NSJSONReadingMutableContainers
error:&error];
if(error){
return [NSArray array];
}
} @catch (NSException *exception) {
NSLog(@"jsonStrToArray --- exception:%@",exception);
} @finally {}
return array;
}