UnityでAdMobをGDPR対応させる(その2)

AdMob for GDPR Unityプログラミング

この記事では表題の通り、UnityのAdMobをGDPR対応させるためのコードについて説明します。このシリーズの最終ゴールはGDPRに対応させたバナー広告を実機(またはシミュレータ)で表示することです。前回は、GDPRの目的と、ユーザーからGDPR同意を得る大まかなフローについて説明しました。今回からは具体的なプログラミングの説明に入っていきます。前回、GoogleMobileAdsパッケージはインポート済みとして説明していくと言いましたが前言撤回します。やはりインポートから見ていきましょう。

今後説明していく大まかな内容は次のとおりです。

今後の予定
  • その2:AdMob 全体を管理するクラスのコード ←この記事
  • その3:バナーを表示するクラスのコード
  • その4:GDPR同意取得の詳細フロー
  • その5:GDPR同意取得メソッドのコード
  • その6:GDPR同意取得メソッドのコードの補足
  • その7(最終回):GDPR同意取り消しフォームやATT対応について
使用するバージョン

Unity2022.3.29f1
Google Mobile Ads Unity Plugin v9.2.0

Google Mobile Ads Unity Pluginをインポートしよう

Unityを開き、ダウンロードしたGoogle Mobile Ads Unity Pluginをインポートしましょう。メニューのAssets>Import Package>Custom Packageをクリックしてください。

Import Unity Packageというウィンドウが出てきます。Allを押して全てチェックした後、Importを押してください。数十秒処理が続きますので、気長に待ってください。

以上でインポートは完了です。

クラスに分けて管理しよう(閑話)

プログラムはクラスに分けて管理しましょう。C#の基礎やクラスがわからないなら、基礎からしっかり学ぶC#の教科書で勉強しましょう。プログラムを始めた人が最初に挫折するのはクラスです。クラスが使えない人はゲームやアプリのプログラミングはできません。読み終えたらまた戻ってきてください。

クラスは抽象的な考え方です。クラスを腑に落ちるほど理解することは最初は難しいです。何故なら、それはあなたの頭の中に今までなかった考え方だからです。人間は自分が昔経験したこととの照らし合わせで新しいことを理解しようとします。でも、クラスはあなたが今まで出会ったどの考え方とも全く違うので、あなたの頭の中には理解するための足場がありません。だから、まずは覚えるしかありません。しかし、強引に例えるなら、クラスはファンタジー世界の魔法陣のようなものです。最初は、理解できなくても書き方と使い方がわかればよいのです。

AdMobを管理するマネージャークラスを作ろう

さて、脱線しましたが、まずはAdMob全体を管理するマネージャークラスAdMobManagerを作りましょう。差し当たりAndroidのみを対象に作っていきます(iOSもほとんど同じです)。

AdMobManagerクラスの中身は以下のように書いてください。なお、命名規則はMicrosoftの方式に倣っています(大文字の使用規則

using UnityEngine;
using GoogleMobileAds.Api;
using GoogleMobileAds.Common;

public class AdMobManager : MonoBehaviour
{
    public static AdMobManager Instance;
 
    const string DRO_BANNER = "ca-app-pub-3940256099942544/6300978111";// デモ広告ユニットID

    void Awake()
    {
        if (Instance == null)
        {
            Instance = this;
            DontDestroyOnLoad(gameObject);
        }
        else
        {
            Destroy(gameObject);
        }
    }

    void Start()
    {
        MobileAds.Initialize(HandleInitCompleteAction);
    }

    static void HandleInitCompleteAction(InitializationStatus initstatus)
    {
        if (BannerManager.Ad == null) BannerManager.Instance.LoadAd();
    }
}

コードの説明をします。上から順番に見ていきましょう。

AdMobManagerクラスのInstanceがこのクラスの実体(インスタンス)が入る入れ物です。AdMobManagerクラスはシングルトンという作り方で作っています。シングルトンというのは、以下のような機能を実現する作り方のことです。

ポイント
  1. インスタンスがただ一つしか存在しないことが保証される
  2. インスタンスにグローバルアクセスできる

シングルトンを使用すれば、AdMobManagerクラスのメソッドにグローバルアクセスできるようになり、プログラミングが簡単になります。加えて、Unityでは普通のシングルトンだとシーン遷移でインスタンスが破棄されてしまいますので、Awakeメソッド内でDontDestroyOnLoadによってシーン遷移でも破棄されないように処理しています。つまり、Don’t Destroyのシングルトンを作るってわけです。

DRO_BANNERはデモ広告ユニットIDですが、後ほど使いますが今は触れません。

AdMobの初期化はStartメソッドの中で行なっています。HandleInitCompleteActionメソッドは初期化が完了した時に呼ばれるメソッドです。そのメソッドの中でバナー広告をロードします。BannerManagerには赤線が引かれて警告が出ているかと思いますが、それはBannerManagerをまだ作っていないからです。

以上、まとめますと以下の通りです。

ポイント
  1. AdMobManagerはDon’t Destroyのシングルトンでつくりましょう
  2. MobileAds.InitializeはAdMobの初期化を行うメソッドです
  3. HandleInitCompleteActionはAdMob初期化完了時に呼ばれるメソッドです

終わりに

今回はAdMobの全体を管理するAdMobManagerクラスを作りました。冒頭で述べたGDPR同意取得メソッドはこのクラスの中に作りますが、それは少し先になります。次回はバナーを管理するBannerManagerクラスを作りましょう。

このシリーズの記事

コメント