Badminton-Scoreboard/Libraries/com.unity.ads/Plugins/iOS/UnityJsonAdditions.m
2023-10-08 10:24:48 +08:00

140 lines
6.7 KiB
Objective-C

#import "UnityJsonAdditions.h"
NSString *const NSUnityPurchasingTransactionDetailErrorDomain = @"NSUPURTransactionDetailErrorDomain";
NSString *const NSUnityPurchasingTransactionErrorDetailErrorDomain = @"NSUPURTransactionErrorDetailErrorDomain";
UPURTransactionError UPURTransactionErrorFromNSString(NSString *error) {
if (error) {
if ([error isEqualToString:@"NotSupported"]) {
return kUPURTransactionErrorNotSupported;
} else if ([error isEqualToString:@"Item_Unavailable"]) {
return kUPURTransactionErrorItemUnavailable;
} else if ([error isEqualToString:@"UserCancelled"]) {
return kUPURTransactionErrorUserCancelled;
} else if ([error isEqualToString:@"NetworkError"]) {
return kUPURTransactionErrorNetworkError;
} else if ([error isEqualToString:@"ServerError"]) {
return kUPURTransactionErrorServerError;
} else if ([error isEqualToString:@"UnknownError"]) {
return kUPURTransactionErrorUnknownError;
} else {
return kUPURTransactionErrorUnknownError;
}
} else {
return kUPURTransactionErrorUnknownError;
}
}
UPURStore UPURStoreFromNSString(NSString *store) {
if (store) {
if ([store isEqualToString:@"GooglePlay"]) {
return kUPURStoreGooglePlay;
} else if ([store isEqualToString:@"AmazonAppStore"]) {
return kUPURStoreAmazonAppStore;
} else if ([store isEqualToString:@"CloudMoolah"]) {
return kUPURStoreCloudMoolah;
} else if ([store isEqualToString:@"SamsungApps"]) {
return kUPURStoreSamsungApps;
} else if ([store isEqualToString:@"XiaomiMiPay"]) {
return kUPURStoreXiaomiMiPay;
} else if ([store isEqualToString:@"MacAppStore"]) {
return kUPURStoreMacAppStore;
} else if ([store isEqualToString:@"AppleAppStore"]) {
return kUPURStoreAppleAppStore;
} else if ([store isEqualToString:@"WinRT"]) {
return kUPURStoreWinRT;
} else if ([store isEqualToString:@"TizenStore"]) {
return kUPURStoreTizenStore;
} else if ([store isEqualToString:@"FacebookStore"]) {
return kUPURStoreFacebookStore;
} else if ([store isEqualToString:@"NotSpecified"]) {
return kUPURStoreNotSpecified;
} else {
return kUPURStoreNotSpecified;
}
} else {
return kUPURStoreNotSpecified;
}
}
@implementation UPURTransactionDetails (UnityJsonAdditions)
// must check error before using object
+(instancetype)buildWithJson:(NSString *)json error:(NSError **)error {
id object = [NSJSONSerialization JSONObjectWithData:[json dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:error];
if (*error) {
NSLog(@"UPURTransactionDetails Unable to serialize from json: %@", [*error description]);
return nil;
} else if ([object isKindOfClass:[NSDictionary class]]) {
return [UPURTransactionDetails build:^(UPURTransactionDetailsBuilder *builder) {
NSDictionary *dictionary = (NSDictionary *) object;
builder.productId = [dictionary valueForKey:@"productId"];
builder.transactionId = [dictionary valueForKey:@"transactionId"];
builder.receipt = [dictionary valueForKey:@"receipt"];
builder.price = [dictionary valueForKey:@"price"];
builder.currency = [dictionary valueForKey:@"currency"];
id extras = [dictionary valueForKey:@"extras"];
if (![extras isKindOfClass:[NSNull class]]) {
builder.extras = extras;
}
}];
} else {
NSMutableDictionary *info = [NSMutableDictionary dictionary];
[info setValue:@"UPURTransactionDetails Expected json object to be a NSDictionary but it was not" forKey:@"Reason"];
*error = [NSError errorWithDomain:NSUnityPurchasingTransactionDetailErrorDomain code:1 userInfo:info];
return nil;
}
}
@end
@implementation UPURTransactionErrorDetails (UnityJsonAdditions)
// must check error before using object
+(instancetype)buildWithJson:(NSString *)json error:(NSError **)error {
id object = [NSJSONSerialization JSONObjectWithData:[json dataUsingEncoding:NSUTF8StringEncoding] options: NSJSONReadingAllowFragments error:error];
if (*error) {
NSLog(@"UPURTransactionErrorDetails Unable to serialize from json: %@", [*error description]);
return nil;
} else if ([object isKindOfClass:[NSDictionary class]]) {
return [UPURTransactionErrorDetails build:^(UPURTransactionErrorDetailsBuilder *builder) {
NSDictionary *dictionary = (NSDictionary *) object;
builder.transactionError = UPURTransactionErrorFromNSString([dictionary valueForKey:@"transactionError"]);
builder.exceptionMessage = [dictionary valueForKey:@"exceptionMessage"];
builder.store = UPURStoreFromNSString([dictionary valueForKey:@"store"]);
builder.storeSpecificErrorCode = [dictionary valueForKey:@"storeSpecificErrorCode"];
id extras = [dictionary valueForKey:@"extras"];
if (![extras isKindOfClass:[NSNull class]]) {
builder.extras = extras;
}
}];
} else {
NSMutableDictionary *info = [NSMutableDictionary dictionary];
[info setValue:@"UPURTransactionErrorDetails Expected json object to be a NSDictionary but it was not" forKey:@"Reason"];
*error = [NSError errorWithDomain:NSUnityPurchasingTransactionErrorDetailErrorDomain code:1 userInfo:info];
return nil;
}
}
@end
@implementation UMONCustomEvent (UnityJsonAdditions)
// must check error before using object
+(instancetype)buildWithJson:(NSString *)json error: (NSError **)error {
id object = [NSJSONSerialization JSONObjectWithData:[json dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:error];
if (*error) {
NSLog(@"UMONCustomEvent Unable to serialize from json: %@", [*error description]);
return nil;
} else if ([object isKindOfClass:[NSDictionary class]]) {
return [UMONCustomEvent build:^(UMONCustomEventBuilder *builder) {
NSDictionary *dictionary = (NSDictionary *) object;
builder.category = [dictionary valueForKey:@"category"];
builder.type = [dictionary valueForKey:@"type"];
builder.userInfo = [dictionary valueForKey:@"userInfo"];
}];
} else {
NSMutableDictionary *info = [NSMutableDictionary dictionary];
[info setValue:@"UMONCustomEvent Expected json object to be a NSDictionary but it was not" forKey:@"Reason"];
*error = [NSError errorWithDomain:NSUnityPurchasingTransactionDetailErrorDomain code:1 userInfo:info];
return nil;
}
}
@end