アダプティブ バナーは次世代のレスポンシブ広告であり、デバイスごとに広告サイズを最適化して成果を最大化します。アダプティブ バナーでは、スマートバナーは固定の高さしかサポートされていませんでしたが、改良されたアダプティブ バナーでは、広告の幅を指定して、その幅に基づいて最適な広告サイズを判断できます。
最適な広告サイズを選択するために、アダプティブ バナーでは、固定された高さではなく、固定のアスペクト比が使用されます。その結果、どのデバイスでも画面の一貫性の高い部分をバナー広告が占有するようになり、パフォーマンスが向上します。
アダプティブ バナーを使用する際は、特定のデバイスと幅において、常に同じサイズが返されることに注意してください。特定のデバイスでレイアウトをテストしたら、広告サイズが変化しないことを確認できます。ただし、バナー クリエイティブのサイズはデバイスによって異なる場合があります。そのため、レイアウトはさまざまな広告の高さに対応することをおすすめします。まれに、アダプティブ サイズのフルサイズが表示されず、標準サイズのクリエイティブがこのスロットの中央に配置されることがあります。
前提条件
アダプティブ バナーを使用するタイミング
アダプティブ バナーは、業界標準の 320×50 のバナーサイズと、それより優先されるスマートバナー フォーマットの両方を置き換えることができるように設計されています。
これらのバナーサイズは、アンカーバナーとしてよく使用され、通常は画面の上部または下部に固定されます。
このようなアンカー型バナーのアダプティブ バナーのアスペクト比は、標準の 320×50 の広告のアスペクト比とほぼ同じになります。下の 3 つの例をご覧ください。
320×50 のバナー |
アダプティブ バナー |
スマートバナー |
アダプティブ バナーは利用可能な画面サイズを活用して、また、スマートバナーと比較すると、アダプティブ バナーは以下の点で優れています。
幅を強制的に全画面表示にするのではなく、指定した任意の幅を使用するため、iOS ではセーフエリア、Android ではディスプレイ カットアウトを考慮できます。
サイズの異なるデバイスに対して一定の高さを使用するのではなく、特定のデバイスに最適な高さが選択され、デバイスの断片化の影響が軽減されます。
実装上の注意
アプリにアダプティブ バナーを実装する際は、次の点に注意してください。
- 広告を配置するビューの幅を把握しておく必要があります。デバイスの幅に加え、セーフエリアやカットアウトも考慮する必要があります。
- 広告スロットを埋めない小さいサイズの広告サイズを配信する場合は、AdMob ポリシーに準拠するため、広告ビューの背景が不透明なものになるようにしてください。
- Google Mobile Ads Unity プラグインの最新バージョンを使用していることを確認します。メディエーションでは、最新バージョンの各メディエーション アダプタを使用してください。
- アダプティブ バナーのサイズは、利用可能な幅いっぱいにした場合に最も効果を発揮するように設計されています。ほとんどの場合、この値は使用中のデバイスの画面の横幅になります。該当する場合は、セーフエリアを考慮するようにしてください。
- アダプティブ AdSize API を使用する場合、Google Mobile Ads SDK は指定された幅に対して、最適化された広告の高さでバナーのサイズを調整します。
- アダプティブ バナーの広告サイズを取得するには、
AdSize.GetLandscapeAnchoredAdaptiveBannerAdSizeWithWidth
(横向き)、AdSize.GetPortraitAnchoredAdaptiveBannerAdSizeWithWidth
(縦向き)、AdSize.GetCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth
(実行時の向き)の 3 つの方法があります。 - 特定のデバイスで特定の幅に対して返されるサイズは常に同じであるため、特定のデバイスでレイアウトをテストすれば、広告サイズは変化しないことを確認できます。
- アンカーバナーの高さは、デバイスの高さの 15% または密度非依存ピクセル 90 ピクセルのうち、小さい方以下、50 ピクセル以上である必要があります。
- 全幅バナーの場合は、特定の幅を指定する代わりに
AdSize.FullWidth
フラグを使用できます。
クイックスタート
シンプルなアダプティブ アンカー バナーを実装する手順は以下のとおりです。
- アダプティブ バナー広告のサイズを取得します。取得したサイズはアダプティブ バナーのリクエストに使用されます。アダプティブ バナーの広告サイズを取得するには、以下をご確認ください。
- 使用されるデバイスの幅を密度非依存ピクセルで取得します。画面の全幅を使用しない場合は独自の幅を設定します。
Screen.width
などの Unity API は絶対ピクセルを返すため、デバイス スケール(MobileAds.Utils.GetDeviceScale()
から取得可能)で除算する必要があります。 - 全幅バナーには
AdSize.FullWidth
フラグを使用します。 - 現在の向きに対してアダプティブな
AdSize
オブジェクトを取得するには、広告サイズクラスの適切な静的メソッド(AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(width)
など)を使用します。
- 使用されるデバイスの幅を密度非依存ピクセルで取得します。画面の全幅を使用しない場合は独自の幅を設定します。
- 広告ユニット ID、アダプティブ サイズ、広告の適切な位置を指定した
BannerView
オブジェクトを作成します。 - 通常のバナー リクエストの場合と同様に、広告リクエスト オブジェクトを作成し、準備済みの広告ビューで
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/ad-manager/mobile-ads-sdk/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.GetPortraitAnchoredAdaptiveBannerAdSizeWithWidth
と AdSize.GetLandscapeAnchoredAdaptiveBannerAdSizeWithWidth
の関連する関数を使用します。