GADURewardedAd.m 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. // Copyright 2018 Google Inc. All Rights Reserved.
  2. #import "GADURewardedAd.h"
  3. #import <CoreGraphics/CoreGraphics.h>
  4. #import <UIKit/UIKit.h>
  5. #import "GADUPluginUtil.h"
  6. #import "UnityAppController.h"
  7. #import "UnityInterface.h"
  8. @interface GADURewardedAd () <GADRewardedAdDelegate>
  9. @end
  10. @implementation GADURewardedAd
  11. + (UIViewController *)unityGLViewController {
  12. UnityAppController *applicationDelegate = [UIApplication sharedApplication].delegate;
  13. return applicationDelegate.rootViewController;
  14. }
  15. - (instancetype)initWithRewardedAdClientReference:(GADUTypeRewardedAdClientRef *)rewardedAdClient
  16. adUnitID:(NSString *)adUnitID {
  17. self = [super init];
  18. if (self) {
  19. _rewardedAdClient = rewardedAdClient;
  20. _rewardedAd = [[GADRewardedAd alloc] initWithAdUnitID:adUnitID];
  21. __weak GADURewardedAd *weakSelf = self;
  22. _rewardedAd.paidEventHandler = ^void(GADAdValue *_Nonnull adValue) {
  23. GADURewardedAd *strongSelf = weakSelf;
  24. if (strongSelf.paidEventCallback) {
  25. int64_t valueInMicros =
  26. [adValue.value decimalNumberByMultiplyingByPowerOf10:6].longLongValue;
  27. strongSelf.paidEventCallback(
  28. strongSelf.rewardedAdClient, (int)adValue.precision, valueInMicros,
  29. [adValue.currencyCode cStringUsingEncoding:NSUTF8StringEncoding]);
  30. }
  31. };
  32. }
  33. return self;
  34. }
  35. - (void)loadRequest:(GADRequest *)request {
  36. [self.rewardedAd loadRequest:request
  37. completionHandler:^(GADRequestError *_Nullable error) {
  38. if (error) {
  39. if (self.adFailedToLoadCallback) {
  40. NSString *errorMsg =
  41. [NSString stringWithFormat:@"Failed to receive ad with error: %@",
  42. [error localizedDescription]];
  43. self.adFailedToLoadCallback(
  44. self.rewardedAdClient, [errorMsg cStringUsingEncoding:NSUTF8StringEncoding]);
  45. }
  46. } else {
  47. if (self.adReceivedCallback) {
  48. self.adReceivedCallback(self.rewardedAdClient);
  49. }
  50. }
  51. }];
  52. }
  53. - (BOOL)isReady {
  54. return [self.rewardedAd isReady];
  55. }
  56. - (void)show {
  57. if ([self.rewardedAd isReady]) {
  58. UIViewController *unityController = [GADURewardedAd unityGLViewController];
  59. [self.rewardedAd presentFromRootViewController:unityController delegate:self];
  60. } else {
  61. NSLog(@"GoogleMobileAdsPlugin: Rewarded ad is not ready to be shown.");
  62. }
  63. }
  64. - (NSString *)mediationAdapterClassName {
  65. return self.rewardedAd.responseInfo.adNetworkClassName;
  66. }
  67. - (GADResponseInfo *)responseInfo {
  68. return self.rewardedAd.responseInfo;
  69. }
  70. - (void)rewardedAd:(nonnull GADRewardedAd *)rewardedAd
  71. userDidEarnReward:(nonnull GADAdReward *)reward {
  72. if (self.didEarnRewardCallback) {
  73. // Double value used for didEarnRewardCallback callback to maintain consistency with Android
  74. // implementation.
  75. self.didEarnRewardCallback(self.rewardedAdClient,
  76. [reward.type cStringUsingEncoding:NSUTF8StringEncoding],
  77. reward.amount.doubleValue);
  78. }
  79. }
  80. - (void)rewardedAd:(nonnull GADRewardedAd *)rewardedAd
  81. didFailToPresentWithError:(nonnull NSError *)error {
  82. if (self.adFailedToShowCallback) {
  83. NSString *errorMsg = [NSString
  84. stringWithFormat:@"Failed to present ad with error: %@", [error localizedDescription]];
  85. self.adFailedToShowCallback(self.rewardedAdClient,
  86. [errorMsg cStringUsingEncoding:NSUTF8StringEncoding]);
  87. }
  88. }
  89. - (void)rewardedAdDidPresent:(nonnull GADRewardedAd *)rewardedAd {
  90. if ([GADUPluginUtil pauseOnBackground]) {
  91. UnityPause(YES);
  92. }
  93. if (self.didOpenCallback) {
  94. self.didOpenCallback(self.rewardedAdClient);
  95. }
  96. }
  97. - (void)rewardedAdDidDismiss:(nonnull GADRewardedAd *)rewardedAd {
  98. if (UnityIsPaused()) {
  99. UnityPause(NO);
  100. }
  101. if (self.didCloseCallback) {
  102. self.didCloseCallback(self.rewardedAdClient);
  103. }
  104. }
  105. - (void)setServerSideVerificationOptions:(GADServerSideVerificationOptions *)options {
  106. self.rewardedAd.serverSideVerificationOptions = options;
  107. }
  108. @end