Межстраничные объявления Google AdMob через SwiftUI - PullRequest
1 голос
/ 02 августа 2020

Когда я нажимаю кнопку из другого представления, я получаю сообщение об ошибке при вызове interstitial.showAd ().

Ошибка компилятора:

2020-08-02 16: 46: 01.210751 +0300 BB [8039: 396673] Предоставленный контроллер представления уже представляет другой контроллер представления.

мой код:

import SwiftUI
import GoogleMobileAds
import UIKit

final class Interstitial:NSObject, ObservableObject, GADInterstitialDelegate{

@Published var interstitial:GADInterstitial!{
    didSet{
        objectWillChange.send()
    }
}

override init() {
    super.init()
    
    interstitial = createAndLoadInterstitial()
}

func createAndLoadInterstitial() -> GADInterstitial{
    self.interstitial = GADInterstitial(adUnitID: "ca-app-pub-3940256099942544/4411468910")
    self.interstitial.delegate = self
    self.interstitial.load(GADRequest())
    return interstitial
}

func showAd(){
    if self.interstitial.isReady{
       let root = UIApplication.shared.windows.first?.rootViewController
       self.interstitial.present(fromRootViewController: root!)
    }
   else{
       print("REKLAM HAZIR DEGIL")
   }
}

func interstitialDidDismissScreen(_ ad: GADInterstitial) {
    self.interstitial = createAndLoadInterstitial()
}
}

1 Ответ

0 голосов
/ 04 августа 2020

После некоторого покопания я понял, что это происходит, если контроллер представления, переданный в настоящий метод, уже имеет представленныйViewController. Таким образом, мы должны каким-то образом убедиться, что нет представленногоViewController перед вызовом этого

Edit: вы должны синхронизировать c с более ранней версией модуля рекламы Google, потому что текущая версия, похоже, имеет ошибку в коде который определяет, может ли быть показано объявление.

pod 'Google-Mobile-Ads-SDK', '7.53.1'

Дополнительная информация: self.presentViewController не очищается, даже когда он закрывается, что предотвращает показ межстраничной рекламы AdMob

...