2016-09-10 1 views
1

У меня есть вид баннера и вы хотите создать пользовательскую кнопку закрытия. Моя проблема заключается в том, что кнопка отображается до того, как объявление будет загружено и отображено.Как использовать GADBannerViewDelegate для выполнения действий на adViewDidReceiveAd

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 загрузил объявление и представлено?

То же поведение с adViewDidReceiveAd. Кнопка видна, даже если «GADBannerView» является «невидимым», поскольку в настоящее время нет загруженного объявления.

Экраны по требованию. Как вы видите, кнопка, то есть subView из GADBannerView, отображается перед отображением объявления.

enter image description here enter image description here

+0

Не могли бы вы добавить скриншот к вашему вопросу о том, что кнопка закрытия выглядит при добавлении к вашему 'GADBannerView'. Нужно лучше понять, что вы описываете. –

+0

@ Добавлены экраны DanielStorm –

+0

Я уезжаю от компьютера, но посмотрю на это позже. Еще один вопрос. Вам нужно создать полноэкранное межстраничное объявление или рекламное объявление в нижней части представления? Использование баннера, например, как вы, немного неортодоксально. Межстраничный «GADIntersitial» - это полноэкранное объявление, обычно платит больше и поставляется с собственной кнопкой закрытия. –

ответ

1

Я закомментирована много логики в этом примере. Единственное, о чем я не упоминал, это то, что вам нужно будет создать два идентификатора рекламного блока. Один для вашего GADBannerView и один для вашего GADInterstitial на 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, я оставляю видеообъявления включенными.

enter image description here

+0

Большое вам спасибо за ваши усилия. один последующий вопрос, я получаю: 'NSLocalizedFailureReason = Ошибка запроса: нет объявления для отображения' –

+0

Я получаю его на межстраничном пространстве, мой идентификатор элемента приложения для межстраничного кода точно верен. Я создал один без видео, как вы рекомендовали –

+0

в соответствии с этим http://stackoverflow.com/questions/25642492/dfp-issue-no-ad-to-show, возможно, это потому, что ширина/высота равна 0. Возможная проблема? –

Смежные вопросы