バナー広告

バナー広告は、デバイス画面の上部か下部にアプリのレイアウト内の一部分を使用して表示されます。アプリの操作中は画面に表示され続けますが、一定時間が経過すると自動的に更新されるよう設定できます。モバイル広告を初めてお使いの場合は、この広告から始めることをおすすめします。

このガイドでは、Ad Manager のバナー広告を Android アプリに組み込む方法について説明します。コード スニペットと設定手順のほか、バナーの適切なサイズに関する情報、他の関連情報へのリンクも紹介します。

前提条件

レイアウトに AdManagerAdView を追加する

バナーを表示するための最初のステップは、バナーを表示する Activity または Fragment のレイアウトに AdManagerAdView を配置することです。その場合は、対応する XML レイアウト ファイルにレイアウトを追加するのが最も簡単な方法です。以下は、アクティビティの AdManagerAdView を示す例です。

# main_activity.xml
<com.google.android.gms.ads.admanager.AdManagerAdView
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:id="@+id/adManagerAdView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_alignParentBottom="true"
    ads:adSize="BANNER"
    ads:adUnitId="/6499/example/banner">
</com.google.android.gms.ads.admanager.AdManagerAdView>

次の必須属性に注意してください。

  • ads:adSize: 使用する広告サイズに設定します。定数で定義された標準サイズを使用しない場合は、代わりにカスタムサイズを設定できます。詳しくは、バナーサイズのセクションをご覧ください。

  • ads:adUnitId: 広告を表示するアプリ内の広告ユニットに付与される一意の識別子に設定します。異なるアクティビティでバナー広告を表示する場合は、アクティビティごとに広告ユニットが必要になります。

別の方法として、AdManagerAdView をプログラムで作成することもできます。

Java

AdManagerAdView adView = new AdManagerAdView(this);

adView.setAdSizes(AdSize.BANNER);

adView.setAdUnitId("/6499/example/banner");
// TODO: Add adView to your view hierarchy.

Kotlin

val adView = AdManagerAdView(this)

adView.adSizes = AdSize.BANNER

adView.adUnitId = "/6499/example/banner"
// TODO: Add adView to your view hierarchy.

テストは必ずテスト広告で行う

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

下記の Android バナー向けのテスト専用広告ユニット ID を使うと、テスト広告を簡単に読み込むことができます。

/6499/example/banner

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

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

広告を読み込む

AdManagerAdView を実装したら、次に広告を読み込みます。これは、AdManagerAdView クラスの loadAd() メソッドで行います。このタグは、1 つの広告リクエストに関する実行時の情報(ターゲティング情報など)を保持する AdManagerAdRequest パラメータを受け取ります。

ActivityonCreate() メソッドで広告を読み込む方法の例を次に示します。

MainActivity(抜粋)

Java

package ...

import ...
import com.google.android.gms.ads.admanager.AdManagerAdRequest;
import com.google.android.gms.ads.admanager.AdManagerAdView;

public class MainActivity extends AppCompatActivity {
    private AdManagerAdView mAdManagerAdView;

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

        mAdManagerAdView = findViewById(R.id.adManagerAdView);
        AdManagerAdRequest adRequest = new AdManagerAdRequest.Builder().build();
        mAdManagerAdView.loadAd(adRequest);
    }
}

Kotlin

package ...

import ...
import com.google.android.gms.ads.admanager.AdManagerAdRequest
import com.google.android.gms.ads.admanager.AdManagerAdView

class MainActivity : AppCompatActivity() {

    lateinit var mAdManagerAdView : AdManagerAdView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        mAdManagerAdView = findViewById(R.id.adManagerAdView)
        val adRequest = AdManagerAdRequest.Builder().build()
        mAdManagerAdView.loadAd(adRequest)
    }
}

広告ユニットの更新を設定していれば、広告の読み込みに失敗した場合でも、別の広告を明示的にリクエストする必要はありません。Google Mobile Ads SDK では、Ad Manager 管理画面で指定された更新頻度が考慮されます。更新を有効にしていない場合は、新しいリクエストを発行する必要があります。

