It seems there are 2 options for displaying interstitial ads using iAds on iPhone. The documentation on interstitials is out of date, but according to the iAds Additions Reference all one needs to do to set up is:
[UIViewController prepareInterstitialAds];
[self setInterstitialPresentationPolicy:ADInterstitialPresentationPolicyManual];
followed by:
[self requestInterstitialAdPresentation]
(which returns a bool if successful) whenever you'd like to display an ad.
The other options is to manually create an interstitial ad object:
ADInterstitialAd *interstitial;
Then:
interstitial = [[ADInterstitialAd alloc] init];
interstitial.delegate = self;
And when you want to show an ad:
if (interstitial.isLoaded) {
[interstitial presentFromViewController:self];
}
However PresentViewController: is deprecated, and using presentInView:self.view means the ad doesn't have a close button. The compiler also suggests requestInterstitalAdPresentation.
So one would assume option 1 is the preferred approach. I'm a little confused by the answer to this question as it uses a combination of the 2, but it seems requestInterstitalAdPresentation doesn't trigger the delegate methods of the ADInterstitialAd instance and using both is pointless.
So my question is - is the first approach really sufficient? I've found it only displays one ad, and then fails to display any more. I read in another question that the ADInterstitialAd instance needs to be assigned to nil in order to request a new ad, but then requestInterstitialAdPresentation ignores this instance anyway. Is requestInterstitialAdPresentation just simulating low fill rates? Or am I missing a step?
It's only showing 1 ad because there is a delay implemented by apple. You must wait 2 or 3 minutes before they will supply you with your next ad.
As for implementation, the new method calls viewDidAppear in your view controller when the user returns from the ad.
You can see my implementation here... https://stackoverflow.com/a/27536872/3489816
So to answer your question - Yes, the first approach is sufficient. It will display more ads but you must wait for a bit. You shouldn't use AdInterstitialAd anymore so don't worry about setting it to nil. It's not simulating low fill rates. I don't think you're missing anything... we were just never told we had to wait :)
Side note... I believe setting the interstitialPresentationPolicy also requests your first ad for you (as prepareInterstitialAds does).