Как упоминалось в комментариях, использование обратного вызова interstitialDidReceiveAd для показа рекламы крайне не рекомендуется Google Admob. Вместо этого вы можете уведомить свое представление о том, что объявление загружено, а затем ваше представление должно принять решение, следует ли показывать межстраничное объявление или нет. Поэтому просто создайте вспомогательный класс с функцией load и show , как показано: -
import Foundation
import GoogleMobileAds
import UIKit
final class InterstitialAd : NSObject, GADInterstitialDelegate, ObservableObject {
var interstitial: GADInterstitial? = nil
@Published var isLoaded: Bool = false
func LoadInterstitial() {
interstitial = GADInterstitial(adUnitID: Constants.interstitialAdCode)
let req = GADRequest()
interstitial!.load(req)
interstitial!.delegate = self
}
func showAd() {
if let fullScreenAd = self.interstitial, fullScreenAd.isReady {
let root = UIApplication.shared.windows.first?.rootViewController
fullScreenAd.present(fromRootViewController: root!)
isLoaded = false
}
}
func interstitialDidReceiveAd(_ ad: GADInterstitial) {
isLoaded = true
}
}
Теперь просто используйте этот класс в своем представлении и каждый раз, когда вы вызываете метод загрузки создает новый запрос (требуется согласно do c). Теперь вы должны наблюдать логическое значение isLoaded в своем представлении и можете запускать объявление на экране (используя showAd) только тогда, когда оно предназначено, а не сразу после его загрузки, потому что мы должны учитывать, что пользователь может быть в середине чего-то ...