iAdはAdBannerViewをviewにaddSubviews:
するだけで広告表示することができます。
ただ、そのままだと広告をまだ受信していないときに白いビューが表示されてしまうので、ビューを隠す必要があります。(たしか適切に隠さないとReject対象なはず)
白いビューの解決
デリゲートで以下を実装すれば白いビューが表示される問題は解決します。
alphaを使わず移動させてもよいかと思います。
※ AdBannerViewのalphaの初期値は別途0.f
にしています。
Sample.m
- (void)bannerViewDidLoadAd:(ADBannerView *)banner
{
[UIView animateWithDuration:0.3f animations:^{
banner.alpha = 1.f;
}];
}
- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error
{
[UIView animateWithDuration:0.3f animations:^{
banner.alpha = 0.f;
}];
}
シングルトンでの実装
同じAdBannerViewを使い回したかったので、シングルトンで実装しました。
使用方法はshardAdBannerView
を表示したいビューに適宜addSubviews:
するだけです。
※ iAd.frameworkの追加を忘れずに。
AdManager.h
#import <Foundation/Foundation.h>
#import <iAd/iAd.h>
@interface AdManager : NSObject
+ (ADBannerView*)shardAdBannerView;
+ (void)removeAd;
@end
AdManager.m
#import "AdManager.h"
NSString *NSStringFromiAdError(NSError *error)
{
switch (error.code) {
case 0:
return @"ADErrorUnknown 不明または予期しないエラー";
case 1:
return @"ADErrorServerFailure 広告サーバーへの接続失敗";
case 2:
return @"ADErrorLoadingThrottled 現在広告サーバーからのダウンロードが抑制されている";
case 3:
return @"ADErrorInventoryUnavailable 現在ダウンロード出来る広告がない";
case 4:
return @"ADErrorConfigurationError アプリケーションが広告を通知するように設定していない";
case 5:
return @"ADErrorBannerVisibleWithoutContent バナーは表示されているが、バナー広告画像は表示されていない";
case 6:
return @"ADErrorApplicationInactive アプリケーションがアクティブでないため、広告コンテンツが利用出来ない";
default:
return [NSString stringWithFormat:@"Unknown ADError.code[%d]", error.code];
}
}
static AdManager *s_adManager;
static ADBannerView *s_adBannerView;
@interface AdManager () <ADBannerViewDelegate>
@end
@implementation AdManager
+ (ADBannerView*)shardAdBannerView
{
if (s_adBannerView == nil) {
s_adManager = [[AdManager alloc] init];
s_adBannerView = [[ADBannerView alloc] initWithAdType:ADAdTypeBanner];
s_adBannerView.delegate = s_adManager;
s_adBannerView.alpha = 0.f;
}
return s_adBannerView;
}
+ (void)removeAd
{
[s_adBannerView removeFromSuperview];
s_adBannerView.delegate = nil; // いちよう
s_adBannerView = nil;
s_adManager = nil;
}
#pragma mark - AdBannerDelegate
- (void)bannerViewDidLoadAd:(ADBannerView *)banner
{
[UIView animateWithDuration:0.3f animations:^{
banner.alpha = 1.f;
}];
}
- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error
{
NSLog(@"[ERROR] %@", NSStringFromiAdError(error));
[UIView animateWithDuration:0.3f animations:^{
banner.alpha = 0.f;
}];
}
@end