如何在多个视图控制器(Swift、Xcode)中投放 Admob 广告?



我是制作应用程序的新手。我目前正在开发一个应用程序,我在第一个视图控制器上放置了一个横幅广告,它可以工作。我找不到将广告添加到其余视图控制器的方法。如果有人能告诉我那会有多好!

查看此代码,如果您需要,我也可以发布插页式支持:

import Foundation
import UIKit
import GoogleMobileAds
protocol AdSimpleBannerPowered: UIViewController {
var placeholder: UIView? { get }
func addBannerToAdsPlaceholder(_ banner: UIView)
}
extension AdSimpleBannerPowered {
func addBannerToAdsPlaceholder(_ banner: UIView) {
placeholder?.addSubview(banner)
}
}
private struct AdsConstants {
static let admobAppID = "YOUR_APP_ID"
static let adBottomBannerUnitID = "YOUR_BANNER_ID"
}
final class AdsManager : NSObject {

var loadedSimpleBannerAd = false

private var bannerView: GADBannerView?
var rootViewController: UIViewController? {
didSet {
setupSimpleBannerAdsIfPossible()
}
}
public override init() {
super.init()

GADMobileAds.sharedInstance().start()

configureSimpleBanner()
}

private func configureSimpleBanner() {
bannerView = GADBannerView(adSize: kGADAdSizeSmartBannerPortrait)
bannerView?.delegate = self
bannerView?.adUnitID = AdsConstants.adBottomBannerUnitID
}

private func setupSimpleBannerAdsIfPossible() {
assert(self.bannerView != nil, "WTF: simple banner has not been configured (call Ads.configure() before any usage)!")
if let root = rootViewController as? AdSimpleBannerPowered {
if let banner = self.bannerView {
banner.rootViewController = root
if !loadedSimpleBannerAd {
banner.load(GADRequest())
} else {
root.addBannerToAdsPlaceholder(banner)
}
}
}
}

}
// Simple Bottom Admob Banner delegate methods
extension AdsManager: GADBannerViewDelegate {

func adViewDidReceiveAd(_ bannerView: GADBannerView) {
print("adViewDidReceiveAd")
loadedSimpleBannerAd = true
if let root = rootViewController as? AdSimpleBannerPowered {
root.addBannerToAdsPlaceholder(bannerView)
}
}

func adView(_ bannerView: GADBannerView,
didFailToReceiveAdWithError error: GADRequestError) {
print("adView:didFailToReceiveAdWithError: (error.localizedDescription)")
}

}

我们的想法是在整个应用中共享一个GADBannerView对象 - 这样您就不会在每次UIViewController的每个横幅实例化时向 Admob 发送垃圾邮件

用法

在您希望横幅可见的每个UIViewController中:

  1. 符合 AdSimpleBannerPowered 协议
  2. 在情节提要或通过代码添加占位符视图
  3. viewWillAppear()方法中添加Ads.rootViewController = self- 这将实例化横幅并将其添加到占位符。
class MyViewController: UIViewController, AdSimpleBannerPowered {

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)

Ads.rootViewController = self
}
}

最新更新