Search code examples
iosobjective-ctouchiadbanner

Manage iAd banner's touch while using iAdAdditions category


iOS 7 bring the iAdAdditions category to UIViewController. With it managing a banner is a matter of one line of code:

self.canDisplayBannerAds = YES;

But I wonder how to detect user touching the iAd banner. My need is to pause game behaviors (music, animations, timers...) while iAd is displayed full screen.

I have tried the following code:

- (void) viewWillDisappear:(BOOL)animated {
    if ([self isPresentingFullScreenAd]) {
        // view will disappear because of user action on iAd banner
    }
    else {
        // view will disappear for any other reasons
    }
}

- (void) viewWillAppear:(BOOL)animated {
    if ([self isPresentingFullScreenAd]) {
        // view will appear because full screen iAd — caused by previous user action on iAd banner — is dismissed
    }
    else {
        // view will appear for other reasons
    }
}

I have done some testings showing everything is OK. But I wonder if it's the correct way to implement it!

UPDATE

This is the solution I use in the production version of the application and everything is fine: no problems has showned.


Solution

  • You can use these specific delegates in your view controller, here's code ripped straight from my game where I toggle the audio/music off when a banner is clicked.

    - (BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner
                   willLeaveApplication:(BOOL)willLeave
    {
        [[CPAudioManager sharedInstance] toggleOnOffDependingOnSettings];
    
        return YES;
    }
    
    -(void)bannerViewActionDidFinish:(ADBannerView *)banner
    {
        [[CPAudioManager sharedInstance] toggleOnOffDependingOnSettings];
    }
    

    For full screen interstitials the code is roughly the same, but you don't get such nice delegates.

    You know when you are showing a full screen ad when you call requestInterstitialAdPresentation and it returns YES, e.g.

    if( [self requestInterstitialAdPresentation]==YES ) {...}
    

    You should pause your views, toggle your music off, and kill your banner view (probably).

    Then, you know when the user has closed the interstitial in ViewDidAppear

    -(void)viewDidAppear:(BOOL)animated
    {
        [super viewDidAppear:animated];
    
        if( self.isPresentingFullScreenAd )
        {
            // we are about to stop presenting full screen ads
            // unpause view
            // enable banner ads
            // turn music back on if it was playing before
        }
        else
        {
            // we are presenting the normal view or the full screen ad
        }
    }