Как добавить AdMob GADBannerView в каждое представление

Я реализую баннер AdMob в своем приложении для одного UIViewController, и он работает. Но у меня так много просмотров, и я хочу показывать баннер на каждом экране. Как мне реализовать баннер, который будет появляться на каждом экране? Я пытаюсь это сделать в своем AppDelegate.swift:

dispatch_async(dispatch_get_main_queue(), {
    print("Google Mobile Ads SDK version: \(GADRequest.sdkVersion())")
    // bannerView.frame = CGRectMake(0, 0, 320, 50)
    // self.bannerView.adSize = kGADAdSizeBanner
    self.bannerView.adUnitID = "ca-app-pub-MY_ID"
    bannerView.rootViewController = self.window
    self.bannerView.loadRequest(GADRequest())
    self.window?.addSubview(self.bannerView)
})

но он не работает


person Museer Ahamad Ansari    schedule 19.09.2016    source источник
comment
это невозможно, вы должны определить BannerView в каждом UIViewController   -  person Özgür Ersil    schedule 19.09.2016
comment
@ Özgür Ersil, можешь прислать мне ссылку или объяснить, почему? Спасибо   -  person Museer Ahamad Ansari    schedule 19.09.2016
comment
Посмотрите на одну из этих ссылок. Stackoverflow iAdBanner между представлениями или этот iAdExample   -  person MwcsMac    schedule 19.09.2016
comment
@ÖzgürErsil не обязательно. Вам просто нужно разместить баннер для каждого контроллера представления. Проверьте мой ответ: stackoverflow.com/a/39575849/2108547   -  person Daniel Storm    schedule 19.09.2016


Ответы (2)


Создайте общий баннер. Вы init добавляете его в AppDelegate, а затем добавляете к UIViewController, на которых хотите разместить баннер:

class AppDelegate: UIResponder, UIApplicationDelegate, GADBannerViewDelegate {

var window: UIWindow?
var adBannerView = GADBannerView()

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    adBannerView.adUnitID = "YourAdUnitID"
    adBannerView.delegate = self
    adBannerView.load(GADRequest())
    adBannerView.isHidden = true

    return true
}

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

В каждом UIViewController вы хотели бы иметь баннер:

let appDelegate = UIApplication.shared.delegate as! AppDelegate

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

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)
}
person Daniel Storm    schedule 19.09.2016
comment
но здесь вы просто делаете 1 запрос баннера для каждого окна - person Özgür Ersil; 19.09.2016
comment
@ÖzgürErsil После запуска приложения выполняется только один запрос. Баннер будет обновляться с тем интервалом, который они установили на AdMob.com. Нет необходимости отправлять дополнительные запросы. - person Daniel Storm; 19.09.2016
comment
@DanielStorm я получаю это предупреждение в консоли. Вы должны установить свойство rootViewController для ‹GADBannerView: 0x14e6e52f0; кадр = (0 0; 320 50); clipsToBounds = ДА; layer = ‹CALayer: 0x14e51b830›› перед загрузкой запроса. - person Museer Ahamad Ansari; 20.09.2016
comment
@DanielStorm - я получаю ту же ошибку, что и Museer. rootViewController должен быть установлен до того, как будет сделан запрос объявления. Какое решение? - person Joe; 08.06.2017

СВИФТ 3

func showAds(viewAds:GADBannerView,viewController:UIViewController){
    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    appDelegate.adBannerView.adSize = kGADAdSizeBanner
    appDelegate.adBannerView.rootViewController = viewController
    appDelegate.adBannerView.frame = CGRect(x: 0,
                                            y: 0,
                                            width: viewAds.frame.width,
                                            height: viewAds.frame.height)
    viewAds.addSubview(appDelegate.adBannerView)
}


showAds(viewAds: adseHere, viewController: self)
person Ahmed Safadi    schedule 19.06.2017
comment
Возможно ли отображать разные объявления для каждого повторяющегося элемента? - person Priya; 22.06.2020
comment
что вы подразумеваете под разными объявлениями? - person Ahmed Safadi; 23.06.2020
comment
Я получаю одинаковые объявления в каждом повторяющемся элементе. Я хотел бы показывать разные объявления для каждого повторяющегося элемента. stackoverflow.com/questions/62485567/. Спасибо, если вы разместите свой ответ здесь. заранее спасибо - person Priya; 25.06.2020