アダプティブ バナー

次世代のレスポンシブ広告であるアダプティブ バナーは、デバイスごとに広告サイズを最適化して広告の効果を高めます。アダプティブ バナーはスマートバナーが改良されたもので、スマートバナーの広告の高さが固定されているのに対し、アダプティブ バナーではお客様が指定する広告の幅に応じて、自動的に最適な広告サイズが決定されます。

最適な広告サイズが選択されるように、アダプティブ バナーでは固定された高さではなく、固定されたアスペクト比が使用されます。これにより、デバイスが異なってもバナー広告は一貫して画面のほぼ同じ分量のスペースを占めることになり、広告の掲載結果の向上につながります。

アダプティブ バナーでは、指定されたデバイスと幅が同じであれば、常に同じサイズの広告が返されます。テスト時にデバイスで確認したレイアウトが後で変化することはありません。ただし、デバイスが異なれば、バナー クリエイティブのサイズは変化する可能性があります。したがって、レイアウトを検討する際には、いくつかの広告の高さに対応できるようにすることをおすすめします。まれなケースとして、最適化されたサイズがスロットに収まらない場合は、標準サイズのクリエイティブがスロットの中央に配置されることもあります。

前提条件

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

アダプティブ バナーは、業界標準の 320×50 のバナーおよびスマートバナーとの完全互換性を備えています。

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

アンカー型のアダプティブ バナーのアスペクト比は、標準型の 320×50 の広告とほぼ同様になります(以下の 3 つのサンプルをご覧ください)。


320×50 バナー

アダプティブ バナー

スマートバナー

アダプティブ バナーを使用すると、画面スペースをより有効に活用できます。また、スマートバナーと比較して、アダプティブ バナーには以下のようなメリットがあります。

  • 画面の横幅いっぱいを使用するのではなく、指定された幅で広告を表示できるため、iOS のセーフエリアおよび Android ディスプレイ カットアウトに対応できます。

  • サイズの異なるデバイスに対して一定の高さを使用するのではなく、デバイスごとに最適な高さが選択されるので、デバイスの細分化の影響を最小限に抑えることができます。

実装に関する注意事項

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

  • 使用する Google Mobile Ads Unity プラグインが最新バージョンであることを確認します。メディエーションを利用する場合は、最新バージョンのメディエーション アダプタを使用してください。
  • アダプティブ バナーは、利用できるスペースの横幅いっぱいに表示すると最も効果を発揮するように設計されています。ほとんどの場合は、デバイスの画面の全幅を使用できます。セーフエリアがある場合は、そのスペースも考慮に入れてください。
  • Google Mobile Ads SDK では、アダプティブ バーナーの AdSize API を使用して、指定された幅に対する最適な高さでバナーのサイズを設定します。
  • アダプティブ バナーの広告サイズを取得するメソッドは、デバイスの向きに応じて、AdSize.GetLandscapeAnchoredAdaptiveBannerAdSizeWithWidth(横向き)、AdSize.GetPortraitAnchoredAdaptiveBannerAdSizeWithWidth(縦向き)、AdSize.GetCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(実行時の向き)の 3 種類があります。
  • 同じデバイス、同じ幅に対しては常に同じ広告サイズが返されるため、一度レイアウトをテストすれば、その後の確認は不要になります。そのデバイスでは同じレイアウトが維持されます。
  • アンカー型のバナーの高さは、デバイスの高さの 15% 以下、または密度非依存ピクセル 90 以下で、密度非依存ピクセル 50 以上である必要があります。
  • 全幅表示のバナーの場合、特定の幅を指定する代わりに AdSize.FullWidth フラグを使用できます。

クイックスタート

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

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

サンプルコード

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

using UnityEngine;
using System;
using GoogleMobileAds.Api;

public class NewMonoBehaviour : MonoBehaviour
{
    private BannerView bannerView;

    // Use this for initialization
    void Start()
    {
        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 (this.bannerView != null)
        {
            this.bannerView.Destroy();
        }

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

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

        // Register for ad events.
        this.bannerView.OnAdLoaded += this.HandleAdLoaded;
        this.bannerView.OnAdFailedToLoad += this.HandleAdFailedToLoad;
        this.bannerView.OnAdOpening += this.HandleAdOpened;
        this.bannerView.OnAdClosed += this.HandleAdClosed;
        this.bannerView.OnAdLeavingApplication += this.HandleAdLeftApplication;

        AdRequest adRequest = new AdRequest.Builder()
            .AddTestDevice(AdRequest.TestDeviceSimulator)
            .AddTestDevice("0123456789ABCDEF0123456789ABCDEF")
            .Build();

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

    #region Banner callback handlers

    public void HandleAdLoaded(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleAdLoaded event received");
        MonoBehaviour.print(String.Format("Ad Height: {0}, width: {1}",
            this.bannerView.GetHeightInPixels(),
            this.bannerView.GetWidthInPixels()));
    }

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

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

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

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

    #endregion
}

ここでは、AdSize.GetCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth 関数を使用して、現在の画面の向きで表示するアンカー型のバナーのサイズを取得しています。特定の向きのバナーをプリロードするには、AdSize.GetPortraitAnchoredAdaptiveBannerAdSizeWithWidth および AdSize.GetLandscapeAnchoredAdaptiveBannerAdSizeWithWidth の適切な関数を使用してください。