Maccle

iAd を実装してiOSアプリに広告を表示する方法 [回転対応]

約 7 分
iAd を実装してiOSアプリに広告を表示する方法 [回転対応]

前回のAdMob広告の実装方法に続いて、今回は iOSアプリに iAd Network の広告を表示させてみましょう。

AdMob と基本的に考え方は同じで、表示したい UIViewController のビュー(UIView)に iAd を表示して、UIViewController で iAd のデリゲートを処理します。

AdMob の実装方法はこちら

環境

  • Xcode 4.6
  • iOS SDK 6.1
  • 使用するプロジェクト : こちら

実装ステップ

  1. iAd Network の利用を開始する
  2. アプリ側で iAd の利用を有効にする
  3. アプリに iAd を実装(ビューに表示)

1. iAd Network の利用を開始する

まずは、iTunes Connect にログイン

Contracts, Tax, and Banking” メニューにアクセス。
iad-start

以下の手順を参考に、iTunes Connect で iAd Network の利用を開始します。
Setting Up iAd Network

最終的にこんな状態になればOK。
iad-enable

2. アプリ側で iAd の利用を有効にする

iTunes Connect の “Manage Your Applications” メニューにアクセス。

対象のアプリを選び、「Setup iAd Network」をクリック。
iad-setup

「Enable iAd Network」をクリックして、「Save」。
iad-setup2

3. アプリに iAd を実装(ビューに表示)

iAd に必要な iAd.framework を、TARGET の “Build Phases” → “Link Binary With Libraries” からインポート。
iadframework-add

ここでは、メインウインドウのルートビューコントローラに指定している “RootViewController” という UIViewController に表示することを前提とします。

RootViewController.h に iAd フレームワークをインポートし、プロトコルに ADBannerViewDelegate を追加。

#import <UIKit/UIKit.h>
#import <iAd/iAd.h>

@interface RootViewController : UIViewController <ADBannerViewDelegate> {
    ADBannerView *adView;
    BOOL bannerIsVisible; // 広告表示状態のフラグ
}
@end

RootViewController.mviewDidLoad メソッド にて、実際に iAd をインスタンス化。

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    // iAd を生成
    adView = [[ADBannerView alloc] initWithAdType:ADAdTypeBanner];
    
    // 画面(ビュー)の下に表示する場合
    //adView.frame = CGRectMake(0, self.view.frame.size.height - adView.frame.size.height, adView.frame.size.width, adView.frame.size.height);

    // adViewのフレーム矩形が変更された時にサブビューのサイズを自動的に変更
    adView.autoresizesSubviews = YES;

    // 横向き、縦向きに回転した際に、自動的に広告の横幅を調整し、画面上に固定
    // ※画面下に表示する場合は、コメントアウト。
    adView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin;

    // 横向き、縦向きに回転した際に、自動的に広告の横幅を調整し、画面下に固定
    // ※画面上に表示する場合は、コメントアウト。
    //adView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin;

    // 非表示にしておく
    adView.alpha = 0.0f;

    // ビューに追加
    [self.view addSubview:adView];

    // デリゲートをこの UIViewContoroller に渡す
    adView.delegate = self;
}

上記で、 adView は非表示にしていますが、iAd は、広告データを正常に受け取ってから表示する必要があるため、iAd のデリゲートでそれを受け取って表示します。

iAd のデリゲートメソッド

iAd には、以下のデリゲートメソッドが用意されています。

bannerViewDidLoadAd:
リクエストを受け取って、新たに広告データのロードが完了されたときに呼ばれる。
※このメソッドで広告を表示させる。
bannerView:didFailToReceiveAdWithError:
広告データの受信に失敗したときに呼ばれる。
※このメソッドで広告を非表示にする。
bannerViewWillLoadAd:
広告データのロードが完了する直前に呼ばれる
bannerViewActionDidFinish:
広告画面からアプリにフォーカスが戻った際に呼ばれる。
bannerViewActionShouldBegin:willLeaveApplication:
広告がタップされて、フォーカスがアプリから広告画面に切り替わる直前に呼ばれる。
例えば、ゲームアプリの場合は、ポーズをしたり。

上記のうち、iAd の要件として実装が必須なのは、bannerViewDidLoadAd:bannerView:didFailToReceiveAdWithError: です。

では、RootViewController.m にこの2つのデリゲートメソッドを追加して広告の表示/非表示を切り替えます。

// iAdの受信に成功したとき
-(void)bannerViewDidLoadAd:(ADBannerView *)banner {
    // バナーが表示されていない場合
    if ( !bannerIsVisible ) {
        // 表示
        banner.alpha = 1.0f;
    }
    // フラグをYESに
    bannerIsVisible = YES;
}

// iAdの受信に失敗したとき
-(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error {
    // バナーが表示されている場合
    if ( bannerIsVisible ) {
        // 非表示
        banner.alpha = 0.0f;
    }
    // フラグをNOに
    bannerIsVisible = NO;
}

実行結果

広告をビューの上に表示した場合

縦向き
capture 2013-03-12 16.50.44

横向き
capture 2013-03-12 16.50.52

広告をビューの下に表示した場合

縦向き
capture 2013-03-12 16.49.38

横向き
capture 2013-03-12 16.49.48

っということで、次回は広告データのロードに失敗した場合に AdMob と iAd を切り替えて表示する方法を考えてみたいと思います。

About The Author

某IT系なんちゃってエンジニアヨーダ
Apple好きだけど盲目マカーは気持ち悪いと思ってる中道だと思い込んでるしがないダメダメエンジニア。

今もってるApple製品↓
Macbook Pro 15 inch, iMac 27 inch (Late 2009), iPhone 6 Plus, iPad (初代! いらない!)
Follow :

Leave A Reply

*

Comment On Facebook