update 1.1.25

This commit is contained in:
2024-03-12 02:17:14 +08:00
parent 5a00a4438a
commit 1a9e55a8a3
346 changed files with 1902 additions and 4759 deletions

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 8b14aff8aa065434191a5cc12d615e63
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,27 @@
//
// ATAutolayoutCategories.h
// ATSDKDemo
//
// Created by Martin Lau on 24/04/2018.
// Copyright © 2018 Martin Lau. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface UIView(Autolayout)
+(instancetype) autolayoutView;
- (NSArray<__kindof NSLayoutConstraint *> *)addConstraintsWithVisualFormat:(NSString *)format options:(NSLayoutFormatOptions)opts metrics:(NSDictionary<NSString *,id> *)metrics views:(NSDictionary<NSString *, id> *)views;
-(NSLayoutConstraint*)addConstraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c;
@end
@interface UILabel(Autolayout)
+(instancetype) autolayoutLabelFont:(UIFont*)font textColor:(UIColor*)textColor textAlignment:(NSTextAlignment)textAlignment;
/**
* textAlignment defaults to NSTextAlignmentLeft
*/
+(instancetype) autolayoutLabelFont:(UIFont*)font textColor:(UIColor*)textColor;
@end
@interface UIButton(Autolayout)
+(instancetype) autolayoutButtonWithType:(UIButtonType)type;
@end

View File

@@ -0,0 +1,27 @@
fileFormatVersion: 2
guid: e2269e56e3e70488eb7d644a51a86da0
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 1
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,52 @@
//
// ATAutolayoutCategories.m
// ATSDKDemo
//
// Created by Martin Lau on 24/04/2018.
// Copyright © 2018 Martin Lau. All rights reserved.
//
#import "ATAutolayoutCategories.h"
@implementation UIView(Autolayout)
+(instancetype) autolayoutView {
UIView *view = [[self alloc] init];
view.translatesAutoresizingMaskIntoConstraints = NO;
return view;
}
- (NSArray<__kindof NSLayoutConstraint *> *)addConstraintsWithVisualFormat:(NSString *)format options:(NSLayoutFormatOptions)opts metrics:(NSDictionary<NSString *,id> *)metrics views:(NSDictionary<NSString *, id> *)views {
NSArray<__kindof NSLayoutConstraint*>* constraints = [NSLayoutConstraint constraintsWithVisualFormat:format options:opts metrics:metrics views:views];
[self addConstraints:constraints];
return constraints;
}
-(NSLayoutConstraint*)addConstraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c {
NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:view1 attribute:attr1 relatedBy:relation toItem:view2 attribute:attr2 multiplier:multiplier constant:c];
[self addConstraint:constraint];
return constraint;
}
@end
@implementation UILabel(Autolayout)
+(instancetype) autolayoutLabelFont:(UIFont*)font textColor:(UIColor*)textColor textAlignment:(NSTextAlignment)textAlignment {
UILabel *label = [UILabel autolayoutView];
label.translatesAutoresizingMaskIntoConstraints = NO;
label.font = font;
label.textColor = textColor;
label.textAlignment = textAlignment;
return label;
}
+(instancetype) autolayoutLabelFont:(UIFont*)font textColor:(UIColor*)textColor {
return [self autolayoutLabelFont:font textColor:textColor textAlignment:NSTextAlignmentLeft];
}
@end
@implementation UIButton(Autolayout)
+(instancetype) autolayoutButtonWithType:(UIButtonType)type {
UIButton *button = [UIButton buttonWithType:type];
button.translatesAutoresizingMaskIntoConstraints = NO;
return button;
}
@end

View File

@@ -0,0 +1,37 @@
fileFormatVersion: 2
guid: 131f232c2b292473c90a634675348a96
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 0
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
- first:
iPhone: iOS
second:
enabled: 1
settings: {}
- first:
tvOS: tvOS
second:
enabled: 1
settings: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,13 @@
//
// ATBannerAdWrapper.h
// UnityContainer
//
// Created by Martin Lau on 2019/1/8.
// Copyright © 2019 Martin Lau. All rights reserved.
//
#import "ATBaseUnityWrapper.h"
@interface ATBannerAdWrapper : ATBaseUnityWrapper
@end

View File

@@ -0,0 +1,27 @@
fileFormatVersion: 2
guid: c19226014609a4fcc88f3f8b7d17926b
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 1
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,263 @@
//
// ATBannerAdWrapper.m
// UnityContainer
//
// Created by Martin Lau on 2019/1/8.
// Copyright © 2019 Martin Lau. All rights reserved.
//
#import "ATBannerAdWrapper.h"
#import <AnyThinkBanner/AnyThinkBanner.h>
#import "ATUnityUtilities.h"
//5.6.6 admob banner import
//#import <GoogleMobileAds/GoogleMobileAds.h>
@interface ATBannerAdWrapper()<ATBannerDelegate>
@property(nonatomic, readonly) NSMutableDictionary<NSString*, ATBannerView*> *bannerViewStorage;
@property(nonatomic, readonly) BOOL interstitialOrRVBeingShown;
@end
static NSString *kATBannerSizeUsesPixelFlagKey = @"uses_pixel";
static NSString *kATBannerAdLoadingExtraInlineAdaptiveWidthKey = @"inline_adaptive_width";
static NSString *kATBannerAdLoadingExtraInlineAdaptiveOrientationKey = @"inline_adaptive_orientation";
@implementation ATBannerAdWrapper
+(instancetype)sharedInstance {
static ATBannerAdWrapper *sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[ATBannerAdWrapper alloc] init];
});
return sharedInstance;
}
-(instancetype) init {
self = [super init];
if (self != nil) {
_bannerViewStorage = [NSMutableDictionary<NSString*, ATBannerView*> dictionary];
}
return self;
}
-(NSString*) scriptWrapperClass {
return @"ATBannerAdWrapper";
}
- (id)selWrapperClassWithDict:(NSDictionary *)dict callback:(void(*)(const char*, const char*))callback {
NSString *selector = dict[@"selector"];
NSArray<NSString*>* arguments = dict[@"arguments"];
NSString *firstObject = @"";
NSString *secondObject = @"";
NSString *lastObject = @"";
if (![ATUnityUtilities isEmpty:arguments]) {
for (int i = 0; i < arguments.count; i++) {
if (i == 0) { firstObject = arguments[i]; }
else if (i == 1) { secondObject = arguments[i]; }
else { lastObject = arguments[i]; }
}
}
if ([selector isEqualToString:@"loadBannerAdWithPlacementID:customDataJSONString:callback:"]) {
[self loadBannerAdWithPlacementID:firstObject customDataJSONString:secondObject callback:callback];
} else if ([selector isEqualToString:@"showBannerAdWithPlacementID:rect:extraJsonString:"]) {
[self showBannerAdWithPlacementID:firstObject rect:secondObject extraJsonString:lastObject];
} else if ([selector isEqualToString:@"removeBannerAdWithPlacementID:"]) {
[self removeBannerAdWithPlacementID:firstObject];
} else if ([selector isEqualToString:@"showBannerAdWithPlacementID:"]) {
[self showBannerAdWithPlacementID:firstObject];
} else if ([selector isEqualToString:@"hideBannerAdWithPlacementID:"]) {
[self hideBannerAdWithPlacementID:firstObject];
} else if ([selector isEqualToString:@"checkAdStatus:"]) {
return [self checkAdStatus:firstObject];
} else if ([selector isEqualToString:@"clearCache"]) {
[self clearCache];
} else if ([selector isEqualToString:@"getValidAdCaches:"]) {
return [self getValidAdCaches:firstObject];
}
return nil;
}
-(void) loadBannerAdWithPlacementID:(NSString*)placementID customDataJSONString:(NSString*)customDataJSONString callback:(void(*)(const char*, const char*))callback {
[self setCallBack:callback forKey:placementID];
NSMutableDictionary *extra = [NSMutableDictionary dictionary];
if ([customDataJSONString isKindOfClass:[NSString class]] && [customDataJSONString length] > 0) {
NSDictionary *extraDict = [NSJSONSerialization JSONObjectWithData:[customDataJSONString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];
NSLog(@"extraDict = %@", extraDict);
CGFloat scale = [extraDict[kATBannerSizeUsesPixelFlagKey] boolValue] ? [UIScreen mainScreen].nativeScale : 1.0f;
if ([extraDict[kATAdLoadingExtraBannerAdSizeKey] isKindOfClass:[NSString class]] && [[extraDict[kATAdLoadingExtraBannerAdSizeKey] componentsSeparatedByString:@"x"] count] == 2) {
NSArray<NSString*>* com = [extraDict[kATAdLoadingExtraBannerAdSizeKey] componentsSeparatedByString:@"x"];
extra[kATAdLoadingExtraBannerAdSizeKey] = [NSValue valueWithCGSize:CGSizeMake([com[0] doubleValue] / scale, [com[1] doubleValue] / scale)];
}
// // admob banner5.6.6
// if (extraDict[kATBannerAdLoadingExtraInlineAdaptiveWidthKey] != nil && extraDict[kATBannerAdLoadingExtraInlineAdaptiveOrientationKey] != nil) {
// //GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth
// //GADPortraitAnchoredAdaptiveBannerAdSizeWithWidth
// //GADLandscapeAnchoredAdaptiveBannerAdSizeWithWidth
// CGFloat admobBannerWidth = [extraDict[kATBannerAdLoadingExtraInlineAdaptiveWidthKey] doubleValue];
// GADAdSize admobSize;
// if ([extraDict[kATBannerAdLoadingExtraInlineAdaptiveOrientationKey] integerValue] == 1) {
// admobSize = GADPortraitAnchoredAdaptiveBannerAdSizeWithWidth(admobBannerWidth);
// } else if ([extraDict[kATBannerAdLoadingExtraInlineAdaptiveOrientationKey] integerValue] == 2) {
// admobSize = GADLandscapeAnchoredAdaptiveBannerAdSizeWithWidth(admobBannerWidth);
// } else {
// admobSize = GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(admobBannerWidth);
// }
//
// extra[kATAdLoadingExtraAdmobBannerSizeKey] = [NSValue valueWithCGSize:admobSize.size];
// extra[kATAdLoadingExtraAdmobAdSizeFlagsKey] = @(admobSize.flags);
// }
}
if (extra[kATAdLoadingExtraBannerAdSizeKey] == nil) {
extra[kATAdLoadingExtraBannerAdSizeKey] = [NSValue valueWithCGSize:CGSizeMake(320.0f, 50.0f)];
}
NSLog(@"extra = %@", extra);
[[ATAdManager sharedManager] loadADWithPlacementID:placementID extra:extra delegate:self];
}
-(NSString*) checkAdStatus:(NSString *)placementID {
ATCheckLoadModel *checkLoadModel = [[ATAdManager sharedManager] checkBannerLoadStatusForPlacementID:placementID];
NSMutableDictionary *statusDict = [NSMutableDictionary dictionary];
statusDict[@"isLoading"] = @(checkLoadModel.isLoading);
statusDict[@"isReady"] = @(checkLoadModel.isReady);
statusDict[@"adInfo"] = checkLoadModel.adOfferInfo;
NSLog(@"ATBannerAdWrapper::statusDict = %@", statusDict);
return statusDict.jsonFilterString;
}
-(NSString*) getValidAdCaches:(NSString *)placementID {
NSArray *array = [[ATAdManager sharedManager] getBannerValidAdsForPlacementID:placementID];
NSLog(@"ATNativeAdWrapper::array = %@", array);
return array.jsonFilterString;
}
UIEdgeInsets SafeAreaInsets_ATUnityBanner() {
return ([[UIApplication sharedApplication].keyWindow respondsToSelector:@selector(safeAreaInsets)] ? [UIApplication sharedApplication].keyWindow.safeAreaInsets : UIEdgeInsetsZero);
}
-(void) showBannerAdWithPlacementID:(NSString*)placementID rect:(NSString*)rect extraJsonString:(NSString*)extraJsonString {
dispatch_async(dispatch_get_main_queue(), ^{
if ([rect isKindOfClass:[NSString class]] && [rect dataUsingEncoding:NSUTF8StringEncoding] != nil) {
NSDictionary *extraDict = ([extraJsonString isKindOfClass:[NSString class]] && [extraJsonString dataUsingEncoding:NSUTF8StringEncoding] != nil) ? [NSJSONSerialization JSONObjectWithData:[extraJsonString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil] : nil;
NSDictionary *rectDict = [NSJSONSerialization JSONObjectWithData:[rect dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];
NSLog(@"rectDict = %@", rectDict);
CGFloat scale = [rectDict[kATBannerSizeUsesPixelFlagKey] boolValue] ? [UIScreen mainScreen].nativeScale : 1.0f;
ATBannerView *bannerView = [[ATAdManager sharedManager] retrieveBannerViewForPlacementID:placementID scene:extraDict[kATUnityUtilitiesAdShowingExtraScenarioKey]];
bannerView.delegate = self;
UIButton *bannerCointainer = [UIButton buttonWithType:UIButtonTypeCustom];
[bannerCointainer addTarget:self action:@selector(noop) forControlEvents:UIControlEventTouchUpInside];
NSString *position = rectDict[@"position"];
CGSize totalSize = [UIApplication sharedApplication].keyWindow.rootViewController.view.bounds.size;
UIEdgeInsets safeAreaInsets = SafeAreaInsets_ATUnityBanner();
if ([@"top" isEqualToString:position]) {
bannerCointainer.frame = CGRectMake((totalSize.width - CGRectGetWidth(bannerView.bounds)) / 2.0f, safeAreaInsets.top , CGRectGetWidth(bannerView.bounds), CGRectGetHeight(bannerView.bounds));
} else if ([@"bottom" isEqualToString:position]) {
bannerCointainer.frame = CGRectMake((totalSize.width - CGRectGetWidth(bannerView.bounds)) / 2.0f, totalSize.height - safeAreaInsets.bottom - CGRectGetHeight(bannerView.bounds) , CGRectGetWidth(bannerView.bounds), CGRectGetHeight(bannerView.bounds));
} else {
bannerCointainer.frame = CGRectMake([rectDict[@"x"] doubleValue] / scale, [rectDict[@"y"] doubleValue] / scale, [rectDict[@"width"] doubleValue] / scale, [rectDict[@"height"] doubleValue] / scale);
}
bannerView.frame = bannerCointainer.bounds;
[bannerCointainer addSubview:bannerView];
// bannerCointainer.layer.borderColor = [UIColor redColor].CGColor;
// bannerCointainer.layer.borderWidth = .5f;
[[UIApplication sharedApplication].keyWindow.rootViewController.view addSubview:bannerCointainer];
self->_bannerViewStorage[placementID] = bannerCointainer;
}
});
}
-(void) noop {
}
-(void) removeBannerAdWithPlacementID:(NSString*)placementID {
dispatch_async(dispatch_get_main_queue(), ^{
[self->_bannerViewStorage[placementID] removeFromSuperview];
[self->_bannerViewStorage removeObjectForKey:placementID];
});
}
-(void) showBannerAdWithPlacementID:(NSString*)placementID {
dispatch_async(dispatch_get_main_queue(), ^{
ATBannerView *bannerView = self->_bannerViewStorage[placementID];
if (bannerView.superview != nil && !_interstitialOrRVBeingShown) { bannerView.hidden = NO; }
});
}
-(void) hideBannerAdWithPlacementID:(NSString*)placementID {
dispatch_async(dispatch_get_main_queue(), ^{
ATBannerView *bannerView = self->_bannerViewStorage[placementID];
if (bannerView.superview != nil) { bannerView.hidden = YES; }
});
}
-(void) clearCache {
}
#pragma mark - banner delegate method(s)
-(void) didFinishLoadingADWithPlacementID:(NSString *)placementID {
[self invokeCallback:@"OnBannerAdLoad" placementID:placementID error:nil extra:nil];
}
-(void) didFailToLoadADWithPlacementID:(NSString*)placementID error:(NSError*)error {
error = error != nil ? error : [NSError errorWithDomain:@"com.anythink.Unity3DPackage" code:100001 userInfo:@{NSLocalizedDescriptionKey:@"AT has failed to load ad", NSLocalizedFailureReasonErrorKey:@"AT has failed to load ad"}];
[self invokeCallback:@"OnBannerAdLoadFail" placementID:placementID error:error extra:nil];
}
// ad
- (void)didStartLoadingADSourceWithPlacementID:(NSString *)placementID extra:(NSDictionary*)extra{
[self invokeCallback:@"startLoadingADSource" placementID:placementID error:nil extra:extra];
}
- (void)didFinishLoadingADSourceWithPlacementID:(NSString *)placementID extra:(NSDictionary*)extra{
[self invokeCallback:@"finishLoadingADSource" placementID:placementID error:nil extra:extra];
}
- (void)didFailToLoadADSourceWithPlacementID:(NSString*)placementID extra:(NSDictionary*)extra error:(NSError*)error{
[self invokeCallback:@"failToLoadADSource" placementID:placementID error:error extra:extra];
}
// bidding
- (void)didStartBiddingADSourceWithPlacementID:(NSString *)placementID extra:(NSDictionary*)extra{
[self invokeCallback:@"startBiddingADSource" placementID:placementID error:nil extra:extra];
}
- (void)didFinishBiddingADSourceWithPlacementID:(NSString *)placementID extra:(NSDictionary*)extra{
[self invokeCallback:@"finishBiddingADSource" placementID:placementID error:nil extra:extra];
}
- (void)didFailBiddingADSourceWithPlacementID:(NSString*)placementID extra:(NSDictionary*)extra error:(NSError*)error{
[self invokeCallback:@"failBiddingADSource" placementID:placementID error:error extra:extra];
}
-(void) bannerView:(ATBannerView *)bannerView didShowAdWithPlacementID:(NSString *)placementID extra:(NSDictionary *)extra {
[self invokeCallback:@"OnBannerAdImpress" placementID:placementID error:nil extra:extra];
}
-(void) bannerView:(ATBannerView*)bannerView didClickWithPlacementID:(NSString*)placementID extra:(NSDictionary *)extra {
[self invokeCallback:@"OnBannerAdClick" placementID:placementID error:nil extra:extra];
}
-(void) bannerView:(ATBannerView *)bannerView didTapCloseButtonWithPlacementID:(NSString *)placementID extra:(NSDictionary *)extra {
[self invokeCallback:@"OnBannerAdCloseButtonTapped" placementID:placementID error:nil extra:extra];
}
-(void) bannerView:(ATBannerView*)bannerView didCloseWithPlacementID:(NSString*)placementID extra:(NSDictionary *)extra {
[self invokeCallback:@"OnBannerAdClose" placementID:placementID error:nil extra:extra];
}
-(void) bannerView:(ATBannerView *)bannerView didAutoRefreshWithPlacement:(NSString *)placementID extra:(NSDictionary *)extra {
[self invokeCallback:@"OnBannerAdAutoRefresh" placementID:placementID error:nil extra:extra];
}
-(void) bannerView:(ATBannerView *)bannerView failedToAutoRefreshWithPlacementID:(NSString *)placementID error:(NSError *)error {
error = error != nil ? error : [NSError errorWithDomain:@"com.anythink.Unity3DPackage" code:100001 userInfo:@{NSLocalizedDescriptionKey:@"AT has failed to refresh ad", NSLocalizedFailureReasonErrorKey:@"AT has failed to refresh ad"}];
[self invokeCallback:@"OnBannerAdAutoRefreshFail" placementID:placementID error:error extra:nil];
}
@end

View File

@@ -0,0 +1,37 @@
fileFormatVersion: 2
guid: b85f6b7934de2474ca8535fb6349cc73
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 0
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
- first:
iPhone: iOS
second:
enabled: 1
settings: {}
- first:
tvOS: tvOS
second:
enabled: 1
settings: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,16 @@
//
// ATBaseUnityWrapper.h
// UnityContainer
//
// Created by Martin Lau on 08/08/2018.
// Copyright © 2018 Martin Lau. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "ATUnityWrapper.h"
@interface ATBaseUnityWrapper : NSObject<ATUnityWrapper>
-(NSString*)scriptWrapperClass;
-(id)selWrapperClassWithDict:(NSDictionary *)dict callback:(void(*)(const char*, const char*))callback;
-(void) invokeCallback:(NSString*)callback placementID:(NSString*)placementID error:(NSError*)error extra:(NSDictionary*)extra;
- (NSArray *)jsonStrToArray:(NSString *)jsonString;
@end

View File

@@ -0,0 +1,27 @@
fileFormatVersion: 2
guid: 32bcab57187f846e2b39fc622779e90a
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 1
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,150 @@
//
// ATBaseUnityWrapper.m
// UnityContainer
//
// Created by Martin Lau on 08/08/2018.
// Copyright © 2018 Martin Lau. All rights reserved.
//
#import "ATBaseUnityWrapper.h"
#import "ATUnityUtilities.h"
@interface ATBaseUnityWrapper()
@property(nonatomic, readonly) NSMutableDictionary<NSString*, NSValue*> *callbacks;
@property(nonatomic, readonly) dispatch_queue_t callbackAccessQueue;
@end
@implementation ATBaseUnityWrapper
+(instancetype) sharedInstance {
return nil;
}
-(instancetype) init {
self = [super init];
if (self != nil) {
_callbacks = [NSMutableDictionary<NSString*, NSValue*> dictionary];
_callbackAccessQueue = dispatch_queue_create("com.anythink.UnityPackage", DISPATCH_QUEUE_CONCURRENT);
}
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];
});
}
-(void) removeCallbackForKey:(NSString *)key {
__weak ATBaseUnityWrapper* weakSelf = self;
if ([key length] > 0)
dispatch_barrier_async(_callbackAccessQueue, ^{
[weakSelf.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];
});
}
return callback;
}
-(NSString*)scriptWrapperClass {
return @"";
}
- (id)selWrapperClassWithDict:(NSDictionary *)dict callback:(void(*)(const char*, const char*))callback {
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) {
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;
}
}
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);
}
}
}
- (NSArray *)jsonStrToArray:(NSString *)jsonString{
NSError *error;
NSArray *array = [NSArray array];
@try {
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
array = [NSJSONSerialization JSONObjectWithData:jsonData
options:NSJSONReadingMutableContainers
error:&error];
if(error){
return [NSArray array];
}
} @catch (NSException *exception) {
NSLog(@"jsonStrToArray --- exception:%@",exception);
} @finally {}
return array;
}
@end

View File

@@ -0,0 +1,37 @@
fileFormatVersion: 2
guid: fc3b1f55f3e0a48b7bca46a18bd3d474
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 0
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
- first:
iPhone: iOS
second:
enabled: 1
settings: {}
- first:
tvOS: tvOS
second:
enabled: 1
settings: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,12 @@
//
// ATInterstitialAdWrapper.h
// UnityContainer
//
// Created by Martin Lau on 2019/1/8.
// Copyright © 2019 Martin Lau. All rights reserved.
//
#import "ATBaseUnityWrapper.h"
@interface ATInterstitialAdWrapper : ATBaseUnityWrapper
@end

View File

