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

インタースティシャル広告は、ユーザーが閉じるまでアプリのインターフェース上に表示されるフルスクリーン広告です。通常は、アクティビティとゲームのレベルが切り替わる合間など、アプリの操作中に画面が自然に切り替わるタイミングで表示されます。アプリにインタースティシャル広告が表示されると、ユーザーは広告をタップしてリンク先に移動するか、広告を閉じてアプリに戻るかを選択できます。 事例紹介

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

前提条件

必ずテスト広告でテストする

アプリの作成とテストの際は、実際の実際の広告ではなく、テスト広告を使用してください。実際の広告を使用すると、アカウントが停止される可能性があります。

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

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

Mobile Ads SDK のテスト広告の仕組みについて詳しくは、テスト広告をご覧ください。

実装

インタースティシャル広告を組み込む主な手順は、以下のとおりです。

  1. 広告を読み込みます。
  2. コールバックを登録します。
  3. 広告を表示して報酬イベントを処理します。

広告を読み込む

広告の読み込みは、GADInterstitialAd クラスで静的 loadWithAdUnitID:request:completionHandler: メソッドを使用して行います。読み込みメソッドには、広告ユニット ID と GADRequest オブジェクトのほか、広告の読み込みの成功時または失敗時に呼び出される完了ハンドラが必要です。読み込まれた GADInterstitialAd オブジェクトは、完了ハンドラのパラメータとして提供されます。次の例は、ViewController クラスで GADInterstitialAd を読み込む方法を示しています。

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController {

  private var interstitial: GADInterstitialAd?

  override func viewDidLoad() {
    super.viewDidLoad()
    let request = GADRequest()
    GADInterstitialAd.load(withAdUnitID: "ca-app-pub-3940256099942544/4411468910",
                                request: request,
                      completionHandler: { [self] ad, error in
                        if let error = error {
                          print("Failed to load interstitial ad with error: \(error.localizedDescription)")
                          return
                        }
                        interstitial = ad
                      }
    )
  }
}

Objective-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController ()

@property(nonatomic, strong) GADInterstitialAd *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  GADRequest *request = [GADRequest request];
  [GADInterstitialAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/4411468910"
                              request:request
                    completionHandler:^(GADInterstitialAd *ad, NSError *error) {
    if (error) {
      NSLog(@"Failed to load interstitial ad with error: %@", [error localizedDescription]);
      return;
    }
    self.interstitial = ad;
  }];
}

コールバックに登録する

表示イベントの通知を受け取るには、GADFullScreenContentDelegate プロトコルを実装し、返される広告の fullScreenContentDelegate プロパティに割り当てる必要があります。GADFullScreenContentDelegate プロトコルは、広告の表示が成功または失敗した場合と、広告が閉じられたときのコールバックを処理します。次のコードは、プロトコルを実装して広告に割り当てる方法を示しています。

Swift

class ViewController: UIViewController, GADFullScreenContentDelegate {

  private var interstitial: GADInterstitialAd?

  override func viewDidLoad() {
    super.viewDidLoad()
    let request = GADRequest()
    GADInterstitialAd.load(withAdUnitID: "ca-app-pub-3940256099942544/4411468910",
                                request: request,
                      completionHandler: { [self] ad, error in
                        if let error = error {
                          print("Failed to load interstitial ad with error: \(error.localizedDescription)")
                          return
                        }
                        interstitial = ad
                        interstitial?.fullScreenContentDelegate = self
                      }
    )
  }

  /// Tells the delegate that the ad failed to present full screen content.
  func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
    print("Ad did fail to present full screen content.")
  }

  /// Tells the delegate that the ad will present full screen content.
  func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
    print("Ad will present full screen content.")
  }

  /// Tells the delegate that the ad dismissed full screen content.
  func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
    print("Ad did dismiss full screen content.")
  }
}

Objective-C

@interface ViewController ()<GADFullScreenContentDelegate>

@property(nonatomic, strong) GADInterstitialAd *interstitial;

@end

