アンカー アダプティブ バナー

アダプティブ バナーは次世代のレスポンシブ広告であり、デバイスごとに広告サイズを最適化してパフォーマンスを最大化します。アダプティブ バナーでは、高さが固定されたもののみをサポートしていたスマートバナーを改良しました。アダプティブ バナーでは、広告の幅を指定して、それを基に最適な広告サイズを決定できます。

最適な広告サイズを選択するために、アダプティブ バナーでは、高さが固定されているのではなく、固定のアスペクト比が使用されます。その結果、バナー広告は、デバイスの種類を問わず常に画面上でより広い範囲を占めるようになり、パフォーマンスの向上につながります。

アダプティブ バナーを使用する場合、特定のデバイスと幅では、常に一定のサイズが返されます。特定のデバイスでレイアウトをテストしたら、広告サイズは変わらないことを確認します。ただし、バナー クリエイティブのサイズはデバイスによって異なる場合があります。そのため、広告の高さのばらつきに対応するレイアウトをおすすめします。ごくまれに、アダプティブ サイズがフルに埋められず、標準サイズのクリエイティブがこのスロットの中央に配置されることがあります。

前提条件

アダプティブ バナーの用途

アダプティブ バナーは、業界標準の 320×50 のバナーサイズと、後継となるスマートバナー フォーマットの差し替えとしてご利用いただけます。

これらのバナーサイズはアンカーバナーとして使用され、通常は画面の上部または下部に固定されます。

アダプティブ バナーを使用した場合のアスペクト比は、標準の 320×50 の広告とほぼ同じになります。下の 3 つの例をご覧ください。


320×50 バナー

アダプティブ バナー

スマートバナー

アダプティブ バナーでは、使用可能な画面サイズを有効活用できます。また、次のような理由から、スマートバナーと比べるとアダプティブ バナーのほうが適しています。

  • 幅を強制的に全画面表示にするのではなく、指定した任意の幅が使用されるため、iOS ではセーフエリア、Android ではディスプレイ カットアウトに対応できます。

  • さまざまなサイズのデバイスに対して一定の高さではなく、特定のデバイスに最適な高さを選択することで、デバイスの断片化の影響を軽減します。

実装上の注意

アプリにアダプティブ バナーを実装する際は、以下の点にご注意ください。

  • 広告が配置されるビューの幅を把握している必要があります。また、デバイスの幅と、適用されるセーフエリアやカットアウトも考慮する必要があります
  • 小さいサイズの広告が広告スロットには表示されない場合、AdMob のポリシーに準拠するように、広告ビューの背景が不透明であるようにします。
  • Google Mobile Ads Unity プラグインの最新バージョンを使用していることを確認します。メディエーションについては、各メディエーション アダプタの最新バージョンを使用してください。
  • アダプティブ バナーのサイズは、利用可能な全幅を使用した場合に最大限に効果を発揮するように設計されています。ほとんどの場合、使用するデバイスの画面の全幅になります。適切な安全領域を考慮してください。
  • Google Mobile Ads SDK では、アダプティブ AdSize API を使用している場合、指定された幅に対して最適化された広告の高さでバナーのサイズが変更されます。
  • アダプティブ バナーの広告サイズを取得するには、3 つのメソッドがあります。AdSize.GetLandscapeAnchoredAdaptiveBannerAdSizeWithWidth(横向き)、AdSize.GetPortraitAnchoredAdaptiveBannerAdSizeWithWidth(縦向き)、AdSize.GetCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(実行時の現在の向き)です。
  • 各デバイスで特定の幅に対して返されるサイズは常に同じであるため、1 つのデバイスでレイアウトをテストすると、広告サイズは変わらないことを確認できます。
  • アンカーバナーの高さは、デバイスの高さの 15% 以下、または密度非依存ピクセル 90 未満、または密度非依存ピクセル 50 以上である必要があります。
  • 全幅バナーの場合は、特定の幅を指定する代わりに、AdSize.FullWidth フラグを使用できます。

クイックスタート

