バナー広告

スタートガイドでは、SDK をデプロイしてテストバナー広告を表示する方法を説明しました。このガイドでは、バナー広告で使用できる、より高度なカスタマイズについて説明します。

バナー広告のこのようなカスタマイズの実装を参照するには、Objective-C または Swift の iOS API Demo アプリをダウンロードしてください。

API Demo をダウンロードする

Google モバイル広告は、以下のバナーサイズをサポートしています。

サイズ(幅×高さ) 説明 端末 AdSize の定数値
320×50 標準バナー スマートフォンとタブレット kGADAdSizeBanner
320×100 バナー(大) スマートフォンとタブレット kGADAdSizeLargeBanner
300×250 IAB レクタングル(中) スマートフォンとタブレット kGADAdSizeMediumRectangle
468×60 IAB フルサイズ バナー タブレット kGADAdSizeFullBanner
728×90 IAB ビッグバナー タブレット kGADAdSizeLeaderboard
画面の幅×32、50 または 90 スマートバナー スマートフォンとタブレット kGADAdSizeSmartBannerPortrait
kGADAdSizeSmartBannerLandscape

スマートバナー

スマートバナーは、どの端末で画面をどの向きにしていても、あらゆる画面サイズで画面の横幅いっぱいに広告を表示できる広告ユニットです。スマートバナーはさまざまな種類の端末や画面サイズに対応し、そのときの画面の向きの横幅を「スマート」に検出し、そのサイズに合わせて広告を表示できます。

スマートバナーでは、以下の 3 種類の広告の高さ(密度に依存しないピクセル数 [dp])が実装されています。

  • 32: 端末の画面の高さ <= 400
  • 50: 400 < 端末の画面の高さ <= 720
  • 90: 端末の画面の高さ > 720

スマートフォンなど、一部の端末については、端末の高さが向きによって異なることがあります。一般的には、スマートフォンに表示されるスマートバナー広告の場合、縦向きが全幅×50dp、横向きが全幅×32dp となります。タブレットではどちらの向きでも全幅×90dp です。

イメージ広告に、割り当てられたスペース全体を占めるほどの大きさがない場合、画像が中央に配置され、両側のスペースが埋められます。

スマートバナーを使用するには、定数 kGADAdSizeSmartBannerPortrait または kGADAdSizeSmartBannerLandscape を次のように使用する必要があります。

Objective-C

// Use kGADAdSizeSmartBannerLandscape if your app is running in landscape.
GADBannerView *bannerView = [[GADBannerView alloc] initWithAdSize:kGADAdSizeSmartBannerPortrait];

Swift

// Use kGADAdSizeSmartBannerLandscape if your app is running in landscape.
let bannerView = GADBannerView(adSize: kGADAdSizeSmartBannerPortrait)

iOS API Demo アプリでのスマートバナーの実装については、AdMob Banner Sizes サンプルをご覧ください。

Objective-C Swift

広告のライフサイクル イベント コールバック

GADBannerViewDelegate の全体や一部を実装して、広告のライフサイクル イベント(リクエストの失敗や「クリックスルー」など)をトラッキングすることもできます。次のコード スニペットは、サンプル実装を示しています。

Objective-C

@protocol GADBannerViewDelegate <NSObject>
  @optional
  - (void)adViewDidReceiveAd:(GADBannerView *)bannerView;
  - (void)adView:(GADBannerView *)bannerView
      didFailToReceiveAdWithError:(GADRequestError *)error;
  - (void)adViewWillPresentScreen:(GADBannerView *)bannerView;
  - (void)adViewDidDismissScreen:(GADBannerView *)bannerView;
  - (void)adViewWillDismissScreen:(GADBannerView *)bannerView;
  - (void)adViewWillLeaveApplication:(GADBannerView *)bannerView;
@end

Swift

public protocol GADBannerViewDelegate : GADAdDelegate {
  optional public func adViewDidReceiveAd(_ bannerView: GADBannerView)
  optional public func adView(_ bannerView: GADBannerView, didFailToReceiveAdWithError error: GADRequestError)
  optional public func adViewWillPresentScreen(_ bannerView: GADBannerView)
  optional public func adViewWillDismissScreen(_ bannerView: GADBannerView)
  optional public func adViewDidDismissScreen(_ bannerView: GADBannerView)
  optional public func adViewWillLeaveApplication(_ bannerView: GADBannerView)
}

