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

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

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

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

このガイドで使用している広告ユニットとサンプルは、テスト広告を返します。 テスト広告は、アカウントが停止中であったり、無効であったりしても、常時利用できます。 詳細については、AdMob のポリシーを確認し、無効な操作をご覧ください。

自分の実際の広告をクリックすることは、AdMob のポリシーに反します。開発およびテスト中は、テスト広告のみを使用してください。起動前に実際の広告を表示する必要がある場合は、広告をクリックしないようにしてください。実際の広告をクリックした場合、AdMob アカウントが停止されることがあります。

便利なリソース

まだ目を通していない方は、Android 向けモバイル広告のクイック スタート ガイドをご覧ください。

事前準備

このガイドで紹介するサンプルコードは、Google Mobile Ads SDK が既に組み込まれているプロジェクトのものです。この SDK をアプリで使用するには、Android Studio で Google Play 開発者サービスを参照する gradle を設定するか、Eclipse で次のステップを実行します。

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

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

...
public class MainActivity extends ActionBarActivity {

    InterstitialAd mInterstitialAd;
    Button mNewGameButton;

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

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

        mInterstitialAd = new InterstitialAd(this);
        mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");

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

        requestNewInterstitial();

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

        beginPlayingGame();
    }

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

        mInterstitialAd.loadAd(adRequest);
    }

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

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

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

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

...
mInterstitialAd = new InterstitialAd(this);
mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
requestNewInterstitial();
...

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

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

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

AdListener を作成する

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

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

requestNewInterstitial

...
private void requestNewInterstitial() {
    AdRequest adRequest = new AdRequest.Builder()
              .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
              .build();

    mInterstitialAd.loadAd(adRequest);
}
...

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

重要なのは、リクエストの作成時に addTestDevice メソッドを使用している点です。 自分の実際の広告をクリックすることは、AdMob のポリシーに反します。開発およびテスト中は、テスト広告のみを使用してください。起動前に実際の広告を表示する必要がある場合は、広告をクリックしないようにしてください。実際の広告をクリックした場合、AdMob アカウントが停止されることがあります。

追加する端末のハッシュ ID が必要です。 この例では、エミュレーターの ID AdRequest.DEVICE_ID_EMULATOR を指定します。無効なクリックが発生しないように、テスト広告を使用してください。 端末 ID の取得とテスト広告の使用の詳細については、広告のターゲット設定ガイドをご覧ください。

結果

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

インタースティシャル広告はアプリの画面を覆うように表示され、ユーザーは左上(場合によっては右上)の「X」をタップして閉じるか、広告のそれ以外の部分をタップしてリンク先 URL に移動するかを選ぶことになります(一般的には、タップするのはどこでもかまいませんが、特定の領域のみがタップ可能な場合もあります)。

推奨事項

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

関連情報

以下でサンプルのアプリをダウンロードし、インタースティシャル広告の実例を確認することもできます。

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

よくある質問

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

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