Google Mobile Ads SDK についてのフィードバックをお寄せください。年次アンケート

インタースティシャル広告

インタースティシャル広告は、ユーザーが閉じるまで、アプリのインターフェースを覆うようにフルスクリーンで表示される広告です。一般的には、アクティビティが切り替わるタイミングやゲームのレベルが切り替わる合間など、操作中にアプリで画面の切り替えが起きるタイミングで表示されます。アプリにインタースティシャル広告が表示されると、ユーザーは広告をタップしてリンク先 URL に移動するか、広告を閉じてアプリに戻るかを選択することとなります。

このガイドでは、インタースティシャル広告を iOS アプリに組み込む方法を説明します。

前提条件

インタースティシャル広告オブジェクトを作成する

インタースティシャル広告は、GADInterstitial オブジェクトによってリクエストされ、表示されます。そのオブジェクトを使用する最初のステップは、それをインスタンス化してその広告ユニット ID を設定することです。たとえば、UIViewControllerviewDidLoad メソッドで GADInterstitial を作成する方法は次のとおりです。

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController {

  var interstitial: GADInterstitial!

  override func viewDidLoad() {
    super.viewDidLoad()
    interstitial = GADInterstitial(adUnitID: "ca-app-pub-3940256099942544/4411468910")
  }
}

Objective-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController ()

@property(nonatomic, strong) GADInterstitial *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  self.interstitial = [[GADInterstitial alloc]
      initWithAdUnitID:@"ca-app-pub-3940256099942544/4411468910"];
}

GADInterstitial は、1 つのインタースティシャル広告を読み込んで表示する、使い捨てオブジェクトです。他のインタースティシャル広告を表示するには、アプリごとに GADInterstitial を作成する必要があります。

テストでは常にテスト広告を使用する

アプリの開発中やテストの際は必ずテスト広告を使用し、実際の広告は使用しないでください。実際の広告を使用すると、アカウントの停止につながる可能性があります。

iOS インタースティシャル専用のテスト広告ユニット ID ca-app-pub-3940256099942544/4411468910 を使用すると、テスト広告を簡単に読み込むことができます。

この ID は、すべてのリクエストに対してテスト広告を返す特別な ID で、アプリのコーディング、テスト、デバッグで自由に使うことができます。なお、このテスト用 ID は、アプリを公開する前に必ずご自身の広告ユニット ID に置き換えてください。

Mobile Ads SDK のテスト広告の機能の詳細については、テスト広告の説明をご覧ください。

広告を読み込む

インタースティシャル広告を読み込むには、loadRequest: オブジェクトの GADRequest を呼び出します。

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController {

  var interstitial: GADInterstitial!

  override func viewDidLoad() {
    super.viewDidLoad()
    interstitial = GADInterstitial(adUnitID: "ca-app-pub-3940256099942544/4411468910")
    let request = GADRequest()
    interstitial.load(request)
  }
}

Objective-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController ()

@property(nonatomic, strong) GADInterstitial *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  self.interstitial = [[GADInterstitial alloc]
      initWithAdUnitID:@"ca-app-pub-3940256099942544/4411468910"];
  GADRequest *request = [GADRequest request];
  [self.interstitial loadRequest:request];
}

広告を表示する

インタースティシャル広告は、アプリの流れが一時的に中断するタイミングに表示される必要があります。ゲームのレベルが切り替わる合間やタスクが完了した直後などが良い例です。インタースティシャルを表示するには、GADInterstitialisReady プロパティをチェックして読み込みが完了したことを確認してから、presentFromRootViewController を呼び出します。UIViewController のアクション メソッドのひとつでこれを行う方法の例を示します。

Swift

@IBAction func doSomething(_ sender: AnyObject) {
  ...
  if interstitial.isReady {
    interstitial.present(fromRootViewController: self)
  } else {
    print("Ad wasn't ready")
  }
}

Objective-C

- (IBAction)doSomething:(id)sender {
  ...
  if (self.interstitial.isReady) {
    [self.interstitial presentFromRootViewController:self];
  } else {
    NSLog(@"Ad wasn't ready");
  }
}

インタースティシャルの読み込み中や読み込みに失敗した場合、「Cannot present interstitial. It is not ready.」というエラーが表示されます。この警告が発生しないようにするには、isReady メソッドを使用して、presentFromRootViewController: を呼び出す前にインタースティシャルを表示する準備ができているかどうかを確認します。

