ATInterstitialAdWrapper.m 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  1. //
  2. // ATInterstitialAdWrapper.m
  3. // UnityContainer
  4. //
  5. // Created by Martin Lau on 2019/1/8.
  6. // Copyright © 2019 Martin Lau. All rights reserved.
  7. //
  8. #import "ATInterstitialAdWrapper.h"
  9. #import "ATUnityUtilities.h"
  10. #import <AnyThinkInterstitial/AnyThinkInterstitial.h>
  11. NSString *const kLoadUseRVAsInterstitialKey = @"UseRewardedVideoAsInterstitial";
  12. NSString *const kInterstitialExtraAdSizeKey = @"interstitial_ad_size";
  13. static NSString *kATInterstitialSizeUsesPixelFlagKey = @"uses_pixel";
  14. @interface ATInterstitialAdWrapper()<ATInterstitialDelegate>
  15. @end
  16. @implementation ATInterstitialAdWrapper
  17. +(instancetype)sharedInstance {
  18. static ATInterstitialAdWrapper *sharedInstance = nil;
  19. static dispatch_once_t onceToken;
  20. dispatch_once(&onceToken, ^{
  21. sharedInstance = [[ATInterstitialAdWrapper alloc] init];
  22. });
  23. return sharedInstance;
  24. }
  25. -(NSString*) scriptWrapperClass {
  26. return @"ATInterstitialAdWrapper";
  27. }
  28. - (id)selWrapperClassWithDict:(NSDictionary *)dict callback:(void(*)(const char*, const char*))callback {
  29. NSString *selector = dict[@"selector"];
  30. NSArray<NSString*>* arguments = dict[@"arguments"];
  31. NSString *firstObject = @"";
  32. NSString *lastObject = @"";
  33. if (![ATUnityUtilities isEmpty:arguments]) {
  34. for (int i = 0; i < arguments.count; i++) {
  35. if (i == 0) { firstObject = arguments[i]; }
  36. else { lastObject = arguments[i]; }
  37. }
  38. }
  39. if ([selector isEqualToString:@"loadInterstitialAdWithPlacementID:customDataJSONString:callback:"]) {
  40. [self loadInterstitialAdWithPlacementID:firstObject customDataJSONString:lastObject callback:callback];
  41. } else if ([selector isEqualToString:@"interstitialAdReadyForPlacementID:"]) {
  42. return [NSNumber numberWithBool:[self interstitialAdReadyForPlacementID:firstObject]];
  43. } else if ([selector isEqualToString:@"showInterstitialAdWithPlacementID:extraJsonString:"]) {
  44. [self showInterstitialAdWithPlacementID:firstObject extraJsonString:lastObject];
  45. } else if ([selector isEqualToString:@"checkAdStatus:"]) {
  46. return [self checkAdStatus:firstObject];
  47. } else if ([selector isEqualToString:@"clearCache"]) {
  48. [self clearCache];
  49. } else if ([selector isEqualToString:@"getValidAdCaches:"]) {
  50. return [self getValidAdCaches:firstObject];
  51. }else if ([selector isEqualToString:@"entryScenarioWithPlacementID:scenarioID:"]) {
  52. [self entryScenarioWithPlacementID:firstObject scenarioID:lastObject];
  53. }
  54. // auto
  55. else if ([selector isEqualToString:@"addAutoLoadAdPlacementID:callback:"]){
  56. [self addAutoLoadAdPlacementID:firstObject callback:callback];
  57. }else if ([selector isEqualToString:@"removeAutoLoadAdPlacementID:"]){
  58. [self removeAutoLoadAdPlacementID:firstObject];
  59. }else if ([selector isEqualToString:@"autoLoadInterstitialAdReadyForPlacementID:"]){
  60. return [NSNumber numberWithBool:[self autoLoadInterstitialAdReadyForPlacementID:firstObject]];
  61. }else if ([selector isEqualToString:@"getAutoValidAdCaches:"]){
  62. return [self getAutoValidAdCaches:firstObject];
  63. }else if ([selector isEqualToString:@"setAutoLocalExtra:customDataJSONString:"]){
  64. [self setAutoLocalExtra:firstObject customDataJSONString:lastObject];
  65. }else if ([selector isEqualToString:@"entryAutoAdScenarioWithPlacementID:scenarioID:"]){
  66. [self entryAutoAdScenarioWithPlacementID:firstObject scenarioID:lastObject];
  67. }else if ([selector isEqualToString:@"showAutoInterstitialAd:extraJsonString:"]){
  68. [self showAutoInterstitialAd:firstObject extraJsonString:lastObject];
  69. }else if ([selector isEqualToString:@"checkAutoAdStatus:"]) {
  70. return [self checkAutoAdStatus:firstObject];
  71. }
  72. return nil;
  73. }
  74. -(void) loadInterstitialAdWithPlacementID:(NSString*)placementID customDataJSONString:(NSString*)customDataJSONString callback:(void(*)(const char*, const char*))callback {
  75. [self setCallBack:callback forKey:placementID];
  76. NSMutableDictionary *extra = [NSMutableDictionary dictionary];
  77. if ([customDataJSONString isKindOfClass:[NSString class]] && [customDataJSONString length] > 0) {
  78. NSDictionary *extraDict = [NSJSONSerialization JSONObjectWithData:[customDataJSONString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];
  79. NSLog(@"extraDict = %@", extraDict);
  80. if (extraDict[kLoadUseRVAsInterstitialKey] != nil) {
  81. extra[kATInterstitialExtraUsesRewardedVideo] = @([extraDict[kLoadUseRVAsInterstitialKey] boolValue]);
  82. }
  83. CGFloat scale = [extraDict[kATInterstitialSizeUsesPixelFlagKey] boolValue] ? [UIScreen mainScreen].nativeScale : 1.0f;
  84. if ([extraDict[kInterstitialExtraAdSizeKey] isKindOfClass:[NSString class]] && [[extraDict[kInterstitialExtraAdSizeKey] componentsSeparatedByString:@"x"] count] == 2) {
  85. NSArray<NSString*>* com = [extraDict[kInterstitialExtraAdSizeKey] componentsSeparatedByString:@"x"];
  86. extra[kATInterstitialExtraAdSizeKey] = [NSValue valueWithCGSize:CGSizeMake([com[0] doubleValue] / scale, [com[1] doubleValue] / scale)];
  87. }
  88. }
  89. NSLog(@"ATInterstitialAdWrapper::extra = %@", extra);
  90. [[ATAdManager sharedManager] loadADWithPlacementID:placementID extra:extra != nil ? extra : nil delegate:self];
  91. }
  92. -(BOOL) interstitialAdReadyForPlacementID:(NSString*)placementID {
  93. return [[ATAdManager sharedManager] interstitialReadyForPlacementID:placementID];
  94. }
  95. -(NSString*) getValidAdCaches:(NSString *)placementID {
  96. NSArray *array = [[ATAdManager sharedManager] getInterstitialValidAdsForPlacementID:placementID];
  97. NSLog(@"ATNativeAdWrapper::array = %@", array);
  98. return array.jsonFilterString;
  99. }
  100. -(void) showInterstitialAdWithPlacementID:(NSString*)placementID extraJsonString:(NSString*)extraJsonString {
  101. NSDictionary *extraDict = ([extraJsonString isKindOfClass:[NSString class]] && [extraJsonString dataUsingEncoding:NSUTF8StringEncoding] != nil) ? [NSJSONSerialization JSONObjectWithData:[extraJsonString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil] : nil;
  102. [[ATAdManager sharedManager] showInterstitialWithPlacementID:placementID scene:extraDict[kATUnityUtilitiesAdShowingExtraScenarioKey] inViewController:[UIApplication sharedApplication].delegate.window.rootViewController delegate:self];
  103. }
  104. -(NSString*) checkAdStatus:(NSString *)placementID {
  105. ATCheckLoadModel *checkLoadModel = [[ATAdManager sharedManager] checkInterstitialLoadStatusForPlacementID:placementID];
  106. NSMutableDictionary *statusDict = [NSMutableDictionary dictionary];
  107. statusDict[@"isLoading"] = @(checkLoadModel.isLoading);
  108. statusDict[@"isReady"] = @(checkLoadModel.isReady);
  109. statusDict[@"adInfo"] = checkLoadModel.adOfferInfo;
  110. NSLog(@"ATInterstitialAdWrapper::statusDict = %@", statusDict);
  111. return statusDict.jsonFilterString;
  112. }
  113. - (void)entryScenarioWithPlacementID:(NSString *)placementID scenarioID:(NSString *)scenarioID{
  114. [[ATAdManager sharedManager] entryInterstitialScenarioWithPlacementID:placementID scene:scenarioID];
  115. }
  116. -(void) clearCache {
  117. }
  118. #pragma mark - auto
  119. -(void) addAutoLoadAdPlacementID:(NSString*)placementID callback:(void(*)(const char*, const char*))callback {
  120. if (placementID == nil) {
  121. return;
  122. }
  123. [ATInterstitialAutoAdManager sharedInstance].delegate = self;
  124. NSArray *placementIDArray = [self jsonStrToArray:placementID];
  125. [placementIDArray enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
  126. [self setCallBack:callback forKey:obj];
  127. NSLog(@" addAutoLoadAdPlacementID--%@",placementID);
  128. }];
  129. [[ATInterstitialAutoAdManager sharedInstance] addAutoLoadAdPlacementIDArray:placementIDArray];
  130. }
  131. -(void) removeAutoLoadAdPlacementID:(NSString*)placementID{
  132. NSLog(@" removeAutoLoadAdPlacementID--%@",placementID);
  133. if (placementID == nil) {
  134. return;
  135. }
  136. NSArray *placementIDArray = [self jsonStrToArray:placementID];
  137. [[ATInterstitialAutoAdManager sharedInstance] removeAutoLoadAdPlacementIDArray:placementIDArray];
  138. }
  139. -(BOOL) autoLoadInterstitialAdReadyForPlacementID:(NSString*)placementID {
  140. NSLog(@"Unity: autoLoadInterstitialAdReadyForPlacementID--%@---%d",placementID,[[ATInterstitialAutoAdManager sharedInstance] autoLoadInterstitialReadyForPlacementID:placementID]);
  141. return [[ATInterstitialAutoAdManager sharedInstance] autoLoadInterstitialReadyForPlacementID:placementID];
  142. }
  143. -(NSString*) getAutoValidAdCaches:(NSString *)placementID{
  144. NSArray *array = [[ATInterstitialAutoAdManager sharedInstance] checkValidAdCachesWithPlacementID:placementID];
  145. NSLog(@"Unity: getAutoValidAdCaches::array = %@", array);
  146. return array.jsonFilterString;
  147. }
  148. -(NSString*) checkAutoAdStatus:(NSString *)placementID {
  149. ATCheckLoadModel *checkLoadModel = [[ATInterstitialAutoAdManager sharedInstance] checkInterstitialLoadStatusForPlacementID:placementID];
  150. NSMutableDictionary *statusDict = [NSMutableDictionary dictionary];
  151. statusDict[@"isLoading"] = @(checkLoadModel.isLoading);
  152. statusDict[@"isReady"] = @(checkLoadModel.isReady);
  153. statusDict[@"adInfo"] = checkLoadModel.adOfferInfo;
  154. NSLog(@":checkAutoAdStatus statusDict = %@", statusDict);
  155. return statusDict.jsonFilterString;
  156. }
  157. -(void) setAutoLocalExtra:(NSString*)placementID customDataJSONString:(NSString*)customDataJSONString{
  158. if ([customDataJSONString isKindOfClass:[NSString class]]) {
  159. NSDictionary *extraDict = [NSJSONSerialization JSONObjectWithData:[customDataJSONString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];
  160. NSMutableDictionary *extra = [NSMutableDictionary dictionary];
  161. if ([extraDict isKindOfClass:[NSDictionary class]]) {
  162. if (extraDict[kLoadUseRVAsInterstitialKey] != nil) {
  163. extra[kATInterstitialExtraUsesRewardedVideo] = @([extraDict[kLoadUseRVAsInterstitialKey] boolValue]);
  164. }
  165. CGFloat scale = [extraDict[kATInterstitialSizeUsesPixelFlagKey] boolValue] ? [UIScreen mainScreen].nativeScale : 1.0f;
  166. if ([extraDict[kInterstitialExtraAdSizeKey] isKindOfClass:[NSString class]] && [[extraDict[kInterstitialExtraAdSizeKey] componentsSeparatedByString:@"x"] count] == 2) {
  167. NSArray<NSString*>* com = [extraDict[kInterstitialExtraAdSizeKey] componentsSeparatedByString:@"x"];
  168. extra[kATInterstitialExtraAdSizeKey] = [NSValue valueWithCGSize:CGSizeMake([com[0] doubleValue] / scale, [com[1] doubleValue] / scale)];
  169. }
  170. }
  171. NSLog(@"ATInterstitialAdWrapper::setAutoLocalExtra statusDict = %@", extraDict);
  172. [[ATInterstitialAutoAdManager sharedInstance] setLocalExtra:extra placementID:placementID];
  173. }
  174. }
  175. -(void) entryAutoAdScenarioWithPlacementID:(NSString*)placementID scenarioID:(NSString*)scenarioID{
  176. NSLog(@"ATInterstitialAdWrapper::entryAutoAdScenarioWithPlacementID = %@ scenarioID = %@", placementID,scenarioID);
  177. [[ATInterstitialAutoAdManager sharedInstance] entryAdScenarioWithPlacementID:placementID scenarioID:scenarioID];
  178. }
  179. -(void) showAutoInterstitialAd:(NSString*)placementID extraJsonString:(NSString*)extraJsonString {
  180. NSDictionary *extraDict = ([extraJsonString isKindOfClass:[NSString class]] && [extraJsonString dataUsingEncoding:NSUTF8StringEncoding] != nil) ? [NSJSONSerialization JSONObjectWithData:[extraJsonString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil] : nil;
  181. NSLog(@"ATInterstitialAdWrapper::showAutoInterstitialAd = %@ extraJsonString = %@", placementID,extraJsonString);
  182. NSLog(@"ATInterstitialAdWrapper::extraDict = %@", extraDict);
  183. [[ATInterstitialAutoAdManager sharedInstance] showAutoLoadInterstitialWithPlacementID:placementID scene:extraDict[kATUnityUtilitiesAdShowingExtraScenarioKey] inViewController:[UIApplication sharedApplication].delegate.window.rootViewController delegate:self];
  184. }
  185. #pragma mark - delegate method(s)
  186. // ad
  187. - (void)didStartLoadingADSourceWithPlacementID:(NSString *)placementID extra:(NSDictionary*)extra{
  188. [self invokeCallback:@"startLoadingADSource" placementID:placementID error:nil extra:extra];
  189. }
  190. - (void)didFinishLoadingADSourceWithPlacementID:(NSString *)placementID extra:(NSDictionary*)extra{
  191. [self invokeCallback:@"finishLoadingADSource" placementID:placementID error:nil extra:extra];
  192. }
  193. - (void)didFailToLoadADSourceWithPlacementID:(NSString*)placementID extra:(NSDictionary*)extra error:(NSError*)error{
  194. [self invokeCallback:@"failToLoadADSource" placementID:placementID error:error extra:extra];
  195. }
  196. // bidding
  197. - (void)didStartBiddingADSourceWithPlacementID:(NSString *)placementID extra:(NSDictionary*)extra{
  198. [self invokeCallback:@"startBiddingADSource" placementID:placementID error:nil extra:extra];
  199. }
  200. - (void)didFinishBiddingADSourceWithPlacementID:(NSString *)placementID extra:(NSDictionary*)extra{
  201. [self invokeCallback:@"finishBiddingADSource" placementID:placementID error:nil extra:extra];
  202. }
  203. - (void)didFailBiddingADSourceWithPlacementID:(NSString*)placementID extra:(NSDictionary*)extra error:(NSError*)error{
  204. [self invokeCallback:@"failBiddingADSource" placementID:placementID error:error extra:extra];
  205. }
  206. -(void) didFinishLoadingADWithPlacementID:(NSString *)placementID {
  207. [self invokeCallback:@"OnInterstitialAdLoaded" placementID:placementID error:nil extra:nil];
  208. }
  209. -(void) didFailToLoadADWithPlacementID:(NSString*)placementID error:(NSError*)error {
  210. 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"}];
  211. [self invokeCallback:@"OnInterstitialAdLoadFailure" placementID:placementID error:error extra:nil];
  212. }
  213. -(void) interstitialDidShowForPlacementID:(NSString*)placementID extra:(NSDictionary *)extra {
  214. [self invokeCallback:@"OnInterstitialAdShow" placementID:placementID error:nil extra:extra];
  215. [[NSNotificationCenter defaultCenter] postNotificationName:kATUnityUtilitiesInterstitialImpressionNotification object:nil];
  216. }
  217. -(void) interstitialFailedToShowForPlacementID:(NSString*)placementID error:(NSError*)error extra:(NSDictionary *)extra {
  218. 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"}];
  219. [self invokeCallback:@"OnInterstitialAdFailedToShow" placementID:placementID error:error extra:nil];
  220. }
  221. -(void) interstitialDidStartPlayingVideoForPlacementID:(NSString*)placementID extra:(NSDictionary *)extra {
  222. [self invokeCallback:@"OnInterstitialAdVideoPlayStart" placementID:placementID error:nil extra:extra];
  223. }
  224. -(void) interstitialDidEndPlayingVideoForPlacementID:(NSString*)placementID extra:(NSDictionary *)extra {
  225. [self invokeCallback:@"OnInterstitialAdVideoPlayEnd" placementID:placementID error:nil extra:extra];
  226. }
  227. -(void) interstitialDidFailToPlayVideoForPlacementID:(NSString*)placementID error:(NSError*)error extra:(NSDictionary *)extra {
  228. [self invokeCallback:@"OnInterstitialAdVideoPlayFailure" placementID:placementID error:error extra:extra];
  229. }
  230. -(void) interstitialDidCloseForPlacementID:(NSString*)placementID extra:(NSDictionary *)extra {
  231. [self invokeCallback:@"OnInterstitialAdClose" placementID:placementID error:nil extra:extra];
  232. [[NSNotificationCenter defaultCenter] postNotificationName:kATUnityUtilitiesInterstitialCloseNotification object:nil];
  233. }
  234. -(void) interstitialDidClickForPlacementID:(NSString*)placementID extra:(NSDictionary *)extra {
  235. [self invokeCallback:@"OnInterstitialAdClick" placementID:placementID error:nil extra:extra];
  236. }
  237. @end