バナー広告

バナー広告は、画面の一部分に表示される長方形のイメージ広告またはテキスト広告で、アプリの操作中は画面に表示され続けます。一定時間が経過すると自動的に更新されるよう設定できます。モバイル広告を初めてお使いの場合は、この広告から始めるのが最適です。 事例紹介

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

前提条件

スタートガイドの手順を完了し、Unity アプリに Google Mobile Ads Unity プラグインをインポートしておく必要があります。

BannerView を作成する

バナーを表示するための最初のステップとして、GameObject に追加された C# スクリプトに BannerView オブジェクトを作成します。

using System;
using UnityEngine;
using GoogleMobileAds.Api;
...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private BannerView bannerView;
    ...
    public void Start()
    {
        #if UNITY_ANDROID
            string appId = "ca-app-pub-3940256099942544~3347511713";
        #elif UNITY_IPHONE
            string appId = "ca-app-pub-3940256099942544~1458002511";
        #else
            string appId = "unexpected_platform";
        #endif

        // Initialize the Google Mobile Ads SDK.
        MobileAds.Initialize(appId);

        this.RequestBanner();
    }

    private void RequestBanner()
    {
        #if UNITY_ANDROID
            string adUnitId = "ca-app-pub-3940256099942544/6300978111";
        #elif UNITY_IPHONE
            string adUnitId = "ca-app-pub-3940256099942544/2934735716";
        #else
            string adUnitId = "unexpected_platform";
        #endif

        // Create a 320x50 banner at the top of the screen.
        this.bannerView = new BannerView(adUnitId, AdSize.Banner, AdPosition.Top);
    }
}

BannerView のコンストラクタには、次のパラメータがあります。

  • adUnitId - BannerView が広告を読み込む AdMob 広告ユニットの ID です。
  • AdSize - 使用する AdMob 広告のサイズです(詳しくは、バナーのサイズをご覧ください)。
  • AdPosition - バナー広告を配置する位置です。AdPosition 列挙型は、広告の位置として有効な値を示します。

プラットフォームに応じて異なる広告ユニットが使用されることにご注意ください。iOS で広告をリクエストするには iOS 広告ユニットを使用し、Android でリクエストするには Android 広告ユニットを使用する必要があります。

(省略可)カスタムの広告の位置

BannerView が画面上で配置される場所を、AdPosition 値による指定よりも柔軟に管理するには、x 座標と y 座標のパラメータを持つ コンストラクタを使用します。

// Create a 320x50 banner ad at coordinate (0,50) on screen.
BannerView bannerView = new BannerView(adUnitId, AdSize.Banner, 0, 50);

BannerView の左上の位置が、コンストラクタに渡される x 値と y 値で指定されます(原点は画面の左上です)。

(省略可)カスタムの広告サイズ

広告には AdSize 定数値を使用できるほか、カスタムのサイズを指定することもできます。

AdSize adSize = new AdSize(250, 250);
BannerView bannerView = new BannerView(adUnitId, adSize, AdPosition.Bottom);

常にテスト広告でテストする

上のサンプルコードには広告ユニット ID が含まれ、これを使って自由に広告をリクエストできます。この ID は、個々のリクエストに対して実際の広告ではなくテスト広告を返すよう特別に構成されているため、安全に使用できます。

ただし、AdMob 管理画面でアプリを登録し、アプリで使用する独自の広告ユニット ID を作成した場合は、開発時にデバイスをテストデバイスとして明示的に設定する必要があります。これは非常に重要です。実際の広告を使ったテストは(広告をタップしなくても)AdMob ポリシー違反とみなされ、アカウントの停止につながる可能性があります。開発時に常にテスト広告を取得する方法については、テスト広告をご覧ください。

広告を読み込む

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

以下は、広告を読み込む方法の例です。

...
    private void RequestBanner()
    {
        #if UNITY_ANDROID
            string adUnitId = "ca-app-pub-3940256099942544/6300978111";
        #elif UNITY_IPHONE
            string adUnitId = "ca-app-pub-3940256099942544/2934735716";
        #else
            string adUnitId = "unexpected_platform";
        #endif

        // Create a 320x50 banner at the top of the screen.
        this.bannerView = new BannerView(adUnitId, AdSize.Banner, AdPosition.Top);

        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();

        // Load the banner with the request.
        this.bannerView.LoadAd(request);
    }