@@ -0,0 +1,27 @@
fileFormatVersion: 2
guid: c215d6991d4a34405a81e619ee15e66a
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 1
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,309 @@
//
// ATInterstitialAdWrapper.m
// UnityContainer
//
// Created by Martin Lau on 2019/1/8.
// Copyright © 2019 Martin Lau. All rights reserved.
//
#import "ATInterstitialAdWrapper.h"
#import "ATUnityUtilities.h"
#import <AnyThinkInterstitial/AnyThinkInterstitial.h>
NSString *const kLoadUseRVAsInterstitialKey = @"UseRewardedVideoAsInterstitial";
NSString *const kInterstitialExtraAdSizeKey = @"interstitial_ad_size";
static NSString *kATInterstitialSizeUsesPixelFlagKey = @"uses_pixel";
@interface ATInterstitialAdWrapper()<ATInterstitialDelegate>
@end
@implementation ATInterstitialAdWrapper
+(instancetype)sharedInstance {
static ATInterstitialAdWrapper *sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[ATInterstitialAdWrapper alloc] init];
});
return sharedInstance;
}
-(NSString*) scriptWrapperClass {
return @"ATInterstitialAdWrapper";
}
- (id)selWrapperClassWithDict:(NSDictionary *)dict callback:(void(*)(const char*, const char*))callback {
NSString *selector = dict[@"selector"];
NSArray<NSString*>* arguments = dict[@"arguments"];
NSString *firstObject = @"";
NSString *lastObject = @"";
if (![ATUnityUtilities isEmpty:arguments]) {
for (int i = 0; i < arguments.count; i++) {
if (i == 0) { firstObject = arguments[i]; }
else { lastObject = arguments[i]; }
}
}
if ([selector isEqualToString:@"loadInterstitialAdWithPlacementID:customDataJSONString:callback:"]) {
[self loadInterstitialAdWithPlacementID:firstObject customDataJSONString:lastObject callback:callback];
} else if ([selector isEqualToString:@"interstitialAdReadyForPlacementID:"]) {
return [NSNumber numberWithBool:[self interstitialAdReadyForPlacementID:firstObject]];
} else if ([selector isEqualToString:@"showInterstitialAdWithPlacementID:extraJsonString:"]) {
[self showInterstitialAdWithPlacementID:firstObject extraJsonString:lastObject];
} else if ([selector isEqualToString:@"checkAdStatus:"]) {
return [self checkAdStatus:firstObject];
} else if ([selector isEqualToString:@"clearCache"]) {
[self clearCache];
} else if ([selector isEqualToString:@"getValidAdCaches:"]) {
return [self getValidAdCaches:firstObject];
}else if ([selector isEqualToString:@"entryScenarioWithPlacementID:scenarioID:"]) {
[self entryScenarioWithPlacementID:firstObject scenarioID:lastObject];
}
// auto
else if ([selector isEqualToString:@"addAutoLoadAdPlacementID:callback:"]){
[self addAutoLoadAdPlacementID:firstObject callback:callback];
}else if ([selector isEqualToString:@"removeAutoLoadAdPlacementID:"]){
[self removeAutoLoadAdPlacementID:firstObject];
}else if ([selector isEqualToString:@"autoLoadInterstitialAdReadyForPlacementID:"]){
return [NSNumber numberWithBool:[self autoLoadInterstitialAdReadyForPlacementID:firstObject]];
}else if ([selector isEqualToString:@"getAutoValidAdCaches:"]){
return [self getAutoValidAdCaches:firstObject];
}else if ([selector isEqualToString:@"setAutoLocalExtra:customDataJSONString:"]){
[self setAutoLocalExtra:firstObject customDataJSONString:lastObject];
}else if ([selector isEqualToString:@"entryAutoAdScenarioWithPlacementID:scenarioID:"]){
[self entryAutoAdScenarioWithPlacementID:firstObject scenarioID:lastObject];
}else if ([selector isEqualToString:@"showAutoInterstitialAd:extraJsonString:"]){
[self showAutoInterstitialAd:firstObject extraJsonString:lastObject];
}else if ([selector isEqualToString:@"checkAutoAdStatus:"]) {
return [self checkAutoAdStatus:firstObject];
}
return nil;
}
-(void) loadInterstitialAdWithPlacementID:(NSString*)placementID customDataJSONString:(NSString*)customDataJSONString callback:(void(*)(const char*, const char*))callback {
[self setCallBack:callback forKey:placementID];
NSMutableDictionary *extra = [NSMutableDictionary dictionary];
if ([customDataJSONString isKindOfClass:[NSString class]] && [customDataJSONString length] > 0) {
NSDictionary *extraDict = [NSJSONSerialization JSONObjectWithData:[customDataJSONString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];
NSLog(@"extraDict = %@", extraDict);
if (extraDict[kLoadUseRVAsInterstitialKey] != nil) {
extra[kATInterstitialExtraUsesRewardedVideo] = @([extraDict[kLoadUseRVAsInterstitialKey] boolValue]);
}
CGFloat scale = [extraDict[kATInterstitialSizeUsesPixelFlagKey] boolValue] ? [UIScreen mainScreen].nativeScale : 1.0f;
if ([extraDict[kInterstitialExtraAdSizeKey] isKindOfClass:[NSString class]] && [[extraDict[kInterstitialExtraAdSizeKey] componentsSeparatedByString:@"x"] count] == 2) {
NSArray<NSString*>* com = [extraDict[kInterstitialExtraAdSizeKey] componentsSeparatedByString:@"x"];
extra[kATInterstitialExtraAdSizeKey] = [NSValue valueWithCGSize:CGSizeMake([com[0] doubleValue] / scale, [com[1] doubleValue] / scale)];
}
}
NSLog(@"ATInterstitialAdWrapper::extra = %@", extra);
[[ATAdManager sharedManager] loadADWithPlacementID:placementID extra:extra != nil ? extra : nil delegate:self];
}
-(BOOL) interstitialAdReadyForPlacementID:(NSString*)placementID {
return [[ATAdManager sharedManager] interstitialReadyForPlacementID:placementID];
}
-(NSString*) getValidAdCaches:(NSString *)placementID {
NSArray *array = [[ATAdManager sharedManager] getInterstitialValidAdsForPlacementID:placementID];
NSLog(@"ATNativeAdWrapper::array = %@", array);
return array.jsonFilterString;
}
-(void) showInterstitialAdWithPlacementID:(NSString*)placementID extraJsonString:(NSString*)extraJsonString {
NSDictionary *extraDict = ([extraJsonString isKindOfClass:[NSString class]] && [extraJsonString dataUsingEncoding:NSUTF8StringEncoding] != nil) ? [NSJSONSerialization JSONObjectWithData:[extraJsonString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil] : nil;
[[ATAdManager sharedManager] showInterstitialWithPlacementID:placementID scene:extraDict[kATUnityUtilitiesAdShowingExtraScenarioKey] inViewController:[UIApplication sharedApplication].delegate.window.rootViewController delegate:self];
}
-(NSString*) checkAdStatus:(NSString *)placementID {
ATCheckLoadModel *checkLoadModel = [[ATAdManager sharedManager] checkInterstitialLoadStatusForPlacementID:placementID];
NSMutableDictionary *statusDict = [NSMutableDictionary dictionary];
statusDict[@"isLoading"] = @(checkLoadModel.isLoading);
statusDict[@"isReady"] = @(checkLoadModel.isReady);
statusDict[@"adInfo"] = checkLoadModel.adOfferInfo;
NSLog(@"ATInterstitialAdWrapper::statusDict = %@", statusDict);
return statusDict.jsonFilterString;
}
- (void)entryScenarioWithPlacementID:(NSString *)placementID scenarioID:(NSString *)scenarioID{
[[ATAdManager sharedManager] entryInterstitialScenarioWithPlacementID:placementID scene:scenarioID];
}
-(void) clearCache {
}
#pragma mark - auto
-(void) addAutoLoadAdPlacementID:(NSString*)placementID callback:(void(*)(const char*, const char*))callback {
if (placementID == nil) {
return;
}
[ATInterstitialAutoAdManager sharedInstance].delegate = self;
NSArray *placementIDArray = [self jsonStrToArray:placementID];
[placementIDArray enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
[self setCallBack:callback forKey:obj];
NSLog(@" addAutoLoadAdPlacementID--%@",placementID);
}];
[[ATInterstitialAutoAdManager sharedInstance] addAutoLoadAdPlacementIDArray:placementIDArray];
}
-(void) removeAutoLoadAdPlacementID:(NSString*)placementID{
NSLog(@" removeAutoLoadAdPlacementID--%@",placementID);
if (placementID == nil) {
return;
}
NSArray *placementIDArray = [self jsonStrToArray:placementID];
[[ATInterstitialAutoAdManager sharedInstance] removeAutoLoadAdPlacementIDArray:placementIDArray];
}
-(BOOL) autoLoadInterstitialAdReadyForPlacementID:(NSString*)placementID {
NSLog(@"Unity: autoLoadInterstitialAdReadyForPlacementID--%@---%d",placementID,[[ATInterstitialAutoAdManager sharedInstance] autoLoadInterstitialReadyForPlacementID:placementID]);
return [[ATInterstitialAutoAdManager sharedInstance] autoLoadInterstitialReadyForPlacementID:placementID];
}
-(NSString*) getAutoValidAdCaches:(NSString *)placementID{
NSArray *array = [[ATInterstitialAutoAdManager sharedInstance] checkValidAdCachesWithPlacementID:placementID];
NSLog(@"Unity: getAutoValidAdCaches::array = %@", array);
return array.jsonFilterString;
}
-(NSString*) checkAutoAdStatus:(NSString *)placementID {
ATCheckLoadModel *checkLoadModel = [[ATInterstitialAutoAdManager sharedInstance] checkInterstitialLoadStatusForPlacementID:placementID];
NSMutableDictionary *statusDict = [NSMutableDictionary dictionary];
statusDict[@"isLoading"] = @(checkLoadModel.isLoading);
statusDict[@"isReady"] = @(checkLoadModel.isReady);
statusDict[@"adInfo"] = checkLoadModel.adOfferInfo;
NSLog(@":checkAutoAdStatus statusDict = %@", statusDict);
return statusDict.jsonFilterString;
}
-(void) setAutoLocalExtra:(NSString*)placementID customDataJSONString:(NSString*)customDataJSONString{
if ([customDataJSONString isKindOfClass:[NSString class]]) {
NSDictionary *extraDict = [NSJSONSerialization JSONObjectWithData:[customDataJSONString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];
NSMutableDictionary *extra = [NSMutableDictionary dictionary];
if ([extraDict isKindOfClass:[NSDictionary class]]) {
if (extraDict[kLoadUseRVAsInterstitialKey] != nil) {
extra[kATInterstitialExtraUsesRewardedVideo] = @([extraDict[kLoadUseRVAsInterstitialKey] boolValue]);
}
CGFloat scale = [extraDict[kATInterstitialSizeUsesPixelFlagKey] boolValue] ? [UIScreen mainScreen].nativeScale : 1.0f;
if ([extraDict[kInterstitialExtraAdSizeKey] isKindOfClass:[NSString class]] && [[extraDict[kInterstitialExtraAdSizeKey] componentsSeparatedByString:@"x"] count] == 2) {
NSArray<NSString*>* com = [extraDict[kInterstitialExtraAdSizeKey] componentsSeparatedByString:@"x"];
extra[kATInterstitialExtraAdSizeKey] = [NSValue valueWithCGSize:CGSizeMake([com[0] doubleValue] / scale, [com[1] doubleValue] / scale)];
}
}
NSLog(@"ATInterstitialAdWrapper::setAutoLocalExtra statusDict = %@", extraDict);
[[ATInterstitialAutoAdManager sharedInstance] setLocalExtra:extra placementID:placementID];
}
}
-(void) entryAutoAdScenarioWithPlacementID:(NSString*)placementID scenarioID:(NSString*)scenarioID{
NSLog(@"ATInterstitialAdWrapper::entryAutoAdScenarioWithPlacementID = %@ scenarioID = %@", placementID,scenarioID);
[[ATInterstitialAutoAdManager sharedInstance] entryAdScenarioWithPlacementID:placementID scenarioID:scenarioID];
}
-(void) showAutoInterstitialAd:(NSString*)placementID extraJsonString:(NSString*)extraJsonString {
NSDictionary *extraDict = ([extraJsonString isKindOfClass:[NSString class]] && [extraJsonString dataUsingEncoding:NSUTF8StringEncoding] != nil) ? [NSJSONSerialization JSONObjectWithData:[extraJsonString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil] : nil;
NSLog(@"ATInterstitialAdWrapper::showAutoInterstitialAd = %@ extraJsonString = %@", placementID,extraJsonString);
NSLog(@"ATInterstitialAdWrapper::extraDict = %@", extraDict);
[[ATInterstitialAutoAdManager sharedInstance] showAutoLoadInterstitialWithPlacementID:placementID scene:extraDict[kATUnityUtilitiesAdShowingExtraScenarioKey] inViewController:[UIApplication sharedApplication].delegate.window.rootViewController delegate:self];
}
#pragma mark - delegate method(s)
// ad
- (void)didStartLoadingADSourceWithPlacementID:(NSString *)placementID extra:(NSDictionary*)extra{
[self invokeCallback:@"startLoadingADSource" placementID:placementID error:nil extra:extra];
}
- (void)didFinishLoadingADSourceWithPlacementID:(NSString *)placementID extra:(NSDictionary*)extra{
[self invokeCallback:@"finishLoadingADSource" placementID:placementID error:nil extra:extra];
}
- (void)didFailToLoadADSourceWithPlacementID:(NSString*)placementID extra:(NSDictionary*)extra error:(NSError*)error{
[self invokeCallback:@"failToLoadADSource" placementID:placementID error:error extra:extra];
}
// bidding
- (void)didStartBiddingADSourceWithPlacementID:(NSString *)placementID extra:(NSDictionary*)extra{
[self invokeCallback:@"startBiddingADSource" placementID:placementID error:nil extra:extra];
}
- (void)didFinishBiddingADSourceWithPlacementID:(NSString *)placementID extra:(NSDictionary*)extra{
[self invokeCallback:@"finishBiddingADSource" placementID:placementID error:nil extra:extra];
}
- (void)didFailBiddingADSourceWithPlacementID:(NSString*)placementID extra:(NSDictionary*)extra error:(NSError*)error{
[self invokeCallback:@"failBiddingADSource" placementID:placementID error:error extra:extra];
}
-(void) didFinishLoadingADWithPlacementID:(NSString *)placementID {
[self invokeCallback:@"OnInterstitialAdLoaded" placementID:placementID error:nil extra:nil];
}
-(void) didFailToLoadADWithPlacementID:(NSString*)placementID error:(NSError*)error {
error = error != nil ? error : [NSError errorWithDomain:@"com.anythink.Unity3DPackage" code:100001 userInfo:@{NSLocalizedDescriptionKey:@"AT has failed to load ad", NSLocalizedFailureReasonErrorKey:@"AT has failed to load ad"}];
[self invokeCallback:@"OnInterstitialAdLoadFailure" placementID:placementID error:error extra:nil];
}
-(void) interstitialDidShowForPlacementID:(NSString*)placementID extra:(NSDictionary *)extra {
[self invokeCallback:@"OnInterstitialAdShow" placementID:placementID error:nil extra:extra];
[[NSNotificationCenter defaultCenter] postNotificationName:kATUnityUtilitiesInterstitialImpressionNotification object:nil];
}
-(void) interstitialFailedToShowForPlacementID:(NSString*)placementID error:(NSError*)error extra:(NSDictionary *)extra {
error = error != nil ? error : [NSError errorWithDomain:@"com.anythink.Unity3DPackage" code:100001 userInfo:@{NSLocalizedDescriptionKey:@"AT has failed to show ad", NSLocalizedFailureReasonErrorKey:@"AT has failed to show ad"}];
[self invokeCallback:@"OnInterstitialAdFailedToShow" placementID:placementID error:error extra:nil];
}
-(void) interstitialDidStartPlayingVideoForPlacementID:(NSString*)placementID extra:(NSDictionary *)extra {
[self invokeCallback:@"OnInterstitialAdVideoPlayStart" placementID:placementID error:nil extra:extra];
}
-(void) interstitialDidEndPlayingVideoForPlacementID:(NSString*)placementID extra:(NSDictionary *)extra {
[self invokeCallback:@"OnInterstitialAdVideoPlayEnd" placementID:placementID error:nil extra:extra];
}
-(void) interstitialDidFailToPlayVideoForPlacementID:(NSString*)placementID error:(NSError*)error extra:(NSDictionary *)extra {
[self invokeCallback:@"OnInterstitialAdVideoPlayFailure" placementID:placementID error:error extra:extra];
}
-(void) interstitialDidCloseForPlacementID:(NSString*)placementID extra:(NSDictionary *)extra {
[self invokeCallback:@"OnInterstitialAdClose" placementID:placementID error:nil extra:extra];
[[NSNotificationCenter defaultCenter] postNotificationName:kATUnityUtilitiesInterstitialCloseNotification object:nil];
}
-(void) interstitialDidClickForPlacementID:(NSString*)placementID extra:(NSDictionary *)extra {
[self invokeCallback:@"OnInterstitialAdClick" placementID:placementID error:nil extra:extra];
}
@end

View File

@@ -0,0 +1,37 @@
fileFormatVersion: 2
guid: 36e14c4d8348c44308f370c1c6a68dd7
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 0
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
- first:
iPhone: iOS
second:
enabled: 1
settings: {}
- first:
tvOS: tvOS
second:
enabled: 1
settings: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,34 @@
//
// ATNativeAdWrapper.h
// UnityContainer
//
// Created by Martin Lau on 27/07/2018.
// Copyright © 2018 Martin Lau. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "ATBaseUnityWrapper.h"
#import <AnyThinkNative/ATNativeADDelegate.h>
extern NSString *const kParsedPropertiesFrameKey;
extern NSString *const kParsedPropertiesBackgroundColorKey;
extern NSString *const kParsedPropertiesTextColorKey;
extern NSString *const kParsedPropertiesTextSizeKey;
extern NSString *const kNativeAssetAdvertiser;
extern NSString *const kNativeAssetText;
extern NSString *const kNativeAssetTitle;
extern NSString *const kNativeAssetCta;
extern NSString *const kNativeAssetRating;
extern NSString *const kNativeAssetIcon;
extern NSString *const kNativeAssetMainImage;
extern NSString *const kNativeAssetSponsorImage;
extern NSString *const kNativeAssetDislike;
extern NSString *const kNativeAssetMedia;
extern NSString *kATAdLoadingExtraNativeAdSizeKey;
extern NSString *kATNativeAdSizeUsesPixelFlagKey;
@interface ATNativeAdWrapper : ATBaseUnityWrapper<ATNativeADDelegate>
@end

View File

@@ -0,0 +1,27 @@
fileFormatVersion: 2
guid: 7dc2e5bcadd9c4ba286c51b14d95a1f1
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 1
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,405 @@
//
// ATNativeAdWrapper.m
// UnityContainer
//
// Created by Martin Lau on 27/07/2018.
// Copyright © 2018 Martin Lau. All rights reserved.
//
#import "ATNativeAdWrapper.h"
#import "ATUnityUtilities.h"
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import <AnyThinkNative/ATAdManager+Native.h>
#import <AnyThinkNative/ATNativeAdConfiguration.h>
#import <AnyThinkNative/ATNativeADView.h>
#import "ATAutolayoutCategories.h"
#import "ATUnityManager.h"
#import "ATNativeSelfRenderView.h"
#define kNavigationBarHeight ([[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationPortrait || [[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationPortraitUpsideDown ? ([[UIApplication sharedApplication]statusBarFrame].size.height + 44) : ([[UIApplication sharedApplication]statusBarFrame].size.height - 4))
#define kScreenW ([[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationPortrait || [[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationPortraitUpsideDown ? UIScreen.mainScreen.bounds.size.width : UIScreen.mainScreen.bounds.size.height)
NSString *const kParsedPropertiesFrameKey = @"frame";
NSString *const kParsedPropertiesBackgroundColorKey = @"background_color";
NSString *const kParsedPropertiesTextColorKey = @"text_color";
NSString *const kParsedPropertiesTextSizeKey = @"text_size";
NSString *const kNativeAssetAdvertiser = @"advertiser_label";
NSString *const kNativeAssetText = @"text";
NSString *const kNativeAssetTitle = @"title";
NSString *const kNativeAssetCta = @"cta";
NSString *const kNativeAssetRating = @"rating";
NSString *const kNativeAssetIcon = @"icon";
NSString *const kNativeAssetMainImage = @"main_image";
NSString *const kNativeAssetSponsorImage = @"sponsor_image";
NSString *const kNativeAssetDislike = @"dislike_button";
NSString *const kNativeAssetMedia = @"media";
NSString *kATAdLoadingExtraNativeAdSizeKey = @"native_ad_size";
NSString *kATNativeAdSizeUsesPixelFlagKey = @"uses_pixel";
NSDictionary* at_parseUnityProperties(NSDictionary *properties) {
NSMutableDictionary *result = NSMutableDictionary.dictionary;
CGFloat scale = [properties[@"usesPixel"] boolValue] ? [UIScreen mainScreen].nativeScale : 1.0f;
result[kParsedPropertiesFrameKey] = [NSString stringWithFormat:@"{{%@, %@}, {%@, %@}}", @([properties[@"x"] doubleValue] / scale), @([properties[@"y"] doubleValue] / scale), @([properties[@"width"] doubleValue] / scale), @([properties[@"height"] doubleValue] / scale)];
result[kParsedPropertiesBackgroundColorKey] = properties[@"backgroundColor"];
result[kParsedPropertiesTextColorKey] = properties[@"textColor"];
result[kParsedPropertiesTextSizeKey] = properties[@"textSize"];
return result;
}
NSDictionary* at_parseUnityMetrics(NSDictionary* metrics) {
NSMutableDictionary *result = NSMutableDictionary.dictionary;
NSDictionary *keysMap = @{@"appIcon":kNativeAssetIcon, @"mainImage":kNativeAssetMainImage, @"title":kNativeAssetTitle, @"desc":kNativeAssetText, @"adLogo":kNativeAssetSponsorImage, @"cta":kNativeAssetCta, @"dislike":kNativeAssetDislike};
[keysMap enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) { result[keysMap[key]] = at_parseUnityProperties(metrics[key]); }];
return result;
}
#define CS_ATNativeAdWrapper "ATNativeAdWrapper"
NSString *const kATNativeAdAdaptiveHeightKey = @"AdaptiveHeight";
@interface ATNativeAdWrapper()
@property(nonatomic, strong) ATNativeSelfRenderView *nativeSelfRenderView;
@property(nonatomic, strong) ATNativeADView *adView;
@property(nonatomic, readonly) NSMutableDictionary<NSString*, UIView*> *viewsStorage;
@end
@implementation ATNativeAdWrapper
+(instancetype)sharedInstance {
static ATNativeAdWrapper *sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[ATNativeAdWrapper alloc] init];
});
return sharedInstance;
}
-(instancetype) init {
self = [super init];
if (self != nil) {
_viewsStorage = [NSMutableDictionary<NSString*, UIView*> dictionary];
}
return self;
}
UIEdgeInsets SafeAreaInsets_ATUnityNative() {
return ([[UIApplication sharedApplication].keyWindow respondsToSelector:@selector(safeAreaInsets)] ? [UIApplication sharedApplication].keyWindow.safeAreaInsets : UIEdgeInsetsZero);
}
- (id)selWrapperClassWithDict:(NSDictionary *)dict callback:(void(*)(const char*, const char*))callback {
NSString *selector = dict[@"selector"];
NSArray<NSString*>* arguments = dict[@"arguments"];
NSString *firstObject = @"";
NSString *secondObject = @"";
NSString *lastObject = @"";
if (![ATUnityUtilities isEmpty:arguments]) {
for (int i = 0; i < arguments.count; i++) {
if (i == 0) { firstObject = arguments[i]; }
else if (i == 1) { secondObject = arguments[i]; }
else { lastObject = arguments[i]; }
}
}
if ([selector isEqualToString:@"loadNativeAdWithPlacementID:customDataJSONString:callback:"]) {
[self loadNativeAdWithPlacementID:firstObject customDataJSONString:secondObject callback:callback];
} else if ([selector isEqualToString:@"isNativeAdReadyForPlacementID:"]) {
return [NSNumber numberWithBool:[self isNativeAdReadyForPlacementID:firstObject]];
} else if ([selector isEqualToString:@"showNativeAdWithPlacementID:metricsJSONString:extraJsonString:"]) {
[self showNativeAdWithPlacementID:firstObject metricsJSONString:secondObject extraJsonString:lastObject];
} else if ([selector isEqualToString:@"removeNativeAdViewWithPlacementID:"]) {
[self removeNativeAdViewWithPlacementID:firstObject];
} else if ([selector isEqualToString:@"checkAdStatus:"]) {
return [self checkAdStatus:firstObject];
} else if ([selector isEqualToString:@"clearCache"]) {
[self clearCache];
} else if ([selector isEqualToString:@"getValidAdCaches:"]) {
return [self getValidAdCaches:firstObject];
}else if ([selector isEqualToString:@"entryScenarioWithPlacementID:scenarioID:"]) {
[self entryScenarioWithPlacementID:firstObject scenarioID:secondObject];
}
return nil;
}
-(void) loadNativeAdWithPlacementID:(NSString*)placementID customDataJSONString:(NSString*)customDataJSONString callback:(void(*)(const char*, const char *))callback {
[self setCallBack:callback forKey:placementID];
NSMutableDictionary *extra = [NSMutableDictionary dictionaryWithDictionary:@{kATExtraInfoNativeAdTypeKey:@(ATGDTNativeAdTypeSelfRendering), kATExtraNativeImageSizeKey:kATExtraNativeImageSize690_388}];
if ([customDataJSONString isKindOfClass:[NSString class]] && [customDataJSONString length] > 0) {
NSDictionary *extraDict = [NSJSONSerialization JSONObjectWithData:[customDataJSONString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];
NSLog(@"extraDict = %@", extraDict);
CGFloat scale = [extraDict[kATNativeAdSizeUsesPixelFlagKey] boolValue] ? [UIScreen mainScreen].nativeScale : 1.0f;
if ([extraDict[kATAdLoadingExtraNativeAdSizeKey] isKindOfClass:[NSString class]] && [[extraDict[kATAdLoadingExtraNativeAdSizeKey] componentsSeparatedByString:@"x"] count] == 2) {
NSArray<NSString*>* com = [extraDict[kATAdLoadingExtraNativeAdSizeKey] componentsSeparatedByString:@"x"];
extra[kATExtraInfoNativeAdSizeKey] = [NSValue valueWithCGSize:CGSizeMake([com[0] doubleValue] / scale, [com[1] doubleValue] / scale)];
}
}
NSLog(@"extra = %@", extra);
[[ATAdManager sharedManager] loadADWithPlacementID:placementID extra:extra delegate:self];
}
-(BOOL) isNativeAdReadyForPlacementID:(NSString*)placementID {
return [[ATAdManager sharedManager] nativeAdReadyForPlacementID:placementID];
}
-(NSString*) checkAdStatus:(NSString *)placementID {
ATCheckLoadModel *checkLoadModel = [[ATAdManager sharedManager] checkNativeLoadStatusForPlacementID:placementID];
NSMutableDictionary *statusDict = [NSMutableDictionary dictionary];
statusDict[@"isLoading"] = @(checkLoadModel.isLoading);
statusDict[@"isReady"] = @(checkLoadModel.isReady);
statusDict[@"adInfo"] = checkLoadModel.adOfferInfo;
NSLog(@"ATNativeAdWrapper::statusDict = %@", statusDict);
return statusDict.jsonFilterString;
}
- (void)entryScenarioWithPlacementID:(NSString *)placementID scenarioID:(NSString *)scenarioID{
[[ATAdManager sharedManager] entryNativeScenarioWithPlacementID:placementID scene:scenarioID];
}
-(NSString*) getValidAdCaches:(NSString *)placementID {
NSArray *array = [[ATAdManager sharedManager] getNativeValidAdsForPlacementID:placementID];
NSLog(@"ATNativeAdWrapper::array = %@", array);
return array.jsonFilterString;
}
-(void) showNativeAdWithPlacementID:(NSString*)placementID metricsJSONString:(NSString*)metricsJSONString extraJsonString:(NSString*)extraJsonString {
if (self.adView) {
[self.adView removeFromSuperview];
self.adView = nil;
}
if ([self isNativeAdReadyForPlacementID:placementID]) {
NSDictionary *metrics = [NSJSONSerialization JSONObjectWithData:[metricsJSONString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];
NSDictionary *extraDict = ([extraJsonString isKindOfClass:[NSString class]] && [extraJsonString dataUsingEncoding:NSUTF8StringEncoding] != nil) ? [NSJSONSerialization JSONObjectWithData:[extraJsonString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil] : nil;
NSDictionary *parsedMetrics = at_parseUnityMetrics(metrics);
NSLog(@"metrics = %@, parsedMetrics = %@", metrics, parsedMetrics);
NSLog(@"ATNativeAdWrapper::extraDict:%@",extraDict);
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button addTarget:self action:@selector(noop) forControlEvents:UIControlEventTouchUpInside];
button.frame = CGRectFromString(at_parseUnityProperties(metrics[@"parent"])[kParsedPropertiesFrameKey]);
CGRect adViewFrame = CGRectFromString(at_parseUnityProperties(metrics[@"parent"])[kParsedPropertiesFrameKey]);
CGRect mediaViewFrame = CGRectFromString(parsedMetrics[kNativeAssetMainImage][kParsedPropertiesFrameKey]);
ATNativeADConfiguration *configuration = [ATNativeADConfiguration new];
configuration.ADFrame = CGRectMake(0, 0, CGRectGetWidth(adViewFrame), CGRectGetHeight(adViewFrame));
configuration.mediaViewFrame = mediaViewFrame;
configuration.delegate = self;
if (extraDict[kATNativeAdAdaptiveHeightKey] != nil) {
configuration.sizeToFit = [extraDict[kATNativeAdAdaptiveHeightKey] boolValue];
}
configuration.rootViewController = [UIApplication sharedApplication].delegate.window.rootViewController;
configuration.context = @{
kATNativeAdConfigurationContextAdOptionsViewFrameKey:[NSValue valueWithCGRect:CGRectMake(CGRectGetWidth([UIScreen mainScreen].bounds) - 43.0f, .0f, 43.0f, 18.0f)],
kATNativeAdConfigurationContextAdLogoViewFrameKey:[NSValue valueWithCGRect:CGRectMake(.0f, .0f, 54.0f, 18.0f)],
kATNativeAdConfigurationContextNetworkLogoViewFrameKey:[NSValue valueWithCGRect:CGRectMake(CGRectGetWidth(configuration.ADFrame) - 54.0f, CGRectGetHeight(configuration.ADFrame) - 18.0f, 54.0f, 18.0f)]
};
ATNativeAdOffer *offer = [[ATAdManager sharedManager] getNativeAdOfferWithPlacementID:placementID scene:extraDict[kATUnityUtilitiesAdShowingExtraScenarioKey]];
ATNativeSelfRenderView *selfRenderView = [self getSelfRenderViewOffer:offer withMetrics:parsedMetrics];
selfRenderView.backgroundColor = [UIColor colorWithHexString:parsedMetrics[kNativeAssetMainImage][@"background_color"]];
NSBundle *bundle = [NSBundle bundleWithPath:[[NSBundle bundleForClass:[self class]] pathForResource:@"AnyThinkSDK" ofType:@"bundle"]];
UIImage * img = [UIImage imageNamed:@"icon_webview_close" inBundle:bundle compatibleWithTraitCollection:nil];
[selfRenderView.dislikeButton setImage:img forState:0];
ATNativeADView *adview = [self getNativeADView:configuration offer:offer selfRenderView:selfRenderView withPlacementId:placementID];
[self prepareWithNativePrepareInfo:selfRenderView nativeADView:adview];
adview.ctaLabel.hidden = [adview.nativeAd.ctaText length] == 0;
if (adview != nil) {
[self removeNativeAdViewWithPlacementID:placementID];
_viewsStorage[placementID] = button;
[button addSubview:adview];
[[UIApplication sharedApplication].keyWindow.rootViewController.view addSubview:button];
NSString *position = extraDict[@"Position"];
CGSize totalSize = [UIApplication sharedApplication].keyWindow.rootViewController.view.bounds.size;
UIEdgeInsets safeAreaInsets = SafeAreaInsets_ATUnityNative();
if ([@"Top" isEqualToString:position]) {
button.frame = CGRectMake((totalSize.width - CGRectGetWidth(adview.bounds)) / 2.0f, safeAreaInsets.top , CGRectGetWidth(adview.bounds), CGRectGetHeight(adview.bounds));
} else if ([@"Bottom" isEqualToString:position]) {
button.frame = CGRectMake((totalSize.width - CGRectGetWidth(adview.bounds)) / 2.0f, totalSize.height - safeAreaInsets.bottom - CGRectGetHeight(adview.bounds) , CGRectGetWidth(adview.bounds), CGRectGetHeight(adview.bounds));
} else {
button.frame = CGRectFromString(at_parseUnityProperties(metrics[@"parent"])[kParsedPropertiesFrameKey]);
}
NSMutableDictionary *contextStorage = [NSMutableDictionary dictionary];
[contextStorage setValue:button forKey:@"button"];
[contextStorage setValue:position forKey:@"position"];
[adview addObserver:self forKeyPath:@"frame" options:NSKeyValueObservingOptionNew context:(void*)CFBridgingRetain(contextStorage)];
}
}
}
- (void)prepareWithNativePrepareInfo:(ATNativeSelfRenderView *)selfRenderView nativeADView:(ATNativeADView *)nativeADView{
ATNativePrepareInfo *info = [ATNativePrepareInfo loadPrepareInfo:^(ATNativePrepareInfo * _Nonnull prepareInfo) {
prepareInfo.textLabel = selfRenderView.textLabel;
prepareInfo.advertiserLabel = selfRenderView.advertiserLabel;
prepareInfo.titleLabel = selfRenderView.titleLabel;
prepareInfo.ratingLabel = selfRenderView.ratingLabel;
prepareInfo.iconImageView = selfRenderView.iconImageView;
prepareInfo.mainImageView = selfRenderView.mainImageView;
prepareInfo.logoImageView = selfRenderView.logoImageView;
prepareInfo.dislikeButton = selfRenderView.dislikeButton;
prepareInfo.ctaLabel = selfRenderView.ctaLabel;
prepareInfo.mediaView = selfRenderView.mediaView;
}];
[nativeADView prepareWithNativePrepareInfo:info];
[nativeADView addSubview:selfRenderView];
selfRenderView.frame = CGRectMake(0, 0, CGRectGetWidth(nativeADView.frame), CGRectGetHeight(nativeADView.frame));
}
- (ATNativeSelfRenderView *)getSelfRenderViewOffer:(ATNativeAdOffer *)offer withMetrics:(NSDictionary*)metrics{
ATNativeSelfRenderView *selfRenderView = [[ATNativeSelfRenderView alloc]initWithOffer:offer];
self.nativeSelfRenderView = selfRenderView;
[selfRenderView configureMetrics:metrics];
return selfRenderView;
}
- (ATNativeADView *)getNativeADView:(ATNativeADConfiguration *)config offer:(ATNativeAdOffer *)offer selfRenderView:(ATNativeSelfRenderView *)selfRenderView withPlacementId:(NSString*)placementID{
ATNativeADView *nativeADView = [[ATNativeADView alloc]initWithConfiguration:config currentOffer:offer placementID:placementID];
UIView *mediaView = [nativeADView getMediaView];
NSMutableArray *array = [@[selfRenderView.iconImageView,selfRenderView.titleLabel,selfRenderView.textLabel,selfRenderView.ctaLabel,selfRenderView.mainImageView] mutableCopy];
if (mediaView && offer.nativeAd.isVideoContents) {
[array addObject:mediaView];
selfRenderView.mediaView = mediaView;
[selfRenderView addSubview:mediaView];
//
[selfRenderView bringSubviewToFront:selfRenderView.logoImageView];
}
[nativeADView registerClickableViewArray:array];
self.adView = nativeADView;
return nativeADView;
}
-(void) noop {
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
if ([keyPath isEqualToString:@"frame"]) {
CGRect frame = [change[@"new"] CGRectValue];
NSDictionary *contextDict = (__bridge NSDictionary*)context;
CGSize totalSize = [UIApplication sharedApplication].keyWindow.rootViewController.view.bounds.size;
UIEdgeInsets safeAreaInsets = SafeAreaInsets_ATUnityNative();
NSString *position = contextDict[@"position"];
UIButton *button = contextDict[@"button"];
CGRect buttonFrame = button.frame;
buttonFrame.size.height = frame.size.height;
if ([position isEqualToString:@"Bottom"]) {
buttonFrame.origin.y = totalSize.height - safeAreaInsets.bottom - frame.size.height;
}
button.frame = buttonFrame;
[object removeObserver:self forKeyPath:@"frame"];
CFBridgingRelease(context);
}
}
-(void) removeNativeAdViewWithPlacementID:(NSString*)placementID {
if ([_viewsStorage.allKeys containsObject:placementID]) {
[_viewsStorage[placementID] removeFromSuperview];
}
}
-(void) clearCache {
}
-(NSString*) scriptWrapperClass {
return @"ATNativeAdWrapper";
}
#pragma mark - delegate
-(void) didFinishLoadingADWithPlacementID:(NSString *)placementID {
[self invokeCallback:@"OnNativeAdLoaded" placementID:placementID error:nil extra:nil];
}
-(void) didFailToLoadADWithPlacementID:(NSString*)placementID error:(NSError*)error {
[self invokeCallback:@"OnNativeAdLoadingFailure" placementID:placementID error:error extra:nil];
}
// ad
- (void)didStartLoadingADSourceWithPlacementID:(NSString *)placementID extra:(NSDictionary*)extra{
[self invokeCallback:@"startLoadingADSource" placementID:placementID error:nil extra:extra];
}
- (void)didFinishLoadingADSourceWithPlacementID:(NSString *)placementID extra:(NSDictionary*)extra{
[self invokeCallback:@"finishLoadingADSource" placementID:placementID error:nil extra:extra];
}
- (void)didFailToLoadADSourceWithPlacementID:(NSString*)placementID extra:(NSDictionary*)extra error:(NSError*)error{
[self invokeCallback:@"failToLoadADSource" placementID:placementID error:error extra:extra];
}
// bidding
- (void)didStartBiddingADSourceWithPlacementID:(NSString *)placementID extra:(NSDictionary*)extra{
[self invokeCallback:@"startBiddingADSource" placementID:placementID error:nil extra:extra];
}
- (void)didFinishBiddingADSourceWithPlacementID:(NSString *)placementID extra:(NSDictionary*)extra{
[self invokeCallback:@"finishBiddingADSource" placementID:placementID error:nil extra:extra];
}
- (void)didFailBiddingADSourceWithPlacementID:(NSString*)placementID extra:(NSDictionary*)extra error:(NSError*)error{
[self invokeCallback:@"failBiddingADSource" placementID:placementID error:error extra:extra];
}
-(void) didShowNativeAdInAdView:(ATNativeADView*)adView placementID:(NSString*)placementID extra:(NSDictionary *)extra {
[self invokeCallback:@"OnNaitveAdShow" placementID:placementID error:nil extra:extra];
}
-(void) didClickNativeAdInAdView:(ATNativeADView*)adView placementID:(NSString*)placementID extra:(NSDictionary *)extra {
//Drop ad view
[self invokeCallback:@"OnNativeAdClick" placementID:placementID error:nil extra:extra];
}
-(void) didTapCloseButtonInAdView:(ATNativeADView*)adView placementID:(NSString*)placementID extra:(NSDictionary *)extra {
[self invokeCallback:@"OnNativeAdCloseButtonClick" placementID:placementID error:nil extra:extra];
[self.adView removeFromSuperview];
}
-(void) didStartPlayingVideoInAdView:(ATNativeADView*)adView placementID:(NSString*)placementID extra:(NSDictionary *)extra {
//Drop ad view
[self invokeCallback:@"OnNativeAdVideoStart" placementID:placementID error:nil extra:extra];
}
-(void) didEndPlayingVideoInAdView:(ATNativeADView*)adView placementID:(NSString*)placementID extra:(NSDictionary *)extra {
//Drop ad view
[self invokeCallback:@"OnNativeAdVideoEnd" placementID:placementID error:nil extra:extra];
}
@end

View File

@@ -0,0 +1,37 @@
fileFormatVersion: 2
guid: 72ec590a401574c6a9e1162535db1013
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 0
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
- first:
iPhone: iOS
second:
enabled: 1
settings: {}
- first:
tvOS: tvOS
second:
enabled: 1
settings: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,35 @@
//
// ATNativeSelfRenderView.h
// AnyThinkSDKDemo
//
// Created by GUO PENG on 2022/5/7.
// Copyright © 2022 AnyThink. All rights reserved.
//
#import <UIKit/UIKit.h>
#import <AnyThinkNative/AnyThinkNative.h>
NS_ASSUME_NONNULL_BEGIN
@interface ATNativeSelfRenderView : UIView
@property(nonatomic, strong) UILabel *advertiserLabel;
@property(nonatomic, strong) UILabel *textLabel;
@property(nonatomic, strong) UILabel *titleLabel;
@property(nonatomic, strong) UILabel *ctaLabel;
@property(nonatomic, strong) UILabel *ratingLabel;
@property(nonatomic, strong) UIImageView *iconImageView;
@property(nonatomic, strong) UIImageView *mainImageView;
@property(nonatomic, strong) UIImageView *logoImageView;
@property(nonatomic, strong) UIImageView *sponsorImageView;
@property(nonatomic, strong) UIButton *dislikeButton;
@property(nonatomic, strong) UIView *mediaView;
-(void) configureMetrics:(NSDictionary *)metrics;
- (instancetype) initWithOffer:(ATNativeAdOffer *)offer;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,27 @@
fileFormatVersion: 2
guid: 11cb4d99f1d2048de8e0702624a5542d
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 1
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,197 @@
//
// ATNativeSelfRenderView.m
// AnyThinkSDKDemo
//
// Created by GUO PENG on 2022/5/7.
// Copyright © 2022 AnyThink. All rights reserved.
//
#import "ATNativeSelfRenderView.h"
#import <AnyThinkSDK/ATImageLoader.h>
#import "ATNativeAdWrapper.h"
#import "ATAutolayoutCategories.h"
#import "ATUnityUtilities.h"
#define random(r, g, b, a) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:(a)/255.0]
#define randomColor random(arc4random_uniform(256), arc4random_uniform(256), arc4random_uniform(256), arc4random_uniform(256))
@interface ATNativeSelfRenderView()
@property(nonatomic, strong) ATNativeAdOffer *nativeAdOffer;
@end
@implementation ATNativeSelfRenderView
- (void)dealloc{
NSLog(@"🔥---ATNativeSelfRenderView--销毁");
}
- (instancetype) initWithOffer:(ATNativeAdOffer *)offer{
if (self = [super init]) {
_nativeAdOffer = offer;
[self addView];
[self makeConstraintsForSubviews];
[self setupUI];
}
return self;
}
- (void)addView{
self.advertiserLabel = [[UILabel alloc]init];
self.advertiserLabel.font = [UIFont boldSystemFontOfSize:15.0f];
self.advertiserLabel.textColor = [UIColor blackColor];
self.advertiserLabel.textAlignment = NSTextAlignmentLeft;
self.advertiserLabel.userInteractionEnabled = YES;
self.advertiserLabel.translatesAutoresizingMaskIntoConstraints = false;
[self addSubview:self.advertiserLabel];
self.titleLabel = [[UILabel alloc]init];
self.titleLabel.font = [UIFont boldSystemFontOfSize:18.0f];
self.titleLabel.textColor = [UIColor blackColor];
self.titleLabel.textAlignment = NSTextAlignmentLeft;
self.titleLabel.userInteractionEnabled = YES;
self.titleLabel.translatesAutoresizingMaskIntoConstraints = false;
[self addSubview:self.titleLabel];
self.textLabel = [[UILabel alloc]init];
self.textLabel.font = [UIFont systemFontOfSize:15.0f];
self.textLabel.textColor = [UIColor blackColor];
self.textLabel.userInteractionEnabled = YES;
self.textLabel.numberOfLines = 0;
self.textLabel.translatesAutoresizingMaskIntoConstraints = false;
[self addSubview:self.textLabel];
self.ctaLabel = [[UILabel alloc]init];
self.ctaLabel.font = [UIFont systemFontOfSize:15.0f];
self.ctaLabel.textColor = [UIColor blackColor];
self.ctaLabel.userInteractionEnabled = YES;
self.ctaLabel.translatesAutoresizingMaskIntoConstraints = false;
[self addSubview:self.ctaLabel];
self.ratingLabel = [[UILabel alloc]init];
self.ratingLabel.font = [UIFont systemFontOfSize:15.0f];
self.ratingLabel.textColor = [UIColor blackColor];
self.ratingLabel.userInteractionEnabled = YES;
self.ratingLabel.translatesAutoresizingMaskIntoConstraints = false;
[self addSubview:self.ratingLabel];
self.iconImageView = [[UIImageView alloc]init];
self.iconImageView.layer.cornerRadius = 4.0f;
self.iconImageView.layer.masksToBounds = YES;
self.iconImageView.contentMode = UIViewContentModeScaleAspectFit;
self.iconImageView.translatesAutoresizingMaskIntoConstraints = false;
self.iconImageView.userInteractionEnabled = YES;
[self addSubview:self.iconImageView];
self.mainImageView = [[UIImageView alloc]init];
self.mainImageView.contentMode = UIViewContentModeScaleAspectFit;
self.mainImageView.userInteractionEnabled = YES;
self.mainImageView.translatesAutoresizingMaskIntoConstraints = false;
[self addSubview:self.mainImageView];
self.logoImageView = [[UIImageView alloc]init];
self.logoImageView.contentMode = UIViewContentModeScaleAspectFit;
self.logoImageView.userInteractionEnabled = YES;
self.logoImageView.translatesAutoresizingMaskIntoConstraints = false;
[self addSubview:self.logoImageView];
self.dislikeButton = [UIButton buttonWithType:UIButtonTypeCustom];
self.dislikeButton.translatesAutoresizingMaskIntoConstraints = false;
UIImage *closeImg = [UIImage imageNamed:@"icon_webview_close" inBundle:[NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"AnyThinkSDK" ofType:@"bundle"]] compatibleWithTraitCollection:nil];
self.dislikeButton.backgroundColor = [UIColor whiteColor];
[self.dislikeButton setImage:closeImg forState:0];
[self addSubview:self.dislikeButton];
}
- (void)setupUI{
if (self.nativeAdOffer.nativeAd.icon) {
self.iconImageView.image = self.nativeAdOffer.nativeAd.icon;
}
[[ATImageLoader shareLoader]loadImageWithURL:[NSURL URLWithString:self.nativeAdOffer.nativeAd.iconUrl] completion:^(UIImage *image, NSError *error) {
if (!error) {
dispatch_async(dispatch_get_main_queue(), ^{
[self.iconImageView setImage:image];
});
}
}];
NSLog(@"🔥----iconUrl:%@",self.nativeAdOffer.nativeAd.iconUrl);
[[ATImageLoader shareLoader]loadImageWithURL:[NSURL URLWithString:self.nativeAdOffer.nativeAd.imageUrl] completion:^(UIImage *image, NSError *error) {
if (!error) {
dispatch_async(dispatch_get_main_queue(), ^{
[self.mainImageView setImage:image];
});
}
}];
NSLog(@"🔥----imageUrl:%@",self.nativeAdOffer.nativeAd.imageUrl);
[[ATImageLoader shareLoader]loadImageWithURL:[NSURL URLWithString:self.nativeAdOffer.nativeAd.logoUrl] completion:^(UIImage *image, NSError *error) {
if (!error) {
dispatch_async(dispatch_get_main_queue(), ^{
[self.logoImageView setImage:image];
});
}
}];
NSLog(@"🔥----logoUrl:%@",self.nativeAdOffer.nativeAd.logoUrl);
self.advertiserLabel.text = self.nativeAdOffer.nativeAd.advertiser;
self.titleLabel.text = self.nativeAdOffer.nativeAd.title;
self.textLabel.text = self.nativeAdOffer.nativeAd.mainText;
self.ctaLabel.text = self.nativeAdOffer.nativeAd.ctaText;
self.ratingLabel.text = [NSString stringWithFormat:@"%@", self.nativeAdOffer.nativeAd.rating ? self.nativeAdOffer.nativeAd.rating : @""];
}
-(void) makeConstraintsForSubviews {
self.backgroundColor = [UIColor clearColor];// randomColor;
self.titleLabel.backgroundColor = [UIColor clearColor];
self.textLabel.backgroundColor = [UIColor clearColor];
}
-(void) configureMetrics:(NSDictionary *)metrics {
NSDictionary<NSString*, UIView*> *views = @{kNativeAssetTitle:_titleLabel, kNativeAssetText:_textLabel, kNativeAssetCta:_ctaLabel, kNativeAssetRating:_ratingLabel, kNativeAssetAdvertiser:_advertiserLabel, kNativeAssetIcon:_iconImageView, kNativeAssetMainImage:_mainImageView, kNativeAssetSponsorImage:_logoImageView, kNativeAssetDislike:_dislikeButton};
[views enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
CGRect frame = CGRectFromString(metrics[key][kParsedPropertiesFrameKey]);
[self addConstraintsWithVisualFormat:[NSString stringWithFormat:@"|-x-[%@(w)]", key] options:0 metrics:@{@"x":@(frame.origin.x), @"w":@(frame.size.width)} views:views];
[self addConstraintsWithVisualFormat:[NSString stringWithFormat:@"V:|-y-[%@(h)]", key] options:0 metrics:@{@"y":@(frame.origin.y), @"h":@(frame.size.height)} views:views];
if ([obj respondsToSelector:@selector(setBackgroundColor:)] && [metrics[key] containsObjectForKey:@"background_color"]) [obj setBackgroundColor:[metrics[key][@"background_color"] hasPrefix:@"#"] ? [UIColor colorWithHexString:metrics[key][@"background_color"]] : [UIColor clearColor]];
if ([obj respondsToSelector:@selector(setTextColor:)] && [metrics[key] containsObjectForKey:@"text_color"]) [obj setTextColor:[UIColor colorWithHexString:metrics[key][@"text_color"]]];
if ([obj respondsToSelector:@selector(setFont:)] && [metrics[key] containsObjectForKey:@"text_size"] && [metrics[key][@"text_size"] respondsToSelector:@selector(doubleValue)]) [obj setFont:[UIFont systemFontOfSize:[metrics[key][@"text_size"] doubleValue]]];
}];
if ([metrics containsObjectForKey:kNativeAssetMedia]) self.mediaView.frame = CGRectFromString(metrics[kNativeAssetMedia][kParsedPropertiesFrameKey]);
else self.mediaView.frame = CGRectFromString(metrics[kNativeAssetMainImage][kParsedPropertiesFrameKey]);
}
@end