GADInterstitialDelegate を使用して再読み込みする

GADInterstitial は使い捨てオブジェクトです。つまり、インタースティシャル広告を一度表示すると、hasBeenUsedtrue を返し、同じインタースティシャルで他の広告を読み込めなくなります。他のインタースティシャルをリクエストするには、新しい GADInterstitial オブジェクトを作成します。インタースティシャル オブジェクトを再利用しようとすると、「Request Error: Will not send request because interstitial object has been used」というエラーが表示されます。

別のインタースティシャルを割り当てる最適な場所は、GADInterstitialDelegateinterstitialDidDismissScreen メソッド内です。このメソッドでは、前のインタースティシャルの表示が終了したらすぐに次のインタースティシャルの読み込みを始めることができます。インタースティシャルの初期化は、そのインタースティシャルのヘルパー メソッドで実行することもできます。

Swift

override func viewDidLoad() {
  super.viewDidLoad()
  interstitial = createAndLoadInterstitial()
}

func createAndLoadInterstitial() -> GADInterstitial {
  var interstitial = GADInterstitial(adUnitID: "ca-app-pub-3940256099942544/4411468910")
  interstitial.delegate = self
  interstitial.load(GADRequest())
  return interstitial
}

func interstitialDidDismissScreen(_ ad: GADInterstitial) {
  interstitial = createAndLoadInterstitial()
}

Objective-C

- (void)viewDidLoad {
  [super viewDidLoad];
  self.interstitial = [self createAndLoadInterstitial];
}

- (GADInterstitial *)createAndLoadInterstitial {
  GADInterstitial *interstitial =
      [[GADInterstitial alloc] initWithAdUnitID:@"ca-app-pub-3940256099942544/4411468910"];
  interstitial.delegate = self;
  [interstitial loadRequest:[GADRequest request]];
  return interstitial;
}

- (void)interstitialDidDismissScreen:(GADInterstitial *)interstitial {
  self.interstitial = [self createAndLoadInterstitial];
}

前のインタースティシャルの表示が終了したらすぐに次のインタースティシャルをプリロードすることで、アプリの画面が次に切り替わる自然なタイミングでインタースティシャルを再度表示するための準備ができます。

広告イベント

GADInterstitialDelegate を使用して、広告が閉じられたときや、ユーザーがアプリから離れたときなどのライフサイクル イベントをリッスンできます。

インタースティシャル広告イベントを登録する

インタースティシャル広告イベントを登録するには、delegate プロトコルを実装するオブジェクトに、GADInterstitialGADInterstitialDelegate プロパティを設定します。通常、インタースティシャル広告を実装するクラスは、デリゲート クラスとしての役割も果たすため、次のように delegate プロパティを self に設定できます。

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController, GADInterstitialDelegate {

  var interstitial: GADInterstitial!

  override func viewDidLoad() {
    super.viewDidLoad()
    interstitial = GADInterstitial(adUnitID: "ca-app-pub-3940256099942544/4411468910")
    interstitial.delegate = self
  }
}

Objective-C

#import "GADInterstitial.h"
#import "GADInterstitialDelegate.h"

@interface ViewController () <GADInterstitialDelegate>

@property(nonatomic, strong) GADInterstitial *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  self.interstitial = [[GADInterstitial alloc] initWithAdUnitID:"ca-app-pub-3940256099942544/4411468910"];
  self.interstitial.delegate = self;
}

インタースティシャル広告イベントを実装する

GADInterstitialDelegate の各メソッドはオプションのため、必要なメソッドを実装すれば問題ありません。以下のサンプルでは、各メソッドを実装して、コンソールにログとしてメッセージを出力しています。

Swift

/// Tells the delegate an ad request succeeded.
func interstitialDidReceiveAd(_ ad: GADInterstitial) {
  print("interstitialDidReceiveAd")
}

/// Tells the delegate an ad request failed.
func interstitial(_ ad: GADInterstitial, didFailToReceiveAdWithError error: GADRequestError) {
  print("interstitial:didFailToReceiveAdWithError: \(error.localizedDescription)")
}

/// Tells the delegate that an interstitial will be presented.
func interstitialWillPresentScreen(_ ad: GADInterstitial) {
  print("interstitialWillPresentScreen")
}

