UnityAdsUnityWrapper.m 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. #import "UnityAppController.h"
  2. #import "Unity/UnityInterface.h"
  3. #import "UnityAds/UnityAds.h"
  4. #import <UnityAds/UADSBanner.h>
  5. #import "UnityAds/UADSMetaData.h"
  6. #import "UnityAdsUtilities.h"
  7. #import "UnityAdsPurchasingWrapper.h"
  8. #import "UnityAdsInitializationListener.h"
  9. #import "UnityAdsLoadListener.h"
  10. #import "UnityAdsShowListener.h"
  11. #import <UnityAds/UnityAdsFinishState.h>
  12. typedef void (*UnityAdsReadyCallback)(const char * placementId);
  13. typedef void (*UnityAdsDidErrorCallback)(long rawError, const char * message);
  14. typedef void (*UnityAdsDidStartCallback)(const char * placementId);
  15. typedef void (*UnityAdsDidFinishCallback)(const char * placementId, long rawFinishState);
  16. static UnityAdsReadyCallback readyCallback = NULL;
  17. static UnityAdsDidErrorCallback errorCallback = NULL;
  18. static UnityAdsDidStartCallback startCallback = NULL;
  19. static UnityAdsDidFinishCallback finishCallback = NULL;
  20. @interface UnityAdsUnityWrapperDelegate : NSObject <UnityAdsDelegate>
  21. @end
  22. @implementation UnityAdsUnityWrapperDelegate
  23. - (void)unityAdsReady:(NSString *)placementId {
  24. if(readyCallback != NULL) {
  25. const char * rawPlacementId = UnityAdsCopyString([placementId UTF8String]);
  26. readyCallback(rawPlacementId);
  27. free((void *)rawPlacementId);
  28. }
  29. }
  30. - (void)unityAdsDidError:(UnityAdsError)error withMessage:(NSString *)message {
  31. if(errorCallback != NULL) {
  32. const char * rawMessage = UnityAdsCopyString([message UTF8String]);
  33. errorCallback(error, rawMessage);
  34. free((void *)rawMessage);
  35. }
  36. }
  37. - (void)unityAdsDidStart:(NSString *)placementId {
  38. UnityPause(1);
  39. if(startCallback != NULL) {
  40. const char * rawPlacementId = UnityAdsCopyString([placementId UTF8String]);
  41. startCallback(rawPlacementId);
  42. free((void *)rawPlacementId);
  43. }
  44. }
  45. - (void)unityAdsDidFinish:(NSString *)placementId withFinishState:(UnityAdsFinishState)state {
  46. UnityPause(0);
  47. if(finishCallback != NULL) {
  48. const char * rawPlacementId = UnityAdsCopyString([placementId UTF8String]);
  49. finishCallback(rawPlacementId, state);
  50. free((void *)rawPlacementId);
  51. }
  52. }
  53. @end
  54. void UnityAdsInitialize(const char * gameId, bool testMode, bool enablePerPlacementLoad, void *listenerPtr) {
  55. UnityAdsInitializationListener *listener = listenerPtr ? (__bridge UnityAdsInitializationListener *)listenerPtr : nil;
  56. [UnityAds initialize:[NSString stringWithUTF8String:gameId] testMode:testMode enablePerPlacementLoad:enablePerPlacementLoad initializationDelegate:listener];
  57. InitializeUnityAdsPurchasingWrapper();
  58. }
  59. void UnityAdsLoad(const char * placementId, void *listenerPtr) {
  60. UnityAdsLoadListener *listener = listenerPtr ? (__bridge UnityAdsLoadListener *)listenerPtr : nil;
  61. [UnityAds load:[NSString stringWithUTF8String:placementId] loadDelegate:listener];
  62. }
  63. void UnityAdsShow(const char * placementId, void *listenerPtr) {
  64. UnityAdsShowListener *listener = listenerPtr ? (__bridge UnityAdsShowListener *)listenerPtr : nil;
  65. [UnityAds show:UnityGetGLViewController() placementId:NSSTRING_OR_EMPTY(placementId) showDelegate:listener];
  66. }
  67. const char *UnityAdsGetDefaultPlacementID() {
  68. NSString *returnedPlacementID = @"";
  69. id placement = NSClassFromString(@"UADSPlacement");
  70. if (placement) {
  71. SEL getPlacementSelector = NSSelectorFromString(@"getDefaultPlacement");
  72. if ([placement respondsToSelector:getPlacementSelector]) {
  73. IMP getPlacementIMP = [placement methodForSelector:getPlacementSelector];
  74. id (*getPlacementFunc)(void) = (void *) getPlacementIMP;
  75. NSString *placementString = getPlacementFunc();
  76. if (placementString != NULL) {
  77. returnedPlacementID = placementString;
  78. }
  79. }
  80. }
  81. return CStringFromNSString(returnedPlacementID);
  82. }
  83. bool UnityAdsGetDebugMode() {
  84. return [UnityAds getDebugMode];
  85. }
  86. void UnityAdsSetDebugMode(bool debugMode) {
  87. [UnityAds setDebugMode:debugMode];
  88. }
  89. bool UnityAdsIsSupported() {
  90. return [UnityAds isSupported];
  91. }
  92. bool UnityAdsIsReady(const char * placementId) {
  93. if(placementId == NULL) {
  94. return [UnityAds isReady];
  95. } else {
  96. return [UnityAds isReady:[NSString stringWithUTF8String:placementId]];
  97. }
  98. }
  99. long UnityAdsGetPlacementState(const char * placementId) {
  100. if(placementId == NULL) {
  101. return [UnityAds getPlacementState];
  102. } else {
  103. return [UnityAds getPlacementState:[NSString stringWithUTF8String:placementId]];
  104. }
  105. }
  106. const char * UnityAdsGetVersion() {
  107. return UnityAdsCopyString([[UnityAds getVersion] UTF8String]);
  108. }
  109. bool UnityAdsIsInitialized() {
  110. return [UnityAds isInitialized];
  111. }
  112. void UnityAdsSetMetaData(const char * category, const char * data) {
  113. if(category != NULL && data != NULL) {
  114. UADSMetaData* metaData = [[UADSMetaData alloc] initWithCategory:[NSString stringWithUTF8String:category]];
  115. NSDictionary* json = [NSJSONSerialization JSONObjectWithData:[[NSString stringWithUTF8String:data] dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil];
  116. for(id key in json) {
  117. [metaData set:key value:[json objectForKey:key]];
  118. }
  119. [metaData commit];
  120. }
  121. }
  122. void UnityAdsSetReadyCallback(UnityAdsReadyCallback callback) {
  123. readyCallback = callback;
  124. }
  125. void UnityAdsSetDidErrorCallback(UnityAdsDidErrorCallback callback) {
  126. errorCallback = callback;
  127. }
  128. void UnityAdsSetDidStartCallback(UnityAdsDidStartCallback callback) {
  129. startCallback = callback;
  130. }
  131. void UnityAdsSetDidFinishCallback(UnityAdsDidFinishCallback callback) {
  132. finishCallback = callback;
  133. }