Admob интерстициальный не работает

Я имею дело с рекламными вставками Admob и, в частности, пытаюсь отобразить рекламную вставку, когда конкретный ViewController моего приложения загружается. Я использовал код, предоставленный официальным руководством Admob Interstitial, но он не работает: https://developers.google.com/admob/ios/interstitial?hl=it. Я также следил за этим видео здесь: https://youtu.be/ahmQQ3OeY0Y?t=787 (минута 13.04 остановить видео). Если вы посмотрите на код такой же, как в руководстве. Моя цель - показать объявление, когда RequestViewController поэтому я пытаюсь представить объявление в viewDidAppear функция. В любом случае это не работает, консоль отображает эту ошибку:

Чтобы получить тестовые объявления на этом устройстве, позвоните: request.testDevices = @ [kGADSimulatorID]

AppDelegate.swift

import UIKit
import UserNotifications
import GoogleMobileAds

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate,GADInterstitialDelegate {

var window: UIWindow?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

        GADMobileAds.configure(withApplicationID: "ca-app-pub-*******")
    }
}

Это ViewController, где я представляю объявление:

RequestviewController.swift

class RequestViewController: UIViewController {

var myInterstitial : GADInterstitial?

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

override func viewDidAppear(_ animated: Bool) {

    //display ad

    myInterstitial = createAndLoadInterstitial()

    if (myInterstitial?.isReady)!{
        print("\n\n\n\n\nReady")
        myInterstitial?.present(fromRootViewController: self)
    }else { print("\n\n\n\nAd wasn't ready") }
}

func createAndLoadInterstitial()->GADInterstitial {
    let interstitial = GADInterstitial(adUnitID: "ca-app-pub-3940256099942544/4411468910")  //test Ad unit id
    interstitial.delegate = self
    interstitial.load(GADRequest())
    return interstitial
}
func interstitialDidReceiveAd(ad: GADInterstitial!) {
    print("interstitialDidReceiveAd")
}

func interstitial(ad: GADInterstitial!, didFailToReceiveAdWithError error: GADRequestError!) {
    print(error.localizedDescription)
}

func interstitialDidDismissScreen(ad: GADInterstitial!) {
    print("\n\n\n\n\n\ninterstitialDidDismissScreen")
    myInterstitial = createAndLoadInterstitial()
}

2 ответа

Вам нужно написать это как,

appDelegate.createAndLoadInterstitial()

на месте,

appDelegate.myInterstitial?.present(fromRootViewController: self)

Похоже, корень проблемы в этом разделе RequestViewController:

myInterstitial = createAndLoadInterstitial()

if (myInterstitial?.isReady)!{
    print("\n\n\n\n\nReady")
    myInterstitial?.present(fromRootViewController: self)
}else { print("\n\n\n\nAd wasn't ready") }

Промежуточные загрузки загружаются асинхронно, что означает вызов load() вернется до того, как реклама будет загружена и готова к показу. Если ваше приложение звонит load() в createAndLoadInterstitial а затем проверка isReady сразу после этого у объявления нет времени на фактическую загрузку, и isReady всегда будет ложным

Хороший способ справиться с этим - создать промежуточный элемент в вашем первом контроллере представления и затем показать его перед переходом к RequestViewController, Это дало бы время загрузки объявления и все равно отображало бы его во время того же перехода.

Между прочим, время перехода между ViewControllers - это отличное место в потоке вашего приложения, чтобы использовать вставку, так что отлично сработано.

Также линия:

Чтобы получить тестовые объявления на этом устройстве, позвоните: request.testDevices = @[ kGADSimulatorID ]

не ошибка SDK для Android и iOS всегда печатают это в журнал, чтобы издатели знали, как получить тестовую рекламу для определенного устройства или эмулятора. Если вы работаете на аппаратном устройстве вместо симулятора iOS, вы увидите уникальный идентификатор устройства в этой строке, который затем вы можете использовать в своем коде для получения тестовой рекламы.

Другие вопросы по тегам