Admob Rewarded Ad загружается только один раз (для новой реализации - код миграции) и генерирует ошибку ("объект ..ad был использован.") - PullRequest
0 голосов
/ 19 июня 2020

Моя устаревшая реализация Admob rewardedAd работала нормально. Сегодня я обновился до новой реализации, и она не работает должным образом. Помимо сомнительного кода Admob Swift (возврат объекта без возврата в объявлении функции). В итоге:

  1. Я могу создать и загрузить начальное RewardedAd
  2. При нажатии кнопка, которая запускает rewardedAd - через уведомления - он генерирует следующие сообщения от Debugger ("Rewarded объявление представлено", сразу за которым следует "Rewarded ad not present" и сообщение об ошибке "Loading failed: Error Domain = com.google.admob Code = 18 «Ошибка презентации: не будет отображаться объявление, потому что объект объявления был использован». UserInfo = {NSLocalizedDescription = Ошибка презентации: не будет отображаться объявление, поскольку объект объявления был использован.}

С уважением на шаге 2 выше жизненный цикл никогда не проходит через «rewardedAd» или «rewardedAdDidDismiss» и запускает «« Не удалось показать вознагражденное объявление »без попытки представить новое объявление.

Не уверен, что может быть причиной ошибки источника быть и был бы признателен за любую помощь в этом. спасибо.

Моя реализация следующая (строго следует коду Google):

var rewardedAd: GADRewardedAd?

override func viewDidLoad() {
  ...
  createAndLoadRewardedAd()
  ...
{

/// creating the rewarded ad
func createAndLoadRewardedAd() {

        rewardedAd = GADRewardedAd(adUnitID: "ca-app-pub-3940256099942544/1712485313")
        rewardedAd?.load(GADRequest()) { error in
          if let error = error {
            print("Loading failed: \(error)")
          } else {
            print("Loading Succeeded")
          }
        }
    }

/// Lifecycle

/// Tells the delegate that the user earned a reward.
    func rewardedAd(_ rewardedAd: GADRewardedAd, userDidEarn reward: GADAdReward) {

        print("Reward received with currency: \(reward.type), amount \(reward.amount).")
    }
    /// Tells the delegate that the rewarded ad was presented.
    func rewardedAdDidPresent(_ rewardedAd: GADRewardedAd) {
      print("Rewarded ad presented.")
    }
    /// Tells the delegate that the rewarded ad was dismissed.
    /// Load another ad upon dismissing the previous
    func rewardedAdDidDismiss(_ rewardedAd: GADRewardedAd) {
      print("RewardAd did dismiss")
      createAndLoadRewardedAd()

    }
    /// Tells the delegate that the rewarded ad failed to present.
    func rewardedAd(_ rewardedAd: GADRewardedAd, didFailToPresentWithError error: Error) {
        print("Rewarded ad failed to present.")
        print("Loading failed: \(error)")

    }

    /// Used by Notification Observer to present rewardedAd
    @objc func startRewardVideoAd() {
        if rewardedAd?.isReady == true {
           rewardedAd?.present(fromRootViewController: self, delegate:self)
        } else {
            print("Reward based video not ready")
        }
    }









...