我是制作应用程序的新手。我目前正在开发一个应用程序,我在第一个视图控制器上放置了一个横幅广告,它可以工作。我找不到将广告添加到其余视图控制器的方法。如果有人能告诉我那会有多好!
查看此代码,如果您需要,我也可以发布插页式支持:
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
中:
- 符合 AdSimpleBannerPowered 协议
- 在情节提要或通过代码添加占位符视图
- 在
viewWillAppear()
方法中添加Ads.rootViewController = self
- 这将实例化横幅并将其添加到占位符。
class MyViewController: UIViewController, AdSimpleBannerPowered {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
Ads.rootViewController = self
}
}