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

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

サイズが大きいため、通常は従来型のバナー広告よりも大きな帯域幅が必要になります。そのため、アプリでそれらを事前に読み込んでから表示する手法が推奨されています。これにより、表示される際には広告の準備が整っていることになります。

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

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

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

便利なリソース

まだ目を通していない方は、Android Studio スタートガイドをご覧ください。

事前準備

このガイドで紹介するサンプルコードは、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
    }
}
...

新たにメンバー変数 mInterstitialAd が追加されている点を含めて、アクティビティ内で 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 を指定します。無効なクリックが発生しないように、テスト広告を使用してください。

結果

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

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

推奨事項

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

その他の情報

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

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

よくある質問

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

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