これで完了です。これで、アプリにバナー広告を表示できるようになりました。

広告イベント

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

AdManagerAdViewAdListener を使用するには、setAdListener() メソッドを呼び出します。

Java

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

    @Override
    public void onAdClosed() {
      // Code to be executed when the user is about to return
      // to the app after tapping on an ad.
    }

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

    @Override
    public void onAdImpression() {
      // Code to be executed when an impression is recorded
      // for an ad.
    }

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

    @Override
    public void onAdOpened() {
      // Code to be executed when an ad opens an overlay that
      // covers the screen.
    }
});

Kotlin

mAdManagerAdView.adListener = object: AdListener() {
    override fun onAdClicked() {
      // Code to be executed when the user clicks on an ad.
    }

    override fun onAdClosed() {
      // Code to be executed when the user is about to return
      // to the app after tapping on an ad.
    }

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

    override fun onAdImpression() {
      // Code to be executed when an impression is recorded
      // for an ad.
    }

    override fun onAdLoaded() {
      // Code to be executed when an ad finishes loading.
    }

    override fun onAdOpened() {
      // Code to be executed when an ad opens an overlay that
      // covers the screen.
    }
}

AdListener のオーバーライド可能な各メソッドは、広告のライフサイクルにおけるイベントに対応しています。

オーバーライド可能なメソッド
onAdClicked() onAdClicked() メソッドは、広告のクリックが記録されると呼び出されます。
onAdClosed() onAdClosed() メソッドは、ユーザーが広告のリンク先 URL を閲覧した後にアプリに戻ると呼び出されます。これを使用することで、アプリは一時停止されたアクティビティを再開したり、アプリを操作可能な状態にするために必要なその他の処理を実行したりできます。
onAdFailedToLoad() onAdFailedToLoad() メソッドは、パラメータを含む唯一のメソッドです。LoadAdError タイプのエラー パラメータは、発生したエラーを示します。詳細については、広告読み込みエラーのデバッグをご覧ください。
onAdImpression() onAdImpression() メソッドは、広告のインプレッションが記録されると呼び出されます。
onAdLoaded() onAdLoaded() メソッドは、広告の読み込みが完了すると実行されます。たとえば、広告の読み込みが確実に完了するまで、アクティビティやフラグメントへの AdManagerAdView の追加を遅らせたい場合は、次のようにします。
onAdOpened() onAdOpened() メソッドは、広告が画面を覆うオーバーレイを開くと呼び出されます。

広告を配置するコンテナのサイズは、バナーのサイズ以上にする必要がある。コンテナにパディングがある場合は、コンテナのサイズが実質的に縮小されます。コンテナがバナー広告に収まらない場合は、バナーは表示されず、次の警告がログに表示されます。

W/Ads: Not enough space to show ad. Needs 320x50 dp, but only has 288x495 dp.

標準のバナーサイズについては、以下の表をご覧ください。

サイズ(単位は dp、幅×高さ) 説明 対象 AdSize の定数値
320x50 バナー スマートフォンとタブレット BANNER
320×100 バナー(大) スマートフォンとタブレット LARGE_BANNER
300×250 IAB レクタングル(中) スマートフォンとタブレット MEDIUM_RECTANGLE
468×60 IAB フルサイズ バナー タブレット FULL_BANNER
728×90 IAB ビッグバナー タブレット LEADERBOARD
指定された幅 × 最適な高さ アダプティブ バナー スマートフォンとタブレット なし
画面の幅×32、50 または 90 スマートバナー スマートフォンとタブレット SMART_BANNER

カスタムのバナーサイズを定義するには、必要な AdSize を次のように設定します。

Java

AdSize adSize = new AdSize(300, 50);

Kotlin

val adSize = AdSize(300, 50)

カスタム広告サイズ