これらのメソッドは、次の例に示すように、ビュー コントローラなどの個別のオブジェクトに実装できます。

Objective-C

@import GoogleMobileAds;

@interface ViewController : UIViewController<GADBannerViewDelegate>

@end

Swift

import GoogleMobileAds

class ViewController: UIViewController, GADBannerViewDelegate {
}

または、これらは、次の例に示すように、GADBannerView サブクラスの一部としても実装できます。

Objective-C

@import GoogleMobileAds;

@interface MyBannerView : GADBannerView<GADBannerViewDelegate>

@end

Swift

import GoogleMobileAds

class MyBannerView: GADBannerView, GADBannerViewDelegate {
}

広告のリクエストを行う前に、以下のようにデリゲートを設定してください。

Objective-C

self.bannerView.delegate = self;

Swift

bannerView.delegate = self

adViewDidReceiveAd:

このコールバックは、loadRequest: が成功したときに送信されます。送信者がまだ表示されていない場合は、この時点でビュー階層に追加することをおすすめします。たとえば、以下のように記述します。

Objective-C

- (void)adViewDidReceiveAd:(GADBannerView *)bannerView {
  bannerView.hidden = NO;
}

Swift

func adViewDidReceiveAd(bannerView: GADBannerView!) {
  bannerView.hidden = false
}

adView:didFailToReceiveAdWithError:

このコールバックは、loadRequest: が失敗した場合に送信されます。通常はネットワーク障害、アプリの設定エラー、広告枠の不足が原因です。これらのイベントをログに記録しておくとデバッグの際に役立ちます。

Objective-C

- (void)adView:(GADBannerView *)adView didFailToReceiveAdWithError:(GADRequestError *)error {
  NSLog(@"adView:didFailToReceiveAdWithError: %@", error.localizedDescription);
}

Swift

func adView(_ bannerView: GADBannerView,
    didFailToReceiveAdWithError error: GADRequestError) {
  print("adView:didFailToReceiveAdWithError: \(error.localizedDescription)")
}

adViewWillPresentScreen:

このコールバックは、送信者のタップ操作に応じて、広告 UI がフルスクリーンでユーザーに表示される直前に送信されます。この時点で、UIApplicationDidEnterBackgroundNotification の場合と同じように、アニメーションやタイマーなどのユーザー操作が想定されるすべての処理を一時停止し、アプリの状態を保存します。通常はユーザーがフルスクリーン広告を閲覧して終了すると、adViewDidDismissScreen: が生成されてコントロールがアプリに戻ります。ただし、バナーの操作が Click-to-App-Store か Click-to-iTunes のいずれかである場合、またはユーザーが広告表示中にホームボタンを押した場合、アプリはバックグラウンドに切り替わり、終了する可能性があります。

このような場合、iOS 4.0 以降で次に呼び出されるメソッドは、ルート ビュー コントローラの applicationWillResignActive:、続いて adViewWillLeaveApplication: です。

adViewDidDismissScreen:

ユーザーがフルスクリーン表示の UI を終了すると送信されます。

adViewWillDismissScreen:

送信者のフルスクリーン表示の UI が終了し、アプリとルート ビュー コントローラが復元される直前に送信されます。この時点で、adViewWillPresentScreen: の一環として一時停止していたフォアグラウンド処理を再開する必要があります。

adViewWillLeaveApplication:

Click-to-App-Store バナーまたは Click-to-iTunes バナーがタップされて、アプリがバックグラウンドに切り替わるか、終了する直前に送信されます。applicationDidEnterBackground: など通常の UIApplicationDelegate 通知はこの直前に届きます。

applicationWillEnterForeground: では広告をリクエストしないでください。リクエストしても無視されます。代わりに、applicationDidBecomeActive: にリクエストを配置してください。

Objective-C のデリゲートは維持されず、デリゲートしているオブジェクトが最終的に割り当て解除される前に非同期にメッセージが送信されることがあります。

iOS API Demo アプリでのライフサイクル イベントの実装については、AdMob Ad Delegate サンプルをご覧ください。

Objective-C Swift

次のステップ

フィードバックを送信...