/// Tells the delegate the interstitial is to be animated off the screen.
func interstitialWillDismissScreen(_ ad: GADInterstitial) {
  print("interstitialWillDismissScreen")
}

/// Tells the delegate the interstitial had been animated off the screen.
func interstitialDidDismissScreen(_ ad: GADInterstitial) {
  print("interstitialDidDismissScreen")
}

/// Tells the delegate that a user click will open another app
/// (such as the App Store), backgrounding the current app.
func interstitialWillLeaveApplication(_ ad: GADInterstitial) {
  print("interstitialWillLeaveApplication")
}

Objective-C

/// Tells the delegate an ad request succeeded.
- (void)interstitialDidReceiveAd:(GADInterstitial *)ad {
  NSLog(@"interstitialDidReceiveAd");
}

/// Tells the delegate an ad request failed.
- (void)interstitial:(GADInterstitial *)ad
    didFailToReceiveAdWithError:(GADRequestError *)error {
  NSLog(@"interstitial:didFailToReceiveAdWithError: %@", [error localizedDescription]);
}

/// Tells the delegate that an interstitial will be presented.
- (void)interstitialWillPresentScreen:(GADInterstitial *)ad {
  NSLog(@"interstitialWillPresentScreen");
}

/// Tells the delegate the interstitial is to be animated off the screen.
- (void)interstitialWillDismissScreen:(GADInterstitial *)ad {
  NSLog(@"interstitialWillDismissScreen");
}

/// Tells the delegate the interstitial had been animated off the screen.
- (void)interstitialDidDismissScreen:(GADInterstitial *)ad {
  NSLog(@"interstitialDidDismissScreen");
}

/// Tells the delegate that a user click will open another app
/// (such as the App Store), backgrounding the current app.
- (void)interstitialWillLeaveApplication:(GADInterstitial *)ad {
  NSLog(@"interstitialWillLeaveApplication");
}

推奨事項

インタースティシャル広告が自分のアプリに適しているかどうかをよく見極めましょう。
インタースティシャル広告は、画面の切り替わりがあるアプリに適しています。画像の共有やあるゲームレベルのクリアなど、アプリ内で特定のタスクが完了したタイミングがこうした移行ポイントになります。こうしたタイミングであれば、ユーザーも合間が入ることを想定しているため、インタースティシャル広告を表示してもユーザーの操作性を損なうことはありません。アプリ内のどの時点でインタースティシャル広告を表示し、ユーザーがそれにどう反応すると考えられるか、把握しておくとよいでしょう。
インタースティシャル広告を表示する際には必ずアクションを一時停止しましょう。
インタースティシャル広告には、テキスト、イメージ、動画などのさまざまな種類があります。インタースティシャル広告を表示する際は、広告で使用する分を考慮し、アプリの一部のリソースを一時停止させることが重要です。たとえばインタースティシャル広告を呼び出して表示する際は、アプリの音声出力を一時停止します。音声出力はイベント ハンドラ interstitialDidDismissScreen で再開できます。このハンドラはユーザーが広告に対する操作を完了すると呼び出されます。この広告の表示中は、複雑な計算処理(ゲームループなど)も一時停止することをおすすめします。画像の読み込みが遅くなったり反応しなくなったり、動画が頻繁に途切れたりする恐れがなくなります。
十分な読み込み時間を確保しましょう。
インタースティシャル広告を適切なタイミングで表示することも大事ですが、それと同様に読み込みの待ち時間を短くすることも重要です。presentFromRootViewController の呼び出しの前に loadRequest を呼び出すことで、表示される前の段階でインタースティシャル広告の読み込みを完了させることができます。
過度に広告を表示しないよう注意しましょう。
インタースティシャル広告の表示頻度を増やすことで収益の向上が見込める一方、ユーザーの操作性は損なわれ、クリック率の低下にもつながります。ユーザーがアプリを楽しめなくなるため、何度も広告を表示するのは避けてください。
interstitialDidReceiveAd イベントを使用して、インタースティシャル広告を表示しないでください。
このイベントを使用すると、ユーザー エクスペリエンスの低下につながる場合があります。代わりに、表示が必要になる前にあらかじめ広告を読み込み、GADInterstitialisReady メソッドを確認して、表示の準備ができているかどうかを確認することをおすすめします。

その他のリソース

GitHub のサンプル

チュートリアル動画シリーズ「Mobile Ads Garage」

次のステップ