...

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

広告イベント

広告の動作をより細かくカスタマイズするには、広告のライフサイクルで生じるさまざまなイベント(読み込み、開始、終了など)を利用します。以下に示すように、適切な EventHandler にデリゲートを登録して、これらのイベントをリッスンします。

...
using System;
using UnityEngine;
using GoogleMobileAds.Api;
...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private BannerView bannerView;

    public void Start()
    {
        this.RequestBanner();
    }

    private void RequestBanner()
    {

        #if UNITY_ANDROID
            string adUnitId = "ca-app-pub-3940256099942544/6300978111";
        #elif UNITY_IPHONE
            string adUnitId = "ca-app-pub-3940256099942544/2934735716";
        #else
            string adUnitId = "unexpected_platform";
        #endif

        this.bannerView = new BannerView(adUnitId, AdSize.Banner, AdPosition.Top);

        // Called when an ad request has successfully loaded.
        this.bannerView.OnAdLoaded += this.HandleOnAdLoaded;
        // Called when an ad request failed to load.
        this.bannerView.OnAdFailedToLoad += this.HandleOnAdFailedToLoad;
        // Called when an ad is clicked.
        this.bannerView.OnAdOpening += this.HandleOnAdOpened;
        // Called when the user returned from the app after an ad click.
        this.bannerView.OnAdClosed += this.HandleOnAdClosed;
        // Called when the ad click caused the user to leave the application.
        this.bannerView.OnAdLeavingApplication += this.HandleOnAdLeavingApplication;

        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();

        // Load the banner with the request.
        this.bannerView.LoadAd(request);
    }

    public void HandleOnAdLoaded(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleAdLoaded event received");
    }

    public void HandleOnAdFailedToLoad(object sender, AdFailedToLoadEventArgs args)
    {
        MonoBehaviour.print("HandleFailedToReceiveAd event received with message: "
                            + args.Message);
    }

    public void HandleOnAdOpened(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleAdOpened event received");
    }

    public void HandleOnAdClosed(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleAdClosed event received");
    }

    public void HandleOnAdLeavingApplication(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleAdLeavingApplication event received");
    }
}

OnAdFailedToLoad イベントには特別なイベント引数が含まれます。このイベントが渡す HandleAdFailedToLoadEventArgs のインスタンスには、エラーについて説明する Message が含まれます。

public void HandleOnAdFailedToLoad(object sender, AdFailedToLoadEventArgs args)
{
  MonoBehaviour.print("Banner failed to load: " + args.Message);
  // Handle the ad failed to load event.
};
広告イベント説明
OnAdLoaded OnAdLoaded イベントは、広告の読み込みが完了すると実行されます。
OnAdFailedToLoad OnAdFailedToLoad イベントは、広告の読み込みに失敗すると呼び出されます。Message パラメータは、発生した障害のタイプを示します。
OnAdOpening ユーザーが広告をタップしたときに呼び出されるメソッドです。分析パッケージを使用してクリックスルーをトラッキングしている場合は、ここで記録することをおすすめします。
OnAdClosed ユーザーが広告のリンク先 URL にアクセスした後でアプリに戻るときに呼び出されるメソッドです。一時停止中のアクティビティを再開したり、アプリを操作可能な状態にするために必要な他の動作を実行したりするには、このメソッドを使用します。
OnAdLeavingApplication onAdOpened の後にユーザーが別のアプリ(Google Play ストアなど)を起動し、現在のアプリがバックグラウンドに移動すると、このメソッドが呼び出されます。

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

サイズ(単位は 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
今後はスマートバナーに代わってアダプティブ バナーが使用される予定です。詳しくは、アダプティブ バナーをご覧ください。

バナー広告を消去する

BannerView の使用を終了する場合は、必ず Destroy() メソッドを呼び出してから参照を削除するようにしてください。

bannerView.Destroy();

これにより、オブジェクトが使用されなくなり、占有されていたメモリを再利用できることがプラグインに通知されます。このメソッドを呼び出さないと、メモリリークが発生します。

その他の参考情報

サンプル

成功事例