アダプティブ バナーは次世代のレスポンシブ広告で、デバイスごとに広告サイズを最適化して広告のパフォーマンスを最大限に高めます。アダプティブ バナーでは、高さが固定されているスマートバナーに加えて、広告の幅を指定して最適な広告サイズを判断できます。
最適な広告サイズが選択されるように、アダプティブ バナーでは固定の高さではなく、固定のアスペクト比が使用されます。これにより、どのデバイスでも、バナー広告が画面のより一貫した部分を占めるようになり、パフォーマンスの向上につながります。
アダプティブ バナーを使用する場合、特定のデバイスと幅に対して常に一定のサイズが返されます。特定のデバイスでレイアウトをテストした後、広告サイズが変更されていないことを確認できます。ただし、バナー クリエイティブのサイズはデバイスによって異なる場合があります。そのため、広告の高さのばらつきに対応するレイアウトにすることをおすすめします。まれに、アダプティブ サイズ全体が表示されないことがあります。その場合は、標準サイズのクリエイティブがこのスロットの中央に配置されます。
前提条件
- スタートガイドの手順に沿って、Mobile Ads Unity プラグインをインポートし、Mobile Ads SDK を組み込む方法を確認します。
アダプティブ バナーを使用するタイミング
アダプティブ バナーは、業界標準の 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/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.GetPortraitAnchoredAdaptiveBannerAdSizeWithWidth
と AdSize.GetLandscapeAnchoredAdaptiveBannerAdSizeWithWidth
の適切な関数を使用します。