ATSplashAdWrapper.m 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. //
  2. // ATSplashAdWrapper.m
  3. // UnityFramework
  4. //
  5. // Created by li zhixuan on 2023/5/4.
  6. //
  7. #import "ATSplashAdWrapper.h"
  8. #import "ATUnityUtilities.h"
  9. #import <AnyThinkSplash/AnyThinkSplash.h>
  10. @interface ATSplashAdWrapper () <ATSplashDelegate>
  11. @end
  12. @implementation ATSplashAdWrapper
  13. + (instancetype)sharedInstance {
  14. static ATSplashAdWrapper *sharedInstance = nil;
  15. static dispatch_once_t onceToken;
  16. dispatch_once(&onceToken, ^{
  17. sharedInstance = [[ATSplashAdWrapper alloc] init];
  18. });
  19. return sharedInstance;
  20. }
  21. - (NSString *)scriptWrapperClass {
  22. return @"ATSplashAdWrapper";
  23. }
  24. - (id)selWrapperClassWithDict:(NSDictionary *)dict callback:(void(*)(const char*, const char*))callback {
  25. NSString *selector = dict[@"selector"];
  26. NSArray<NSString*>* arguments = dict[@"arguments"];
  27. NSString *firstObject = @"";
  28. NSString *lastObject = @"";
  29. if (![ATUnityUtilities isEmpty:arguments]) {
  30. for (int i = 0; i < arguments.count; i++) {
  31. if (i == 0) { firstObject = arguments[i]; }
  32. else { lastObject = arguments[i]; }
  33. }
  34. }
  35. if ([selector isEqualToString:@"loadSplashAdWithPlacementID:customDataJSONString:callback:"]) {
  36. [self loadSplashAdWithPlacementID:firstObject customDataJSONString:lastObject callback:callback];
  37. } else if ([selector isEqualToString:@"splashAdReadyForPlacementID:"]) {
  38. return [NSNumber numberWithBool:[self splashAdReadyForPlacementID:firstObject]];
  39. } else if ([selector isEqualToString:@"showSplashAdWithPlacementID:extraJsonString:"]) {
  40. [self showSplashAdWithPlacementID:firstObject extraJsonString:lastObject];
  41. } else if ([selector isEqualToString:@"checkAdStatus:"]) {
  42. return [self checkAdStatus:firstObject];
  43. } else if ([selector isEqualToString:@"clearCache"]) {
  44. [self clearCache];
  45. } else if ([selector isEqualToString:@"getValidAdCaches:"]) {
  46. return [self getValidAdCaches:firstObject];
  47. }else if ([selector isEqualToString:@"entryScenarioWithPlacementID:scenarioID:"]) {
  48. [self entryScenarioWithPlacementID:firstObject scenarioID:lastObject];
  49. }
  50. return nil;
  51. }
  52. - (void)loadSplashAdWithPlacementID:(NSString*)placementID customDataJSONString:(NSString*)customDataJSONString callback:(void(*)(const char*, const char*))callback {
  53. [self setCallBack:callback forKey:placementID];
  54. NSMutableDictionary *extra = [NSMutableDictionary dictionary];
  55. if ([customDataJSONString isKindOfClass:[NSString class]] && [customDataJSONString length] > 0) {
  56. NSDictionary *extraDict = [NSJSONSerialization JSONObjectWithData:[customDataJSONString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];
  57. [extra addEntriesFromDictionary:extraDict];
  58. }
  59. NSString *defaultAdSourceConfig = extra[@"default_adSource_config"];
  60. NSLog(@"ATSplashAdWrapper::extra = %@", extra);
  61. [[ATAdManager sharedManager] loadADWithPlacementID:placementID extra:extra delegate:self containerView:nil];
  62. }
  63. - (BOOL)splashAdReadyForPlacementID:(NSString*)placementID {
  64. return [[ATAdManager sharedManager] splashReadyForPlacementID:placementID];
  65. }
  66. - (NSString*)getValidAdCaches:(NSString *)placementID {
  67. NSArray *array = [[ATAdManager sharedManager] getSplashValidAdsForPlacementID:placementID];
  68. NSLog(@"ATSplashAdWrapper::array = %@", array);
  69. return array.jsonFilterString;
  70. }
  71. - (void)showSplashAdWithPlacementID:(NSString*)placementID extraJsonString:(NSString*)extraJsonString {
  72. [[ATAdManager sharedManager] showSplashWithPlacementID:placementID scene:@"" window:[UIApplication sharedApplication].delegate.window delegate:self];
  73. }
  74. - (NSString*)checkAdStatus:(NSString *)placementID {
  75. ATCheckLoadModel *checkLoadModel = [[ATAdManager sharedManager] checkSplashLoadStatusForPlacementID:placementID];
  76. NSMutableDictionary *statusDict = [NSMutableDictionary dictionary];
  77. statusDict[@"isLoading"] = @(checkLoadModel.isLoading);
  78. statusDict[@"isReady"] = @(checkLoadModel.isReady);
  79. statusDict[@"adInfo"] = checkLoadModel.adOfferInfo;
  80. NSLog(@"ATSplashAdWrapper::statusDict = %@", statusDict);
  81. return statusDict.jsonFilterString;
  82. }
  83. - (void)entryScenarioWithPlacementID:(NSString *)placementID scenarioID:(NSString *)scenarioID{
  84. [[ATAdManager sharedManager] entrySplashScenarioWithPlacementID:placementID scene:scenarioID];
  85. }
  86. - (void) clearCache {
  87. }
  88. #pragma mark - ATSplashDelegate
  89. /// Splash ad displayed successfully
  90. - (void)splashDidShowForPlacementID:(NSString *)placementID
  91. extra:(NSDictionary *)extra {
  92. [self invokeCallback:@"OnSplashAdShow" placementID:placementID error:nil extra:extra];
  93. }
  94. /// Splash ad click
  95. - (void)splashDidClickForPlacementID:(NSString *)placementID
  96. extra:(NSDictionary *)extra {
  97. [self invokeCallback:@"OnSplashAdClick" placementID:placementID error:nil extra:extra];
  98. }
  99. /// Splash ad closed
  100. - (void)splashDidCloseForPlacementID:(NSString *)placementID
  101. extra:(NSDictionary *)extra {
  102. [self invokeCallback:@"OnSplashAdClose" placementID:placementID error:nil extra:extra];
  103. }
  104. /// Callback when the splash ad is loaded successfully
  105. /// @param isTimeout whether timeout
  106. /// v 5.7.73
  107. - (void)didFinishLoadingSplashADWithPlacementID:(NSString *)placementID
  108. isTimeout:(BOOL)isTimeout {
  109. }
  110. /// Splash ad loading timeout callback
  111. /// v 5.7.73
  112. - (void)didTimeoutLoadingSplashADWithPlacementID:(NSString *)placementID {
  113. [self invokeCallback:@"OnSplashAdLoadTimeout" placementID:placementID error:nil extra:nil];
  114. }
  115. /// Splash ad failed to display
  116. /// currently supports Pangle, Guangdiantong and Baidu
  117. - (void)splashDidShowFailedForPlacementID:(NSString *)placementID
  118. error:(NSError *)error
  119. extra:(NSDictionary *)extra {
  120. [self invokeCallback:@"OnSplashAdFailedToShow" placementID:placementID error:error extra:extra];
  121. }
  122. /// Whether the click jump of Splash ad is in the form of Deeplink
  123. /// note: only suport TopOn Adx ad
  124. - (void)splashDeepLinkOrJumpForPlacementID:(NSString *)placementID
  125. extra:(NSDictionary *)extra
  126. result:(BOOL)success {
  127. NSMutableDictionary *newExtra = [[NSMutableDictionary alloc] initWithDictionary:extra];
  128. newExtra[@"success"] = @(success);
  129. [self invokeCallback:@"OnSplashAdDeeplink" placementID:placementID error:nil extra:newExtra];
  130. }
  131. /// Splash ad closes details page
  132. - (void)splashDetailDidClosedForPlacementID:(NSString *)placementID
  133. extra:(NSDictionary *)extra {
  134. }
  135. /// Called when splash zoomout view did click
  136. /// note: only suport Pangle splash zoomout view and the Tencent splash V+ ad
  137. - (void)splashZoomOutViewDidClickForPlacementID:(NSString *)placementID
  138. extra:(NSDictionary *)extra {
  139. }
  140. /// Called when splash zoomout view did close
  141. /// note: only suport Pangle splash zoomout view and the Tencent splash V+ ad
  142. - (void)splashZoomOutViewDidCloseForPlacementID:(NSString *)placementID
  143. extra:(NSDictionary *)extra {
  144. }
  145. /// This callback is triggered when the skip button is customized.
  146. /// note: only suport TopOn MyOffer, TopOn Adx and TopOn OnlineApi
  147. /// 5.7.61+
  148. - (void)splashCountdownTime:(NSInteger)countdown
  149. forPlacementID:(NSString *)placementID
  150. extra:(NSDictionary *)extra {
  151. }
  152. #pragma mark - ATAdLoadingDelegate
  153. /// Callback when the successful loading of the ad
  154. - (void)didFinishLoadingADWithPlacementID:(NSString *)placementID {
  155. [self invokeCallback:@"OnSplashAdLoaded" placementID:placementID error:nil extra:nil];
  156. }
  157. /// Callback of ad loading failure
  158. - (void)didFailToLoadADWithPlacementID:(NSString*)placementID
  159. error:(NSError*)error {
  160. 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"}];
  161. [self invokeCallback:@"OnSplashAdLoadFailure" placementID:placementID error:error extra:nil];
  162. }
  163. /// Ad start load
  164. - (void)didStartLoadingADSourceWithPlacementID:(NSString *)placementID
  165. extra:(NSDictionary*)extra {
  166. [self invokeCallback:@"startLoadingADSource" placementID:placementID error:nil extra:extra];
  167. }
  168. /// Ad load success
  169. - (void)didFinishLoadingADSourceWithPlacementID:(NSString *)placementID
  170. extra:(NSDictionary*)extra {
  171. [self invokeCallback:@"finishLoadingADSource" placementID:placementID error:nil extra:extra];
  172. }
  173. /// Ad load fail
  174. - (void)didFailToLoadADSourceWithPlacementID:(NSString*)placementID
  175. extra:(NSDictionary*)extra
  176. error:(NSError*)error {
  177. [self invokeCallback:@"failToLoadADSource" placementID:placementID error:error extra:extra];
  178. }
  179. /// Ad start bidding
  180. - (void)didStartBiddingADSourceWithPlacementID:(NSString *)placementID
  181. extra:(NSDictionary*)extra {
  182. [self invokeCallback:@"startBiddingADSource" placementID:placementID error:nil extra:extra];
  183. }
  184. /// Ad bidding success
  185. - (void)didFinishBiddingADSourceWithPlacementID:(NSString *)placementID
  186. extra:(NSDictionary*)extra {
  187. [self invokeCallback:@"finishBiddingADSource" placementID:placementID error:nil extra:extra];
  188. }
  189. /// Ad bidding fail
  190. - (void)didFailBiddingADSourceWithPlacementID:(NSString*)placementID
  191. extra:(NSDictionary*)extra
  192. error:(NSError*)error {
  193. [self invokeCallback:@"failBiddingADSource" placementID:placementID error:error extra:extra];
  194. }
  195. @end