シンプルなアダプティブ アンカー バナーを実装する手順は次のとおりです。

  1. アダプティブ バナー広告のサイズを取得します。取得したサイズはアダプティブ バナーのリクエストに使用されます。アダプティブ広告のサイズを取得する手順は次のとおりです。
    1. 使用するデバイスの幅を密度非依存ピクセルから取得するか、画面の全幅を使用しない場合は独自の幅を設定します。Screen.width などの Unity API は絶対ピクセルを返すため、デバイススケール(MobileAds.Utils.GetDeviceScale() から取得可能)で除算する必要があります。
    2. 全幅バナーには AdSize.FullWidth フラグを使用します。
    3. 現在の向きに対応するアダプティブな AdSize オブジェクトを取得するには、広告サイズクラスの適切な静的メソッド(AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(width) など)を使用します。
  2. 広告ユニット ID、アダプティブ サイズ、広告の該当する位置を使用して、BannerView オブジェクトを作成します。
  3. 通常のバナー リクエストと同様に、広告リクエスト オブジェクトを作成し、用意した広告ビューの LoadAd() メソッドを使用してバナーを読み込みます。

サンプルコード

以下は、セーフエリアを考慮して、画面の幅に合わせてアダプティブ バナーを読み込んで再読み込みするスクリプトの例です。

using UnityEngine;
using System;
using GoogleMobileAds.Api;

public class AdaptiveBannerSample : MonoBehaviour
{
    private BannerView _bannerView;

    // Use this for initialization
    void Start()
    {
        // Set your test devices.
        // https://developers.google.com/admob/unity/test-ads
        RequestConfiguration requestConfiguration = new RequestConfiguration
        {
            TestDeviceIds = new List<string>
            {
                AdRequest.TestDeviceSimulator,
                // Add your test device IDs (replace with your own device IDs).
                #if UNITY_IPHONE
                "96e23e80653bb28980d3f40beb58915c"
                #elif UNITY_ANDROID
                "75EF8D155528C04DACBBA6F36F433035"
                #endif
            }
        };
        MobileAds.SetRequestConfiguration(requestConfiguration);

        // Initialize the Google Mobile Ads SDK.
        MobileAds.Initialize((InitializationStatus status) => 
        {
            RequestBanner();
        });
    }

    public void OnGUI()
    {
        GUI.skin.label.fontSize = 60;
        Rect textOutputRect = new Rect(
          0.15f * Screen.width,
          0.25f * Screen.height,
          0.7f * Screen.width,
          0.3f * Screen.height);
        GUI.Label(textOutputRect, "Adaptive Banner Example");
    }

    private void RequestBanner()
    {
        // These ad units are configured to always serve test ads.
        #if UNITY_EDITOR
            string adUnitId = "unused";
        #elif UNITY_ANDROID
            string adUnitId = "ca-app-pub-3212738706492790/6113697308";
        #elif UNITY_IPHONE
            string adUnitId = "ca-app-pub-3212738706492790/5381898163";
        #else
            string adUnitId = "unexpected_platform";
        #endif

        // Clean up banner ad before creating a new one.
        if (_bannerView != null)
        {
            _bannerView.Destroy();
        }

        AdSize adaptiveSize =
                AdSize.GetCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(AdSize.FullWidth);

        _bannerView = new BannerView(adUnitId, adaptiveSize, AdPosition.Bottom);

        // Register for ad events.
        _bannerView.OnBannerAdLoaded += OnBannerAdLoaded;
        _bannerView.OnBannerAdLoadFailed += OnBannerAdLoadFailed;

        AdRequest adRequest = new AdRequest();

        // Load a banner ad.
        _bannerView.LoadAd(adRequest);
    }

    #region Banner callback handlers

    private void OnBannerAdLoaded(object sender, EventArgs args)
    {
        Debug.Log("Banner view loaded an ad with response : "
                 + _bannerView.GetResponseInfo());
        Debug.Log("Ad Height: {0}, width: {1}",
                _bannerView.GetHeightInPixels(),
                _bannerView.GetWidthInPixels());
    }

    private void OnBannerAdLoadFailed(LoadAdError error)
    {
        Debug.LogError("Banner view failed to load an ad with error : "
                + error);
    }

    #endregion
}

ここでは、関数 AdSize.GetCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth を使用して、現在のインターフェースの向きで固定された位置に表示されるバナーのサイズを取得しています。特定の向きのアンカーバナーをプリロードするには、AdSize.GetPortraitAnchoredAdaptiveBannerAdSizeWithWidthAdSize.GetLandscapeAnchoredAdaptiveBannerAdSizeWithWidth の適切な関数を使用します。