アド マネージャーでは、標準の広告ユニットに加えて、任意のサイズの広告ユニットをアプリに配信できます。広告リクエストで定義された広告サイズ(幅、高さ)は、アプリで表示される広告ビューのサイズ(次の例では AdManagerAdView)と一致する必要があります。

Java

// Define custom AdSize of 250x250 for AdManagerAdView

AdSize customAdSize = new AdSize(250, 250);
AdManagerAdView adView = new AdManagerAdView(this);
adView.setAdSizes(customAdSize);

Kotlin

// Define custom AdSize of 250x250 for AdManagerAdView

val customAdSize = AdSize(250, 250)
val adView = AdManagerAdView(this)
adView.setAdSizes(customAdSize)

Android API デモアプリでカスタム広告サイズを実装するには、アド マネージャーによる複数の広告サイズの実装例をご覧ください。

複数の広告サイズ

アド マネージャーでは、AdManagerAdView で配信できる広告サイズを複数指定できます。この機能を SDK に実装する前に、同じ広告ユニットをターゲットとする広告申込情報を作成し、異なるサイズのクリエイティブに関連付けます。

アプリでは、複数の AdSize パラメータを setAdSizes に渡すだけです。

Java

AdManagerAdView adView = new AdManagerAdView(this);
adView.setAdSizes(AdSize.BANNER, new AdSize(120, 20), new AdSize(250, 250));

Kotlin

val adView = AdManagerAdView(this)
adView.setAdSizes(AdSize.BANNER, AdSize(120, 20), AdSize(250, 250))

更新時に AdManagerAdView のサイズが変更された場合、レイアウトは新しいサイズに自動的に適応できます。AdManagerAdView は、次の広告が返されるまで、最初のパラメータで渡されたサイズにデフォルトで設定されます。

XML レイアウト ファイルで ads:adSizes 属性を使用して、複数の広告サイズを指定することもできます。

<com.google.android.gms.ads.admanager.AdManagerAdView
   android:id="@+id/multiple_ad_sizes_view"
   android:layout_width="wrap_parent"
   android:layout_height="wrap_content"
   android:layout_alignParentBottom="true"
   android:layout_centerHorizontal="true"
   ads:adSizes="BANNER,120x20,250x250"
   ads:adUnitId="AD_UNIT_ID" />

Android API デモアプリで複数の広告サイズを実装するには、アド マネージャーによる複数の広告サイズの実装例をご覧ください。

インプレッションの手動カウント

インプレッションの手動カウントは、クリエイティブがアド マネージャーで直接入稿される直接販売キャンペーンと自社広告キャンペーンでのみ利用できます。バックフィルの広告または、第三者ネットワーク広告には使用できません。詳しくは、インプレッションとクリックをカウントするをご覧ください。

インプレッションを記録するタイミングについて特別な条件がある場合は、インプレッションの ping をアド マネージャーに手動で送信できます。そのためには、広告を読み込む前に、手動インプレッションの AdManagerAdRequest を有効にします。

Java

AdManagerAdRequest adRequest = new AdManagerAdRequest.Builder()
    .setManualImpressionsEnabled(true)
    .build();

Kotlin

val adRequest = AdManagerAdRequest.Builder()
    .setManualImpressionsEnabled(true)
    .build()

広告が正常に返され、画面に表示されていることを確認したら、インプレッションを手動で記録できます。

Java

mAdManagerAdView.recordManualImpression();

Kotlin

mAdManagerAdView.recordManualImpression()

アプリ内イベント

アプリイベントを使用すると、アプリコードにメッセージを送信する広告を作成できます。アプリは、送信されたメッセージに基づいて処理を行います。

アド マネージャーの特定のアプリ内イベントをリッスンするには、AppEventListener を使用します。これらのイベントは、広告ライフサイクルのあらゆるタイミングで(onAdLoaded() が呼び出される前でも)発生する可能性があります。

Java

public interface AppEventListener {
  void onAppEvent(String name, String info);
}

Kotlin

interface AppEventListener {
    fun onAppEvent(name: String, info: String)
}

