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

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

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

前提条件

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

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

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

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

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

実装

インタースティシャル広告を実装する主な手順は次のとおりです。

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

広告を読み込む

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

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController {

  private var interstitial: GAMInterstitialAd?

  override func viewDidLoad() {
    super.viewDidLoad()

    do {
      interstitial = try await GAMInterstitialAd.load(
        withAdUnitID: "/6499/example/interstitial", request: GAMRequest())
    } catch {
      print("Failed to load interstitial ad with error: \(error.localizedDescription)")
    }
  }
}

Objective-C

@import GoogleMobileAds;
@import UIKit;

@interface ViewController ()

@property(nonatomic, strong) GAMInterstitialAd *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  GAMRequest *request = [GAMRequest request];
  [GAMInterstitialAd loadWithAdManagerAdUnitID:@"/6499/example/interstitial"
                                       request:request
                             completionHandler:^(GAMInterstitialAd *ad, NSError *error) {
    if (error) {
      NSLog(@"Failed to load interstitial ad with error: %@", [error localizedDescription]);
      return;
    }
    self.interstitial = ad;
  }];
}

コールバックに登録する

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

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController, GADFullScreenContentDelegate {

  private var interstitial: GAMInterstitialAd?

  override func viewDidLoad() {
    super.viewDidLoad()

    do {
      interstitial = try await GAMInterstitialAd.load(
        withAdUnitID: "/6499/example/interstitial", request: GAMRequest())
      interstitial?.fullScreenContentDelegate = self
    } catch {
      print("Failed to load interstitial ad with error: \(error.localizedDescription)")
    }
  }

  /// 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

@import GoogleMobileAds;
@import UIKit;

@interface ViewController () <GADFullScreenContentDelegate>

@property(nonatomic, strong) GAMInterstitialAd *interstitial;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  GAMRequest *request = [GAMRequest request];
  [GAMInterstitialAd loadWithAdManagerAdUnitID:@"/6499/example/interstitial"
                                       request:request
                             completionHandler:^(GAMInterstitialAd *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.");
}

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

広告を表示する

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

Swift

@IBAction func doSomething(_ sender: Any) {
  guard let interstitial = interstitial else {
    return print("Ad wasn't ready.")
  }

  // The UIViewController parameter is an optional.
  interstitial.present(fromRootViewController: nil)
}

Objective-C

- (IBAction)doSomething:(id)sender {
  if (self.interstitial) {
    // The UIViewController parameter is nullable.
    [self.interstitial presentFromRootViewController:nil];
  } else {
    NSLog(@"Ad wasn't ready");
  }
}

「Request Error: No ads to show(リクエスト エラー: 表示する広告がありません)」というエラー メッセージが表示され、広告が返されない場合は、適切なサイズにターゲット設定されているクリエイティブが広告申込情報に設定されていることを確認してください。インタースティシャルのサイズはスマートフォンでは 320x480 と 480x320、タブレットでは 1024x768 と 768x1024 です。デバイスのサイズが 1024x768 や 768x1024 に収まらない場合は、320x480 または 480x320 のサイズにフォールバックします。

ベスト プラクティス

インタースティシャル広告がアプリに適した広告タイプかどうかを検討します。
インタースティシャル広告は、画面の切り替わりがあるアプリで最適に機能します。画像の共有やゲームレベルのクリアなど、アプリ内のタスクの終了が、そのようなポイントを生み出します。ユーザーは操作の中断を予期しているため、ユーザー エクスペリエンスを損なうことなくインタースティシャル広告を表示できます。アプリのワークフローのどの時点でインタースティシャル広告を表示するか、またユーザーがどのような反応する可能性があるかを考慮してください。
インタースティシャル広告を表示する際はアクションを一時停止してください。
インタースティシャル広告には、テキスト、イメージ、動画など、さまざまなタイプがあります。アプリでインタースティシャル広告を表示する際は、広告で利用できるよう、一部のリソースの使用を一時停止することが重要です。たとえば、インタースティシャル広告を表示するために呼び出しを行う場合は、アプリが生成するオーディオ出力を一時停止します。音声の再生は、ユーザーが広告の操作を完了すると呼び出される adDidDismissFullScreenContent: イベント ハンドラで再開できます。また、広告の表示中は負荷の高い計算タスク(ゲームループなど)を一時的に停止することをおすすめします。これにより、グラフィックが遅くなったり、反応しなくなったり、動画が途切れたりすることがありません。
読み込み時間は十分に確保してください。
インタースティシャル広告を適切なタイミングで表示することも重要ですが、それと同時にユーザーが読み込みを待たずに表示することも重要です。表示する前に広告を読み込むことで、表示されるときにインタースティシャル広告を完全に読み込むことができます。
大量の広告をユーザーに表示することは避けてください。
アプリでのインタースティシャル広告の表示頻度を増やすことは、増収に効果的な方法のように思えますが、ユーザー エクスペリエンスが低下し、クリック率が低下する可能性もあります。ユーザーがアプリを楽しめなくなるほど頻繁に邪魔されないようにします。
読み込み完了コールバックをインタースティシャルの表示に使用しないでください。
ユーザー エクスペリエンスが低下する可能性があります。代わりに、表示が必要になる前に広告をプリロードします。次に、GAMInterstitialAdcanPresentFromRootViewController:error: メソッドをチェックして、表示する準備ができているかどうかを確認します。

GitHub の例

次のステップ