UnityMonetizationUnityWrapper.m 3.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #import <UnityAds/UnityMonetization.h>
  2. #import "UnityAdsUtilities.h"
  3. #import <UnityAds/UnityServices.h>
  4. #import "UnityAdsPurchasingWrapper.h"
  5. /**
  6. * Callback invoked into C# when a decision state has changed.
  7. */
  8. typedef void (*UnityMonetizationPlacementContentStateChangedCallback)(const char *placementId, const void *pDecision, int newState, int oldState);
  9. static UnityMonetizationPlacementContentStateChangedCallback unityMonetizationPlacementContentStateChangedCallback = NULL;
  10. /**
  11. * Callback invoked into C# when a decision is ready.
  12. */
  13. typedef void (*UnityMonetizationPlacementContentReadyCallback)(const char *placementId, const void *pDecision);
  14. static UnityMonetizationPlacementContentReadyCallback unityMonetizationPlacementContentReadyCallback = NULL;
  15. /**
  16. * Callback invoked into C# when an error occurred
  17. */
  18. typedef void (*UnityMonetizationErrorCallback)(long err, const char* message);
  19. static UnityMonetizationErrorCallback unityMonetizationErrorCallback = NULL;
  20. struct UnityMonetizationMonetizationCallbacks {
  21. UnityMonetizationPlacementContentReadyCallback unityMonetizationDecisionReadyCallback;
  22. UnityMonetizationPlacementContentStateChangedCallback unityMonetizationDecisionStateChangedCallback;
  23. UnityMonetizationErrorCallback unityMonetizationErrorCallback;
  24. };
  25. static id<UnityMonetizationDelegate> monetizationDelegate = nil;
  26. @interface UnityMonetizationUnityDecisionDelegate : NSObject<UnityMonetizationDelegate>
  27. @end
  28. @implementation UnityMonetizationUnityDecisionDelegate
  29. -(void)placementContentReady:(NSString *)placementId placementContent:(UMONPlacementContent *)decision {
  30. if (unityMonetizationPlacementContentReadyCallback != NULL) {
  31. const char* rawPlacementId = UnityAdsCopyString([placementId UTF8String]);
  32. // Note, we are bridging instead of retaining as we don't need to track the lifecycle of this
  33. // object in C#. When the decision is replaced, ready will be called and C# will be notified.
  34. unityMonetizationPlacementContentReadyCallback(rawPlacementId, CFBridgingRetain(decision));
  35. free((void*)rawPlacementId);
  36. }
  37. }
  38. -(void)placementContentStateDidChange:(NSString *)placementId placementContent:(UMONPlacementContent *)placementContent previousState:(UnityMonetizationPlacementContentState)previousState newState:(UnityMonetizationPlacementContentState)newState {
  39. if (unityMonetizationPlacementContentStateChangedCallback != NULL) {
  40. const char* rawPlacementId = UnityAdsCopyString([placementId UTF8String]);
  41. unityMonetizationPlacementContentStateChangedCallback(rawPlacementId, (__bridge void*)placementContent, previousState, newState);
  42. free((void*)rawPlacementId);
  43. }
  44. }
  45. -(void)unityServicesDidError:(UnityServicesError)error withMessage:(NSString *)message {
  46. if (unityMonetizationErrorCallback != NULL) {
  47. const char* rawError = UnityAdsCopyString([message UTF8String]);
  48. unityMonetizationErrorCallback(error, rawError);
  49. free((void*)rawError);
  50. }
  51. }
  52. @end
  53. void UnityMonetizationSetMonetizationCallbacks(struct UnityMonetizationMonetizationCallbacks *callbacks) {
  54. unityMonetizationPlacementContentStateChangedCallback = callbacks->unityMonetizationDecisionStateChangedCallback;
  55. unityMonetizationPlacementContentReadyCallback = callbacks->unityMonetizationDecisionReadyCallback;
  56. unityMonetizationErrorCallback = callbacks->unityMonetizationErrorCallback;
  57. if (monetizationDelegate == nil) {
  58. monetizationDelegate = [[UnityMonetizationUnityDecisionDelegate alloc] init];
  59. }
  60. }
  61. void UnityMonetizationInitialize(const char *gameId, bool isTestMode) {
  62. InitializeUnityAdsPurchasingWrapper();
  63. [UnityMonetization initialize:[NSString stringWithUTF8String:gameId] delegate:monetizationDelegate testMode:isTestMode];
  64. }
  65. bool UnityMonetizationIsReady(const char* placementId) {
  66. return [UnityMonetization isReady:[NSString stringWithUTF8String:placementId]];
  67. }
  68. bool UnityMonetizationIsSupported() {
  69. return [UnityServices isSupported];
  70. }