LoginSignup
25
25

More than 5 years have passed since last update.

ADBannerView iAdを表示するための最低限の設定とシングルトンでの実装

Last updated at Posted at 2013-03-17

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
25
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
25