ATRewardedVideoWrapper.m 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  1. //
  2. // ATRewardedVideoWrapper.m
  3. // UnityContainer
  4. //
  5. // Created by Martin Lau on 08/08/2018.
  6. // Copyright © 2018 Martin Lau. All rights reserved.
  7. //
  8. #import "ATRewardedVideoWrapper.h"
  9. #import "ATUnityUtilities.h"
  10. #import <AnyThinkRewardedVideo/AnyThinkRewardedVideo.h>
  11. NSString *const kLoadExtraUserIDKey = @"UserId";
  12. NSString *const kLoadExtraMediaExtraKey = @"UserExtraData";
  13. @interface ATRewardedVideoWrapper()<ATRewardedVideoDelegate>
  14. @end
  15. @implementation ATRewardedVideoWrapper
  16. +(instancetype)sharedInstance {
  17. static ATRewardedVideoWrapper *sharedInstance = nil;
  18. static dispatch_once_t onceToken;
  19. dispatch_once(&onceToken, ^{
  20. sharedInstance = [[ATRewardedVideoWrapper alloc] init];
  21. });
  22. return sharedInstance;
  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:@"loadRewardedVideoWithPlacementID:customDataJSONString:callback:"]) {
  36. [self loadRewardedVideoWithPlacementID:firstObject customDataJSONString:lastObject callback:callback];
  37. } else if ([selector isEqualToString:@"rewardedVideoReadyForPlacementID:"]) {
  38. return [NSNumber numberWithBool:[self rewardedVideoReadyForPlacementID:firstObject]];
  39. } else if ([selector isEqualToString:@"showRewardedVideoWithPlacementID:extraJsonString:"]) {
  40. [self showRewardedVideoWithPlacementID: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:@"setExtra:"]) {
  46. [self setExtra:firstObject];
  47. } else if ([selector isEqualToString:@"getValidAdCaches:"]) {
  48. return [self getValidAdCaches:firstObject];
  49. }else if ([selector isEqualToString:@"entryScenarioWithPlacementID:scenarioID:"]) {
  50. [self entryScenarioWithPlacementID:firstObject scenarioID:lastObject];
  51. }
  52. // auto
  53. else if ([selector isEqualToString:@"addAutoLoadAdPlacementID:callback:"]){
  54. [self addAutoLoadAdPlacementID:firstObject callback:callback];
  55. }else if ([selector isEqualToString:@"removeAutoLoadAdPlacementID:"]){
  56. [self removeAutoLoadAdPlacementID:firstObject];
  57. }else if ([selector isEqualToString:@"autoLoadRewardedVideoReadyForPlacementID:"]){
  58. return [NSNumber numberWithBool:[self autoLoadRewardedVideoReadyForPlacementID:firstObject]];
  59. }else if ([selector isEqualToString:@"getAutoValidAdCaches:"]){
  60. return [self getAutoValidAdCaches:firstObject];
  61. }else if ([selector isEqualToString:@"setAutoLocalExtra:customDataJSONString:"]){
  62. [self setAutoLocalExtra:firstObject customDataJSONString:lastObject];
  63. }else if ([selector isEqualToString:@"entryAutoAdScenarioWithPlacementID:scenarioID:"]){
  64. [self entryAutoAdScenarioWithPlacementID:firstObject scenarioID:lastObject];
  65. }else if ([selector isEqualToString:@"showAutoRewardedVideoWithPlacementID:extraJsonString:"]){
  66. [self showAutoRewardedVideoWithPlacementID:firstObject extraJsonString:lastObject];
  67. }else if ([selector isEqualToString:@"checkAutoAdStatus:"]) {
  68. return [self checkAutoAdStatus:firstObject];
  69. }
  70. return nil;
  71. }
  72. #pragma mark - normal
  73. -(void) loadRewardedVideoWithPlacementID:(NSString*)placementID customDataJSONString:(NSString*)customDataJSONString callback:(void(*)(const char*, const char*))callback {
  74. [self setCallBack:callback forKey:placementID];
  75. NSMutableDictionary *extra = [NSMutableDictionary dictionary];
  76. if ([customDataJSONString isKindOfClass:[NSString class]] && [customDataJSONString length] > 0) {
  77. NSDictionary *extraDict = [NSJSONSerialization JSONObjectWithData:[customDataJSONString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];
  78. NSLog(@"extraDict = %@", extra);
  79. if (extraDict[kLoadExtraUserIDKey] != nil) { extra[kATAdLoadingExtraUserIDKey] = extraDict[kLoadExtraUserIDKey]; }
  80. if (extraDict[kLoadExtraMediaExtraKey] != nil) { extra[kATAdLoadingExtraMediaExtraKey] = extraDict[kLoadExtraMediaExtraKey]; }
  81. }
  82. [[ATAdManager sharedManager] loadADWithPlacementID:placementID extra:[extra isKindOfClass:[NSMutableDictionary class]] ? extra : nil delegate:self];
  83. }
  84. -(BOOL) rewardedVideoReadyForPlacementID:(NSString*)placementID {
  85. return [[ATAdManager sharedManager] rewardedVideoReadyForPlacementID:placementID];
  86. }
  87. -(NSString*) checkAdStatus:(NSString *)placementID {
  88. ATCheckLoadModel *checkLoadModel = [[ATAdManager sharedManager] checkRewardedVideoLoadStatusForPlacementID:placementID];
  89. NSMutableDictionary *statusDict = [NSMutableDictionary dictionary];
  90. statusDict[@"isLoading"] = @(checkLoadModel.isLoading);
  91. statusDict[@"isReady"] = @(checkLoadModel.isReady);
  92. statusDict[@"adInfo"] = checkLoadModel.adOfferInfo;
  93. NSLog(@"ATRewardedVideoWrapper::statusDict = %@", statusDict);
  94. return statusDict.jsonFilterString;
  95. }
  96. -(NSString*) getValidAdCaches:(NSString *)placementID {
  97. NSArray *array = [[ATAdManager sharedManager] getRewardedVideoValidAdsForPlacementID:placementID];
  98. NSLog(@"ATNativeAdWrapper::array = %@", array);
  99. return array.jsonFilterString;
  100. }
  101. -(void) showRewardedVideoWithPlacementID:(NSString*)placementID extraJsonString:(NSString*)extraJsonString {
  102. NSDictionary *extraDict = ([extraJsonString isKindOfClass:[NSString class]] && [extraJsonString dataUsingEncoding:NSUTF8StringEncoding] != nil) ? [NSJSONSerialization JSONObjectWithData:[extraJsonString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil] : nil;
  103. NSLog(@"ATRewardedVideoWrapper::showRewardedVideoWithPlacementID = %@ extraJsonString = %@", placementID,extraJsonString);
  104. NSLog(@"ATRewardedVideoWrapper::extraDict = %@", extraDict);
  105. [[ATAdManager sharedManager] showRewardedVideoWithPlacementID:placementID scene:extraDict[kATUnityUtilitiesAdShowingExtraScenarioKey] inViewController:[UIApplication sharedApplication].delegate.window.rootViewController delegate:self];
  106. }
  107. -(void) clearCache {
  108. }
  109. -(void) setExtra:(NSString*)extra {
  110. if ([extra isKindOfClass:[NSString class]]) {
  111. NSDictionary *extraDict = [NSJSONSerialization JSONObjectWithData:[extra dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];
  112. if ([extraDict isKindOfClass:[NSDictionary class]]) [[ATAdManager sharedManager] setExtra:extraDict];
  113. }
  114. }
  115. - (void)entryScenarioWithPlacementID:(NSString *)placementID scenarioID:(NSString *)scenarioID{
  116. [[ATAdManager sharedManager] entryRewardedVideoScenarioWithPlacementID:placementID scene:scenarioID];
  117. }
  118. -(NSString*) scriptWrapperClass {
  119. return @"ATRewardedVideoWrapper";
  120. }
  121. #pragma mark - auto
  122. -(void) addAutoLoadAdPlacementID:(NSString*)placementID callback:(void(*)(const char*, const char*))callback {
  123. if (placementID == nil) {
  124. return;
  125. }
  126. [ATRewardedVideoAutoAdManager sharedInstance].delegate = self;
  127. NSArray *placementIDArray = [self jsonStrToArray:placementID];
  128. [placementIDArray enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
  129. [self setCallBack:callback forKey:obj];
  130. NSLog(@" addAutoLoadAdPlacementID--%@",placementID);
  131. }];
  132. [[ATRewardedVideoAutoAdManager sharedInstance] addAutoLoadAdPlacementIDArray:placementIDArray];
  133. }
  134. -(void) removeAutoLoadAdPlacementID:(NSString*)placementID{
  135. NSLog(@" removeAutoLoadAdPlacementID--%@",placementID);
  136. if (placementID == nil) {
  137. return;
  138. }
  139. NSArray *placementIDArray = [self jsonStrToArray:placementID];
  140. [[ATRewardedVideoAutoAdManager sharedInstance] removeAutoLoadAdPlacementIDArray:placementIDArray];
  141. }
  142. -(BOOL) autoLoadRewardedVideoReadyForPlacementID:(NSString*)placementID {
  143. NSLog(@"Unity: autoLoadRewardedVideoReadyForPlacementID--%@--%d",placementID,[[ATRewardedVideoAutoAdManager sharedInstance] autoLoadRewardedVideoReadyForPlacementID:placementID]);
  144. return [[ATRewardedVideoAutoAdManager sharedInstance] autoLoadRewardedVideoReadyForPlacementID:placementID];
  145. }
  146. -(NSString*) getAutoValidAdCaches:(NSString *)placementID{
  147. NSArray *array = [[ATRewardedVideoAutoAdManager sharedInstance] checkValidAdCachesWithPlacementID:placementID];
  148. NSLog(@"Unity: getAutoValidAdCaches::array = %@", array);
  149. return array.jsonFilterString;
  150. }
  151. -(NSString*) checkAutoAdStatus:(NSString *)placementID {
  152. ATCheckLoadModel *checkLoadModel = [[ATRewardedVideoAutoAdManager sharedInstance] checkRewardedVideoLoadStatusForPlacementID:placementID];
  153. NSMutableDictionary *statusDict = [NSMutableDictionary dictionary];
  154. statusDict[@"isLoading"] = @(checkLoadModel.isLoading);
  155. statusDict[@"isReady"] = @(checkLoadModel.isReady);
  156. statusDict[@"adInfo"] = checkLoadModel.adOfferInfo;
  157. NSLog(@"ATRewardedVideoWrapper::checkAutoAdStatus statusDict = %@", statusDict);
  158. return statusDict.jsonFilterString;
  159. }
  160. -(void) setAutoLocalExtra:(NSString*)placementID customDataJSONString:(NSString*)customDataJSONString{
  161. NSLog(@"Unity: setAutoLocalExtra::placementID = %@ customDataJSONString: %@", placementID,customDataJSONString);
  162. if ([customDataJSONString isKindOfClass:[NSString class]]) {
  163. NSDictionary *extraDict = [NSJSONSerialization JSONObjectWithData:[customDataJSONString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];
  164. NSMutableDictionary *extra = [NSMutableDictionary dictionary];
  165. if ([extraDict isKindOfClass:[NSDictionary class]]) {
  166. if (extraDict[kLoadExtraUserIDKey] != nil) {
  167. extra[kATAdLoadingExtraUserIDKey] = extraDict[kLoadExtraUserIDKey];
  168. }
  169. if (extraDict[kLoadExtraMediaExtraKey] != nil) { extra[kATAdLoadingExtraMediaExtraKey] = extraDict[kLoadExtraMediaExtraKey];
  170. }
  171. };
  172. [[ATRewardedVideoAutoAdManager sharedInstance] setLocalExtra:extra placementID:placementID];
  173. }
  174. }
  175. -(void) entryAutoAdScenarioWithPlacementID:(NSString*)placementID scenarioID:(NSString*)scenarioID{
  176. NSLog(@"Unity: getAutoValidAdCaches::array = %@ scenarioID:%@", placementID,scenarioID);
  177. [[ATRewardedVideoAutoAdManager sharedInstance] entryAdScenarioWithPlacementID:placementID scenarioID:scenarioID];
  178. }
  179. -(void) showAutoRewardedVideoWithPlacementID:(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(@"ATRewardedVideoWrapper::showAutoRewardedVideoWithPlacementID = %@ extraJsonString = %@", placementID,extraJsonString);
  182. NSLog(@"ATRewardedVideoWrapper::extraDict = %@", extraDict);
  183. [[ATRewardedVideoAutoAdManager sharedInstance] showAutoLoadRewardedVideoWithPlacementID:placementID scene:extraDict[kATUnityUtilitiesAdShowingExtraScenarioKey] inViewController:[UIApplication sharedApplication].delegate.window.rootViewController delegate:self];
  184. }
  185. #pragma mark - delegate
  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:@"OnRewardedVideoLoaded" 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:@"OnRewardedVideoLoadFailure" placementID:placementID error:error extra:nil];
  212. }
  213. -(void) rewardedVideoDidStartPlayingForPlacementID:(NSString*)placementID extra:(NSDictionary *)extra {
  214. [self invokeCallback:@"OnRewardedVideoPlayStart" placementID:placementID error:nil extra:extra];
  215. [[NSNotificationCenter defaultCenter] postNotificationName:kATUnityUtilitiesRewardedVideoImpressionNotification object:nil];
  216. }
  217. -(void) rewardedVideoDidEndPlayingForPlacementID:(NSString*)placementID extra:(NSDictionary *)extra {
  218. [self invokeCallback:@"OnRewardedVideoPlayEnd" placementID:placementID error:nil extra:extra];
  219. }
  220. -(void) rewardedVideoDidFailToPlayForPlacementID:(NSString*)placementID error:(NSError*)error extra:(NSDictionary *)extra {
  221. 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"}];
  222. [self invokeCallback:@"OnRewardedVideoPlayFailure" placementID:placementID error:error extra:extra];
  223. }
  224. -(void) rewardedVideoDidCloseForPlacementID:(NSString*)placementID rewarded:(BOOL)rewarded extra:(NSDictionary *)extra {
  225. [self invokeCallback:@"OnRewardedVideoClose" placementID:placementID error:nil extra:@{@"rewarded":@(rewarded), @"extra":extra != nil ? extra : @{}}];
  226. [[NSNotificationCenter defaultCenter] postNotificationName:kATUnityUtilitiesRewardedVideoCloseNotification object:nil];
  227. }
  228. -(void) rewardedVideoDidClickForPlacementID:(NSString*)placementID extra:(NSDictionary *)extra {
  229. [self invokeCallback:@"OnRewardedVideoClick" placementID:placementID error:nil extra:extra];
  230. }
  231. -(void) rewardedVideoDidRewardSuccessForPlacemenID:(NSString*)placementID extra:(NSDictionary*)extra {
  232. [self invokeCallback:@"OnRewardedVideoReward" placementID:placementID error:nil extra:extra];
  233. }
  234. //again
  235. // rewarded video again
  236. -(void) rewardedVideoAgainDidStartPlayingForPlacementID:(NSString*)placementID extra:(NSDictionary*)extra {
  237. [self invokeCallback:@"OnRewardedVideoAdAgainPlayStart" placementID:placementID error:nil extra:extra];
  238. }
  239. -(void) rewardedVideoAgainDidEndPlayingForPlacementID:(NSString*)placementID extra:(NSDictionary*)extra {
  240. [self invokeCallback:@"OnRewardedVideoAdAgainPlayEnd" placementID:placementID error:nil extra:extra];
  241. }
  242. -(void) rewardedVideoAgainDidFailToPlayForPlacementID:(NSString*)placementID error:(NSError*)error extra:(NSDictionary*)extra {
  243. 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"}];
  244. [self invokeCallback:@"OnRewardedVideoAdAgainPlayFailed" placementID:placementID error:error extra:extra];
  245. }
  246. -(void) rewardedVideoAgainDidClickForPlacementID:(NSString*)placementID extra:(NSDictionary*)extra {
  247. [self invokeCallback:@"OnRewardedVideoAdAgainPlayClicked" placementID:placementID error:nil extra:extra];
  248. }
  249. -(void) rewardedVideoAgainDidRewardSuccessForPlacemenID:(NSString*)placementID extra:(NSDictionary*)extra {
  250. [self invokeCallback:@"OnAgainReward" placementID:placementID error:nil extra:extra];
  251. }
  252. @end