@implementation ViewController
- (void)viewDidLoad {
  [super viewDidLoad];
  GADRequest *request = [GADRequest request];
  [GADInterstitialAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/4411468910"
                              request:request
                    completionHandler:^(GADInterstitialAd *ad, NSError *error) {
    if (error) {
      NSLog(@"Failed to load interstitial ad with error: %@", [error localizedDescription]);
      return;
    }
    self.interstitial = ad;
    self.interstitial.fullScreenContentDelegate = self;
  }];
}

/// Tells the delegate that the ad failed to present full screen content.
- (void)ad:(nonnull id<GADFullScreenPresentingAd>)ad
didFailToPresentFullScreenContentWithError:(nonnull NSError *)error {
    NSLog(@"Ad did fail to present full screen content.");
}

/// Tells the delegate that the ad will present full screen content.
- (void)adWillPresentFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
    NSLog(@"Ad will present full screen content.");
}

/// Tells the delegate that the ad dismissed full screen content.
- (void)adDidDismissFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
   NSLog(@"Ad did dismiss full screen content.");
}

GADInterstitialAd は使い捨てオブジェクトです。一度インタースティシャル広告を表示した後、再度表示することはできません。おすすめの方法は、GADFullScreenContentDelegateadDidDismissFullScreenContent: メソッドで別のインタースティシャル広告を読み込むことで、前のインタースティシャル広告の表示が終了したらすぐに次のインタースティシャル広告の読み込みを開始することです。

広告を表示する

インタースティシャル広告は、アプリ操作の流れが自然に一時停止するタイミングで表示しましょう。ゲームのレベルが切り替わる合間や、ユーザーがタスクを完了した直後などが、良い例です。UIViewController のアクション メソッドの 1 つでこれを行う方法の例を次に示します。

Swift

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

Objective-C

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

ベスト プラクティス

インタースティシャル広告がアプリに適しているかどうかをよく見極めましょう。
インタースティシャル広告は、自然な移行ポイント(画面の切り替わりなど)があるアプリに最適です。 画像の共有やゲームレベルのクリアなど、アプリ内で特定のタスクが完了したタイミングがこうした移行ポイントになります。ユーザーはアクションの中断を想定しているため、インタースティシャル広告を表示しても操作性を損ないません。アプリのワークフローのどの時点でインタースティシャル広告を表示するか、ユーザーがそれにどう反応しそうかをよく検討してください。
インタースティシャル広告を表示する際には必ずアクションを一時停止しましょう。
インタースティシャル広告には、テキスト、イメージ、動画などのさまざまな種類があります。アプリでインタースティシャル広告を表示する際に、一部のリソースの使用を一時停止して、広告がそれらのリソースを利用できるようにする必要があります。たとえば、インタースティシャル広告を表示するための呼び出しを行うときは、アプリが生成する音声出力を一時停止してください。音声の再生は、ユーザーが広告に対する操作を完了すると呼び出される adDidDismissFullScreenContent: イベント ハンドラで再開できます。また、負荷の高い計算処理(ゲームループなど)は、広告の表示中は一時的に停止することも検討してください。これにより、グラフィックが遅くなったり、反応しなくなったり、動画がスムーズに再生されなかったりすることがなくなります。
読み込み時間を十分に確保してください。
インタースティシャル広告を適切なタイミングで表示することも重要ですが、それだけではなくユーザーの読み込みを待つ必要もありません。表示する前に広告を事前に読み込んでおくことで、表示のタイミングになったときに、アプリの読み込みが完了したインタースティシャル広告を確実に表示できます。
過度に広告を表示しないよう注意しましょう。
インタースティシャル広告の表示頻度を上げることは、収益向上の手段としては魅力的に思えるかもしれませんが、同時に、ユーザー エクスペリエンスの低下やクリック率の低下にもつながります。ユーザーがアプリを楽しめなくなるほど頻繁に広告を挟むことは避けましょう。
読み込み完了コールバックを使ってインタースティシャルを表示しないでください。
ユーザー エクスペリエンスが低下する可能性があります。表示が必要になる前に、広告を事前に読み込みます。次に、GADInterstitialAdcanPresentFromRootViewController:error: メソッドをチェックして、表示する準備ができているかどうかを確認します。

補足資料

GitHub の例

Mobile Ads Garage の動画チュートリアル

成功事例

次のステップ