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.

有帮助吗?

解决方案

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
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top