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

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

このガイドでは、インタースティシャル広告を Android アプリに統合する方法について説明します。

前提条件

インタースティシャル広告オブジェクトを作成する

インタースティシャル広告は、InterstitialAd オブジェクトによってリクエストされ、表示されます。最初に、InterstitialAd のインスタンス化と広告ユニット ID の設定を行います。これは Activity の onCreate() メソッドで行います。

Java

package ...

import com.google.android.gms.ads.InterstitialAd;

public class MainActivity extends Activity {

    private InterstitialAd mInterstitialAd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MobileAds.initialize(this, new OnInitializationCompleteListener() {
            @Override
            public void onInitializationComplete(InitializationStatus initializationStatus) {}
        });
        mInterstitialAd = new InterstitialAd(this);
        mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
    }
}

Kotlin

class MainActivity : Activity() {

    private lateinit var mInterstitialAd: InterstitialAd

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        MobileAds.initialize(this) {}
        mInterstitialAd = InterstitialAd(this)
        mInterstitialAd.adUnitId = "ca-app-pub-3940256099942544/1033173712"
    }
}

アクティビティの有効期間中は、1 つの InterstitialAd オブジェクトで複数のインタースティシャル広告をリクエストして表示することが可能なため、オブジェクトの作成は一度で済みます。

テストには必ずテスト広告を使用する

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

テスト広告を読み込むには、次に示す Android インタースティシャル向けのテスト専用広告ユニット ID を使う方法が便利です。

ca-app-pub-3940256099942544/1033173712

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

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

広告を読み込む

インタースティシャル広告を読み込むには、InterstitialAd オブジェクトの loadAd() メソッドを呼び出します。このメソッドは、AdRequest オブジェクトを単一のパラメータとして受け取ります。

Java

package ...

import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.InterstitialAd;

public class MainActivity extends Activity {

    private InterstitialAd mInterstitialAd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MobileAds.initialize(this,
            "ca-app-pub-3940256099942544~3347511713");
        mInterstitialAd = new InterstitialAd(this);
        mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
        mInterstitialAd.loadAd(new AdRequest.Builder().build());
    }
}

Kotlin

class MainActivity : Activity() {

    private lateinit var mInterstitialAd: InterstitialAd

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        MobileAds.initialize(this,
            "ca-app-pub-3940256099942544~3347511713")
        mInterstitialAd = InterstitialAd(this)
        mInterstitialAd.adUnitId = "ca-app-pub-3940256099942544/1033173712"
        mInterstitialAd.loadAd(AdRequest.Builder().build())
    }
}

広告を表示する

インタースティシャル広告は、アプリの操作が一時中断するタイミングで表示される必要があります。たとえば、ゲームレベルをクリアした後の合間やタスクが完了した直後などが適しています。インタースティシャルを表示するには、isLoaded() メソッドを使用して読み込みが完了したことを確認してから、show() を呼び出します。先ほどのサンプルコードのインタースティシャル広告は、以下のようにボタンの OnClickListener に表示できます。

Java

mMyButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (mInterstitialAd.isLoaded()) {
            mInterstitialAd.show();
        } else {
            Log.d("TAG", "The interstitial wasn't loaded yet.");
        }
    }
});

Kotlin

mMyButton.setOnClickListener {
    if (mInterstitialAd.isLoaded) {
        mInterstitialAd.show()
    } else {
        Log.d("TAG", "The interstitial wasn't loaded yet.")
    }
}

広告イベント

広告の動作をより細かくカスタマイズするには、広告のライフサイクルで生じるさまざまなイベント(読み込み、開始、終了など)を考慮します。これらのイベントをリッスンするには、AdListener クラスを使用します。

AdListenerInterstitialAd オブジェクトを組み合わせて使用するには、setAdListener() メソッドを呼び出します。

Java

mInterstitialAd.setAdListener(new AdListener() {
    @Override
    public void onAdLoaded() {
        // Code to be executed when an ad finishes loading.
    }

    @Override
    public void onAdFailedToLoad(int errorCode) {
        // Code to be executed when an ad request fails.
    }

    @Override
    public void onAdOpened() {
        // Code to be executed when the ad is displayed.
    }

    @Override
    public void onAdClicked() {
        // Code to be executed when the user clicks on an ad.
    }

    @Override
    public void onAdLeftApplication() {
        // Code to be executed when the user has left the app.
    }

    @Override
    public void onAdClosed() {
        // Code to be executed when the interstitial ad is closed.
    }
});

Kotlin

mInterstitialAd.adListener = object: AdListener() {
    override fun onAdLoaded() {
        // Code to be executed when an ad finishes loading.
    }

    override fun onAdFailedToLoad(errorCode: Int) {
        // Code to be executed when an ad request fails.
    }

    override fun onAdOpened() {
        // Code to be executed when the ad is displayed.
    }

    override fun onAdClicked() {
        // Code to be executed when the user clicks on an ad.
    }

    override fun onAdLeftApplication() {
        // Code to be executed when the user has left the app.
    }

    override fun onAdClosed() {
        // Code to be executed when the interstitial ad is closed.
    }
}