void onAppEvent(String name, String info) は、広告でアプリイベントが発生すると呼び出されます。このインターフェースは、アクティビティやその他のオブジェクトで実装できます。

Java

import com.google.android.gms.ads.admanager.*;

public class BannerExample extends Activity implements AppEventListener {
}

Kotlin

import com.google.android.gms.ads.admanager.*

class BannerExample : Activity(), AppEventListener {
}

次に AdManagerAdView に渡されます。

Java

mAdManagerAdView.setAppEventListener(this);

Kotlin

mAdManagerAdView.appEventListener = this

以下に、色名を使用したアプリイベントに応じてアプリの背景色を変更する方法の例を示します。

Java

@Override
public void onAppEvent(String name, String info) {
  if ("color".equals(name)) {
    if ("green".equals(info) {
      // Set background color to green.
    } else if ("blue".equals(info) {
      // Set background color to blue.
    } else {
      // Set background color to black.
    }
  }
}

Kotlin

override fun onAppEvent(name: String?, info: String?) {
    if (name == "color") {
        when (info) {
            "green" -> {
                // Set background color to green.
            }
            "blue" -> {
                // Set background color to blue.
            }
            else -> {
                // Set background color to black.
            }
        }
    }
}

また、対応するクリエイティブは次のとおりです。これは、色に関するアプリ内イベント メッセージをリスナーに送信します。

<html>
<head>
  <script src="//www.gstatic.com/afma/api/v1/google_mobile_app_ads.js"></script>
  <script>
    document.addEventListener("DOMContentLoaded", function() {
      // Send a color=green event when ad loads.
      admob.events.dispatchAppEvent("color", "green");

      document.getElementById("ad").addEventListener("click", function() {
        // Send a color=blue event when ad is clicked.
        admob.events.dispatchAppEvent("color", "blue");
      });
    });
  </script>
  <style>
    #ad {
      width: 320px;
      height: 50px;
      top: 0px;
      left: 0px;
      font-size: 24pt;
      font-weight: bold;
      position: absolute;
      background: black;
      color: white;
      text-align: center;
    }
  </style>
</head>
<body>
  <div id="ad">Carpe diem!</div>
</body>
</html>

Android API デモアプリでアプリ内イベントを実装するには、アド マネージャーによるアプリ内イベントの実装例をご覧ください。

動画広告のハードウェア アクセラレーション

バナー広告ビューで動画広告を適切に表示するには、ハードウェア アクセラレーションが有効になっている必要があります。

ハードウェア アクセラレーションはデフォルトで有効になっていますが、アプリによっては無効にすることもできます。これに該当する場合は、広告を使用する Activity クラスでハードウェア アクセラレーションを有効にすることをおすすめします。

ハードウェア アクセラレーションの有効化

ハードウェア アクセラレーションがグローバルでオンになったときにアプリが正しく動作しない場合は、個々のアクティビティに対しても制御できます。ハードウェア アクセラレーションを有効または無効にするには、AndroidManifest.xml<application> 要素と <activity> 要素の android:hardwareAccelerated 属性を使用します。次の例では、アプリ全体でハードウェア アクセラレーションを有効にしていますが、1 つのアクティビティでは無効にしています。

<application android:hardwareAccelerated="true">
    <!-- For activities that use ads, hardwareAcceleration should be true. -->
    <activity android:hardwareAccelerated="true" />
    <!-- For activities that don't use ads, hardwareAcceleration can be false. -->
    <activity android:hardwareAccelerated="false" />
</application>

ハードウェア アクセラレーションの制御オプションについて詳しくは、ハードウェア アクセラレーション ガイドをご覧ください。なお、アクティビティが無効になっている場合は、個々の広告ビューでハードウェア アクセラレーションを有効にできないため、アクティビティ自体でハードウェア アクセラレーションを有効にする必要があります。

補足資料

GitHub の例

Mobile Ads Garage の動画チュートリアル

次のステップ

以下のトピックを確認してください。