View File

@@ -0,0 +1,37 @@
fileFormatVersion: 2
guid: a0cdfff84811945e19a8113417e62e42
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 0
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
- first:
iPhone: iOS
second:
enabled: 1
settings: {}
- first:
tvOS: tvOS
second:
enabled: 1
settings: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,12 @@
//
// ATRewardedVideoWrapper.h
// UnityContainer
//
// Created by Martin Lau on 08/08/2018.
// Copyright © 2018 Martin Lau. All rights reserved.
//
#import "ATBaseUnityWrapper.h"
@interface ATRewardedVideoWrapper : ATBaseUnityWrapper
@end

View File

@@ -0,0 +1,27 @@
fileFormatVersion: 2
guid: 5302f6ea7c2ba45ffbac263b7f64272f
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 1
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,326 @@
//
// ATRewardedVideoWrapper.m
// UnityContainer
//
// Created by Martin Lau on 08/08/2018.
// Copyright © 2018 Martin Lau. All rights reserved.
//
#import "ATRewardedVideoWrapper.h"
#import "ATUnityUtilities.h"
#import <AnyThinkRewardedVideo/AnyThinkRewardedVideo.h>
NSString *const kLoadExtraUserIDKey = @"UserId";
NSString *const kLoadExtraMediaExtraKey = @"UserExtraData";
@interface ATRewardedVideoWrapper()<ATRewardedVideoDelegate>
@end
@implementation ATRewardedVideoWrapper
+(instancetype)sharedInstance {
static ATRewardedVideoWrapper *sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[ATRewardedVideoWrapper alloc] init];
});
return sharedInstance;
}
- (id)selWrapperClassWithDict:(NSDictionary *)dict callback:(void(*)(const char*, const char*))callback {
NSString *selector = dict[@"selector"];
NSArray<NSString*>* arguments = dict[@"arguments"];
NSString *firstObject = @"";
NSString *lastObject = @"";
if (![ATUnityUtilities isEmpty:arguments]) {
for (int i = 0; i < arguments.count; i++) {
if (i == 0) { firstObject = arguments[i]; }
else { lastObject = arguments[i]; }
}
}
if ([selector isEqualToString:@"loadRewardedVideoWithPlacementID:customDataJSONString:callback:"]) {
[self loadRewardedVideoWithPlacementID:firstObject customDataJSONString:lastObject callback:callback];
} else if ([selector isEqualToString:@"rewardedVideoReadyForPlacementID:"]) {
return [NSNumber numberWithBool:[self rewardedVideoReadyForPlacementID:firstObject]];
} else if ([selector isEqualToString:@"showRewardedVideoWithPlacementID:extraJsonString:"]) {
[self showRewardedVideoWithPlacementID:firstObject extraJsonString:lastObject];
} else if ([selector isEqualToString:@"checkAdStatus:"]) {
return [self checkAdStatus:firstObject];
} else if ([selector isEqualToString:@"clearCache"]) {
[self clearCache];
} else if ([selector isEqualToString:@"setExtra:"]) {
[self setExtra:firstObject];
} else if ([selector isEqualToString:@"getValidAdCaches:"]) {
return [self getValidAdCaches:firstObject];
}else if ([selector isEqualToString:@"entryScenarioWithPlacementID:scenarioID:"]) {
[self entryScenarioWithPlacementID:firstObject scenarioID:lastObject];
}
// auto
else if ([selector isEqualToString:@"addAutoLoadAdPlacementID:callback:"]){
[self addAutoLoadAdPlacementID:firstObject callback:callback];
}else if ([selector isEqualToString:@"removeAutoLoadAdPlacementID:"]){
[self removeAutoLoadAdPlacementID:firstObject];
}else if ([selector isEqualToString:@"autoLoadRewardedVideoReadyForPlacementID:"]){
return [NSNumber numberWithBool:[self autoLoadRewardedVideoReadyForPlacementID:firstObject]];
}else if ([selector isEqualToString:@"getAutoValidAdCaches:"]){
return [self getAutoValidAdCaches:firstObject];
}else if ([selector isEqualToString:@"setAutoLocalExtra:customDataJSONString:"]){
[self setAutoLocalExtra:firstObject customDataJSONString:lastObject];
}else if ([selector isEqualToString:@"entryAutoAdScenarioWithPlacementID:scenarioID:"]){
[self entryAutoAdScenarioWithPlacementID:firstObject scenarioID:lastObject];
}else if ([selector isEqualToString:@"showAutoRewardedVideoWithPlacementID:extraJsonString:"]){
[self showAutoRewardedVideoWithPlacementID:firstObject extraJsonString:lastObject];
}else if ([selector isEqualToString:@"checkAutoAdStatus:"]) {
return [self checkAutoAdStatus:firstObject];
}
return nil;
}
#pragma mark - normal
-(void) loadRewardedVideoWithPlacementID:(NSString*)placementID customDataJSONString:(NSString*)customDataJSONString callback:(void(*)(const char*, const char*))callback {
[self setCallBack:callback forKey:placementID];
NSMutableDictionary *extra = [NSMutableDictionary dictionary];
if ([customDataJSONString isKindOfClass:[NSString class]] && [customDataJSONString length] > 0) {
NSDictionary *extraDict = [NSJSONSerialization JSONObjectWithData:[customDataJSONString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];
NSLog(@"extraDict = %@", extra);
if (extraDict[kLoadExtraUserIDKey] != nil) { extra[kATAdLoadingExtraUserIDKey] = extraDict[kLoadExtraUserIDKey]; }
if (extraDict[kLoadExtraMediaExtraKey] != nil) { extra[kATAdLoadingExtraMediaExtraKey] = extraDict[kLoadExtraMediaExtraKey]; }
}
[[ATAdManager sharedManager] loadADWithPlacementID:placementID extra:[extra isKindOfClass:[NSMutableDictionary class]] ? extra : nil delegate:self];
}
-(BOOL) rewardedVideoReadyForPlacementID:(NSString*)placementID {
return [[ATAdManager sharedManager] rewardedVideoReadyForPlacementID:placementID];
}
-(NSString*) checkAdStatus:(NSString *)placementID {
ATCheckLoadModel *checkLoadModel = [[ATAdManager sharedManager] checkRewardedVideoLoadStatusForPlacementID:placementID];
NSMutableDictionary *statusDict = [NSMutableDictionary dictionary];
statusDict[@"isLoading"] = @(checkLoadModel.isLoading);
statusDict[@"isReady"] = @(checkLoadModel.isReady);
statusDict[@"adInfo"] = checkLoadModel.adOfferInfo;
NSLog(@"ATRewardedVideoWrapper::statusDict = %@", statusDict);
return statusDict.jsonFilterString;
}
-(NSString*) getValidAdCaches:(NSString *)placementID {
NSArray *array = [[ATAdManager sharedManager] getRewardedVideoValidAdsForPlacementID:placementID];
NSLog(@"ATNativeAdWrapper::array = %@", array);
return array.jsonFilterString;
}
-(void) showRewardedVideoWithPlacementID:(NSString*)placementID extraJsonString:(NSString*)extraJsonString {
NSDictionary *extraDict = ([extraJsonString isKindOfClass:[NSString class]] && [extraJsonString dataUsingEncoding:NSUTF8StringEncoding] != nil) ? [NSJSONSerialization JSONObjectWithData:[extraJsonString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil] : nil;
NSLog(@"ATRewardedVideoWrapper::showRewardedVideoWithPlacementID = %@ extraJsonString = %@", placementID,extraJsonString);
NSLog(@"ATRewardedVideoWrapper::extraDict = %@", extraDict);
[[ATAdManager sharedManager] showRewardedVideoWithPlacementID:placementID scene:extraDict[kATUnityUtilitiesAdShowingExtraScenarioKey] inViewController:[UIApplication sharedApplication].delegate.window.rootViewController delegate:self];
}
-(void) clearCache {
}
-(void) setExtra:(NSString*)extra {
if ([extra isKindOfClass:[NSString class]]) {
NSDictionary *extraDict = [NSJSONSerialization JSONObjectWithData:[extra dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];
if ([extraDict isKindOfClass:[NSDictionary class]]) [[ATAdManager sharedManager] setExtra:extraDict];
}
}
- (void)entryScenarioWithPlacementID:(NSString *)placementID scenarioID:(NSString *)scenarioID{
[[ATAdManager sharedManager] entryRewardedVideoScenarioWithPlacementID:placementID scene:scenarioID];
}
-(NSString*) scriptWrapperClass {
return @"ATRewardedVideoWrapper";
}
#pragma mark - auto
-(void) addAutoLoadAdPlacementID:(NSString*)placementID callback:(void(*)(const char*, const char*))callback {
if (placementID == nil) {
return;
}
[ATRewardedVideoAutoAdManager sharedInstance].delegate = self;
NSArray *placementIDArray = [self jsonStrToArray:placementID];
[placementIDArray enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
[self setCallBack:callback forKey:obj];
NSLog(@" addAutoLoadAdPlacementID--%@",placementID);
}];
[[ATRewardedVideoAutoAdManager sharedInstance] addAutoLoadAdPlacementIDArray:placementIDArray];
}
-(void) removeAutoLoadAdPlacementID:(NSString*)placementID{
NSLog(@" removeAutoLoadAdPlacementID--%@",placementID);
if (placementID == nil) {
return;
}
NSArray *placementIDArray = [self jsonStrToArray:placementID];
[[ATRewardedVideoAutoAdManager sharedInstance] removeAutoLoadAdPlacementIDArray:placementIDArray];
}
-(BOOL) autoLoadRewardedVideoReadyForPlacementID:(NSString*)placementID {
NSLog(@"Unity: autoLoadRewardedVideoReadyForPlacementID--%@--%d",placementID,[[ATRewardedVideoAutoAdManager sharedInstance] autoLoadRewardedVideoReadyForPlacementID:placementID]);
return [[ATRewardedVideoAutoAdManager sharedInstance] autoLoadRewardedVideoReadyForPlacementID:placementID];
}
-(NSString*) getAutoValidAdCaches:(NSString *)placementID{
NSArray *array = [[ATRewardedVideoAutoAdManager sharedInstance] checkValidAdCachesWithPlacementID:placementID];
NSLog(@"Unity: getAutoValidAdCaches::array = %@", array);
return array.jsonFilterString;
}
-(NSString*) checkAutoAdStatus:(NSString *)placementID {
ATCheckLoadModel *checkLoadModel = [[ATRewardedVideoAutoAdManager sharedInstance] checkRewardedVideoLoadStatusForPlacementID:placementID];
NSMutableDictionary *statusDict = [NSMutableDictionary dictionary];
statusDict[@"isLoading"] = @(checkLoadModel.isLoading);
statusDict[@"isReady"] = @(checkLoadModel.isReady);
statusDict[@"adInfo"] = checkLoadModel.adOfferInfo;
NSLog(@"ATRewardedVideoWrapper::checkAutoAdStatus statusDict = %@", statusDict);
return statusDict.jsonFilterString;
}
-(void) setAutoLocalExtra:(NSString*)placementID customDataJSONString:(NSString*)customDataJSONString{
NSLog(@"Unity: setAutoLocalExtra::placementID = %@ customDataJSONString: %@", placementID,customDataJSONString);
if ([customDataJSONString isKindOfClass:[NSString class]]) {
NSDictionary *extraDict = [NSJSONSerialization JSONObjectWithData:[customDataJSONString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];
NSMutableDictionary *extra = [NSMutableDictionary dictionary];
if ([extraDict isKindOfClass:[NSDictionary class]]) {
if (extraDict[kLoadExtraUserIDKey] != nil) {
extra[kATAdLoadingExtraUserIDKey] = extraDict[kLoadExtraUserIDKey];
}
if (extraDict[kLoadExtraMediaExtraKey] != nil) { extra[kATAdLoadingExtraMediaExtraKey] = extraDict[kLoadExtraMediaExtraKey];
}
};
[[ATRewardedVideoAutoAdManager sharedInstance] setLocalExtra:extra placementID:placementID];
}
}
-(void) entryAutoAdScenarioWithPlacementID:(NSString*)placementID scenarioID:(NSString*)scenarioID{
NSLog(@"Unity: getAutoValidAdCaches::array = %@ scenarioID:%@", placementID,scenarioID);
[[ATRewardedVideoAutoAdManager sharedInstance] entryAdScenarioWithPlacementID:placementID scenarioID:scenarioID];
}
-(void) showAutoRewardedVideoWithPlacementID:(NSString*)placementID extraJsonString:(NSString*)extraJsonString {
NSDictionary *extraDict = ([extraJsonString isKindOfClass:[NSString class]] && [extraJsonString dataUsingEncoding:NSUTF8StringEncoding] != nil) ? [NSJSONSerialization JSONObjectWithData:[extraJsonString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil] : nil;
NSLog(@"ATRewardedVideoWrapper::showAutoRewardedVideoWithPlacementID = %@ extraJsonString = %@", placementID,extraJsonString);
NSLog(@"ATRewardedVideoWrapper::extraDict = %@", extraDict);
[[ATRewardedVideoAutoAdManager sharedInstance] showAutoLoadRewardedVideoWithPlacementID:placementID scene:extraDict[kATUnityUtilitiesAdShowingExtraScenarioKey] inViewController:[UIApplication sharedApplication].delegate.window.rootViewController delegate:self];
}
#pragma mark - delegate
// ad
- (void)didStartLoadingADSourceWithPlacementID:(NSString *)placementID extra:(NSDictionary*)extra{
[self invokeCallback:@"startLoadingADSource" placementID:placementID error:nil extra:extra];
}
- (void)didFinishLoadingADSourceWithPlacementID:(NSString *)placementID extra:(NSDictionary*)extra{
[self invokeCallback:@"finishLoadingADSource" placementID:placementID error:nil extra:extra];
}
- (void)didFailToLoadADSourceWithPlacementID:(NSString*)placementID extra:(NSDictionary*)extra error:(NSError*)error{
[self invokeCallback:@"failToLoadADSource" placementID:placementID error:error extra:extra];
}
// bidding
- (void)didStartBiddingADSourceWithPlacementID:(NSString *)placementID extra:(NSDictionary*)extra{
[self invokeCallback:@"startBiddingADSource" placementID:placementID error:nil extra:extra];
}
- (void)didFinishBiddingADSourceWithPlacementID:(NSString *)placementID extra:(NSDictionary*)extra{
[self invokeCallback:@"finishBiddingADSource" placementID:placementID error:nil extra:extra];
}
- (void)didFailBiddingADSourceWithPlacementID:(NSString*)placementID extra:(NSDictionary*)extra error:(NSError*)error{
[self invokeCallback:@"failBiddingADSource" placementID:placementID error:error extra:extra];
}
-(void) didFinishLoadingADWithPlacementID:(NSString *)placementID {
[self invokeCallback:@"OnRewardedVideoLoaded" placementID:placementID error:nil extra:nil];
}
-(void) didFailToLoadADWithPlacementID:(NSString*)placementID error:(NSError*)error {
error = error != nil ? error : [NSError errorWithDomain:@"com.anythink.Unity3DPackage" code:100001 userInfo:@{NSLocalizedDescriptionKey:@"AT has failed to load ad", NSLocalizedFailureReasonErrorKey:@"AT has failed to load ad"}];
[self invokeCallback:@"OnRewardedVideoLoadFailure" placementID:placementID error:error extra:nil];
}
-(void) rewardedVideoDidStartPlayingForPlacementID:(NSString*)placementID extra:(NSDictionary *)extra {
[self invokeCallback:@"OnRewardedVideoPlayStart" placementID:placementID error:nil extra:extra];
[[NSNotificationCenter defaultCenter] postNotificationName:kATUnityUtilitiesRewardedVideoImpressionNotification object:nil];
}
-(void) rewardedVideoDidEndPlayingForPlacementID:(NSString*)placementID extra:(NSDictionary *)extra {
[self invokeCallback:@"OnRewardedVideoPlayEnd" placementID:placementID error:nil extra:extra];
}
-(void) rewardedVideoDidFailToPlayForPlacementID:(NSString*)placementID error:(NSError*)error extra:(NSDictionary *)extra {
error = error != nil ? error : [NSError errorWithDomain:@"com.anythink.Unity3DPackage" code:100001 userInfo:@{NSLocalizedDescriptionKey:@"AT has failed to play video", NSLocalizedFailureReasonErrorKey:@"AT has failed to play video"}];
[self invokeCallback:@"OnRewardedVideoPlayFailure" placementID:placementID error:error extra:extra];
}
-(void) rewardedVideoDidCloseForPlacementID:(NSString*)placementID rewarded:(BOOL)rewarded extra:(NSDictionary *)extra {
[self invokeCallback:@"OnRewardedVideoClose" placementID:placementID error:nil extra:@{@"rewarded":@(rewarded), @"extra":extra != nil ? extra : @{}}];
[[NSNotificationCenter defaultCenter] postNotificationName:kATUnityUtilitiesRewardedVideoCloseNotification object:nil];
}
-(void) rewardedVideoDidClickForPlacementID:(NSString*)placementID extra:(NSDictionary *)extra {
[self invokeCallback:@"OnRewardedVideoClick" placementID:placementID error:nil extra:extra];
}
-(void) rewardedVideoDidRewardSuccessForPlacemenID:(NSString*)placementID extra:(NSDictionary*)extra {
[self invokeCallback:@"OnRewardedVideoReward" placementID:placementID error:nil extra:extra];
}
//again
// rewarded video again
-(void) rewardedVideoAgainDidStartPlayingForPlacementID:(NSString*)placementID extra:(NSDictionary*)extra {
[self invokeCallback:@"OnRewardedVideoAdAgainPlayStart" placementID:placementID error:nil extra:extra];
}
-(void) rewardedVideoAgainDidEndPlayingForPlacementID:(NSString*)placementID extra:(NSDictionary*)extra {
[self invokeCallback:@"OnRewardedVideoAdAgainPlayEnd" placementID:placementID error:nil extra:extra];
}
-(void) rewardedVideoAgainDidFailToPlayForPlacementID:(NSString*)placementID error:(NSError*)error extra:(NSDictionary*)extra {
error = error != nil ? error : [NSError errorWithDomain:@"com.anythink.Unity3DPackage" code:100001 userInfo:@{NSLocalizedDescriptionKey:@"AT has failed to play video", NSLocalizedFailureReasonErrorKey:@"AT has failed to play video"}];
[self invokeCallback:@"OnRewardedVideoAdAgainPlayFailed" placementID:placementID error:error extra:extra];
}
-(void) rewardedVideoAgainDidClickForPlacementID:(NSString*)placementID extra:(NSDictionary*)extra {
[self invokeCallback:@"OnRewardedVideoAdAgainPlayClicked" placementID:placementID error:nil extra:extra];
}
-(void) rewardedVideoAgainDidRewardSuccessForPlacemenID:(NSString*)placementID extra:(NSDictionary*)extra {
[self invokeCallback:@"OnAgainReward" placementID:placementID error:nil extra:extra];
}
@end

View File

@@ -0,0 +1,37 @@
fileFormatVersion: 2
guid: d2a3b71dcccb94d7c8c277e2e4d71c3b
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 0
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
- first:
iPhone: iOS
second:
enabled: 1
settings: {}
- first:
tvOS: tvOS
second:
enabled: 1
settings: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,18 @@
//
// ATSplashAdWrapper.h
// UnityFramework
//
// Created by li zhixuan on 2023/5/4.
//
#import <Foundation/Foundation.h>
#import "ATBaseUnityWrapper.h"
NS_ASSUME_NONNULL_BEGIN
@interface ATSplashAdWrapper : ATBaseUnityWrapper
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,27 @@
fileFormatVersion: 2
guid: 4c5e68d87e3b846ccbe99c89e6095a63
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 1
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,243 @@
//
// ATSplashAdWrapper.m
// UnityFramework
//
// Created by li zhixuan on 2023/5/4.
//
#import "ATSplashAdWrapper.h"
#import "ATUnityUtilities.h"
#import <AnyThinkSplash/AnyThinkSplash.h>
@interface ATSplashAdWrapper () <ATSplashDelegate>
@end
@implementation ATSplashAdWrapper
+ (instancetype)sharedInstance {
static ATSplashAdWrapper *sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[ATSplashAdWrapper alloc] init];
});
return sharedInstance;
}
- (NSString *)scriptWrapperClass {
return @"ATSplashAdWrapper";
}
- (id)selWrapperClassWithDict:(NSDictionary *)dict callback:(void(*)(const char*, const char*))callback {
NSString *selector = dict[@"selector"];
NSArray<NSString*>* arguments = dict[@"arguments"];
NSString *firstObject = @"";
NSString *lastObject = @"";
if (![ATUnityUtilities isEmpty:arguments]) {
for (int i = 0; i < arguments.count; i++) {
if (i == 0) { firstObject = arguments[i]; }
else { lastObject = arguments[i]; }
}
}
if ([selector isEqualToString:@"loadSplashAdWithPlacementID:customDataJSONString:callback:"]) {
[self loadSplashAdWithPlacementID:firstObject customDataJSONString:lastObject callback:callback];
} else if ([selector isEqualToString:@"splashAdReadyForPlacementID:"]) {
return [NSNumber numberWithBool:[self splashAdReadyForPlacementID:firstObject]];
} else if ([selector isEqualToString:@"showSplashAdWithPlacementID:extraJsonString:"]) {
[self showSplashAdWithPlacementID:firstObject extraJsonString:lastObject];
} else if ([selector isEqualToString:@"checkAdStatus:"]) {
return [self checkAdStatus:firstObject];
} else if ([selector isEqualToString:@"clearCache"]) {
[self clearCache];
} else if ([selector isEqualToString:@"getValidAdCaches:"]) {
return [self getValidAdCaches:firstObject];
}else if ([selector isEqualToString:@"entryScenarioWithPlacementID:scenarioID:"]) {
[self entryScenarioWithPlacementID:firstObject scenarioID:lastObject];
}
return nil;
}
- (void)loadSplashAdWithPlacementID:(NSString*)placementID customDataJSONString:(NSString*)customDataJSONString callback:(void(*)(const char*, const char*))callback {
[self setCallBack:callback forKey:placementID];
NSMutableDictionary *extra = [NSMutableDictionary dictionary];
if ([customDataJSONString isKindOfClass:[NSString class]] && [customDataJSONString length] > 0) {
NSDictionary *extraDict = [NSJSONSerialization JSONObjectWithData:[customDataJSONString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];
[extra addEntriesFromDictionary:extraDict];
}
NSString *defaultAdSourceConfig = extra[@"default_adSource_config"];
NSLog(@"ATSplashAdWrapper::extra = %@", extra);
[[ATAdManager sharedManager] loadADWithPlacementID:placementID
extra:extra
delegate:self
containerView:nil
defaultAdSourceConfig:defaultAdSourceConfig];
}
- (BOOL)splashAdReadyForPlacementID:(NSString*)placementID {
return [[ATAdManager sharedManager] splashReadyForPlacementID:placementID];
}
- (NSString*)getValidAdCaches:(NSString *)placementID {
NSArray *array = [[ATAdManager sharedManager] getSplashValidAdsForPlacementID:placementID];
NSLog(@"ATSplashAdWrapper::array = %@", array);
return array.jsonFilterString;
}
- (void)showSplashAdWithPlacementID:(NSString*)placementID extraJsonString:(NSString*)extraJsonString {
[[ATAdManager sharedManager] showSplashWithPlacementID:placementID scene:@"" window:[UIApplication sharedApplication].delegate.window delegate:self];
}
- (NSString*)checkAdStatus:(NSString *)placementID {
ATCheckLoadModel *checkLoadModel = [[ATAdManager sharedManager] checkSplashLoadStatusForPlacementID:placementID];
NSMutableDictionary *statusDict = [NSMutableDictionary dictionary];
statusDict[@"isLoading"] = @(checkLoadModel.isLoading);
statusDict[@"isReady"] = @(checkLoadModel.isReady);
statusDict[@"adInfo"] = checkLoadModel.adOfferInfo;
NSLog(@"ATSplashAdWrapper::statusDict = %@", statusDict);
return statusDict.jsonFilterString;
}
- (void)entryScenarioWithPlacementID:(NSString *)placementID scenarioID:(NSString *)scenarioID{
[[ATAdManager sharedManager] entrySplashScenarioWithPlacementID:placementID scene:scenarioID];
}
- (void) clearCache {
}
#pragma mark - ATSplashDelegate
/// Splash ad displayed successfully
- (void)splashDidShowForPlacementID:(NSString *)placementID
extra:(NSDictionary *)extra {
[self invokeCallback:@"OnSplashAdShow" placementID:placementID error:nil extra:extra];
}
/// Splash ad click
- (void)splashDidClickForPlacementID:(NSString *)placementID
extra:(NSDictionary *)extra {
[self invokeCallback:@"OnSplashAdClick" placementID:placementID error:nil extra:extra];
}
/// Splash ad closed
- (void)splashDidCloseForPlacementID:(NSString *)placementID
extra:(NSDictionary *)extra {
[self invokeCallback:@"OnSplashAdClose" placementID:placementID error:nil extra:extra];
}
/// Callback when the splash ad is loaded successfully
/// @param isTimeout whether timeout
/// v 5.7.73
- (void)didFinishLoadingSplashADWithPlacementID:(NSString *)placementID
isTimeout:(BOOL)isTimeout {
}
/// Splash ad loading timeout callback
/// v 5.7.73
- (void)didTimeoutLoadingSplashADWithPlacementID:(NSString *)placementID {
[self invokeCallback:@"OnSplashAdLoadTimeout" placementID:placementID error:nil extra:nil];
}
/// Splash ad failed to display
/// currently supports Pangle, Guangdiantong and Baidu
- (void)splashDidShowFailedForPlacementID:(NSString *)placementID
error:(NSError *)error
extra:(NSDictionary *)extra {
[self invokeCallback:@"OnSplashAdFailedToShow" placementID:placementID error:error extra:extra];
}
/// Whether the click jump of Splash ad is in the form of Deeplink
/// note: only suport TopOn Adx ad
- (void)splashDeepLinkOrJumpForPlacementID:(NSString *)placementID
extra:(NSDictionary *)extra
result:(BOOL)success {
NSMutableDictionary *newExtra = [[NSMutableDictionary alloc] initWithDictionary:extra];
newExtra[@"success"] = @(success);
[self invokeCallback:@"OnSplashAdDeeplink" placementID:placementID error:nil extra:newExtra];
}
/// Splash ad closes details page
- (void)splashDetailDidClosedForPlacementID:(NSString *)placementID
extra:(NSDictionary *)extra {
}
/// Called when splash zoomout view did click
/// note: only suport Pangle splash zoomout view and the Tencent splash V+ ad
- (void)splashZoomOutViewDidClickForPlacementID:(NSString *)placementID
extra:(NSDictionary *)extra {
}
/// Called when splash zoomout view did close
/// note: only suport Pangle splash zoomout view and the Tencent splash V+ ad
- (void)splashZoomOutViewDidCloseForPlacementID:(NSString *)placementID
extra:(NSDictionary *)extra {
}
/// This callback is triggered when the skip button is customized.
/// note: only suport TopOn MyOffer, TopOn Adx and TopOn OnlineApi
/// 5.7.61+
- (void)splashCountdownTime:(NSInteger)countdown
forPlacementID:(NSString *)placementID
extra:(NSDictionary *)extra {
}
#pragma mark - ATAdLoadingDelegate
/// Callback when the successful loading of the ad
- (void)didFinishLoadingADWithPlacementID:(NSString *)placementID {
[self invokeCallback:@"OnSplashAdLoaded" placementID:placementID error:nil extra:nil];
}
/// Callback of ad loading failure
- (void)didFailToLoadADWithPlacementID:(NSString*)placementID
error:(NSError*)error {
error = error != nil ? error : [NSError errorWithDomain:@"com.anythink.Unity3DPackage" code:100001 userInfo:@{NSLocalizedDescriptionKey:@"AT has failed to load ad", NSLocalizedFailureReasonErrorKey:@"AT has failed to load ad"}];
[self invokeCallback:@"OnSplashAdLoadFailure" placementID:placementID error:error extra:nil];
}
/// Ad start load
- (void)didStartLoadingADSourceWithPlacementID:(NSString *)placementID
extra:(NSDictionary*)extra {
[self invokeCallback:@"startLoadingADSource" placementID:placementID error:nil extra:extra];
}
/// Ad load success
- (void)didFinishLoadingADSourceWithPlacementID:(NSString *)placementID
extra:(NSDictionary*)extra {
[self invokeCallback:@"finishLoadingADSource" placementID:placementID error:nil extra:extra];
}
/// Ad load fail
- (void)didFailToLoadADSourceWithPlacementID:(NSString*)placementID
extra:(NSDictionary*)extra
error:(NSError*)error {
[self invokeCallback:@"failToLoadADSource" placementID:placementID error:error extra:extra];
}
/// Ad start bidding
- (void)didStartBiddingADSourceWithPlacementID:(NSString *)placementID
extra:(NSDictionary*)extra {
[self invokeCallback:@"startBiddingADSource" placementID:placementID error:nil extra:extra];
}
/// Ad bidding success
- (void)didFinishBiddingADSourceWithPlacementID:(NSString *)placementID
extra:(NSDictionary*)extra {
[self invokeCallback:@"finishBiddingADSource" placementID:placementID error:nil extra:extra];
}
/// Ad bidding fail
- (void)didFailBiddingADSourceWithPlacementID:(NSString*)placementID
extra:(NSDictionary*)extra
error:(NSError*)error {
[self invokeCallback:@"failBiddingADSource" placementID:placementID error:error extra:extra];
}
@end

View File

@@ -0,0 +1,37 @@
fileFormatVersion: 2
guid: 050ae11a1f7d14f1582670c2ec76d58f
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 0
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
- first:
iPhone: iOS
second:
enabled: 1
settings: {}
- first:
tvOS: tvOS
second:
enabled: 1
settings: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,15 @@
//
// ATUnityManager.h
// UnityContainer
//
// Created by Martin Lau on 08/08/2018.
// Copyright © 2018 Martin Lau. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "ATUnityWrapper.h"
@interface ATUnityManager : NSObject<ATUnityWrapper>
+(instancetype)sharedInstance;
- (id)selWrapperClassWithDict:(NSDictionary *)dict callback:(void(*)(const char*))callback;
@end

View File

@@ -0,0 +1,27 @@
fileFormatVersion: 2
guid: cd0a7a969d01e426d86016392b0ebb74
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 1
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,338 @@
//
// ATUnityManager.m
// UnityContainer
//
// Created by Martin Lau on 08/08/2018.
// Copyright © 2018 Martin Lau. All rights reserved.
//
#import "ATUnityManager.h"
#import <AnyThinkSDK/AnyThinkSDK.h>
#import "ATUnityUtilities.h"
#import <CoreTelephony/CTTelephonyNetworkInfo.h>
#import <CoreTelephony/CTCarrier.h>
#import "ATBannerAdWrapper.h"
#import "ATNativeAdWrapper.h"
#import "ATInterstitialAdWrapper.h"
#import "ATRewardedVideoWrapper.h"
/*
*class:
*selector:
*arguments:
*/
bool at_message_from_unity(const char *msg, void(*callback)(const char*, const char *)) {
NSString *msgStr = [NSString stringWithUTF8String:msg];
NSDictionary *msgDict = [NSJSONSerialization JSONObjectWithData:[msgStr dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];
Class class = NSClassFromString(msgDict[@"class"]);
bool ret = false;
ret = [[[class sharedInstance] selWrapperClassWithDict:msgDict callback:callback != NULL ? callback : nil] boolValue];
return ret;
}
int at_get_message_for_unity(const char *msg, void(*callback)(const char*, const char *)) {
NSString *msgStr = [NSString stringWithUTF8String:msg];
NSDictionary *msgDict = [NSJSONSerialization JSONObjectWithData:[msgStr dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];
Class class = NSClassFromString(msgDict[@"class"]);
int ret = 0;
ret = [[[class sharedInstance] selWrapperClassWithDict:msgDict callback:callback != NULL ? callback : nil] intValue];
return ret;
}
char * at_get_string_message_for_unity(const char *msg, void(*callback)(const char*, const char *)) {
NSString *msgStr = [NSString stringWithUTF8String:msg];
NSDictionary *msgDict = [NSJSONSerialization JSONObjectWithData:[msgStr dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];
Class class = NSClassFromString(msgDict[@"class"]);
NSString *ret = @"";
ret = [[class sharedInstance] selWrapperClassWithDict:msgDict callback:callback != NULL ? callback : nil];
if ([ret UTF8String] == NULL)
return NULL;
char* res = (char*)malloc(strlen([ret UTF8String]) + 1);
strcpy(res, [ret UTF8String]);
return res;
}
@interface ATUnityManager()
@property(nonatomic, readonly) NSMutableDictionary *consentInfo;
@end
@implementation ATUnityManager
+(instancetype)sharedInstance {
static ATUnityManager *sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[ATUnityManager alloc] init];
});
return sharedInstance;
}
-(instancetype) init {
self = [super init];
if (self != nil) {
_consentInfo = [NSMutableDictionary dictionary];
}
return self;
}
- (id)selWrapperClassWithDict:(NSDictionary *)dict callback:(void(*)(const char*))callback {
NSString *selector = dict[@"selector"];
NSArray<NSString*>* arguments = dict[@"arguments"];
NSString *firstObject = @"";
NSString *lastObject = @"";
if (![ATUnityUtilities isEmpty:arguments]) {
for (int i = 0; i < arguments.count; i++) {
if (i == 0) { firstObject = arguments[i]; }
else { lastObject = arguments[i]; }
}
}
if ([selector isEqualToString:@"startSDKWithAppID:appKey:"]) {
return [NSNumber numberWithBool:[self startSDKWithAppID:firstObject appKey:lastObject]];
} else if ([selector isEqualToString:@"subjectToGDPR"]) {
return [NSNumber numberWithBool:[self subjectToGDPR]];
} else if ([selector isEqualToString:@"presentDataConsentDialog"]) {
[self presentDataConsentDialog];
} else if ([selector isEqualToString:@"showGDPRConsentDialog:"]) {
[self showGDPRConsentDialog:callback];
} else if ([selector isEqualToString:@"getUserLocation:"]) {
[self getUserLocation:callback];
} else if ([selector isEqualToString:@"setPurchaseFlag"]) {
[self setPurchaseFlag];
} else if ([selector isEqualToString:@"clearPurchaseFlag"]) {
[self clearPurchaseFlag];
} else if ([selector isEqualToString:@"purchaseFlag"]) {
return [NSNumber numberWithBool:[self purchaseFlag]];
} else if ([selector isEqualToString:@"setChannel:"]) {
[self setChannel:firstObject];
} else if ([selector isEqualToString:@"setSubChannel:"]) {
[self setSubChannel:firstObject];
} else if ([selector isEqualToString:@"setCustomData:"]) {
[self setCustomData:firstObject];
} else if ([selector isEqualToString:@"setCustomData:forPlacementID:"]) {
[self setCustomData:firstObject forPlacementID:lastObject];
} else if ([selector isEqualToString:@"setDebugLog:"]) {
[self setDebugLog:firstObject];
} else if ([selector isEqualToString:@"getDataConsent"]) {
return [NSNumber numberWithInt:[self getDataConsent]];
} else if ([selector isEqualToString:@"setDataConsent:"]) {
[self setDataConsent:[NSNumber numberWithInt:firstObject.intValue]];
} else if ([selector isEqualToString:@"inDataProtectionArea"]) {
return [NSNumber numberWithBool:[self inDataProtectionArea]];
} else if ([selector isEqualToString:@"deniedUploadDeviceInfo:"]) {
[self deniedUploadDeviceInfo:firstObject];
} else if ([selector isEqualToString:@"setDataConsent:network:"]) {
[self setDataConsent:firstObject network:[NSNumber numberWithInt:lastObject.intValue]];
} else if ([selector isEqualToString:@"setExcludeBundleIdArray:"]) {
[self setExcludeBundleIdArray:firstObject];
} else if ([selector isEqualToString:@"setExludePlacementid:unitIDArray:"]) {
[self setExludePlacementid:firstObject unitIDArray:lastObject];
} else if ([selector isEqualToString:@"setSDKArea:"]) {
[self setSDKArea:[NSNumber numberWithInt:firstObject.intValue]];
} else if ([selector isEqualToString:@"getArea:"]) {
[self getArea:callback];
} else if ([selector isEqualToString:@"setWXStatus:"]) {
[self setWXStatus:firstObject];
} else if ([selector isEqualToString:@"setLocationLongitude:dimension:"]) {
[self setLocationLongitude:[NSNumber numberWithDouble:firstObject.doubleValue] dimension:[NSNumber numberWithDouble:lastObject.doubleValue]];
} else if ([selector isEqualToString:@"showDebuggerUI"]) {
[self showDebuggerUI];
}
return nil;
}
-(BOOL) startSDKWithAppID:(NSString*)appID appKey:(NSString*)appKey {
[[ATAPI sharedInstance]setSystemPlatformType:ATSystemPlatformTypeUnity];
return [[ATAPI sharedInstance] startWithAppID:appID appKey:appKey error:nil];
}
- (BOOL) subjectToGDPR {
return [@[@"AT", @"BE", @"BG", @"HR", @"CY", @"CZ", @"DK", @"EE", @"FI", @"FR", @"DE", @"GR", @"HU", @"IS", @"IE", @"IT", @"LV", @"LI", @"LT", @"LU", @"MT", @"NL", @"NO", @"PL", @"PT", @"RO", @"SK", @"SI", @"ES", @"SE", @"GB", @"UK"] containsObject:[[CTTelephonyNetworkInfo new].subscriberCellularProvider.isoCountryCode length] > 0 ? [[CTTelephonyNetworkInfo new].subscriberCellularProvider.isoCountryCode uppercaseString] : @""];
}
-(void) presentDataConsentDialog {
[[ATAPI sharedInstance] presentDataConsentDialogInViewController:[UIApplication sharedApplication].delegate.window.rootViewController dismissalCallback:^{
}];
}
-(void) showGDPRConsentDialog:(void(*)(const char*))callback {
[[ATAPI sharedInstance] showGDPRConsentDialogInViewController:[UIApplication sharedApplication].delegate.window.rootViewController dismissalCallback:^{
if (callback != NULL) { callback(@"".UTF8String); }
}];
}
-(void) getUserLocation:(void(*)(const char*))callback {
[[ATAPI sharedInstance] getUserLocationWithCallback:^(ATUserLocation location) {
if (callback != NULL) { callback(@(location).stringValue.UTF8String); }
}];
}
-(void) setPurchaseFlag {
}
-(void) clearPurchaseFlag {
}
-(BOOL) purchaseFlag {
return NO;
}
-(void) setChannel:(NSString*)channel {
[[ATAPI sharedInstance] setChannel:channel];
}
-(void) setSubChannel:(NSString*)subChannel {
[[ATAPI sharedInstance] setSubchannel:subChannel];
}
-(void) setCustomData:(NSString*)customDataStr {
if ([customDataStr isKindOfClass:[NSString class]] && [customDataStr length] > 0) {
NSDictionary *customData = [NSJSONSerialization JSONObjectWithData:[customDataStr dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];
[[ATAPI sharedInstance] setCustomData:customData];
}
}
-(void) setCustomData:(NSString*)customDataStr forPlacementID:(NSString*)placementID {
if ([customDataStr isKindOfClass:[NSString class]] && [customDataStr length] > 0) {
NSDictionary *customData = [NSJSONSerialization JSONObjectWithData:[customDataStr dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];
[[ATAPI sharedInstance] setCustomData:customData forPlacementID:placementID];
}
}
-(void) setDebugLog:(NSString*)flagStr {
[ATAPI setLogEnabled:[flagStr boolValue]];
}
-(int) getDataConsent {
return [@{@(ATDataConsentSetPersonalized):@0, @(ATDataConsentSetNonpersonalized):@1, @(ATDataConsentSetUnknown):@2}[@([ATAPI sharedInstance].dataConsentSet)] intValue];
}
-(void) setDataConsent:(NSNumber*)dataConsent {
[[ATAPI sharedInstance] setDataConsentSet:[@{@0:@(ATDataConsentSetPersonalized), @1:@(ATDataConsentSetNonpersonalized), @2:@(ATDataConsentSetUnknown)}[dataConsent] integerValue] consentString:nil];
}
-(BOOL) inDataProtectionArea {
return [[ATAPI sharedInstance] inDataProtectionArea];
}
-(void) deniedUploadDeviceInfo:(NSString *)deniedInfo {
NSLog(@"ATUnityManager::deniedUploadDeviceInfo = %@", deniedInfo);
if (![ATUnityUtilities isEmpty:deniedInfo]) {
NSArray *deniedInfoArray = [NSJSONSerialization JSONObjectWithData:[deniedInfo dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];
[[ATAPI sharedInstance] setDeniedUploadInfoArray:deniedInfoArray];
}
}
/*
*
*/
-(void) setDataConsent:(NSString*)consentJsonString network:(NSNumber*)network {
NSLog(@"API was deprecated, please use SetDataConsent(int consent)");
// NSLog(@"constenJsonString = %@, network = %@", consentJsonString, network);
// NSDictionary *networks = @{@1:kATNetworkNameFacebook, @2:kATNetworkNameAdmob, @3:kATNetworkNameInmobi, @4:kATNetworkNameFlurry, @5:kATNetworkNameApplovin, @6:kATNetworkNameMintegral, @8:kATNetworkNameGDT, @9:kATNetworkNameChartboost, @10:kATNetworkNameTapjoy, @11:kATNetworkNameIronSource, @12:kATNetworkNameUnityAds, @13:kATNetworkNameVungle, @14:kATNetworkNameAdColony, @1:kATNetworkNameOneway, @18:kATNetworkNameMobPower, @20:kATNetworkNameYeahmobi, @21:kATNetworkNameAppnext, @22:kATNetworkNameBaidu};
// if ([networks containsObjectForKey:network]) {
// if (([consentJsonString isKindOfClass:[NSString class]] && [consentJsonString dataUsingEncoding:NSUTF8StringEncoding] != nil)) {
// NSDictionary *consentDict = [NSJSONSerialization JSONObjectWithData:[consentJsonString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];
// _consentInfo[networks[network]] = [consentDict containsObjectForKey:@"value"] ? consentDict[@"value"] : consentDict;
// } else {
// [_consentInfo removeObjectForKey:networks[network]];
// }
// NSLog(@"consentInfo = %@", _consentInfo);
// if ([_consentInfo[kATNetworkNameMintegral] isKindOfClass:[NSDictionary class]]) {
// NSMutableDictionary<NSNumber*, NSNumber*>* mintegralInfo = [NSMutableDictionary<NSNumber*, NSNumber*> dictionary];
// [_consentInfo[kATNetworkNameMintegral] enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
// if ([key respondsToSelector:@selector(integerValue)] && [obj respondsToSelector:@selector(integerValue)]) mintegralInfo[@([key integerValue])] = @([obj integerValue]);
// }];
// NSLog(@"consentInfo = %@, %@", [((NSDictionary*)_consentInfo[kATNetworkNameMintegral]).allKeys[0] class], [((NSDictionary*)_consentInfo[kATNetworkNameMintegral]).allValues[0] class]);
// _consentInfo[kATNetworkNameMintegral] = mintegralInfo;
// NSLog(@"consentInfo = %@, %@", [((NSDictionary*)_consentInfo[kATNetworkNameMintegral]).allKeys[0] class], [((NSDictionary*)_consentInfo[kATNetworkNameMintegral]).allValues[0] class]);
// }
// [[ATAPI sharedInstance] setNetworkConsentInfo:_consentInfo];
// }
}
-(void) setExcludeBundleIdArray:(NSString*)bundleIds {
NSLog(@"ATUnityManager::setExcludeBundleIdArray = %@", bundleIds);
if (![ATUnityUtilities isEmpty:bundleIds]) {
NSArray *bundleIdArray = [NSJSONSerialization JSONObjectWithData:[bundleIds dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];
[[ATAPI sharedInstance] setExludeAppleIdArray:bundleIdArray];
}
}
-(void) setExludePlacementid:(NSString*)placementID unitIDArray:(NSString*)adsourceIds {
NSLog(@"ATUnityManager::setExludePlacementid=%@ adsourceIds= %@",placementID ,adsourceIds);
if (![ATUnityUtilities isEmpty:adsourceIds]) {
NSArray *adsourceIdArray = [NSJSONSerialization JSONObjectWithData:[adsourceIds dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];
[[ATAdManager sharedManager] setExludePlacementid:placementID
unitIDArray:adsourceIdArray];
}
}
-(void) setSDKArea:(NSNumber*)area {
NSLog(@"ATUnityManager::setSDKArea=%@",area);
}
-(void) getArea:(void(*)(const char *))callback {
NSLog(@"ATUnityManager::getArea");
NSMutableDictionary *resultDict = [NSMutableDictionary dictionary];
[[ATAPI sharedInstance] getAreaSuccess:^(NSString *areaCodeStr) {
NSLog(@"ATUnityManager::getArea:Success:%@",areaCodeStr);
if (areaCodeStr != nil) {
resultDict[@"areaCode"] = areaCodeStr;
if (callback != NULL) { callback(resultDict.jsonString.UTF8String); }
}
} failure:^(NSError *error) {
NSLog(@"ATUnityManager::getArea:failure:%@",error.domain);
if (error.domain != nil) {
resultDict[@"errorMsg"] = error.domain;
if (callback != NULL) { callback(resultDict.jsonString.UTF8String); }
}
}];
}
-(void) setWXStatus:(NSString *)statusStr {
NSLog(@"ATUnityManager::setWXStatus=%@",statusStr);
[[ATAPI sharedInstance] setWXStatus:[statusStr boolValue]];
}
-(void) setLocationLongitude:(NSNumber*)longitude dimension:(NSNumber*)latitude {
NSLog(@"ATUnityManager::setLocationLongitude=%@ dimension=%@",longitude,latitude);
[[ATAPI sharedInstance] setLocationLongitude:longitude.doubleValue dimension:latitude.doubleValue];
}
-(void) showDebuggerUI
{
// AnyThinkDebuggerUISDK
NSLog(@"ATUnityManager::showDebuggerUI");
NSString *classStr = @"ATDebuggerAPI";
Class debuggerAPIClass = NSClassFromString(classStr);
if(!debuggerAPIClass) {
NSLog(@"ATUnityManager::showDebuggerUI- NO %@",classStr);
return;
} else {
NSObject *debuger = [debuggerAPIClass performSelector:@selector(sharedInstance)];
NSString *fuctionStr = @"showDebuggerInViewController:showType:";
SEL sel = NSSelectorFromString(fuctionStr);
if(!debuger || ![debuger respondsToSelector:sel]) {
NSLog(@"ATUnityManager::showDebuggerUI- NO %@",fuctionStr);
return;
} else {
UIWindow *win = [UIApplication sharedApplication].keyWindow;
[debuger performSelector:sel withObject:win.rootViewController withObject:@1];
}
}
}
@end

View File

@@ -0,0 +1,37 @@
fileFormatVersion: 2
guid: d95b2163a82e6462e9f2f9cf16c1642d
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 0
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
- first:
iPhone: iOS
second:
enabled: 1
settings: {}
- first:
tvOS: tvOS
second:
enabled: 1
settings: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,51 @@
//
// ATUnityUtilities.h
// UnityContainer
//
// Created by Martin Lau on 14/08/2018.
// Copyright © 2018 Martin Lau. All rights reserved.
//
#import <UIKit/UIKit.h>
extern NSString *const kATUnityUtilitiesInterstitialImpressionNotification;
extern NSString *const kATUnityUtilitiesInterstitialCloseNotification;
extern NSString *const kATUnityUtilitiesRewardedVideoImpressionNotification;
extern NSString *const kATUnityUtilitiesRewardedVideoCloseNotification;
extern NSString *const kATUnityUtilitiesAdShowingExtraScenarioKey;
extern NSString *const kATUnityUserExtraDataKey;
extern NSString *const kATUnityCheckLoadModelAdInfoKey;
@interface ATUnityUtilities : NSObject
+(BOOL)isEmpty:(id)object;
@end
@interface NSDictionary (KAKit)
-(NSString*) jsonString;
// 过滤SDK返回参数的 user_load_extra_data 中不支持的类型
-(NSString*) jsonFilterString;
-(BOOL)containsObjectForKey:(id)key;
@end
@interface NSArray (KAKit)
-(NSString*) jsonString;
// 过滤SDK返回参数的 user_load_extra_data 中不支持的类型
-(NSString*) jsonFilterString;
@end
@interface NSData(ATKit)
+(instancetype) dataWithUTF8String:(const char*)string;
@end
@interface UIColor (Hex)
// 透明度固定为1以0x开头的十六进制转换成的颜色
+ (UIColor *)colorWithHex:(long)hexColor;
// 0x开头的十六进制转换成的颜色,透明度可调整
+ (UIColor *)colorWithHex:(long)hexColor alpha:(float)opacity;
// 颜色转换三iOS中十六进制的颜色以#开头转换为UIColor
+ (UIColor *) colorWithHexString: (NSString *)color;
@end

View File

@@ -0,0 +1,27 @@
fileFormatVersion: 2
guid: a614a84f8a56e42a9bdf249b46dbac4b
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 1
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,206 @@
//
// ATUnityUtilities.m
// UnityContainer
//
// Created by Martin Lau on 14/08/2018.
// Copyright © 2018 Martin Lau. All rights reserved.
//
#import "ATUnityUtilities.h"
NSString *const kATUnityUtilitiesInterstitialImpressionNotification = @"com.anythink.kATUnityUtilitiesInterstitialImpressionNotification";
NSString *const kATUnityUtilitiesInterstitialCloseNotification = @"kATUnityUtilitiesInterstitialCloseNotification";
NSString *const kATUnityUtilitiesRewardedVideoImpressionNotification = @"kATUnityUtilitiesRewardedVideoImpressionNotification";
NSString *const kATUnityUtilitiesRewardedVideoCloseNotification = @"kATUnityUtilitiesRewardedVideoCloseNotification";
NSString *const kATUnityUtilitiesAdShowingExtraScenarioKey = @"Scenario";
NSString *const kATUnityUserExtraDataKey = @"user_load_extra_data";
NSString *const kATUnityCheckLoadModelAdInfoKey = @"adInfo";
@implementation ATUnityUtilities
+(BOOL)isEmpty:(id)object {
return (object == nil || [object isKindOfClass:[NSNull class]] || ([object respondsToSelector:@selector(length)] && [(NSData *)object length] == 0) || ([object respondsToSelector:@selector(count)] && [(NSArray *)object count] == 0));
}
@end
@implementation NSDictionary (KAKit)
-(NSString*) jsonString {
NSError *error;
NSData *jsonData;
@try {
jsonData = [NSJSONSerialization dataWithJSONObject:self
options:kNilOptions
error:&error];
} @catch (NSException *exception) {
return @"{}";
} @finally {}
if (!jsonData) {
return @"{}";
} else {
return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}
}
- (NSString*)jsonFilterString {
NSError *error;
NSData *jsonData;
NSMutableDictionary *extraDictM = [NSMutableDictionary dictionaryWithDictionary:self[kATUnityCheckLoadModelAdInfoKey]];
NSMutableDictionary *extraDataTemp = [NSMutableDictionary dictionary];
NSMutableDictionary *extraDataDictM = [NSMutableDictionary dictionaryWithDictionary:self[kATUnityCheckLoadModelAdInfoKey][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];
}
NSMutableDictionary *jsonDictM = [NSMutableDictionary dictionaryWithDictionary:self];
[jsonDictM setValue:extraDictM forKey:kATUnityCheckLoadModelAdInfoKey];
@try {
jsonData = [NSJSONSerialization dataWithJSONObject:jsonDictM
options:kNilOptions
error:&error];
} @catch (NSException *exception) {
return @"{}";
} @finally {}
if (!jsonData) {
return @"{}";
} else {
return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}
}
-(BOOL)containsObjectForKey:(id)key {
return [self.allKeys containsObject:key];
}
@end
@implementation NSArray (KAKit)
-(NSString*) jsonString {
NSError *error;
NSData *jsonData;
@try {
jsonData = [NSJSONSerialization dataWithJSONObject:self
options:kNilOptions
error:&error];
} @catch (NSException *exception) {
return @"[]";
} @finally {}
if (!jsonData) {
return @"[]";
} else {
return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}
}
- (NSString*)jsonFilterString {
NSError *error;
NSData *jsonData;
NSMutableArray *filterArrayM = [NSMutableArray arrayWithCapacity:self.count];
for (NSDictionary *adTempDict in self) {
NSMutableDictionary *extraDictM = [NSMutableDictionary dictionaryWithDictionary:adTempDict];
NSMutableDictionary *extraDataTemp = [NSMutableDictionary dictionary];
NSMutableDictionary *extraDataDictM = [NSMutableDictionary dictionaryWithDictionary:adTempDict[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];
}
[filterArrayM addObject:extraDictM];
}
@try {
jsonData = [NSJSONSerialization dataWithJSONObject:filterArrayM
options:kNilOptions
error:&error];
} @catch (NSException *exception) {
return @"[]";
} @finally {}
if (!jsonData) {
return @"[]";
} else {
return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}
}
@end
@implementation NSData(ATKit)
+(instancetype) dataWithUTF8String:(const char*)string {
return [[NSString stringWithUTF8String:string] dataUsingEncoding:NSUTF8StringEncoding];
}
@end
@implementation UIColor (Hex)
// 10x
+ (UIColor*) colorWithHex:(long)hexColor;
{
return [UIColor colorWithHex:hexColor alpha:1.];
}
// 0x,
+ (UIColor *)colorWithHex:(long)hexColor alpha:(float)opacity
{
float red = ((float)((hexColor & 0xFF0000) >> 16))/255.0;
float green = ((float)((hexColor & 0xFF00) >> 8))/255.0;
float blue = ((float)(hexColor & 0xFF))/255.0;
return [UIColor colorWithRed:red green:green blue:blue alpha:opacity];
}
// iOS#UIColor
+ (UIColor *) colorWithHexString: (NSString *)color
{
NSString *cString = [[color stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];
// String should be 6 or 8 characters
if ([cString length] < 6) {
return [UIColor clearColor];
}
//
if ([cString hasPrefix:@"0X"])
cString = [cString substringFromIndex:2];
if ([cString hasPrefix:@"#"])
cString = [cString substringFromIndex:1];
if ([cString length] != 6)
return [UIColor clearColor];
// RGB
NSRange range;
range.location = 0;
range.length = 2;
//RGB
NSString *rString = [cString substringWithRange:range];
range.location = 2;
NSString *gString = [cString substringWithRange:range];
range.location = 4;
NSString *bString = [cString substringWithRange:range];
// Scan values
unsigned int r, g, b;
[[NSScanner scannerWithString:rString] scanHexInt:&r];
[[NSScanner scannerWithString:gString] scanHexInt:&g];
[[NSScanner scannerWithString:bString] scanHexInt:&b];
return [UIColor colorWithRed:((float) r / 255.0f) green:((float) g / 255.0f) blue:((float) b / 255.0f) alpha:1.0f];
}
@end

View File

@@ -0,0 +1,37 @@
fileFormatVersion: 2
guid: a20f8049e0edf4ee9b3dc60a7391f63e
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 0
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
- first:
iPhone: iOS
second:
enabled: 1
settings: {}
- first:
tvOS: tvOS
second:
enabled: 1
settings: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,19 @@
//
// ATUnityWrapper.h
// ATSDK
//
// Created by Martin Lau on 08/08/2018.
// Copyright © 2018 Martin Lau. All rights reserved.
//
#ifndef ATUnityWrapper_h
#define ATUnityWrapper_h
@protocol ATUnityWrapper<NSObject>
+(instancetype) sharedInstance;
@optional
-(void) setCallBack:(void(*)(const char*, const char *))callback forKey:(NSString*)key;
-(void) removeCallbackForKey:(NSString*)key;
-(void(*)(const char*, const char *)) callbackForKey:(NSString*)key;
@end
#endif /* ATUnityWrapper_h */

View File

@@ -0,0 +1,27 @@
fileFormatVersion: 2
guid: 71365aa9b07d94f09acfde932f4e4ca4
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 1
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: b0390de3cdaa14f5d946bfdca7bc0a2e
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,9 @@
using System.Collections.Generic;
public class ATAdWrapper {
public ATAdWrapper() {
}
public static void InvokeCallback(string callback, Dictionary<string, object> msgDict) {
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: d9d4e438f52f846049aee82485de8569
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,219 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using AOT;
using AnyThinkAds.ThirdParty.LitJson;
using AnyThinkAds.iOS;
using AnyThinkAds.Api;
#pragma warning disable 0109
public class ATBannerAdWrapper:ATAdWrapper {
static private Dictionary<string, ATBannerAdClient> clients;
static private string CMessaageReceiverClass = "ATBannerAdWrapper";
static public new void InvokeCallback(JsonData jsonData) {
Debug.Log("Unity: ATBannerAdWrapper::InvokeCallback()");
string extraJson = "";
string callback = (string)jsonData["callback"];
Dictionary<string, object> msgDict = JsonMapper.ToObject<Dictionary<string, object>>(jsonData["msg"].ToJson());
JsonData msgJsonData = jsonData["msg"];
IDictionary idic = (System.Collections.IDictionary)msgJsonData;
if (idic.Contains("extra")) {
JsonData extraJsonDate = msgJsonData["extra"];
if (extraJsonDate != null) {
extraJson = msgJsonData["extra"].ToJson();
}
}
if (callback.Equals("OnBannerAdLoad")) {
OnBannerAdLoad((string)msgDict["placement_id"]);
} else if (callback.Equals("OnBannerAdLoadFail")) {
Dictionary<string, object> errorMsg = JsonMapper.ToObject<Dictionary<string, object>>(msgJsonData["error"].ToJson());
OnBannerAdLoadFail((string)msgDict["placement_id"], (string)errorMsg["code"], (string)errorMsg["reason"]);
} else if (callback.Equals("OnBannerAdImpress")) {
OnBannerAdImpress((string)msgDict["placement_id"], extraJson);
} else if (callback.Equals("OnBannerAdClick")) {
OnBannerAdClick((string)msgDict["placement_id"], extraJson);
} else if (callback.Equals("OnBannerAdAutoRefresh")) {
OnBannerAdAutoRefresh((string)msgDict["placement_id"], extraJson);
} else if (callback.Equals("OnBannerAdAutoRefreshFail")) {
Dictionary<string, object> errorMsg = JsonMapper.ToObject<Dictionary<string, object>>(msgJsonData["error"].ToJson());
OnBannerAdAutoRefreshFail((string)msgDict["placement_id"], (string)errorMsg["code"], (string)errorMsg["reason"]);
} else if (callback.Equals("OnBannerAdClose")) {
OnBannerAdClose((string)msgDict["placement_id"]);
} else if (callback.Equals("OnBannerAdCloseButtonTapped")) {
OnBannerAdCloseButtonTapped((string)msgDict["placement_id"], extraJson);
}else if (callback.Equals("startLoadingADSource")) {
StartLoadingADSource((string)msgDict["placement_id"], extraJson);
}else if (callback.Equals("finishLoadingADSource")) {
FinishLoadingADSource((string)msgDict["placement_id"], extraJson);
}else if (callback.Equals("failToLoadADSource")) {
Dictionary<string, object> errorDict = new Dictionary<string, object>();
Dictionary<string, object> errorMsg = JsonMapper.ToObject<Dictionary<string, object>>(msgJsonData["error"].ToJson());
if (errorMsg["code"] != null) { errorDict.Add("code", errorMsg["code"]); }
if (errorMsg["reason"] != null) { errorDict.Add("message", errorMsg["reason"]); }
FailToLoadADSource((string)msgDict["placement_id"], extraJson,errorDict);
}else if (callback.Equals("startBiddingADSource")) {
StartBiddingADSource((string)msgDict["placement_id"], extraJson);
}else if (callback.Equals("finishBiddingADSource")) {
FinishBiddingADSource((string)msgDict["placement_id"], extraJson);
}else if (callback.Equals("failBiddingADSource")) {
Dictionary<string, object> errorDict = new Dictionary<string, object>();
Dictionary<string, object> errorMsg = JsonMapper.ToObject<Dictionary<string, object>>(msgJsonData["error"].ToJson());
if (errorMsg["code"] != null) { errorDict.Add("code", errorMsg["code"]); }
if (errorMsg["reason"] != null) { errorDict.Add("message", errorMsg["reason"]); }
FailBiddingADSource((string)msgDict["placement_id"],extraJson, errorDict);
}
}
static public void loadBannerAd(string placementID, string customData) {
Debug.Log("Unity: ATBannerAdWrapper::loadBannerAd(" + placementID + ")");
ATUnityCBridge.SendMessageToC(CMessaageReceiverClass, "loadBannerAdWithPlacementID:customDataJSONString:callback:", new object[]{placementID, customData != null ? customData : ""}, true);
}
static public string checkAdStatus(string placementID) {
Debug.Log("Unity: ATBannerAdWrapper::checkAdStatus(" + placementID + ")");
return ATUnityCBridge.GetStringMessageFromC(CMessaageReceiverClass, "checkAdStatus:", new object[]{placementID});
}
static public string getValidAdCaches(string placementID)
{
Debug.Log("Unity: ATBannerAdWrapper::getValidAdCaches(" + placementID + ")");
return ATUnityCBridge.GetStringMessageFromC(CMessaageReceiverClass, "getValidAdCaches:", new object[] { placementID });
}
static public void hideBannerAd(string placementID) {
Debug.Log("Unity: ATBannerAdWrapper::showBannerAd(" + placementID + ")");
ATUnityCBridge.SendMessageToC(CMessaageReceiverClass, "hideBannerAdWithPlacementID:", new object[]{placementID}, false);
}
static public void showBannerAd(string placementID) {
Debug.Log("Unity: ATBannerAdWrapper::showBannerAd(" + placementID + ")");
ATUnityCBridge.SendMessageToC(CMessaageReceiverClass, "showBannerAdWithPlacementID:", new object[]{placementID}, false);
}
static public void showBannerAd(string placementID, string position)
{
Debug.Log("Unity: ATBannerAdWrapper::showBannerAd(" + placementID + "," + position + ")");
Dictionary<string, object> rectDict = new Dictionary<string, object> { { "position", position } };
ATUnityCBridge.SendMessageToC(CMessaageReceiverClass, "showBannerAdWithPlacementID:rect:extraJsonString:", new object[] { placementID, JsonMapper.ToJson(rectDict), null}, false);
}
static public void showBannerAd(string placementID, string position, string mapJson)
{
Debug.Log("Unity: ATBannerAdWrapper::showBannerAd(" + placementID + "," + position + ")");
Dictionary<string, object> rectDict = new Dictionary<string, object> { { "position", position } };
ATUnityCBridge.SendMessageToC(CMessaageReceiverClass, "showBannerAdWithPlacementID:rect:extraJsonString:", new object[] { placementID, JsonMapper.ToJson(rectDict), mapJson}, false);
}
static public void showBannerAd(string placementID, ATRect rect) {
Debug.Log("Unity: ATBannerAdWrapper::showBannerAd(" + placementID + ")");
Dictionary<string, object> rectDict = new Dictionary<string, object>{ {"x", rect.x}, {"y", rect.y}, {"width", rect.width}, {"height", rect.height}, {"uses_pixel", rect.usesPixel}};
ATUnityCBridge.SendMessageToC(CMessaageReceiverClass, "showBannerAdWithPlacementID:rect:extraJsonString:", new object[]{placementID, JsonMapper.ToJson(rectDict), null}, false);
}
static public void showBannerAd(string placementID, ATRect rect, string mapJson) {
Debug.Log("Unity: ATBannerAdWrapper::showBannerAd(" + placementID + ")");
Dictionary<string, object> rectDict = new Dictionary<string, object>{ {"x", rect.x}, {"y", rect.y}, {"width", rect.width}, {"height", rect.height}, {"uses_pixel", rect.usesPixel}};
ATUnityCBridge.SendMessageToC(CMessaageReceiverClass, "showBannerAdWithPlacementID:rect:extraJsonString:", new object[]{placementID, JsonMapper.ToJson(rectDict), mapJson}, false);
}
static public void cleanBannerAd(string placementID) {
Debug.Log("Unity: ATBannerAdWrapper::cleanBannerAd(" + placementID + ")");
ATUnityCBridge.SendMessageToC(CMessaageReceiverClass, "removeBannerAdWithPlacementID:", new object[]{placementID}, false);
}
static public void clearCache() {
Debug.Log("Unity: ATBannerAdWrapper::clearCache()");
ATUnityCBridge.SendMessageToC(CMessaageReceiverClass, "clearCache", null);
}
static public void setClientForPlacementID(string placementID, ATBannerAdClient client) {
if (clients == null) clients = new Dictionary<string, ATBannerAdClient>();
if (clients.ContainsKey(placementID)) clients.Remove(placementID);
clients.Add(placementID, client);
}
static private void OnBannerAdLoad(string placementID) {
Debug.Log("Unity: ATBannerAdWrapper::OnBannerAdLoad()");
if (clients[placementID] != null) clients[placementID].OnBannerAdLoad(placementID);
}
static private void OnBannerAdLoadFail(string placementID, string code, string message) {
Debug.Log("Unity: ATBannerAdWrapper::OnBannerAdLoadFail()");
if (clients[placementID] != null) clients[placementID].OnBannerAdLoadFail(placementID, code, message);
}
static private void OnBannerAdImpress(string placementID, string callbackJson) {
Debug.Log("Unity: ATBannerAdWrapper::OnBannerAdImpress()");
if (clients[placementID] != null) clients[placementID].OnBannerAdImpress(placementID, callbackJson);
}
static private void OnBannerAdClick(string placementID, string callbackJson) {
Debug.Log("Unity: ATBannerAdWrapper::OnBannerAdClick()");
if (clients[placementID] != null) clients[placementID].OnBannerAdClick(placementID, callbackJson);
}
static private void OnBannerAdAutoRefresh(string placementID, string callbackJson) {
Debug.Log("Unity: ATBannerAdWrapper::OnBannerAdAutoRefresh()");
if (clients[placementID] != null) clients[placementID].OnBannerAdAutoRefresh(placementID, callbackJson);
}
static private void OnBannerAdAutoRefreshFail(string placementID, string code, string message) {
Debug.Log("Unity: ATBannerAdWrapper::OnBannerAdAutoRefreshFail()");
if (clients[placementID] != null) clients[placementID].OnBannerAdAutoRefreshFail(placementID, code, message);
}
static private void OnBannerAdCloseButtonTapped(string placementID, string callbackJson) {
Debug.Log("Unity: ATBannerAdWrapper::onAdCloseButtonTapped()");
if (clients[placementID] != null) clients[placementID].OnBannerAdCloseButtonTapped(placementID, callbackJson);
}
static private void OnBannerAdClose(string placementID) {
Debug.Log("Unity: ATBannerAdWrapper::OnBannerAdClose()");
if (clients[placementID] != null) clients[placementID].OnBannerAdClose(placementID);
}
// ad source callback
static public void StartLoadingADSource(string placementID, string callbackJson)
{
Debug.Log("Unity: ATBannerAdWrapper::StartLoadingADSource()");
if (clients[placementID] != null) clients[placementID].startLoadingADSource(placementID, callbackJson);
}
static public void FinishLoadingADSource(string placementID, string callbackJson)
{
Debug.Log("Unity: ATBannerAdWrapper::FinishLoadingADSource()");
if (clients[placementID] != null) clients[placementID].finishLoadingADSource(placementID, callbackJson);
}
static public void FailToLoadADSource(string placementID,string callbackJson, Dictionary<string, object> errorDict)
{
Debug.Log("Unity: ATBannerAdWrapper::FailToLoadADSource()");
Debug.Log("placementID = " + placementID + "errorDict = " + JsonMapper.ToJson(errorDict));
if (clients[placementID] != null) clients[placementID].failToLoadADSource(placementID,callbackJson, (string)errorDict["code"], (string)errorDict["message"]);
}
static public void StartBiddingADSource(string placementID, string callbackJson)
{
Debug.Log("Unity: ATBannerAdWrapper::StartBiddingADSource()");
if (clients[placementID] != null) clients[placementID].startBiddingADSource(placementID, callbackJson);
}
static public void FinishBiddingADSource(string placementID, string callbackJson)
{
Debug.Log("Unity: ATBannerAdWrapper::FinishBiddingADSource()");
if (clients[placementID] != null) clients[placementID].finishBiddingADSource(placementID, callbackJson);
}
static public void FailBiddingADSource(string placementID,string callbackJson, Dictionary<string, object> errorDict)
{
Debug.Log("Unity: ATBannerAdWrapper::FailBiddingADSource()");
Debug.Log("placementID = " + placementID + "errorDict = " + JsonMapper.ToJson(errorDict));
if (clients[placementID] != null) clients[placementID].failBiddingADSource(placementID, callbackJson,(string)errorDict["code"], (string)errorDict["message"]);
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 42e47e3e8cae64aa38bff4e3c6abf118
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,263 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using AOT;
using AnyThinkAds.ThirdParty.LitJson;
using AnyThinkAds.iOS;
#pragma warning disable 0109
public class ATInterstitialAdWrapper:ATAdWrapper {
static private Dictionary<string, ATInterstitialAdClient> clients;
static private string CMessaageReceiverClass = "ATInterstitialAdWrapper";
static public new void InvokeCallback(JsonData jsonData) {
Debug.Log("Unity: ATInterstitialAdWrapper::InvokeCallback()");
string extraJson = "";
string callback = (string)jsonData["callback"];
Dictionary<string, object> msgDict = JsonMapper.ToObject<Dictionary<string, object>>(jsonData["msg"].ToJson());
JsonData msgJsonData = jsonData["msg"];
IDictionary idic = (System.Collections.IDictionary)msgJsonData;
if (idic.Contains("extra")) {
JsonData extraJsonDate = msgJsonData["extra"];
if (extraJsonDate != null) {
extraJson = msgJsonData["extra"].ToJson();
}
}
if (callback.Equals("OnInterstitialAdLoaded")) {
OnInterstitialAdLoaded((string)msgDict["placement_id"]);
} else if (callback.Equals("OnInterstitialAdLoadFailure")) {
Dictionary<string, object> errorDict = new Dictionary<string, object>();
Dictionary<string, object> errorMsg = JsonMapper.ToObject<Dictionary<string, object>>(msgJsonData["error"].ToJson());
if (errorMsg.ContainsKey("code")) { errorDict.Add("code", errorMsg["code"]); }
if (errorMsg.ContainsKey("reason")) { errorDict.Add("message", errorMsg["reason"]); }
OnInterstitialAdLoadFailure((string)msgDict["placement_id"], errorDict);
} else if (callback.Equals("OnInterstitialAdVideoPlayFailure")) {
Dictionary<string, object> errorDict = new Dictionary<string, object>();
Dictionary<string, object> errorMsg = JsonMapper.ToObject<Dictionary<string, object>>(msgJsonData["error"].ToJson());
if (errorMsg.ContainsKey("code")) { errorDict.Add("code", errorMsg["code"]); }
if (errorMsg.ContainsKey("reason")) { errorDict.Add("message", errorMsg["reason"]); }
OnInterstitialAdVideoPlayFailure((string)msgDict["placement_id"], errorDict);
} else if (callback.Equals("OnInterstitialAdVideoPlayStart")) {
OnInterstitialAdVideoPlayStart((string)msgDict["placement_id"], extraJson);
} else if (callback.Equals("OnInterstitialAdVideoPlayEnd")) {
OnInterstitialAdVideoPlayEnd((string)msgDict["placement_id"], extraJson);
} else if (callback.Equals("OnInterstitialAdShow")) {
OnInterstitialAdShow((string)msgDict["placement_id"], extraJson);
} else if (callback.Equals("OnInterstitialAdClick")) {
OnInterstitialAdClick((string)msgDict["placement_id"], extraJson);
} else if (callback.Equals("OnInterstitialAdClose")) {
OnInterstitialAdClose((string)msgDict["placement_id"], extraJson);
} else if (callback.Equals("OnInterstitialAdFailedToShow")) {
OnInterstitialAdFailedToShow((string)msgDict["placement_id"]);
}else if (callback.Equals("startLoadingADSource")) {
StartLoadingADSource((string)msgDict["placement_id"], extraJson);
}else if (callback.Equals("finishLoadingADSource")) {
FinishLoadingADSource((string)msgDict["placement_id"], extraJson);
}else if (callback.Equals("failToLoadADSource")) {
Dictionary<string, object> errorDict = new Dictionary<string, object>();
Dictionary<string, object> errorMsg = JsonMapper.ToObject<Dictionary<string, object>>(msgJsonData["error"].ToJson());
if (errorMsg["code"] != null) { errorDict.Add("code", errorMsg["code"]); }
if (errorMsg["reason"] != null) { errorDict.Add("message", errorMsg["reason"]); }
FailToLoadADSource((string)msgDict["placement_id"],extraJson, errorDict);
}else if (callback.Equals("startBiddingADSource")) {
StartBiddingADSource((string)msgDict["placement_id"], extraJson);
}else if (callback.Equals("finishBiddingADSource")) {
FinishBiddingADSource((string)msgDict["placement_id"], extraJson);
}else if (callback.Equals("failBiddingADSource")) {
Dictionary<string, object> errorDict = new Dictionary<string, object>();
Dictionary<string, object> errorMsg = JsonMapper.ToObject<Dictionary<string, object>>(msgJsonData["error"].ToJson());
if (errorMsg["code"] != null) { errorDict.Add("code", errorMsg["code"]); }
if (errorMsg["reason"] != null) { errorDict.Add("message", errorMsg["reason"]); }
FailBiddingADSource((string)msgDict["placement_id"],extraJson, errorDict);
}
}
static public void setClientForPlacementID(string placementID, ATInterstitialAdClient client) {
if (clients == null) clients = new Dictionary<string, ATInterstitialAdClient>();
if (clients.ContainsKey(placementID)) clients.Remove(placementID);
clients.Add(placementID, client);
}
static public void loadInterstitialAd(string placementID, string customData) {
Debug.Log("Unity: ATInterstitialAdWrapper::loadInterstitialAd(" + placementID + ")");
ATUnityCBridge.SendMessageToC(CMessaageReceiverClass, "loadInterstitialAdWithPlacementID:customDataJSONString:callback:", new object[]{placementID, customData != null ? customData : ""}, true);
}
static public bool hasInterstitialAdReady(string placementID) {
Debug.Log("Unity: ATInterstitialAdWrapper::isInterstitialAdReady(" + placementID + ")");
return ATUnityCBridge.SendMessageToC(CMessaageReceiverClass, "interstitialAdReadyForPlacementID:", new object[]{placementID});
}
static public void showInterstitialAd(string placementID, string mapJson) {
Debug.Log("Unity: ATInterstitialAdWrapper::showInterstitialAd(" + placementID + ")");
ATUnityCBridge.SendMessageToC(CMessaageReceiverClass, "showInterstitialAdWithPlacementID:extraJsonString:", new object[]{placementID, mapJson});
}
static public void clearCache(string placementID) {
Debug.Log("Unity: ATInterstitialAdWrapper::clearCache()");
ATUnityCBridge.SendMessageToC(CMessaageReceiverClass, "clearCache", null);
}
static public string checkAdStatus(string placementID) {
Debug.Log("Unity: ATInterstitialAdWrapper::checkAdStatus(" + placementID + ")");
return ATUnityCBridge.GetStringMessageFromC(CMessaageReceiverClass, "checkAdStatus:", new object[]{placementID});
}
static public string getValidAdCaches(string placementID)
{
Debug.Log("Unity: ATInterstitialAdWrapper::checkAdStatus(" + placementID + ")");
return ATUnityCBridge.GetStringMessageFromC(CMessaageReceiverClass, "getValidAdCaches:", new object[] { placementID });
}
static public void entryScenarioWithPlacementID(string placementID, string scenarioID)
{
Debug.Log("Unity: ATInterstitialAdWrapper::entryScenarioWithPlacementID(" + placementID + scenarioID + ")");
ATUnityCBridge.SendMessageToC(CMessaageReceiverClass, "entryScenarioWithPlacementID:scenarioID:", new object[]{placementID, scenarioID});
}
//Callbacks
static private void OnInterstitialAdLoaded(string placementID) {
Debug.Log("Unity: ATInterstitialAdWrapper::OnInterstitialAdLoaded()");
if (clients[placementID] != null) clients[placementID].OnInterstitialAdLoaded(placementID);
}
static private void OnInterstitialAdLoadFailure(string placementID, Dictionary<string, object> errorDict) {
Debug.Log("Unity: ATInterstitialAdWrapper::OnInterstitialAdLoadFailure()");
Debug.Log("placementID = " + placementID + "errorDict = " + JsonMapper.ToJson(errorDict));
if (clients[placementID] != null) clients[placementID].OnInterstitialAdLoadFailure(placementID, (string)errorDict["code"], (string)errorDict["message"]);
}
static private void OnInterstitialAdVideoPlayFailure(string placementID, Dictionary<string, object> errorDict) {
Debug.Log("Unity: ATInterstitialAdWrapper::OnInterstitialAdVideoPlayFailure()");
if (clients[placementID] != null) clients[placementID].OnInterstitialAdVideoPlayFailure(placementID, (string)errorDict["code"], (string)errorDict["message"]);
}
static private void OnInterstitialAdVideoPlayStart(string placementID, string callbackJson) {
Debug.Log("Unity: ATInterstitialAdWrapper::OnInterstitialAdPlayStart()");
if (clients[placementID] != null) clients[placementID].OnInterstitialAdVideoPlayStart(placementID, callbackJson);
}
static private void OnInterstitialAdVideoPlayEnd(string placementID, string callbackJson) {
Debug.Log("Unity: ATInterstitialAdWrapper::OnInterstitialAdVideoPlayEnd()");
if (clients[placementID] != null) clients[placementID].OnInterstitialAdVideoPlayEnd(placementID, callbackJson);
}
static private void OnInterstitialAdShow(string placementID, string callbackJson) {
Debug.Log("Unity: ATInterstitialAdWrapper::OnInterstitialAdShow()");
if (clients[placementID] != null) clients[placementID].OnInterstitialAdShow(placementID, callbackJson);
}
static private void OnInterstitialAdFailedToShow(string placementID) {
Debug.Log("Unity: ATInterstitialAdWrapper::OnInterstitialAdFailedToShow()");
if (clients[placementID] != null) clients[placementID].OnInterstitialAdFailedToShow(placementID);
}
static private void OnInterstitialAdClick(string placementID, string callbackJson) {
Debug.Log("Unity: ATInterstitialAdWrapper::OnInterstitialAdClick()");
if (clients[placementID] != null) clients[placementID].OnInterstitialAdClick(placementID, callbackJson);
}
static private void OnInterstitialAdClose(string placementID, string callbackJson) {
Debug.Log("Unity: ATInterstitialAdWrapper::OnInterstitialAdClose()");
if (clients[placementID] != null) clients[placementID].OnInterstitialAdClose(placementID, callbackJson);
}
// ad source callback
static public void StartLoadingADSource(string placementID, string callbackJson)
{
Debug.Log("Unity: ATInterstitialAdWrapper::StartLoadingADSource()");
if (clients[placementID] != null) clients[placementID].startLoadingADSource(placementID, callbackJson);
}
static public void FinishLoadingADSource(string placementID, string callbackJson)
{
Debug.Log("Unity: ATInterstitialAdWrapper::FinishLoadingADSource()");
if (clients[placementID] != null) clients[placementID].finishLoadingADSource(placementID, callbackJson);
}
static public void FailToLoadADSource(string placementID,string callbackJson, Dictionary<string, object> errorDict)
{
Debug.Log("Unity: ATInterstitialAdWrapper::FailToLoadADSource()");
Debug.Log("placementID = " + placementID + "errorDict = " + JsonMapper.ToJson(errorDict));
if (clients[placementID] != null) clients[placementID].failToLoadADSource(placementID,callbackJson,(string)errorDict["code"], (string)errorDict["message"]);
}
static public void StartBiddingADSource(string placementID, string callbackJson)
{
Debug.Log("Unity: ATInterstitialAdWrapper::StartBiddingADSource()");
if (clients[placementID] != null) clients[placementID].startBiddingADSource(placementID, callbackJson);
}
static public void FinishBiddingADSource(string placementID, string callbackJson)
{
Debug.Log("Unity: ATInterstitialAdWrapper::FinishBiddingADSource()");
if (clients[placementID] != null) clients[placementID].finishBiddingADSource(placementID, callbackJson);
}
static public void FailBiddingADSource(string placementID, string callbackJson,Dictionary<string, object> errorDict)
{
Debug.Log("Unity: ATInterstitialAdWrapper::FailBiddingADSource()");
Debug.Log("placementID = " + placementID + "errorDict = " + JsonMapper.ToJson(errorDict));
if (clients[placementID] != null) clients[placementID].failBiddingADSource(placementID,callbackJson,(string)errorDict["code"], (string)errorDict["message"]);
}
// Auto
static public void addAutoLoadAdPlacementID(string placementID)
{
Debug.Log("Unity: ATInterstitialAdWrapper::addAutoLoadAdPlacementID(" + placementID + ")");
ATUnityCBridge.SendMessageToC(CMessaageReceiverClass, "addAutoLoadAdPlacementID:callback:", new object[]{placementID}, true);
}
static public void removeAutoLoadAdPlacementID(string placementID)
{
Debug.Log("Unity: ATInterstitialAdWrapper::removeAutoLoadAdPlacementID(" + placementID + ")");
ATUnityCBridge.SendMessageToC(CMessaageReceiverClass, "removeAutoLoadAdPlacementID:", new object[]{placementID});
}
static public bool autoLoadInterstitialAdReadyForPlacementID(string placementID)
{
Debug.Log("Unity: ATInterstitialAdWrapper::autoLoadInterstitialAdReadyForPlacementID(" + placementID + ")");
return ATUnityCBridge.SendMessageToC(CMessaageReceiverClass, "autoLoadInterstitialAdReadyForPlacementID:", new object[]{placementID});
}
static public string getAutoValidAdCaches(string placementID)
{
Debug.Log("Unity: ATInterstitialAdWrapper::getAutoValidAdCaches");
return ATUnityCBridge.GetStringMessageFromC(CMessaageReceiverClass, "getAutoValidAdCaches:", new object[]{placementID});
}
static public string checkAutoAdStatus(string placementID) {
Debug.Log("Unity: ATInterstitialAdWrapper::checkAutoAdStatus(" + placementID + ")");
return ATUnityCBridge.GetStringMessageFromC(CMessaageReceiverClass, "checkAutoAdStatus:", new object[]{placementID});
}
static public void setAutoLocalExtra(string placementID, string customData)
{
Debug.Log("Unity: ATInterstitialAdWrapper::setAutoLocalExtra(" + placementID + customData + ")");
ATUnityCBridge.SendMessageToC(CMessaageReceiverClass, "setAutoLocalExtra:customDataJSONString:", new object[] {placementID, customData != null ? customData : ""});
}
static public void entryAutoAdScenarioWithPlacementID(string placementID, string scenarioID)
{
Debug.Log("Unity: ATInterstitialAdWrapper::entryAutoAdScenarioWithPlacementID(" + placementID + scenarioID + ")");
ATUnityCBridge.SendMessageToC(CMessaageReceiverClass, "entryAutoAdScenarioWithPlacementID:scenarioID:", new object[]{placementID, scenarioID});
}
static public void showAutoInterstitialAd(string placementID, string mapJson) {
Debug.Log("Unity: ATInterstitialAdWrapper::showAutoInterstitialAd(" + placementID + ")");
ATUnityCBridge.SendMessageToC(CMessaageReceiverClass, "showAutoInterstitialAd:extraJsonString:", new object[]{placementID, mapJson});
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 7657f58beb3f24ea89bca929994062e3
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,136 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
public class ATManager {
private static bool SDKStarted;
public static bool StartSDK(string appID, string appKey) {
Debug.Log("Unity: ATManager::StartSDK(" + appID + "," + appKey + ")");
if (!SDKStarted) {
Debug.Log("Has not been started before, will starting SDK");
SDKStarted = true;
return ATUnityCBridge.SendMessageToC("ATUnityManager", "startSDKWithAppID:appKey:", new object[]{appID, appKey});
} else {
Debug.Log("SDK has been started already, ignore this call");
return false;
}
}
public static void setPurchaseFlag() {
ATUnityCBridge.SendMessageToC("ATUnityManager", "setPurchaseFlag", null);
}
public static void clearPurchaseFlag() {
ATUnityCBridge.SendMessageToC("ATUnityManager", "clearPurchaseFlag", null);
}
public static bool purchaseFlag() {
return ATUnityCBridge.SendMessageToC("ATUnityManager", "clearPurchaseFlag", null);
}
public static bool isEUTraffic() {
return ATUnityCBridge.SendMessageToC("ATUnityManager", "inDataProtectionArea", null);
}
public static void getUserLocation(Func<string, int> callback)
{
Debug.Log("Unity:ATManager::getUserLocation()");
ATUnityCBridge.SendMessageToCWithCallBack("ATUnityManager", "getUserLocation:", new object[] { }, callback);
}
public static void ShowGDPRAuthDialog() {
ATUnityCBridge.SendMessageToC("ATUnityManager", "presentDataConsentDialog", null);
}
public static int GetDataConsent() {
return ATUnityCBridge.GetMessageFromC("ATUnityManager", "getDataConsent", null);
}
public static void SetDataConsent(int consent) {
ATUnityCBridge.SendMessageToC("ATUnityManager", "setDataConsent:", new object[]{consent});
}
public static void SetNetworkGDPRInfo(int network, string mapJson) {
ATUnityCBridge.SendMessageToC("ATUnityManager", "setDataConsent:network:", new object[]{mapJson, network});
}
public static void setChannel(string channel)
{
ATUnityCBridge.SendMessageToC("ATUnityManager", "setChannel:", new object[] {channel});
}
public static void setSubChannel(string subchannel)
{
ATUnityCBridge.SendMessageToC("ATUnityManager", "setSubChannel:", new object[] {subchannel});
}
public static void setCustomMap(string jsonMap)
{
ATUnityCBridge.SendMessageToC("ATUnityManager", "setCustomData:", new object[] { jsonMap });
}
public static void setCustomDataForPlacementID(string customData, string placementID)
{
ATUnityCBridge.SendMessageToC("ATUnityManager", "setCustomData:forPlacementID:", new object[] {customData, placementID});
}
public static void setLogDebug(bool isDebug)
{
ATUnityCBridge.SendMessageToC("ATUnityManager", "setDebugLog:", new object[] { isDebug ? "true" : "false" });
}
public static void deniedUploadDeviceInfo(string deniedInfo)
{
ATUnityCBridge.SendMessageToC("ATUnityManager", "deniedUploadDeviceInfo:", new object[] {deniedInfo});
}
public static void setExcludeBundleIdArray(string bundleIds)
{
Debug.Log("Unity:ATManager::setExcludeBundleIdArray()");
ATUnityCBridge.SendMessageToC("ATUnityManager", "setExcludeBundleIdArray:", new object[] {bundleIds});
}
public static void setExcludeAdSourceIdArrayForPlacementID(string placementID, string adSourceIds)
{
Debug.Log("Unity:ATManager::setExcludeAdSourceIdArrayForPlacementID()");
ATUnityCBridge.SendMessageToC("ATUnityManager", "setExludePlacementid:unitIDArray:", new object[] {placementID, adSourceIds});
}
public static void setSDKArea(int area)
{
Debug.Log("Unity:ATManager::setSDKArea()");
ATUnityCBridge.SendMessageToC("ATUnityManager", "setSDKArea:", new object[] {area});
}
public static void getArea(Func<string, int> callback)
{
Debug.Log("Unity:ATManager::getArea()");
ATUnityCBridge.SendMessageToCWithCallBack("ATUnityManager", "getArea:", new object[] { }, callback);
}
public static void setWXStatus(bool install)
{
Debug.Log("Unity:ATManager::setWXStatus()");
ATUnityCBridge.SendMessageToC("ATUnityManager", "setWXStatus:", new object[] {install});
}
public static void setLocation(double longitude, double latitude)
{
Debug.Log("Unity:ATManager::setLocation()");
ATUnityCBridge.SendMessageToC("ATUnityManager", "setLocationLongitude:dimension:", new object[] {longitude, latitude});
}
public static void showDebuggerUI()
{
Debug.Log("Unity:ATManager::showDebuggerUI()");
ATUnityCBridge.SendMessageToC("ATUnityManager", "showDebuggerUI", null);
}
public static void showGDPRConsentDialog(Func<string, int> callback)
{
Debug.Log("Unity:ATManager::showGDPRConsentDialog()");
ATUnityCBridge.SendMessageToCWithCallBack("ATUnityManager", "showGDPRConsentDialog:", new object[] { }, callback);
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 2004f8da35b374bebbed4dc94a4c9626
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,200 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using AOT;
using AnyThinkAds.ThirdParty.LitJson;
using AnyThinkAds.iOS;
#pragma warning disable 0109
public class ATNativeAdWrapper:ATAdWrapper {
static private Dictionary<string, ATNativeAdClient> clients;
static private string CMessageReceiverClass = "ATNativeAdWrapper";
static public new void InvokeCallback(JsonData jsonData) {
Debug.Log("Unity: ATNativeAdWrapper::InvokeCallback()");
string extraJson = "";
string callback = (string)jsonData["callback"];
Dictionary<string, object> msgDict = JsonMapper.ToObject<Dictionary<string, object>>(jsonData["msg"].ToJson());
JsonData msgJsonData = jsonData["msg"];
IDictionary idic = (System.Collections.IDictionary)msgJsonData;
if (idic.Contains("extra")) {
JsonData extraJsonDate = msgJsonData["extra"];
if (extraJsonDate != null) {
extraJson = msgJsonData["extra"].ToJson();
}
}
if (callback.Equals("OnNativeAdLoaded")) {
OnNativeAdLoaded((string)msgDict["placement_id"]);
} else if (callback.Equals("OnNativeAdLoadingFailure")) {
Dictionary<string, object> errorDict = new Dictionary<string, object>();
Dictionary<string, object> errorMsg = JsonMapper.ToObject<Dictionary<string, object>>(msgJsonData["error"].ToJson());
if (errorMsg.ContainsKey("code")) { errorDict.Add("code", errorMsg["code"]); }
if (errorMsg.ContainsKey("reason")) { errorDict.Add("message", errorMsg["reason"]); }
OnNativeAdLoadingFailure((string)msgDict["placement_id"], errorDict);
} else if (callback.Equals("OnNaitveAdShow")) {
OnNaitveAdShow((string)msgDict["placement_id"], extraJson);
} else if (callback.Equals("OnNativeAdClick")) {
OnNativeAdClick((string)msgDict["placement_id"], extraJson);
} else if (callback.Equals("OnNativeAdVideoStart")) {
OnNativeAdVideoStart((string)msgDict["placement_id"]);
} else if (callback.Equals("OnNativeAdVideoEnd")) {
OnNativeAdVideoEnd((string)msgDict["placement_id"]);
} else if (callback.Equals("OnNativeAdCloseButtonClick")) {
OnNativeAdCloseButtonClick((string)msgDict["placement_id"], extraJson);
}else if (callback.Equals("startLoadingADSource")) {
StartLoadingADSource((string)msgDict["placement_id"], extraJson);
}else if (callback.Equals("finishLoadingADSource")) {
FinishLoadingADSource((string)msgDict["placement_id"], extraJson);
}else if (callback.Equals("failToLoadADSource")) {
Dictionary<string, object> errorDict = new Dictionary<string, object>();
Dictionary<string, object> errorMsg = JsonMapper.ToObject<Dictionary<string, object>>(msgJsonData["error"].ToJson());
if (errorMsg["code"] != null) { errorDict.Add("code", errorMsg["code"]); }
if (errorMsg["reason"] != null) { errorDict.Add("message", errorMsg["reason"]); }
FailToLoadADSource((string)msgDict["placement_id"],extraJson, errorDict);
}else if (callback.Equals("startBiddingADSource")) {
StartBiddingADSource((string)msgDict["placement_id"], extraJson);
}else if (callback.Equals("finishBiddingADSource")) {
FinishBiddingADSource((string)msgDict["placement_id"], extraJson);
}else if (callback.Equals("failBiddingADSource")) {
Dictionary<string, object> errorDict = new Dictionary<string, object>();
Dictionary<string, object> errorMsg = JsonMapper.ToObject<Dictionary<string, object>>(msgJsonData["error"].ToJson());
if (errorMsg["code"] != null) { errorDict.Add("code", errorMsg["code"]); }
if (errorMsg["reason"] != null) { errorDict.Add("message", errorMsg["reason"]); }
FailBiddingADSource((string)msgDict["placement_id"],extraJson, errorDict);
}
}
//Public method(s)
static public void setClientForPlacementID(string placementID, ATNativeAdClient client) {
if (clients == null) clients = new Dictionary<string, ATNativeAdClient>();
if (clients.ContainsKey(placementID)) clients.Remove(placementID);
clients.Add(placementID, client);
}
static public void loadNativeAd(string placementID, string customData) {
Debug.Log("Unity: ATNativeAdWrapper::loadNativeAd(" + placementID + ")");
ATUnityCBridge.SendMessageToC(CMessageReceiverClass, "loadNativeAdWithPlacementID:customDataJSONString:callback:", new object[]{placementID, customData != null ? customData : ""}, true);
}
static public bool isNativeAdReady(string placementID) {
Debug.Log("Unity: ATNativeAdWrapper::isNativeAdReady(" + placementID + ")");
return ATUnityCBridge.SendMessageToC(CMessageReceiverClass, "isNativeAdReadyForPlacementID:", new object[]{placementID});
}
static public string checkAdStatus(string placementID) {
Debug.Log("Unity: ATNativeAdWrapper::checkAdStatus(" + placementID + ")");
return ATUnityCBridge.GetStringMessageFromC(CMessageReceiverClass, "checkAdStatus:", new object[]{placementID});
}
static public string getValidAdCaches(string placementID)
{
Debug.Log("Unity: ATNativeAdWrapper::getValidAdCaches(" + placementID + ")");
return ATUnityCBridge.GetStringMessageFromC(CMessageReceiverClass, "getValidAdCaches:", new object[] { placementID });
}
static public void entryScenarioWithPlacementID(string placementID, string scenarioID)
{
Debug.Log("Unity: ATNativeAdWrapper::entryScenarioWithPlacementID(" + placementID + scenarioID + ")");
ATUnityCBridge.SendMessageToC(CMessageReceiverClass, "entryScenarioWithPlacementID:scenarioID:", new object[]{placementID, scenarioID});
}
static public void showNativeAd(string placementID, string metrics) {
Debug.Log("Unity: ATNativeAdWrapper::showNativeAd(" + placementID + ")");
ATUnityCBridge.SendMessageToC(CMessageReceiverClass, "showNativeAdWithPlacementID:metricsJSONString:extraJsonString:", new object[]{placementID, metrics, null});
}
static public void showNativeAd(string placementID, string metrics, string mapJson) {
Debug.Log("Unity: ATNativeAdWrapper::showNativeAd(" + placementID + ")");
ATUnityCBridge.SendMessageToC(CMessageReceiverClass, "showNativeAdWithPlacementID:metricsJSONString:extraJsonString:", new object[]{placementID, metrics, mapJson});
}
static public void removeNativeAdView(string placementID) {
Debug.Log("Unity: ATNativeAdWrapper::removeNativeAdView(" + placementID + ")");
ATUnityCBridge.SendMessageToC(CMessageReceiverClass, "removeNativeAdViewWithPlacementID:", new object[]{placementID});
}
static public void clearCache() {
Debug.Log("Unity: ATNativeAdWrapper::clearCache()");
ATUnityCBridge.SendMessageToC(CMessageReceiverClass, "clearCache", null);
}
//Callbacks
static private void OnNativeAdLoaded(string placementID) {
Debug.Log("Unity: ATNativeAdWrapper::OnNativeAdLoaded(" + placementID + ")");
if (clients[placementID] != null) clients[placementID].onNativeAdLoaded(placementID);
}
static private void OnNativeAdLoadingFailure(string placementID, Dictionary<string, object> errorDict) {
Debug.Log("Unity: ATNativeAdWrapper::OnNativeAdLoadingFailure()");
if (clients[placementID] != null) clients[placementID].onNativeAdLoadFail(placementID, (string)errorDict["code"], (string)errorDict["message"]);
}
static private void OnNaitveAdShow(string placementID, string callbackJson) {
if (clients[placementID] != null) clients[placementID].onAdImpressed(placementID, callbackJson);
Debug.Log("Unity: ATNativeAdWrapper::OnNaitveAdShow(" + placementID + ")");
}
static private void OnNativeAdClick(string placementID, string callbackJson) {
if (clients[placementID] != null) clients[placementID].onAdClicked(placementID, callbackJson);
Debug.Log("Unity: ATNativeAdWrapper::OnNativeAdClick(" + placementID + ")");
}
static private void OnNativeAdVideoStart(string placementID) {
if (clients[placementID] != null) clients[placementID].onAdVideoStart(placementID);
Debug.Log("Unity: ATNativeAdWrapper::OnNativeAdVideoStart(" + placementID + ")");
}
static private void OnNativeAdVideoEnd(string placementID) {
if (clients[placementID] != null) clients[placementID].onAdVideoEnd(placementID);
Debug.Log("Unity: ATNativeAdWrapper::OnNativeAdVideoEnd(" + placementID + ")");
}
static private void OnNativeAdCloseButtonClick(string placementID, string callbackJson)
{
if (clients[placementID] != null) clients[placementID].onAdCloseButtonClicked(placementID, callbackJson);
Debug.Log("Unity: ATNativeAdWrapper::OnNativeAdCloseButtonClick(" + placementID + ")");
}
// ad source callback
static public void StartLoadingADSource(string placementID, string callbackJson)
{
Debug.Log("Unity: ATNativeAdWrapper::StartLoadingADSource()");
if (clients[placementID] != null) clients[placementID].startLoadingADSource(placementID, callbackJson);
}
static public void FinishLoadingADSource(string placementID, string callbackJson)
{
Debug.Log("Unity: ATNativeAdWrapper::FinishLoadingADSource()");
if (clients[placementID] != null) clients[placementID].finishLoadingADSource(placementID, callbackJson);
}
static public void FailToLoadADSource(string placementID,string callbackJson, Dictionary<string, object> errorDict)
{
Debug.Log("Unity: ATNativeAdWrapper::FailToLoadADSource()");
Debug.Log("placementID = " + placementID + "errorDict = " + JsonMapper.ToJson(errorDict));
if (clients[placementID] != null) clients[placementID].failToLoadADSource(placementID,callbackJson, (string)errorDict["code"], (string)errorDict["message"]);
}
static public void StartBiddingADSource(string placementID, string callbackJson)
{
Debug.Log("Unity: ATNativeAdWrapper::StartBiddingADSource()");
if (clients[placementID] != null) clients[placementID].startBiddingADSource(placementID, callbackJson);
}
static public void FinishBiddingADSource(string placementID, string callbackJson)
{
Debug.Log("Unity: ATNativeAdWrapper::FinishBiddingADSource()");
if (clients[placementID] != null) clients[placementID].finishBiddingADSource(placementID, callbackJson);
}
static public void FailBiddingADSource(string placementID,string callbackJson, Dictionary<string, object> errorDict)
{
Debug.Log("Unity: ATNativeAdWrapper::FailBiddingADSource()");
Debug.Log("placementID = " + placementID + "errorDict = " + JsonMapper.ToJson(errorDict));
if (clients[placementID] != null) clients[placementID].failBiddingADSource(placementID, callbackJson,(string)errorDict["code"], (string)errorDict["message"]);
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: e618652cb8c1948ae800e140df614aa5
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,131 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using AOT;
using AnyThinkAds.ThirdParty.LitJson;
using AnyThinkAds.iOS;
using AnyThinkAds.Api;
#pragma warning disable 0109
public class ATNativeBannerAdWrapper : ATAdWrapper {
static private Dictionary<string, ATNativeBannerAdClient> clients;
static private string CMessageReceiverClass = "ATNativeBannerAdWrapper";
static public new void InvokeCallback(JsonData jsonData) {
Debug.Log("Unity: ATNativeBannerAdWrapper::InvokeCallback()");
string extraJson = "";
string callback = (string)jsonData["callback"];
Dictionary<string, object> msgDict = JsonMapper.ToObject<Dictionary<string, object>>(jsonData["msg"].ToJson());
JsonData msgJsonData = jsonData["msg"];
IDictionary idic = (System.Collections.IDictionary)msgJsonData;
if (idic.Contains("extra")) {
JsonData extraJsonDate = msgJsonData["extra"];
if (extraJsonDate != null) {
extraJson = msgJsonData["extra"].ToJson();
}
}
if (callback.Equals("OnNativeBannerAdLoaded")) {
OnNativeBannerAdLoaded((string)msgDict["placement_id"]);
} else if (callback.Equals("OnNativeBannerAdLoadingFailure")) {
Dictionary<string, object> errorDict = new Dictionary<string, object>();
Dictionary<string, object> errorMsg = JsonMapper.ToObject<Dictionary<string, object>>(msgJsonData["error"].ToJson());
if (errorMsg.ContainsKey("code")) { errorDict.Add("code", errorMsg["code"]); }
if (errorMsg.ContainsKey("reason")) { errorDict.Add("message", errorMsg["reason"]); }
OnNativeBannerAdLoadingFailure((string)msgDict["placement_id"], errorDict);
} else if (callback.Equals("OnNaitveBannerAdShow")) {
OnNaitveBannerAdShow((string)msgDict["placement_id"], extraJson);
} else if (callback.Equals("OnNativeBannerAdClick")) {
OnNativeBannerAdClick((string)msgDict["placement_id"], extraJson);
} else if (callback.Equals("OnNativeBannerAdAutorefresh")) {
OnNativeBannerAdAutorefresh((string)msgDict["placement_id"], extraJson);
} else if (callback.Equals("OnNativeBannerAdAutorefreshFailed")) {
Dictionary<string, object> errorDict = new Dictionary<string, object>();
Dictionary<string, object> errorMsg = JsonMapper.ToObject<Dictionary<string, object>>(msgJsonData["error"].ToJson());
if (errorMsg.ContainsKey("code")) { errorDict.Add("code", errorMsg["code"]); }
if (errorMsg.ContainsKey("reason")) { errorDict.Add("message", errorMsg["reason"]); }
OnNativeBannerAdAutorefreshFailed((string)msgDict["placement_id"], errorDict);
} else if (callback.Equals("OnNativeBannerAdCloseButtonClicked")) {
OnNativeBannerAdCloseButtonClicked((string)msgDict["placement_id"]);
} else if (callback.Equals("PauseAudio")) {
Debug.Log("c# : callback, PauseAudio");
PauseAudio();
} else if (callback.Equals("ResumeAudio")) {
Debug.Log("c# : callback, ResumeAudio");
ResumeAudio();
}
}
static public void PauseAudio() {
Debug.Log("ATNativeBannerAdWrapper::PauseAudio()");
}
static public void ResumeAudio() {
Debug.Log("ATNativeBannerAdWrapper::ResumeAudio()");
}
static public void setClientForPlacementID(string placementID, ATNativeBannerAdClient client) {
Debug.Log("ATNativeBannerAdWrapper::setClientForPlacementID()");
if (clients == null) clients = new Dictionary<string, ATNativeBannerAdClient>();
if (clients.ContainsKey(placementID)) clients.Remove(placementID);
clients.Add(placementID, client);
}
static public void loadAd(string placementID, string customData) {
Debug.Log("ATNativeBannerAdWrapper::loadAd()");
ATUnityCBridge.SendMessageToC(CMessageReceiverClass, "loadNativeBannerAdWithPlacementID:customDataJSONString:callback:", new object[]{placementID, customData != null ? customData : ""}, true);
}
static public bool adReady(string placementID) {
Debug.Log("ATNativeBannerAdWrapper::adReady()");
return ATUnityCBridge.SendMessageToC(CMessageReceiverClass, "isNativeBannerAdReadyForPlacementID:", new object[]{placementID});
}
static public void showAd(string placementID, ATRect rect, Dictionary<string, string> pairs) {
Debug.Log("ATNativeBannerAdWrapper::showAd()");
Dictionary<string, object> rectDict = new Dictionary<string, object>{ {"x", rect.x}, {"y", rect.y}, {"width", rect.width}, {"height", rect.height} };
ATUnityCBridge.SendMessageToC(CMessageReceiverClass, "showNativeBannerAdWithPlacementID:rect:extra:", new object[]{placementID, JsonMapper.ToJson(rectDict), JsonMapper.ToJson(pairs != null ? pairs : new Dictionary<string, string>())}, false);
}
static public void removeAd(string placementID) {
Debug.Log("ATNativeBannerAdWrapper::removeAd()");
ATUnityCBridge.SendMessageToC(CMessageReceiverClass, "removeNativeBannerAdWithPlacementID:", new object[]{placementID}, false);
}
//Callbacks
static private void OnNativeBannerAdLoaded(string placementID) {
Debug.Log("Unity: ATNativeBannerAdWrapper::OnNativeBannerAdLoaded(" + placementID + ")");
if (clients[placementID] != null) clients[placementID].onAdLoaded(placementID);
}
static private void OnNativeBannerAdLoadingFailure(string placementID, Dictionary<string, object> errorDict) {
Debug.Log("Unity: ATNativeBannerAdWrapper::OnNativeBannerAdLoadingFailure(" + placementID + ")");
if (clients[placementID] != null) clients[placementID].onAdLoadFail(placementID, (string)errorDict["code"], (string)errorDict["message"]);
}
static private void OnNaitveBannerAdShow(string placementID, string callbackJson) {
Debug.Log("Unity: ATNativeBannerAdWrapper::OnNaitveBannerAdShow(" + placementID + ")");
if (clients[placementID] != null) clients[placementID].onAdImpressed(placementID, callbackJson);
}
static private void OnNativeBannerAdClick(string placementID, string callbackJson) {
Debug.Log("Unity: ATNativeBannerAdWrapper::OnNativeBannerAdClick(" + placementID + ")");
if (clients[placementID] != null) clients[placementID].onAdClicked(placementID, callbackJson);
}
static private void OnNativeBannerAdAutorefresh(string placementID, string callbackJson) {
Debug.Log("Unity: ATNativeBannerAdWrapper::OnNativeBannerAdAutorefresh(" + placementID + ")");
if (clients[placementID] != null) clients[placementID].onAdAutoRefresh(placementID, callbackJson);
}
static private void OnNativeBannerAdAutorefreshFailed(string placementID, Dictionary<string, object> errorDict) {
Debug.Log("Unity: ATNativeBannerAdWrapper::OnNativeBannerAdAutorefreshFailed(" + placementID + ")");
if (clients[placementID] != null) clients[placementID].onAdAutoRefreshFailure(placementID, (string)errorDict["code"], (string)errorDict["message"]);
}
static private void OnNativeBannerAdCloseButtonClicked(string placementID) {
Debug.Log("Unity: ATNativeBannerAdWrapper::OnNativeBannerAdCloseButtonClicked(" + placementID + ")");
if (clients[placementID] != null) clients[placementID].onAdCloseButtonClicked(placementID);
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 736d70464c760423bb70a639660b2c2d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,313 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using AOT;
using AnyThinkAds.ThirdParty.LitJson;
using AnyThinkAds.iOS;
#pragma warning disable 0109
public class ATRewardedVideoWrapper:ATAdWrapper {
static private Dictionary<string, ATRewardedVideoAdClient> clients;
static private string CMessageReceiverClass = "ATRewardedVideoWrapper";
static public new void InvokeCallback(JsonData jsonData) {
Debug.Log("Unity: ATRewardedVideoWrapper::InvokeCallback()");
string extraJson = "";
string callback = (string)jsonData["callback"];
Dictionary<string, object> msgDict = JsonMapper.ToObject<Dictionary<string, object>>(jsonData["msg"].ToJson());
JsonData msgJsonData = jsonData["msg"];
IDictionary idic = (System.Collections.IDictionary)msgJsonData;
if (idic.Contains("extra")) {
JsonData extraJsonDate = msgJsonData["extra"];
if (extraJsonDate != null) {
extraJson = msgJsonData["extra"].ToJson();
}
}
if (callback.Equals("OnRewardedVideoLoaded")) {
OnRewardedVideoLoaded((string)msgDict["placement_id"]);
} else if (callback.Equals("OnRewardedVideoLoadFailure")) {
Dictionary<string, object> errorDict = new Dictionary<string, object>();
Dictionary<string, object> errorMsg = JsonMapper.ToObject<Dictionary<string, object>>(msgJsonData["error"].ToJson());
if (errorMsg["code"] != null) { errorDict.Add("code", errorMsg["code"]); }
if (errorMsg["reason"] != null) { errorDict.Add("message", errorMsg["reason"]); }
OnRewardedVideoLoadFailure((string)msgDict["placement_id"], errorDict);
} else if (callback.Equals("OnRewardedVideoPlayFailure")) {
Dictionary<string, object> errorDict = new Dictionary<string, object>();
Dictionary<string, object> errorMsg = JsonMapper.ToObject<Dictionary<string, object>>(msgJsonData["error"].ToJson());
if (errorMsg.ContainsKey("code")) { errorDict.Add("code", errorMsg["code"]); }
if (errorMsg.ContainsKey("reason")) { errorDict.Add("message", errorMsg["reason"]); }
OnRewardedVideoPlayFailure((string)msgDict["placement_id"], errorDict);
} else if (callback.Equals("OnRewardedVideoPlayStart")) {
OnRewardedVideoPlayStart((string)msgDict["placement_id"], extraJson);
} else if (callback.Equals("OnRewardedVideoPlayEnd")) {
OnRewardedVideoPlayEnd((string)msgDict["placement_id"], extraJson);
} else if (callback.Equals("OnRewardedVideoClick")) {
OnRewardedVideoClick((string)msgDict["placement_id"], extraJson);
} else if (callback.Equals("OnRewardedVideoClose")) {
OnRewardedVideoClose((string)msgDict["placement_id"], (bool)msgDict["rewarded"], extraJson);
} else if (callback.Equals("OnRewardedVideoReward")) {
OnRewardedVideoReward((string)msgDict["placement_id"], extraJson);
} else if (callback.Equals("OnRewardedVideoAdAgainPlayStart")) {
OnRewardedVideoAdAgainPlayStart((string)msgDict["placement_id"], extraJson);
} else if (callback.Equals("OnRewardedVideoAdAgainPlayEnd")) {
OnRewardedVideoAdAgainPlayEnd((string)msgDict["placement_id"], extraJson);
} else if (callback.Equals("OnRewardedVideoAdAgainPlayFailed")) {
Dictionary<string, object> errorDict = new Dictionary<string, object>();
Dictionary<string, object> errorMsg = JsonMapper.ToObject<Dictionary<string, object>>(msgJsonData["error"].ToJson());
if (errorMsg.ContainsKey("code")) { errorDict.Add("code", errorMsg["code"]); }
if (errorMsg.ContainsKey("reason")) { errorDict.Add("message", errorMsg["reason"]); }
OnRewardedVideoAdAgainPlayFailed((string)msgDict["placement_id"], errorDict);
} else if (callback.Equals("OnRewardedVideoAdAgainPlayClicked")) {
OnRewardedVideoAdAgainPlayClicked((string)msgDict["placement_id"], extraJson);
}else if (callback.Equals("OnAgainReward")) {
OnAgainReward((string)msgDict["placement_id"], extraJson);
}else if (callback.Equals("startLoadingADSource")) {
StartLoadingADSource((string)msgDict["placement_id"], extraJson);
}else if (callback.Equals("finishLoadingADSource")) {
FinishLoadingADSource((string)msgDict["placement_id"], extraJson);
}else if (callback.Equals("failToLoadADSource")) {
Dictionary<string, object> errorDict = new Dictionary<string, object>();
Dictionary<string, object> errorMsg = JsonMapper.ToObject<Dictionary<string, object>>(msgJsonData["error"].ToJson());
if (errorMsg["code"] != null) { errorDict.Add("code", errorMsg["code"]); }
if (errorMsg["reason"] != null) { errorDict.Add("message", errorMsg["reason"]); }
FailToLoadADSource((string)msgDict["placement_id"],extraJson,errorDict);
}else if (callback.Equals("startBiddingADSource")) {
StartBiddingADSource((string)msgDict["placement_id"], extraJson);
}else if (callback.Equals("finishBiddingADSource")) {
FinishBiddingADSource((string)msgDict["placement_id"], extraJson);
}else if (callback.Equals("failBiddingADSource")) {
Dictionary<string, object> errorDict = new Dictionary<string, object>();
Dictionary<string, object> errorMsg = JsonMapper.ToObject<Dictionary<string, object>>(msgJsonData["error"].ToJson());
if (errorMsg["code"] != null) { errorDict.Add("code", errorMsg["code"]); }
if (errorMsg["reason"] != null) { errorDict.Add("message", errorMsg["reason"]); }
FailBiddingADSource((string)msgDict["placement_id"],extraJson, errorDict);
}
}
//Public method(s)
static public void setClientForPlacementID(string placementID, ATRewardedVideoAdClient client) {
if (clients == null) clients = new Dictionary<string, ATRewardedVideoAdClient>();
if (clients.ContainsKey(placementID)) clients.Remove(placementID);
clients.Add(placementID, client);
}
static public void setExtra(Dictionary<string, object> extra) {
Debug.Log("Unity: ATRewardedVideoWrapper::setExtra()");
ATUnityCBridge.SendMessageToC(CMessageReceiverClass, "setExtra:", new object[]{extra});
}
static public void loadRewardedVideo(string placementID, string customData) {
Debug.Log("Unity: ATRewardedVideoWrapper::loadRewardedVideo(" + placementID + ")");
ATUnityCBridge.SendMessageToC(CMessageReceiverClass, "loadRewardedVideoWithPlacementID:customDataJSONString:callback:", new object[]{placementID, customData != null ? customData : ""}, true);
}
static public bool isRewardedVideoReady(string placementID) {
Debug.Log("Unity: ATRewardedVideoWrapper::isRewardedVideoReady(" + placementID + ")");
return ATUnityCBridge.SendMessageToC(CMessageReceiverClass, "rewardedVideoReadyForPlacementID:", new object[]{placementID});
}
static public void showRewardedVideo(string placementID, string mapJson) {
Debug.Log("Unity: ATRewardedVideoWrapper::showRewardedVideo(" + placementID + ")");
ATUnityCBridge.SendMessageToC(CMessageReceiverClass, "showRewardedVideoWithPlacementID:extraJsonString:", new object[]{placementID, mapJson});
}
static public void clearCache() {
Debug.Log("Unity: ATRewardedVideoWrapper::clearCache()");
ATUnityCBridge.SendMessageToC(CMessageReceiverClass, "clearCache", null);
}
static public string checkAdStatus(string placementID) {
Debug.Log("Unity: ATRewardedVideoWrapper::checkAdStatus(" + placementID + ")");
return ATUnityCBridge.GetStringMessageFromC(CMessageReceiverClass, "checkAdStatus:", new object[]{placementID});
}
static public string getValidAdCaches(string placementID)
{
Debug.Log("Unity: ATRewardedVideoWrapper::getValidAdCaches(" + placementID + ")");
return ATUnityCBridge.GetStringMessageFromC(CMessageReceiverClass, "getValidAdCaches:", new object[] { placementID });
}
static public void entryScenarioWithPlacementID(string placementID, string scenarioID)
{
Debug.Log("Unity: ATRewardedVideoWrapper::entryScenarioWithPlacementID(" + placementID + scenarioID + ")");
ATUnityCBridge.SendMessageToC(CMessageReceiverClass, "entryScenarioWithPlacementID:scenarioID:", new object[]{placementID, scenarioID});
}
//Callbacks
static public void OnRewardedVideoLoaded(string placementID) {
Debug.Log("Unity: ATRewardedVideoWrapper::OnRewardedVideoLoaded()");
if (clients[placementID] != null) clients[placementID].onRewardedVideoAdLoaded(placementID);
}
static public void OnRewardedVideoLoadFailure(string placementID, Dictionary<string, object> errorDict) {
Debug.Log("Unity: ATRewardedVideoWrapper::OnRewardedVideoLoadFailure()");
Debug.Log("placementID = " + placementID + "errorDict = " + JsonMapper.ToJson(errorDict));
if (clients[placementID] != null) clients[placementID].onRewardedVideoAdFailed(placementID, (string)errorDict["code"], (string)errorDict["message"]);
}
static public void OnRewardedVideoPlayFailure(string placementID, Dictionary<string, object> errorDict) {
Debug.Log("Unity: ATRewardedVideoWrapper::OnRewardedVideoPlayFailure()");
if (clients[placementID] != null) clients[placementID].onRewardedVideoAdPlayFailed(placementID, (string)errorDict["code"], (string)errorDict["message"]);
}
static public void OnRewardedVideoPlayStart(string placementID, string callbackJson) {
Debug.Log("Unity: ATRewardedVideoWrapper::OnRewardedVideoPlayStart()");
if (clients[placementID] != null) clients[placementID].onRewardedVideoAdPlayStart(placementID, callbackJson);
}
static public void OnRewardedVideoPlayEnd(string placementID, string callbackJson) {
Debug.Log("Unity: ATRewardedVideoWrapper::OnRewardedVideoPlayEnd()");
if (clients[placementID] != null) clients[placementID].onRewardedVideoAdPlayEnd(placementID, callbackJson);
}
static public void OnRewardedVideoClick(string placementID, string callbackJson) {
Debug.Log("Unity: ATRewardedVideoWrapper::OnRewardedVideoClick()");
if (clients[placementID] != null) clients[placementID].onRewardedVideoAdPlayClicked(placementID, callbackJson);
}
static public void OnRewardedVideoClose(string placementID, bool rewarded, string callbackJson) {
Debug.Log("Unity: ATRewardedVideoWrapper::OnRewardedVideoClose()");
if (clients[placementID] != null) clients[placementID].onRewardedVideoAdClosed(placementID, rewarded, callbackJson);
}
static public void OnRewardedVideoReward(string placementID, string callbackJson)
{
Debug.Log("Unity: ATRewardedVideoWrapper::OnRewardedVideoReward()");
if (clients[placementID] != null) clients[placementID].onRewardedVideoReward(placementID, callbackJson);
}
//------again callback
static public void OnRewardedVideoAdAgainPlayStart(string placementID, string callbackJson)
{
Debug.Log("Unity: ATRewardedVideoWrapper::onRewardedVideoAdAgainPlayStart()");
if (clients[placementID] != null) clients[placementID].onRewardedVideoAdAgainPlayStart(placementID, callbackJson);
}
static public void OnRewardedVideoAdAgainPlayEnd(string placementID, string callbackJson)
{
Debug.Log("Unity: ATRewardedVideoWrapper::onRewardedVideoAdAgainPlayEnd()");
if (clients[placementID] != null) clients[placementID].onRewardedVideoAdAgainPlayEnd(placementID, callbackJson);
}
static public void OnRewardedVideoAdAgainPlayFailed(string placementID, Dictionary<string, object> errorDict)
{
Debug.Log("Unity: ATRewardedVideoWrapper::onRewardedVideoAdAgainPlayFailed()");
if (clients[placementID] != null) clients[placementID].onRewardedVideoAdAgainPlayFailed(placementID, (string)errorDict["code"], (string)errorDict["message"]);
}
static public void OnRewardedVideoAdAgainPlayClicked(string placementID, string callbackJson)
{
Debug.Log("Unity: ATRewardedVideoWrapper::onRewardedVideoAdAgainPlayClicked()");
if (clients[placementID] != null) clients[placementID].onRewardedVideoAdAgainPlayClicked(placementID, callbackJson);
}
static public void OnAgainReward(string placementID, string callbackJson)
{
Debug.Log("Unity: ATRewardedVideoWrapper::onAgainReward()");
if (clients[placementID] != null) clients[placementID].onAgainReward(placementID, callbackJson);
}
// Auto
static public void addAutoLoadAdPlacementID(string placementID)
{
Debug.Log("Unity: ATRewardedVideoWrapper::addAutoLoadAdPlacementID(" + placementID + ")");
ATUnityCBridge.SendMessageToC(CMessageReceiverClass, "addAutoLoadAdPlacementID:callback:", new object[]{placementID}, true);
}
static public void removeAutoLoadAdPlacementID(string placementID)
{
Debug.Log("Unity: ATRewardedVideoWrapper::removeAutoLoadAdPlacementID(" + placementID + ")");
ATUnityCBridge.SendMessageToC(CMessageReceiverClass, "removeAutoLoadAdPlacementID:", new object[]{placementID});
}
static public bool autoLoadRewardedVideoReadyForPlacementID(string placementID)
{
Debug.Log("Unity: ATRewardedVideoWrapper::autoLoadRewardedVideoReadyForPlacementID(" + placementID + ")");
return ATUnityCBridge.SendMessageToC(CMessageReceiverClass, "autoLoadRewardedVideoReadyForPlacementID:", new object[]{placementID});
}
static public string getAutoValidAdCaches(string placementID)
{
Debug.Log("Unity: ATRewardedVideoWrapper::getAutoValidAdCaches");
return ATUnityCBridge.GetStringMessageFromC(CMessageReceiverClass, "getAutoValidAdCaches:", new object[]{placementID});
}
static public string checkAutoAdStatus(string placementID) {
Debug.Log("Unity: ATRewardedVideoWrapper::checkAutoAdStatus(" + placementID + ")");
return ATUnityCBridge.GetStringMessageFromC(CMessageReceiverClass, "checkAutoAdStatus:", new object[]{placementID});
}
static public void setAutoLocalExtra(string placementID, string customData)
{
Debug.Log("Unity: ATRewardedVideoWrapper::setAutoLocalExtra(" + placementID + customData + ")");
ATUnityCBridge.SendMessageToC(CMessageReceiverClass, "setAutoLocalExtra:customDataJSONString:", new object[] {placementID, customData != null ? customData : ""});
}
static public void entryAutoAdScenarioWithPlacementID(string placementID, string scenarioID)
{
Debug.Log("Unity: ATRewardedVideoWrapper::entryAutoAdScenarioWithPlacementID(" + placementID + scenarioID + ")");
ATUnityCBridge.SendMessageToC(CMessageReceiverClass, "entryAutoAdScenarioWithPlacementID:scenarioID:", new object[]{placementID, scenarioID});
}
static public void showAutoRewardedVideo(string placementID, string mapJson) {
Debug.Log("Unity: ATRewardedVideoWrapper::showAutoRewardedVideo(" + placementID + ")");
ATUnityCBridge.SendMessageToC(CMessageReceiverClass, "showAutoRewardedVideoWithPlacementID:extraJsonString:", new object[]{placementID, mapJson});
}
// ad source callback
static public void StartLoadingADSource(string placementID, string callbackJson)
{
Debug.Log("Unity: ATRewardedVideoWrapper::StartLoadingADSource()");
if (clients[placementID] != null) clients[placementID].startLoadingADSource(placementID, callbackJson);
}
static public void FinishLoadingADSource(string placementID, string callbackJson)
{
Debug.Log("Unity: ATRewardedVideoWrapper::FinishLoadingADSource()");
if (clients[placementID] != null) clients[placementID].finishLoadingADSource(placementID, callbackJson);
}
static public void FailToLoadADSource(string placementID, string callbackJson, Dictionary<string, object> errorDict)
{
Debug.Log("Unity: ATRewardedVideoWrapper::FailToLoadADSource()");
Debug.Log("placementID = " + placementID + "errorDict = " + JsonMapper.ToJson(errorDict));
if (clients[placementID] != null) clients[placementID].failToLoadADSource(placementID, callbackJson,(string)errorDict["code"], (string)errorDict["message"]);
}
static public void StartBiddingADSource(string placementID, string callbackJson)
{
Debug.Log("Unity: ATRewardedVideoWrapper::StartBiddingADSource()");
if (clients[placementID] != null) clients[placementID].startBiddingADSource(placementID, callbackJson);
}
static public void FinishBiddingADSource(string placementID, string callbackJson)
{
Debug.Log("Unity: ATRewardedVideoWrapper::FinishBiddingADSource()");
if (clients[placementID] != null) clients[placementID].finishBiddingADSource(placementID, callbackJson);
}
static public void FailBiddingADSource(string placementID, string callbackJson,Dictionary<string, object> errorDict)
{
Debug.Log("Unity: ATRewardedVideoWrapper::FailBiddingADSource()");
Debug.Log("placementID = " + placementID + "errorDict = " + JsonMapper.ToJson(errorDict));
if (clients[placementID] != null) clients[placementID].failBiddingADSource(placementID,callbackJson,(string)errorDict["code"], (string)errorDict["message"]);
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 4fd828a1082d34e828c247d3c1f1e8d1
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,263 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using AOT;
using AnyThinkAds.ThirdParty.LitJson;
using AnyThinkAds.iOS;
#pragma warning disable 0109
public class ATSplashAdWrapper:ATAdWrapper {
static private Dictionary<string, ATSplashAdClient> clients;
static private string CMessaageReceiverClass = "ATSplashAdWrapper";
static public new void InvokeCallback(JsonData jsonData) {
Debug.Log("Unity: ATSplashAdWrapper::InvokeCallback()");
string extraJson = "";
string callback = (string)jsonData["callback"];
Dictionary<string, object> msgDict = JsonMapper.ToObject<Dictionary<string, object>>(jsonData["msg"].ToJson());
JsonData msgJsonData = jsonData["msg"];
IDictionary idic = (System.Collections.IDictionary)msgJsonData;
if (idic.Contains("extra")) {
JsonData extraJsonDate = msgJsonData["extra"];
if (extraJsonDate != null) {
extraJson = msgJsonData["extra"].ToJson();
}
}
if (callback.Equals("OnSplashAdLoaded")) {
OnSplashAdLoaded((string)msgDict["placement_id"]);
} else if (callback.Equals("OnSplashAdLoadFailure")) {
Dictionary<string, object> errorDict = new Dictionary<string, object>();
Dictionary<string, object> errorMsg = JsonMapper.ToObject<Dictionary<string, object>>(msgJsonData["error"].ToJson());
if (errorMsg.ContainsKey("code")) { errorDict.Add("code", errorMsg["code"]); }
if (errorMsg.ContainsKey("reason")) { errorDict.Add("message", errorMsg["reason"]); }
OnSplashAdLoadFailure((string)msgDict["placement_id"], errorDict);
} else if (callback.Equals("OnSplashAdVideoPlayFailure")) {
Dictionary<string, object> errorDict = new Dictionary<string, object>();
Dictionary<string, object> errorMsg = JsonMapper.ToObject<Dictionary<string, object>>(msgJsonData["error"].ToJson());
if (errorMsg.ContainsKey("code")) { errorDict.Add("code", errorMsg["code"]); }
if (errorMsg.ContainsKey("reason")) { errorDict.Add("message", errorMsg["reason"]); }
OnSplashAdVideoPlayFailure((string)msgDict["placement_id"], errorDict);
} else if (callback.Equals("OnSplashAdVideoPlayStart")) {
OnSplashAdVideoPlayStart((string)msgDict["placement_id"], extraJson);
} else if (callback.Equals("OnSplashAdVideoPlayEnd")) {
OnSplashAdVideoPlayEnd((string)msgDict["placement_id"], extraJson);
} else if (callback.Equals("OnSplashAdShow")) {
OnSplashAdShow((string)msgDict["placement_id"], extraJson);
} else if (callback.Equals("OnSplashAdClick")) {
OnSplashAdClick((string)msgDict["placement_id"], extraJson);
} else if (callback.Equals("OnSplashAdClose")) {
OnSplashAdClose((string)msgDict["placement_id"], extraJson);
} else if (callback.Equals("OnSplashAdFailedToShow")) {
OnSplashAdFailedToShow((string)msgDict["placement_id"]);
}else if (callback.Equals("startLoadingADSource")) {
StartLoadingADSource((string)msgDict["placement_id"], extraJson);
}else if (callback.Equals("finishLoadingADSource")) {
FinishLoadingADSource((string)msgDict["placement_id"], extraJson);
}else if (callback.Equals("failToLoadADSource")) {
Dictionary<string, object> errorDict = new Dictionary<string, object>();
Dictionary<string, object> errorMsg = JsonMapper.ToObject<Dictionary<string, object>>(msgJsonData["error"].ToJson());
if (errorMsg["code"] != null) { errorDict.Add("code", errorMsg["code"]); }
if (errorMsg["reason"] != null) { errorDict.Add("message", errorMsg["reason"]); }
FailToLoadADSource((string)msgDict["placement_id"],extraJson, errorDict);
}else if (callback.Equals("startBiddingADSource")) {
StartBiddingADSource((string)msgDict["placement_id"], extraJson);
}else if (callback.Equals("finishBiddingADSource")) {
FinishBiddingADSource((string)msgDict["placement_id"], extraJson);
}else if (callback.Equals("failBiddingADSource")) {
Dictionary<string, object> errorDict = new Dictionary<string, object>();
Dictionary<string, object> errorMsg = JsonMapper.ToObject<Dictionary<string, object>>(msgJsonData["error"].ToJson());
if (errorMsg["code"] != null) { errorDict.Add("code", errorMsg["code"]); }
if (errorMsg["reason"] != null) { errorDict.Add("message", errorMsg["reason"]); }
FailBiddingADSource((string)msgDict["placement_id"],extraJson, errorDict);
}
}
static public void setClientForPlacementID(string placementID, ATSplashAdClient client) {
if (clients == null) clients = new Dictionary<string, ATSplashAdClient>();
if (clients.ContainsKey(placementID)) clients.Remove(placementID);
clients.Add(placementID, client);
}
static public void loadSplashAd(string placementID, string customData) {
Debug.Log("Unity: ATSplashAdWrapper::loadSplashAd(" + placementID + ")");
ATUnityCBridge.SendMessageToC(CMessaageReceiverClass, "loadSplashAdWithPlacementID:customDataJSONString:callback:", new object[]{placementID, customData != null ? customData : ""}, true);
}
static public bool hasSplashAdReady(string placementID) {
Debug.Log("Unity: ATSplashAdWrapper::isSplashAdReady(" + placementID + ")");
return ATUnityCBridge.SendMessageToC(CMessaageReceiverClass, "splashAdReadyForPlacementID:", new object[]{placementID});
}
static public void showSplashAd(string placementID, string mapJson) {
Debug.Log("Unity: ATSplashAdWrapper::showSplashAd(" + placementID + ")");
ATUnityCBridge.SendMessageToC(CMessaageReceiverClass, "showSplashAdWithPlacementID:extraJsonString:", new object[]{placementID, mapJson});
}
static public void clearCache(string placementID) {
Debug.Log("Unity: ATSplashAdWrapper::clearCache()");
ATUnityCBridge.SendMessageToC(CMessaageReceiverClass, "clearCache", null);
}
static public string checkAdStatus(string placementID) {
Debug.Log("Unity: ATSplashAdWrapper::checkAdStatus(" + placementID + ")");
return ATUnityCBridge.GetStringMessageFromC(CMessaageReceiverClass, "checkAdStatus:", new object[]{placementID});
}
static public string getValidAdCaches(string placementID)
{
Debug.Log("Unity: ATSplashAdWrapper::checkAdStatus(" + placementID + ")");
return ATUnityCBridge.GetStringMessageFromC(CMessaageReceiverClass, "getValidAdCaches:", new object[] { placementID });
}
static public void entryScenarioWithPlacementID(string placementID, string scenarioID)
{
Debug.Log("Unity: ATSplashAdWrapper::entryScenarioWithPlacementID(" + placementID + scenarioID + ")");
ATUnityCBridge.SendMessageToC(CMessaageReceiverClass, "entryScenarioWithPlacementID:scenarioID:", new object[]{placementID, scenarioID});
}
//Callbacks
static private void OnSplashAdLoaded(string placementID) {
Debug.Log("Unity: ATSplashAdWrapper::OnSplashAdLoaded()");
if (clients[placementID] != null) clients[placementID].OnSplashAdLoaded(placementID);
}
static private void OnSplashAdLoadFailure(string placementID, Dictionary<string, object> errorDict) {
Debug.Log("Unity: ATSplashAdWrapper::OnSplashAdLoadFailure()");
Debug.Log("placementID = " + placementID + "errorDict = " + JsonMapper.ToJson(errorDict));
if (clients[placementID] != null) clients[placementID].OnSplashAdLoadFailure(placementID, (string)errorDict["code"], (string)errorDict["message"]);
}
static private void OnSplashAdVideoPlayFailure(string placementID, Dictionary<string, object> errorDict) {
Debug.Log("Unity: ATSplashAdWrapper::OnSplashAdVideoPlayFailure()");
if (clients[placementID] != null) clients[placementID].OnSplashAdVideoPlayFailure(placementID, (string)errorDict["code"], (string)errorDict["message"]);
}
static private void OnSplashAdVideoPlayStart(string placementID, string callbackJson) {
Debug.Log("Unity: ATSplashAdWrapper::OnSplashAdPlayStart()");
if (clients[placementID] != null) clients[placementID].OnSplashAdVideoPlayStart(placementID, callbackJson);
}
static private void OnSplashAdVideoPlayEnd(string placementID, string callbackJson) {
Debug.Log("Unity: ATSplashAdWrapper::OnSplashAdVideoPlayEnd()");
if (clients[placementID] != null) clients[placementID].OnSplashAdVideoPlayEnd(placementID, callbackJson);
}
static private void OnSplashAdShow(string placementID, string callbackJson) {
Debug.Log("Unity: ATSplashAdWrapper::OnSplashAdShow()");
if (clients[placementID] != null) clients[placementID].OnSplashAdShow(placementID, callbackJson);
}
static private void OnSplashAdFailedToShow(string placementID) {
Debug.Log("Unity: ATSplashAdWrapper::OnSplashAdFailedToShow()");
if (clients[placementID] != null) clients[placementID].OnSplashAdFailedToShow(placementID);
}
static private void OnSplashAdClick(string placementID, string callbackJson) {
Debug.Log("Unity: ATSplashAdWrapper::OnSplashAdClick()");
if (clients[placementID] != null) clients[placementID].OnSplashAdClick(placementID, callbackJson);
}
static private void OnSplashAdClose(string placementID, string callbackJson) {
Debug.Log("Unity: ATSplashAdWrapper::OnSplashAdClose()");
if (clients[placementID] != null) clients[placementID].OnSplashAdClose(placementID, callbackJson);
}
// ad source callback
static public void StartLoadingADSource(string placementID, string callbackJson)
{
Debug.Log("Unity: ATSplashAdWrapper::StartLoadingADSource()");
if (clients[placementID] != null) clients[placementID].startLoadingADSource(placementID, callbackJson);
}
static public void FinishLoadingADSource(string placementID, string callbackJson)
{
Debug.Log("Unity: ATSplashAdWrapper::FinishLoadingADSource()");
if (clients[placementID] != null) clients[placementID].finishLoadingADSource(placementID, callbackJson);
}
static public void FailToLoadADSource(string placementID,string callbackJson, Dictionary<string, object> errorDict)
{
Debug.Log("Unity: ATSplashAdWrapper::FailToLoadADSource()");
Debug.Log("placementID = " + placementID + "errorDict = " + JsonMapper.ToJson(errorDict));
if (clients[placementID] != null) clients[placementID].failToLoadADSource(placementID,callbackJson,(string)errorDict["code"], (string)errorDict["message"]);
}
static public void StartBiddingADSource(string placementID, string callbackJson)
{
Debug.Log("Unity: ATSplashAdWrapper::StartBiddingADSource()");
if (clients[placementID] != null) clients[placementID].startBiddingADSource(placementID, callbackJson);
}
static public void FinishBiddingADSource(string placementID, string callbackJson)
{
Debug.Log("Unity: ATSplashAdWrapper::FinishBiddingADSource()");
if (clients[placementID] != null) clients[placementID].finishBiddingADSource(placementID, callbackJson);
}
static public void FailBiddingADSource(string placementID, string callbackJson,Dictionary<string, object> errorDict)
{
Debug.Log("Unity: ATSplashAdWrapper::FailBiddingADSource()");
Debug.Log("placementID = " + placementID + "errorDict = " + JsonMapper.ToJson(errorDict));
if (clients[placementID] != null) clients[placementID].failBiddingADSource(placementID,callbackJson,(string)errorDict["code"], (string)errorDict["message"]);
}
// Auto
static public void addAutoLoadAdPlacementID(string placementID)
{
Debug.Log("Unity: ATSplashAdWrapper::addAutoLoadAdPlacementID(" + placementID + ")");
ATUnityCBridge.SendMessageToC(CMessaageReceiverClass, "addAutoLoadAdPlacementID:callback:", new object[]{placementID}, true);
}
static public void removeAutoLoadAdPlacementID(string placementID)
{
Debug.Log("Unity: ATSplashAdWrapper::removeAutoLoadAdPlacementID(" + placementID + ")");
ATUnityCBridge.SendMessageToC(CMessaageReceiverClass, "removeAutoLoadAdPlacementID:", new object[]{placementID});
}
static public bool autoLoadSplashAdReadyForPlacementID(string placementID)
{
Debug.Log("Unity: ATSplashAdWrapper::autoLoadSplashAdReadyForPlacementID(" + placementID + ")");
return ATUnityCBridge.SendMessageToC(CMessaageReceiverClass, "autoLoadSplashAdReadyForPlacementID:", new object[]{placementID});
}
static public string getAutoValidAdCaches(string placementID)
{
Debug.Log("Unity: ATSplashAdWrapper::getAutoValidAdCaches");
return ATUnityCBridge.GetStringMessageFromC(CMessaageReceiverClass, "getAutoValidAdCaches:", new object[]{placementID});
}
static public string checkAutoAdStatus(string placementID) {
Debug.Log("Unity: ATSplashAdWrapper::checkAutoAdStatus(" + placementID + ")");
return ATUnityCBridge.GetStringMessageFromC(CMessaageReceiverClass, "checkAutoAdStatus:", new object[]{placementID});
}
static public void setAutoLocalExtra(string placementID, string customData)
{
Debug.Log("Unity: ATSplashAdWrapper::setAutoLocalExtra(" + placementID + customData + ")");
ATUnityCBridge.SendMessageToC(CMessaageReceiverClass, "setAutoLocalExtra:customDataJSONString:", new object[] {placementID, customData != null ? customData : ""});
}
static public void entryAutoAdScenarioWithPlacementID(string placementID, string scenarioID)
{
Debug.Log("Unity: ATSplashAdWrapper::entryAutoAdScenarioWithPlacementID(" + placementID + scenarioID + ")");
ATUnityCBridge.SendMessageToC(CMessaageReceiverClass, "entryAutoAdScenarioWithPlacementID:scenarioID:", new object[]{placementID, scenarioID});
}
static public void showAutoSplashAd(string placementID, string mapJson) {
Debug.Log("Unity: ATSplashAdWrapper::showAutoSplashAd(" + placementID + ")");
ATUnityCBridge.SendMessageToC(CMessaageReceiverClass, "showAutoSplashAd:extraJsonString:", new object[]{placementID, mapJson});
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 7daeafef5bd994a159a64f1040af4a67
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,103 @@
using System.Runtime.InteropServices;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using AOT;
using AnyThinkAds.ThirdParty.LitJson;
using System;
public class ATUnityCBridge {
public delegate void CCallBack(string wrapperClass, string msg);
#if UNITY_IOS || UNITY_IPHONE
[DllImport("__Internal")]
extern static bool at_message_from_unity(string msg, CCallBack callback);
[DllImport("__Internal")]
extern static int at_get_message_for_unity(string msg, CCallBack callback);
[DllImport("__Internal")]
extern static string at_get_string_message_for_unity(string msg, CCallBack callback);
#endif
[MonoPInvokeCallback(typeof(CCallBack))]
static public void MessageFromC(string wrapperClass, string msg) {
Debug.Log("Unity: ATUnityCBridge::MessageFromC(" + wrapperClass + "," + msg + ")");
JsonData jsonData = JsonMapper.ToObject(msg);
if (wrapperClass.Equals("ATRewardedVideoWrapper")) {
Debug.Log("Unity: ATUnityCBridge::MessageFromC(), hit rv");
ATRewardedVideoWrapper.InvokeCallback(jsonData);
} else if (wrapperClass.Equals("ATNativeAdWrapper")) {
ATNativeAdWrapper.InvokeCallback(jsonData);
} else if (wrapperClass.Equals("ATInterstitialAdWrapper")) {
ATInterstitialAdWrapper.InvokeCallback(jsonData);
} else if (wrapperClass.Equals("ATBannerAdWrapper")) {
ATBannerAdWrapper.InvokeCallback(jsonData);
} else if (wrapperClass.Equals("ATNativeBannerAdWrapper")) {
ATNativeBannerAdWrapper.InvokeCallback(jsonData);
} else if (wrapperClass.Equals("ATSplashAdWrapper")) {
ATSplashAdWrapper.InvokeCallback(jsonData);
}
}
static public bool SendMessageToC(string className, string selector, object[] arguments) {
return SendMessageToC(className, selector, arguments, false);
}
static public int GetMessageFromC(string className, string selector, object[] arguments) {
Debug.Log("Unity: ATUnityCBridge::GetMessageFromC()");
Dictionary<string, object> msgDict = new Dictionary<string, object>();
msgDict.Add("class", className);
msgDict.Add("selector", selector);
msgDict.Add("arguments", arguments);
#if UNITY_IOS || UNITY_IPHONE
return at_get_message_for_unity(JsonMapper.ToJson(msgDict), null);
#else
return 0;
#endif
}
static public string GetStringMessageFromC(string className, string selector, object[] arguments) {
Debug.Log("Unity: ATUnityCBridge::GetStringMessageFromC()");
Dictionary<string, object> msgDict = new Dictionary<string, object>();
msgDict.Add("class", className);
msgDict.Add("selector", selector);
msgDict.Add("arguments", arguments);
#if UNITY_IOS || UNITY_IPHONE
return at_get_string_message_for_unity(JsonMapper.ToJson(msgDict), null);
#else
return "";
#endif
}
static public bool SendMessageToC(string className, string selector, object[] arguments, bool carryCallback) {
Debug.Log("Unity: ATUnityCBridge::SendMessageToC()");
Dictionary<string, object> msgDict = new Dictionary<string, object>();
msgDict.Add("class", className);
msgDict.Add("selector", selector);
msgDict.Add("arguments", arguments);
CCallBack callback = null;
if (carryCallback) callback = MessageFromC;
#if UNITY_IOS || UNITY_IPHONE
return at_message_from_unity(JsonMapper.ToJson(msgDict), callback);
#else
return false;
#endif
}
#if UNITY_IOS || UNITY_IPHONE
[DllImport("__Internal")]
extern static bool at_message_from_unity(string msg, Func<string, int> callback);
#endif
static public void SendMessageToCWithCallBack(string className, string selector, object[] arguments, Func<string, int> callback)
{
Debug.Log("Unity: ATUnityCBridge::SendMessageToCWithCallBack()");
Dictionary<string, object> msgDict = new Dictionary<string, object>();
msgDict.Add("class", className);
msgDict.Add("selector", selector);
msgDict.Add("arguments", arguments);
#if UNITY_IOS || UNITY_IPHONE
at_message_from_unity(JsonMapper.ToJson(msgDict), callback);
#endif
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 7506b10016ed445f48eccd1aa58c94b4
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: