「折りたたみ可能バナー広告」の実装方法について説明します。この広告はまだベータ版ですので、急に仕様変更になったりするかもしれません。記事に間違いがある場合は、ご指摘いただければ幸いです。
折りたたみ可能バナー広告とは
「折りたたみ可能バナー広告」とは、ロードされ初回表示される時にバイ〜ンと大きく表示されて、ボタンを押したらキュキュと小さなサイズになるバナー広告のことです。広告の中で唯一、コンテンツに被ることが許されています。一方で、以下のように制約が多いことが特徴です。
まず公式サイトから学ぼう
まずは公式サイトを見てください。公式のコードを見ますと、もうほとんど普通のバナーの実装と変わらないことがわかります。唯一違うのは、adRequestのExtrasにちょっとした情報をAddしていることですね。簡単ですよね。
ところが、公式サイトの方法をそのまま実装するとリフレッシュ(=ロード)される度に大きくなる可能性があります。バナー広告のリフレッシュの頻度は普通はAdMobの管理画面の自動更新で設定されていると思いますが、リフレッシュの仕組みを使って「適切なタイミング」を実現するのであれば、手動リフレッシュが必要だと思います。でも、面倒くさいですよね。なので、実用的には別の方法で行うのがよいと思われます。
実用的な実装方法
公式サイトの方法をそのまま実装すると、思ってもいないタイミングでバナーが大きくなる可能性があります。これだと誤タップが発生しまくるのではないかと不安になります。なので、自動リフレッシュでかつ、アプリの1回の起動につき1回だけ「一回こっきり」バイ〜ンと大きくさせる実装方法を紹介します。なお、バナーの基本的な実装方法がわからない方は、以前の記事をまずはご参照ください。
「一回こっきり」を実現するためにはExtrasにUUIDをAddします。UUIDというのは他の人と被らない(正確には被る可能性が極めて低い)唯一無二の識別番号のことです。UUIDには、ランダムに生成されたものを使い捨てで利用します。個人情報に関係するUUIDは使用しないようご注意ください。生成されたUUID(UUID_for_Collapsible)を以下のようにExtrasへAddすれば「一回こっきり」を実現できます。
public static BannerView Ad { get; private set; } = null;
public void LoadAd()
{
// iOSのテスト広告IDは "ca-app-pub-3940256099942544/8388050270"
// Androidのテスト広告IDは "ca-app-pub-3940256099942544/2014213617"
Ad = new BannerView("--ここに広告ID--", AdSize.Banner, AdPosition.Bottom);
var adRequest = new AdRequest();
adRequest.Extras.Add("collapsible", "bottom");
adRequest.Extras.Add("collapsible_request_id", UUID_for_Collapsible.ToString());
Ad.LoadAd(adRequest);
}
じゃあ、UUID_for_Collapsibleの中身をどのように生成すればよいのでしょうか。以下のようにStartメソッドの中でGUIDを「一回こっきり」生成すればよいものと思います。このようにすればUUID_for_Collapsibleはアプリが再起動されるまでは同じ値を保持し続けます。
private static Guid? UUID_for_Collapsible = null;
private void Start()
{
if(UUID_for_Collapsible == null) UUID_for_Collapsible = Guid.NewGuid();
}
最後に以下にコードの全体を掲載します。
using System;
using GoogleMobileAds.Api;
using UnityEngine;
public class BannerManager: MonoBehaviour
{
public static BannerManager Instance;
private void Awake()
{
if (Instance == null)
{
Instance = this;
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
}
}
private static Guid? UUID_for_Collapsible = null;
private void Start()
{
if(UUID_for_Collapsible == null) UUID_for_Collapsible = Guid.NewGuid();
}
public static BannerView Ad { get; private set; } = null;
bool LoadAd_Lock = false;
public void LoadAd()
{
if (LoadAd_Lock) return;
LoadAd_Lock = true;
DestroyBannerAd();
// iOSのテスト広告IDは "ca-app-pub-3940256099942544/8388050270"
// Androidのテスト広告IDは "ca-app-pub-3940256099942544/2014213617"
Ad = new BannerView("--ここに広告ID--", AdSize.Banner, AdPosition.Bottom);
Ad.OnBannerAdLoaded += OnLoaded;
Ad.OnBannerAdLoadFailed += OnFailed;
var adRequest = new AdRequest();
adRequest.Extras.Add("collapsible", "bottom");
adRequest.Extras.Add("collapsible_request_id", UUID_for_Collapsible.ToString());
Ad.LoadAd(adRequest);
}
void OnLoaded()
{
LoadAd_Lock = false;
}
void OnFailed(LoadAdError error)
{
DestroyBannerAd();
LoadAd_Lock = false;
}
public void DestroyBannerAd()
{
Ad?.Destroy();
Ad = null;
}
}
使用時の所感
普通サイズのバナーよりもアダプティブバナーの方が「折りたたみ可能広告」が表示される確率が高い気がしました。
UMPのGDPR同意フォームと同時に使用する場合は工夫が必要かもしれません。というのも、プレーヤーがGDPR同意フォームへ同意した後に「折りたたみ可能広告」のロードを開始するので、プレーヤーがちょこちょこ操作しているときにバナーが大きくなる可能性が高いからです。GDPR同意フォームへ同意直後は「折りたたみ可能広告」を出さないといったような対策が必要でしょう。
コメント