※ これは 2021/04/09 時点の Unity 2020.3.3f1, Xcode 12.4, AdMob v5.4.0 の情報です
最新版では動作が異なる可能性がありますのでご注意ください
前回はざっくり iOS 14 の ATT 許可ダイアログ表示をできるようにしてみたが、実際には単体で対応することは少なく、広告表示や利用状況分析の SDK を使うために必要になることが多い
というわけで今回は広告表示のほぼデファクトになりつつある AdMob SDK を利用する場合、上記前回の手順に加えて必要になる iOS 14 ATT 対応を試してみる
スポンサードリンク
AdMob 自体の導入手順は 公式サイト をはじめいくらでも紹介されていると思うので省略
まず AdMob の設定用 ScriptableObject
を下記のように設定
App ID などは今回はテスト用の ID を設定し、許可を得るまで測定を開始しないように Delay app measurement
に忘れずにチェックを入れるようにする
次に広告表示用に下記のようなサービスクラスを用意
using GoogleMobileAds.Api; /// <summary> /// 広告制御サービスクラス /// </summary> public class AdvertisingService { /// <summary> /// ユーザー情報収集許可フラグ /// </summary> private bool isTrackingEnable = false; /// <summary> /// フッターバナー広告 /// </summary> private BannerView footerBannerView = null; /// <summary> /// バナー広告ユニットID(テスト用) /// </summary> private const string BannerAdUnitId = @"ca-app-pub-3940256099942544/6300978111"; /// <summary> /// 初期化 /// </summary> /// <param name="isTrackingEnable">ユーザー情報収集許可フラグ</param> public void Initialize(bool isTrackingEnable) { this.isTrackingEnable = isTrackingEnable; MobileAds.Initialize(OnInitializeCompleted); } /// <summary> /// AdMob 初期化完了イベントハンドラ /// </summary> /// <param name="status"></param> private void OnInitializeCompleted(InitializationStatus status) { var builder = new AdRequest.Builder(); if (!this.isTrackingEnable) { // ユーザー情報の収集を止める builder = builder.AddExtra("npa", "1"); } var request = builder.Build(); // フッターバナー広告を読み込んで表示 var adSize = AdSize.GetCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(AdSize.FullWidth); this.footerBannerView = new BannerView(BannerAdUnitId, adSize, AdPosition.Bottom); this.footerBannerView.LoadAd(request); } }
何の変哲もない AdMob でフッターバナー広告を表示するだけのコードで、重要なのは AdRequest
を生成する際にユーザー情報を収集しない場合に AddExtra("npa", "1")
のメソッドを使用するようにすることだけ
あとはもともとあった Bootstrap.cs
を下記のように変更
using UnityEngine; public class Bootstrap : MonoBehaviour { /// <summary> /// 広告制御サービス /// </summary> private AdvertisingService advertisingService = null; /// <summary> /// 開始処理 /// </summary> public async void Start() { #if UNITY_IOS && !UNITY_EDITOR var status = NativeService.GetIOSTrackingAuthorizationStatus(); // 未回答だった場合は ATT 許可要求ダイアログを表示 if (!status.HasValue) { status = await NativeService.RequestTrackingAuthorization() as bool?; } // 本当はシーン遷移などに備えて何らかの方法でシングルトン化した方がよい this.advertisingService = new AdvertisingService(); if (status.Value) { // 許可時の処理 this.advertisingService.Initialize(true); } else { // 不許可時の処理 this.advertisingService.Initialize(false); } #endif } }
許可状態に応じて広告制御サービスの初期化を切り替える
あとは AdMob の SDK が必要なビルド時の設定を全部やってくれるっぽい
Unity がエクスポートした Xcode のプロジェクトを開いたら・・・
Info.plist
に AdMob 用の SKAdNetworkIdentifier
が自動で追加されていた・・・これはありがたい
さっそくビルドして動かしてみると
ATT 許可を拒否しても AdMob のフッターバナー広告が表示された!