バナー広告

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

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

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

Prerequisites

レイアウトに 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 は、アプリを公開する前に必ずご自身の広告ユニット ID に置き換えてください。

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

広告を読み込む

AdManagerAdView を作成したら、広告を読み込みます。これは、AdManagerAdView クラスの loadAd() メソッドで行います。そのためには、AdManagerAdRequest パラメータを使用して、1 つの広告リクエストに関するランタイムの情報(ターゲティング情報など)を保持しておく必要があります。

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)
    }
}

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

広告イベント

広告の動作をより細かくカスタマイズするには、広告のライフサイクルで生じるさまざまなイベント(読み込み、開始、終了など)を考慮します。これらのイベントは、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() メソッドは、広告からオーバーレイを開いて画面全体が覆われた場合に呼び出されます。

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

サイズ(単位は dp、幅×高さ) 説明 取り扱い AdSize の定数値
320×50 バナー 携帯電話とタブレット 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)

カスタムの広告サイズ

Google アド マネージャーでは、標準の広告ユニットのほか、任意のサイズの広告ユニットをアプリ内で配信できます。広告リクエストで定義された広告サイズ(幅、高さ)は、アプリに表示される広告ビュー(次の例の 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 のサイズが変わった場合は、レイアウトが新しいサイズに合わせて自動的に調整されるようになります。

アプリでサポートされる広告サイズの変更が必要になった場合は、setAdSizes を新しいサイズのリストで呼び出します。

Java

// Drop support for 120x20 ad size.
adView.setAdSizes(AdSize.BANNER, new AdSize(250, 250));

Kotlin

// Drop support for 120x20 ad size.
adView.setAdSizes(AdSize.BANNER, AdSize(250, 250))

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 デモアプリに複数の広告サイズを実装する方法については、アド マネージャーによる複数の広告サイズの実装例をご覧ください。

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

インプレッションを記録するタイミングについて特別な条件がある場合は、インプレッションの信号をアド マネージャーに手動で送信できます。それには、広告を読み込む前に、手動によるインプレッションに対して 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 デモアプリにアプリ内イベントを実装する方法については、アド マネージャーによるアプリ内イベントの実装例をご覧ください。

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

動画広告が動画広告ビューに正常に表示されるようにするには、ハードウェア アクセラレーションを有効にする必要があります。

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

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

ハードウェア アクセラレーションをグローバルに有効にするとアプリが正しく動作しない場合は、個々のアクティビティでの設定が可能です。ハードウェア アクセラレーションを有効または無効にするには、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>

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

参考情報

GitHub の例

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