Задержка AdMob GADBannerView при представлении нового VC

Я использую AppDelegate для настройки представления баннера и его делегатов. Затем отображение баннера на двух VC: ViewController и SecondViewController. Баннеры отображаются правильно, но с двумя визуальными ошибками.

  1. При открытии приложения загрузка тестового баннера задерживается примерно на 2-3 секунды. Когда я использовал IB, баннеры появлялись мгновенно.

  2. При переходе из ViewController -> SecondViewController через segue (присутствует модально / в полноэкранном режиме / перекрестное разворачивание / без анимации) задержка составляет около 1-2 секунд до появления баннера.

Баннеры отлично загружаются, за исключением двух проблем с задержкой / задержкой, описанных выше. Как я могу решить это?

Раскадровка: Раскадровка AppDelegate

class AppDelegate: UIResponder, UIApplicationDelegate, GADBannerViewDelegate {

var window: UIWindow?
var adBannerView = GADBannerView()
let myBannerRequest = GADRequest()

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    myBannerRequest.testDevices = [kGADSimulatorID]
    adBannerView.delegate = self
    adBannerView.isHidden = true

    return true
}

func adViewDidReceiveAd(_ bannerView: GADBannerView!) {
    adBannerView.isHidden = false
}
func adView(_ bannerView: GADBannerView!, didFailToReceiveAdWithError error: GADRequestError!) {
    adBannerView.isHidden = true
}
}

ViewController

let appDelegate = UIApplication.shared.delegate as! AppDelegate

override func viewDidLoad() {
    super.viewDidLoad()
    requestAds()
}

internal func requestAds() {
    appDelegate.adBannerView = GADBannerView()
    appDelegate.adBannerView.adUnitID = "ca-app-pub-3940256099942544/2934735716"
    appDelegate.adBannerView.adSize = kGADAdSizeBanner
    appDelegate.adBannerView.rootViewController = self
    appDelegate.adBannerView.load(appDelegate.myBannerRequest)
    appDelegate.adBannerView.center = CGPoint(x: view.frame.midX, y: view.frame.height - appDelegate.adBannerView.frame.height / 2)
    view.addSubview(appDelegate.adBannerView)
}

SecondViewController

// Same as ViewController, with addition of IBAction for the button:
@IBAction func closeButtonPressed(_ sender: UIButton) {
    self.dismiss(animated: true, completion: nil)
}

1 ответ

Решение

Похоже, вы пытаетесь создать один GADBannerView использовать во всем приложении, что является хорошей идеей. Вы не делаете это, хотя, потому что вы создаете новый GADBannerView в вашем контроллере представления requestAds функция: appDelegate.adBannerView = GADBannerView(), Убери это.

Кроме того, сделайте запрос и установите идентификатор рекламного блока в делегате приложения и удалите его из своего requestAds функция. В вашем контроллере просмотра viewDidLoad Вы должны только позиционировать свой GADBannerView и добавив его в представление.

Я думаю, вы хотели бы, чтобы баннер также занимал всю ширину экрана, поэтому я изменил frame имущество. Если бы вы хотели функцию для этого, она бы в конечном итоге была похожа на:

func addBannerToView() {
    appDelegate.adBannerView.adSize = kGADAdSizeBanner
    appDelegate.adBannerView.rootViewController = self
    appDelegate.adBannerView.frame = CGRect(x: 0.0,
                          y: view.frame.height - appDelegate.adBannerView.frame.height,
                          width: view.frame.width,
                          height: appDelegate.adBannerView.frame.height)
    view.addSubview(appDelegate.adBannerView)
}
Другие вопросы по тегам