如何使用GADBannerViewDelegate对adViewDidReceiveAd执行操作

我有一个横幅视图,并希望有一个自定义closuresbutton。 我的问题是,该广告加载和显示之前,该button显示。

class RootVC: UIViewController, GADBannerViewDelegate { var googleAdBanner: GADBannerView! var googleBannerCloseBtn: UIButton! override func viewDidLoad() { super.viewDidLoad() googleAdBanner = GADBannerView(frame:CGRectMake(0,0,100,100)) googleAdBanner.center = CGPointMake(self.view.bounds.size.width / 2, self.view.bounds.size.height / 2) googleAdBanner.adUnitID = "xx" googleAdBanner.rootViewController = self googleAdBanner.loadRequest(GADRequest()) adViewWillPresentScreen(googleAdBanner) googleAdBanner.delegate = self self.view.addSubview(googleAdBanner) } func adViewWillPresentScreen(bannerView: GADBannerView!) { googleBannerCloseBtn = UIButton(frame: CGRectMake( 5 , 5, 25, 25)) googleBannerCloseBtn.backgroundColor = UIColor.clearColor() googleBannerCloseBtn.setImage(UIImage(named: "closeBtn"), forState: .Normal) googleBannerCloseBtn.setTitle("Click Me", forState: UIControlState.Normal) googleBannerCloseBtn.addTarget(self, action: #selector(RootVC.buttonAction(_:)), forControlEvents: UIControlEvents.TouchUpInside) googleBannerCloseBtn.tag = 1 googleAdBanner.addSubview(googleBannerCloseBtn) } 

只有当GADBannerView加载广告并呈现时,我该如何呈现button?

adViewDidReceiveAd相同的行为。 该button是可见的,即使GADBannerView是“不可见的”,因为当前没有加载广告。

根据要求屏幕。 正如您所看到的subView ,在显示广告本身之前,会显示GADBannerView的子subViewbutton。

在这里输入图像说明 在这里输入图像说明

在这个例子中,我已经注解了很多逻辑。 我没有提到的唯一情况是您需要创build两个广告单元ID。 一个用于您的GADBannerView ,另一个用于AdMob.com上的GADInterstitial

 import UIKit import GoogleMobileAds // Import AdMob class ViewController: UIViewController, GADBannerViewDelegate, GADInterstitialDelegate { // Include our delegates // Create our ads var banner = GADBannerView(adSize: kGADAdSizeBanner) // kGADAdSizeBanner is a default banner size var interstitial = GADInterstitial(adUnitID: "YourInterstitialAdUnitID") override func viewDidLoad() { super.viewDidLoad() // View has loaded so lets setup our ads initially setupAds() } // MARK: - Setup Ads func setupAds() { // Setup our banner ad banner.adUnitID = "YourBannerAdUnitID" banner.rootViewController = self banner.delegate = self // Hide our banner initially until it loads an ad // Not doing this is why your close button was visible // GADBannerView's with no ad are essentially "clear", not hidden banner.alpha = 0.0 banner.loadRequest(GADRequest()) // Position banner on bottom of view banner.frame = CGRect(x: 0.0, y: view.frame.height - banner.frame.height, width: view.frame.width, height: banner.frame.height) // Create your button here and add it as a subview to banner // banner.addSubview(closeButton) view.addSubview(banner) // Setup our interstitial ad initially interstitial.delegate = self interstitial.loadRequest(GADRequest()) } // MARK: - Load Interstitial Ad func loadFullScreenAd() { // GADInterstitial's are single use. You have to create a new GADInterstitial for each presentation // So, if you'd like to show more than one GADInterstitial in your apps session we need this // This func will be used to create a new GADInterstitial after one has been displayed and dismissed interstitial = GADInterstitial(adUnitID: "YourInterstitialAdUnitID") interstitial.delegate = self interstitial.loadRequest(GADRequest()) } // MARK: - Show Interstitial Ad func showFullScreenAd() { // Call this function when you want to present the interstitial ad // ie. game over, transition to another vc, etc... // Make sure you give atleast a few seconds for this ad to load before atempting to present it // For example, don't try to present this ad in viewDidAppear // Check if the interstitial ad is loaded before trying to present it if interstitial.isReady { interstitial.presentFromRootViewController(self) } } // MARK: - Close Button Action func closeButtonAction() { // This is where we will handle your close button that you've added to your GADBannerView // You can handle this two ways and it depends on what you'd like to do // If you don't want to show the banner ad again during the entire app session you would hide the banner // This way even if we change the alpha values in our delegate methods the banner will remain hidden banner.hidden = true // Another way you can handle the close button would be to hide the banner until another banner ad is loaded // I believe the refresh rate for banner ads is 45-60 seconds. You can customize the refresh time on AdMob.com // So, this way if the user tapped the close button the banner would fade out // But, when another banner ad is loaded the banner would fade back in because of the code in our adViewDidReceiveAd delegate method UIView.animateWithDuration(0.2) { self.banner.alpha = 0.0 } /////* Choose which way you'd like to handle the close button and remove the code for the other *///// } // MARK: - GADBannerView Delegate Methods func adViewDidReceiveAd(bannerView: GADBannerView!) { print("adViewDidReceiveAd") // We received an ad so lets show it // You could even fade in the banner if you'd like UIView.animateWithDuration(0.2) { self.banner.alpha = 1.0 } } func adView(bannerView: GADBannerView!, didFailToReceiveAdWithError error: GADRequestError!) { print("banner didFailToReceiveAdWithError: \(error)") // We received an error when trying to load our GADBannerView // Lets hide it because we don't have an ad // You could also fade this out if you'd like UIView.animateWithDuration(0.2) { self.banner.alpha = 0.0 } } // MARK: - GADInterstitial Delegate Methods func interstitialDidReceiveAd(ad: GADInterstitial!) { print("interstitialDidReceiveAd") } func interstitialWillPresentScreen(ad: GADInterstitial!) { print("interstitialWillPresentScreen") // If you needed to pause anything in your app this would be the place to do it // ie. sounds, game state, etc... } func interstitialDidDismissScreen(ad: GADInterstitial!) { print("interstitialDidDismissScreen") // The GADInterstitial has been shown and dismissed by the user // Lets load another one for the next time we want to show a GADInterstitial loadFullScreenAd() // If you paused anything in the interstitialWillPresentScreen delegate method this is where you would resume it } func interstitial(ad: GADInterstitial!, didFailToReceiveAdWithError error: GADRequestError!) { print("interstitial didFailToReceiveAdWithError: \(error)") } } 

另外,如果您计划在应用程序中经常展示GADInterstitial ,我build议在AdMob.com上停用针对该广告单元ID的video广告。 AdMob插页式video广告会停用closuresbutton5秒,类似于YouTube上的跳过button,并会瞬间加重用户的兴趣。 如果您很less展示GADInterstitial那么我会启用video广告。

在这里输入图像说明