0

我正在实施GADRewardedInterstitialAd游戏。

https://developers.google.com/admob/ios/api/reference/Classes/GADRewardedInterstitialAd

presentFromRootViewController:userDidEarnRewardHandler用来对完成广告的用户做出反应。现在我还想知道如何对用户取消广告做出反应。

如果我在调用 presentFromRootViewController 后直接继续,回调处理程序将不会被调用,因为系统异步工作,正如预期的那样。因此任何游戏动画(例如屏幕淡入淡出、对话框关闭)都必须停止。

如果我只依赖处理程序,则在取消广告时我不会收到回调。

我的解决方案是构建一个等待 30+1 秒的计时器,让处理程序有机会被调用(希望在下一个主线程调度周期),然后对它尚未被调用做出反应(假设用户取消)。我真的很讨厌那个计划。

  1. 这不是确定性的。
  2. 它不使用回调/委托/处理程序(这对于这种事情来说非常棒)
  3. 我必须编写计时器代码并在某处保留一个布尔标志......它很乱。
  4. 当用户关闭广告时,它会给用户体验(30+1 秒)添加任意延迟!!

我对此的想法是错误的,还是这只是谷歌的做法,我将不得不忍受它?

编辑:请注意,我说的是新的GADRewardedInterstitialAd API,而不是GADRewardedAd

4

1 回答 1

1

我已经想通了;它通过设置GADFullScreenContentDelegate fullScreenContentDelegate和实施来工作adDidDismissFullScreenContent

在那里,您可以检查此特定实例是否GADRewardedInterstitialAd尚未获得奖励(由userDidEarnRewardHandler...通知)

adDidDismissFullScreenContent这一切都取决于在之后被调用的断言userDidEarnRewardHandler,否则我已经假设没有奖励。让我们希望情况总是如此。

https://developers.google.com/ad-manager/mobile-ads-sdk/ios/api/reference/Protocols/GADFullScreenContentDelegate

于 2021-01-08T15:00:30.713 回答