BannerViewDelegate对adViewDidRece

BannerViewDelegate对adViewDidRece

本文介绍了如何使用GADBannerViewDelegate对adViewDidReceiveAd执行操作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个横幅视图,想要一个自定义关闭按钮。我的问题是在加载和显示广告之前显示按钮。

I have a banner view and want to have a custom close button. My problem is that the button is displayed before the ad is loaded and displayed.

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 已加载广告并显示?

How do I present the button only when the GADBannerView has loaded an ad and is presented?

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

Same behavior with adViewDidReceiveAd. The button is visible, even if the GADBannerView is "invisible" because there is no ad loaded currently.

屏幕按照要求。如您所见,在显示广告之前,会显示 GADBannerView subView 按钮。

Screens as requested. As you see, the button, that is a subView of the GADBannerView is displayed before the ad itself is displayed.


推荐答案

我在这个例子中已经注释掉了很多逻辑。我没有提到的唯一一件事就是你需要创建两个广告单元ID。一个用于 GADBannerView ,另一个用于AdMob.com上的 GADInterstitial

I've commented out alot of the logic in this example. The only thing that I didn't mention was that you will need to create two Ad Unit ID's. One for your GADBannerView and one for your GADInterstitial on AdMob.com.

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 我建议在AdMob.com上停用该广告单元ID的视频广告。 AdMob插页式视频广告会停用关闭按钮5秒钟,有点像YouTube上的跳过按钮,并会立即加剧您的用户。如果您很少展示 GADInterstitial ,那么我会启用视频广告。

Also, if you plan on presenting the GADInterstitial often in your application I'd recommend disabling video ads on AdMob.com for that Ad Unit ID. AdMob interstitial video ads disable the close button for 5 seconds, kind of like the skip button on YouTube, and will aggravate your users instantaneously. If you're rarely showing the GADInterstitial then I'd leave the video ads enabled.

这篇关于如何使用GADBannerViewDelegate对adViewDidReceiveAd执行操作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-05 20:25