我目前在我的 iPhone 应用程序中使用 Admob GADInterstitial,并希望利用 iOS 7 中 iAd UIViewController 添加的插页式广告。
我的猜测是 Apple 的填充率不会那么高,所以如果没有广告,我想回退到 Admob。不幸的是,iAd 的 API 看起来非常不透明,而且我看不到确定广告是否可用的方法。
有没有人成功地做到这一点,如果是这样,怎么做?
我目前在我的 iPhone 应用程序中使用 Admob GADInterstitial,并希望利用 iOS 7 中 iAd UIViewController 添加的插页式广告。
我的猜测是 Apple 的填充率不会那么高,所以如果没有广告,我想回退到 Admob。不幸的是,iAd 的 API 看起来非常不透明,而且我看不到确定广告是否可用的方法。
有没有人成功地做到这一点,如果是这样,怎么做?
我错过了调用requestInterstitialAdPresentation的手动演示方法返回一个 BOOL 来说明是否会显示广告。理论上,我可以用它来控制是否回退到admob。稍后我会就它是否有效发表评论。
编辑:它有效!
事实证明 requestInterstitialAdPresentation 确实正确地回答了真或假。然后,唯一能让它感觉像其他 API 的事情就是弄清楚广告 VC 何时被关闭。我通过在 viewDidAppear: 托管视图控制器的方法中响应来做到这一点,如果广告已经启动。实际上,我将它封装在 AdManager 类中,并使用 NSNotification 来传达 viewDidAppear:,因此能够非常干净地放入 iAds。
要在视图控制器中控制 iAd,您可以设置一个代理来监听 iAd 状态:
@interface MyViewController : UIViewController <ADBannerViewDelegate>
...
@property (nonatomic, weak) IBOutlet ADBannerView* banner;
@end
然后在你的实现文件中:
@implementation MyViewController
- (void)viewDidLoad
{
...
[_banner setHidden:YES];
_banner.delegate = self;
}
...
#pragma mark - ADBannerViewDelegate implementation
- (void)bannerView:(ADBannerView*)banner didFailToReceiveAdWithError:(NSError*)error
{
// iAd is not available, so we are going to hide it to get rid of ugly white rectangle
[_banner setHidden:YES];
// Here you can add your logic to show your other ads
}
- (void)bannerViewDidLoadAd:(ADBannerView*)banner
{
// iAd is available, lets show it
[_banner setHidden:NO];
// Here you can add your logic to hide your other ads
}
@end
此外,我通常只保留一个 ADBannerView 实例,将其放在我的 App Delegate 中,一旦某个视图控制器出现在屏幕上 - 我只需将该 ADBannerView 添加到视图控制器的视图层次结构中,并在视图控制器消失时将其删除。