Files
Commercialization.topon/Assets/AnyThinkPlugin/AnyThinkAds/Platform/iOS/Internal/C/ATSplashAdWrapper.m

240 lines
9.8 KiB
Objective-C

//
// 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];
}
- (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