AdListener のオーバーライド可能なメソッドは、それぞれ広告のライフサイクルで生じるイベントに対応しています。

オーバーライド可能なメソッド
onAdLoaded() onAdLoaded() メソッドは、広告の読み込みが完了すると実行されます。
onAdFailedToLoad() onAdFailedToLoad() メソッドには、発生したエラーのタイプを表す errorCode パラメータが含まれています。このパラメータの値は、AdRequest クラスの定数として定義された、次のいずれかの値になります。
  • ERROR_CODE_INTERNAL_ERROR - 内部でエラーが発生している(広告サーバーから無効な応答を受け取った場合など)。
  • ERROR_CODE_INVALID_REQUEST - 広告リクエストが無効(広告ユニット ID が不適切だった場合など)。
  • ERROR_CODE_NETWORK_ERROR - ネットワーク接続が原因で広告をリクエストできなかった。
  • ERROR_CODE_NO_FILL - 広告リクエストは成功したものの、広告枠の不足が原因で広告が返されなかった。
onAdOpened() このメソッドは、広告がデバイスに全画面表示されると呼び出されます。
onAdLeftApplication() このメソッドは、ユーザーが別のアプリ(Google Play など)を起動し、現在のアプリがバックグラウンドに移動すると呼び出されます。
onAdClosed() このメソッドは、ユーザーが「閉じる」アイコンまたは「戻る」ボタンをタップしてインタースティシャル広告を閉じたときに呼び出されます。アプリで音声出力やゲームループを一時停止している場合は、ここで再開することをおすすめします。

AdListener を使用して再読み込みする

前のインタースティシャル広告を表示した後に新しいインタースティシャル広告を読み込むには、AdListener クラスの onAdClosed() メソッドを使うと便利です。

Java

...
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
        MobileAds.initialize(this,
            "ca-app-pub-3940256099942544~3347511713");
    mInterstitialAd = new InterstitialAd(this);
    mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
    mInterstitialAd.loadAd(new AdRequest.Builder().build());

    mInterstitialAd.setAdListener(new AdListener() {
        @Override
        public void onAdClosed() {
            // Load the next interstitial.
            mInterstitialAd.loadAd(new AdRequest.Builder().build());
        }

    });
}
...

Kotlin

...
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
        MobileAds.initialize(this,
            "ca-app-pub-3940256099942544~3347511713")
    mInterstitialAd = InterstitialAd(this)
    mInterstitialAd.adUnitId = "ca-app-pub-3940256099942544/1033173712"
    mInterstitialAd.adListener = object : AdListener() {
        override fun onAdClosed() {
            mInterstitialAd.loadAd(AdRequest.Builder().build())
        }
    }
}
...

おすすめの方法

インタースティシャル広告が自分のアプリに適しているかどうかをよく見極めましょう。
インタースティシャル広告は、画面の切り替わりがあるアプリに適しています。画像の共有やゲームレベルのクリアなど、アプリ内でのタスクが完了したときに、こうした切り替わりがあります。ユーザーもアクションが中断することを想定しているため、利便性を損なわずにインタースティシャル広告を表示することができます。アプリ操作のどのタイミングでインタースティシャル広告を表示し、ユーザーからどのような反応が得られる可能性があるかをご検討ください。
インタースティシャル広告を表示する際には必ずアクションを一時停止しましょう。
インタースティシャル広告には、テキスト、イメージ、動画など、さまざまな種類があります。アプリにインタースティシャル広告を表示する際は、一部のリソースの使用を停止して、広告でそのリソースを利用できるようにすることも重要です。たとえば、インタースティシャル広告を表示するための呼び出しを行う場合は、アプリで行っている音声出力を一時停止してください。音声出力は onAdClosed() イベント ハンドラで再開できます。このハンドラはユーザーが広告の操作を終了すると呼び出されます。また、広告の表示中は、計算の集中処理(ゲームループなど)を一時的に停止することをご検討ください。こうすることで、グラフィックの読み込みが遅れたり、反応が停止したり、動画が途切れたりしなくなります。
十分な読み込み時間を確保しましょう。
インタースティシャル広告の読み込みに時間がかからないようにすることは、適切なタイミングで表示することと同じくらい重要です。show() を呼び出す前に loadAd() を呼び出して広告の読み込みを事前に完了しておくと、表示の段階で待ち時間が発生しません。
過度に広告を表示しないよう注意しましょう。
インタースティシャル広告の表示頻度を引き上げれば、収益を効果的に増やせるように思えますが、ユーザー エクスペリエンスが損なわれてクリック率が低下する可能性もあります。広告が頻繁に表示されることで、ユーザーがアプリを楽しめなくならないようにしてください。

ソースコード

その他のリソース

GitHub のサンプル

  • インタースティシャル広告のサンプルアプリ: Java | Kotlin

チュートリアル動画シリーズ「Mobile Ads Garage」

次のステップ