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

インタースティシャル広告は、アプリのインターフェースを覆うようにフルスクリーンで表示される広告です。通常は、アクティビティが変わるタイミングや、ゲームのレベルが変わる際のポーズ画面など、アプリの画面が切り替わる自然なタイミングで表示されます。アプリにインタースティシャル広告が表示されると、ユーザーは広告をタップしてリンク先 URL に移動するか、広告を閉じてアプリに戻るかを選択することとなります。インタースティシャル広告はサイズが大きく、直接的な行動を促すフレーズを含めることができるため、特にモバイル広告として優秀です。

サイズが大きいため、通常は従来型のバナー広告よりも大きな帯域幅が必要になります。そのためアプリでは、表示される前の段階で非同期的に読み込む必要があります。これにより、表示される前の段階で広告の準備を整えることが可能になります。

このガイドでは、Google Mobile Ads SDK を使用してインタースティシャル広告を Android アプリに組み込む方法を説明します。SDK のメソッドを使用し、テスト用のインタースティシャル広告を事前に読み込んでから表示する簡単な activity クラスも紹介します。

参考情報

Android 向けモバイル広告のスタートガイドをご覧になっていない方は、そちらを先にご覧ください。

前提条件

このガイドで紹介するサンプルのコードは、Google Mobile Ads SDK をすでに使用しているプロジェクトのものです。ご自身のアプリで SDK を使用するには、Android Studio で以下の作業が完了していることが必要です。

インタースティシャル広告をアクティビティに組み込む

インタースティシャル広告は、事前に読み込みを完了させてから、操作中にアプリで画面の切り替えが起きるタイミングで表示することをおすすめします。例として、しばらくプレイすると終了し、再スタートのボタンが表示される簡単なゲームの場合を見ていきます。このゲームの場合、インタースティシャル広告を事前に読み込み、ユーザーが再スタートのボタンを押すまでの間に表示するコードは以下のようになります。

...
public class MainActivity extends ActionBarActivity {

    PublisherInterstitialAd mPublisherInterstitialAd;
    Button mNewGameButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mNewGameButton = (Button) findViewById(R.id.newgame_button);

        mPublisherInterstitialAd = new PublisherInterstitialAd(this);
        mPublisherInterstitialAd.setAdUnitId("AD_UNIT_ID");

        mPublisherInterstitialAd.setAdListener(new AdListener() {
            @Override
            public void onAdClosed() {
                requestNewInterstitial();
                beginPlayingGame();
            }
        });

        requestNewInterstitial();

        mNewGameButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mPublisherInterstitialAd.isLoaded()) {
                    mPublisherInterstitialAd.show();
                } else {
                    beginPlayingGame();
                }
            }
        });

        beginPlayingGame();
    }

    private void requestNewInterstitial() {
        PublisherAdRequest adRequest = new PublisherAdRequest.Builder()
                  .addTestDevice("SEE_YOUR_LOGCAT_TO_GET_YOUR_DEVICE_ID")
                  .build();

        mPublisherInterstitialAd.loadAd(adRequest);
    }

    private void beginPlayingGame() {
        // Play for a while, then display the New Game Button
    }
}
...

新たにメンバー変数 mInterstitial が追加されている点以外では、アクティビティ内で 4 か所のコードが変更されています。それぞれを詳しく見ていきます。

InterstitialAd オブジェクトをインスタンス化する

...
mPublisherInterstitialAd = new PublisherInterstitialAd(this);
mPublisherInterstitialAd.setAdUnitId("/6499/example/interstitial");
requestNewInterstitial();
...

サンプルでは、メンバー変数 mPublisherInterstitialAd を構成して広告ユニット ID を割り当てています。バナー広告は XML レイアウト ファイルで定義するのが一般的ですが、インタースティシャル広告はそれとは異なり、アプリの Java コードで作成、構成します。1 つの PublisherInterstitialAd オブジェクトで、アクティビティの有効期間中に複数のインタースティシャル広告のリクエストと表示ができるため、構成が必要になるのは 1 回だけです。

インタースティシャル広告を表示する

...
mNewGameButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (mPublisherInterstitialAd.isLoaded()) {
            mPublisherInterstitialAd.show();
        } else {
            beginPlayingGame();
        }
    }
});
...

このコードでは、インタースティシャル広告が読み込まれ、表示されているかをチェックしています。広告の準備が整っていない場合は、アプリはそのまま次の画面に切り替わります。

広告リスナーを作成する

...
mPublisherInterstitialAd.setAdListener(new AdListener() {
    @Override
    public void onAdClosed() {
        requestNewInterstitial();
        beginPlayingGame();
    }
});
...

ここでは、AdListener を設定し、onAdClosed イベントのハンドラを含めています。このイベントはインタースティシャル広告が閉じられたときに発生します。上記のコードでは requestNewInterstitial メソッドを呼び出して新しい広告のダウンロードを開始してから、新たにゲームをスタートしています。

requestNewInterstitial

...
private void requestNewInterstitial() {
    PublisherAdRequest adRequest = new PublisherAdRequest.Builder()
              .addTestDevice("YOUR_DEVICE_HASH")
              .build();

    mPublisherInterstitialAd.loadAd(adRequest);
}
...

このコードでは、PublisherAdRequest.Builder オブジェクトを使用して簡単なリクエストを作成しています。作成したリクエストは PublisherInterstitialAd オブジェクトの loadAd メソッドに渡され、リクエストのプロセスが開始されます。

重要なのは、リクエストの作成時に addTestDevice メソッドを使用している点です。実際の広告でテストすると、ポリシーの違反になり、アカウント停止の原因となる場合があります。テスト用広告の使用方法の詳細については、広告のターゲット設定ガイドをご覧ください。

結果

インタースティシャル広告が表示されると、アプリは次のようになります。

インタースティシャル広告はアプリの画面を覆うように表示され、ユーザーは広告を閉じる(左上の「X」ボタン)か、広告のそれ以外の部分をタップしてリンク先 URL に移動するかを選ぶことになります。

推奨事項

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

サンプルのダウンロード

以下からアプリのサンプルをダウンロードし、インタースティシャル広告の実例をご覧いただけます。

GitHub からサンプルをダウンロード

よくある質問

2 つ目のインタースティシャル広告を読み込もうとすると、ログに「An interstitial is already loading. Aborting.」(すでにインタースティシャル広告を読み込んでいます。中断します)と表示されるのはなぜですか?
この警告は、1 つ目のインタースティシャル広告の表示が完了する前に 2 つ目を読み込もうとすると発生します。loadAd を適切な場所(推奨は AdListener の onAdClosed メソッド)で呼び出してください。
InterstitialAd オブジェクトで loadAd() を呼び出そうとすると、「Cannot present interstitial. It is not ready.」(インタースティシャル広告を表示できません。準備できていません)というエラーが表示されます。なぜでしょうか?
このエラーは、インタースティシャル広告を正常にフェッチできなかったことを意味します。この警告が発生しないようにするには、isLoaded メソッドを使用して、インタースティシャルを表示する準備ができているかどうかを確認します。
ログに「Request Error: No ads to show.」(リクエスト エラー: 表示する広告がありません)というエラーが表示され、広告が表示されません。
広告ユニットを作成する際は、広告タイプとして必ずインタースティシャルを指定してください。 PublisherInterstitialAd オブジェクトを利用できるのは、インタースティシャル広告を配信するよう設定されている広告ユニットのみです。

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

SDK for DFP Users on Android
ご不明な点がありましたら、Google のサポートページをご覧ください。