tetr4lab / AdMobApi

Using Google Mobile Ads (AdMob) with Unity

Home Page:https://zenn.dev/tetr4lab/articles/a5f4436a169915

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

title tags
Unity で Google Mobile Ads (AdMob) を使う
Unity AdMob Android iOS C#

前提

  • Unity 2022.3.25f1
  • Google Mobile Ads Unity Plugin v9.1.0
  • Apple App Store、Google Play Store
  • この記事では、Google Mobile Ads Unity Pluginの一部機能を限定的に使用し、汎用性のない部分があります。
  • この記事では、以下の内容を扱いません。
    • 各ストアのルールやコンソールの使い方など
    • Google Mobile Adsのルールやコンソールの使い方など
    • Unityエディタの使い方やモバイル向けのビルド方法など
  • この記事のソースは、実機でテストしていますが、本番広告でのテストはしていません。
    • テストは限定的で、デバイスやシチュエーションなどを網羅していません。
    • プロジェクトで使用したIDはテスト用のもので、ストアで公開する製品に使用できるものではありません。

できること

  • AndroidまたはiOSで、AdMobを利用します。
  • 複数のバナー、インタースティシャル、リワードビデオ広告の表示を制御し、状況に応じて広告を切り替えます。
  • 報酬の獲得を検出します。

制限事項

  • Project Settings > Player > Resolution Scaling > Resolution Scaling ModeFixed DPIだと、バナーのサイズを正しく取得できない可能性が高いです。
    • Disabledでの使用を推奨します。

リソース

このプロジェクト

Google Mobile Ads Unity Plugin

プラグインの導入方法

  • サンプルプロジェクトを最初に開いた場合など、Unityエディタ上にエラーが出ている場合は、サンプルプロジェクトの使い方 > 導入を参照してエラーを解消してください。
    • エラーが出ている状態でプラグインを導入すると、正常に機能しない場合があります。
  • 上記の「リリース」からGoogle Mobile Ads Unity Plugin のパッケージ(.unitypackage)をダウンロードします。
  • Assets > Import Package > Custom Package... でパッケージを導入します。
  • Assets > External Dependency Manager > XXXXX Resolver > Resolve を実施します。
  • Assets > Google Mobile Ads > Settings... で、AppIDを設定します。
    • 以下のAppIDが、テスト用にGoogleから提供されています。
      • Android: ca-app-pub-3940256099942544~3347511713
      • iOS: ca-app-pub-3940256099942544~1458002511
    • 必要に応じて、AdMobのコンソールで本番IDを取得してください。

サンプルプロジェクトの使い方

導入

  • このサンプルプロジェクトは、Google Mobile Ads Unity Pluginを含まないため、未導入の状態でリポジトリをクローンしてエディタで開こうとするとエラーします。
    • エラーが生じている場合は、Edit > Project Settings... > Player > Other Settings > Scripting Define Symbols で、ALLOW_ADS_ALLOW_ADSにしてApplyボタンを押してください。
  • エラーのなくなった状態で、プラグインを導入して、AppIDの設定まで終えてください。
  • プラグインの導入が完了したら、シンボルALLOW_ADSを戻して、忘れずにApplyボタンを押してください。

機能

  • 実行すると、テストバナーを表示します。
  • バナーボタンを押すと、バナーの表示状態を切り替えます。
    • 右の切り替えボタンを押すとバナーのサイズを切り替えます。
  • インタースティシャルボタンを押すと、全画面広告が表示されます。
  • リワードボタンを押すと全画面広告が表示され、規定時間視聴すると報酬が得られます。
    • 報酬は累積表示されます。
  • バナー、インタースティシャル、リワードの各広告の表示は相互に排他的です。

ファイル構成

  • 汎用
    • AdMobObj.cs
      • 広告を制御するコンポーネント(物理広告クラス)です。
    • AdMobApi.cs
      • 論理広告クラスです。
    • DodgeBanner.cs
      • ゲームオブジェクトにアタッチすることで、表示状態に応じてバナーを避けるように制御します。
    • SetCanvasBounds.cs
      • ゲームオブジェクトにアタッチすることで、セーフアエリアに整合するように制御します。
    • TaskEx.cs
      • System.Threading.Tasksを拡張するクラスで、前述した一部のクラスが依存しています。
  • 参考
    • SampleScene.unity
      • サンプルシーンです。
    • SwitchPanel.cs
      • サンプルシーンで広告を制御しています。

EEA域外でUMPのテストを行う

  • シンボルDEBUG_GEOGRAPHY_EEAが定義されていると、対象領域の外でもUMPのダイアログが表示されるようになります。
  • なお、AdMobコンソールの同意管理プラットフォーム(CMP)で「GDPRが適用される国」以外もターゲットに指定した場合は、この設定に拠らず常にダイアログが表示されます。

自分のプロジェクトでの使い方

概念

  • 《ユニット》
    • 論理広告クラス(AdMobApi)のインスタンスです。
    • 《シーン》と、シーン毎に0から始まる「ユニット番号」で特定されます。
    • 「AdMobの広告ユニット」は「広告ユニット」と表記します。
  • 《シーン》
    • 文字列の名前を持った《ユニット》のグループです。
      • 名前で特定されます。
      • 所属する《ユニット》には、《シーン》内でユニークな「ユニット番号」が与えられます。
    • 同時に表示可能な《ユニット》だけが同一《シーン》に所属でき、個々の《シーン》は排他的に使用されます。
      • インタースティシャルやリワードは全画面表示なので、同一《シーン》に所属できる《ユニット》はひとつだけになります。
      • プラグイン側の制約で、同一サイズのバナーは、所属する全ての《シーン》で、同じ位置に配置されなければなりません。
        • 例えば、ある《シーン》でAdSize.BannerのバナーがAdPosition.Bottomに配置された場合は、他の全ての《シーン》でもAdPosition.Bottomに配置されなければなりません。
    • 「UnityのScene Asset」は、単に「シーン」と表記します。

導入

プロジェクト

  • プロジェクトに、Google Mobile Ads Unity Plugin のパッケージを導入します。
  • プロジェクトに、AdMobObj.csAdMobApi.csを導入します。
    • シーンの適当なオブジェクトにAdMobObj.csをアタッチします。
      • Donot Destroyで使用する場合は、ルートオブジェクトにアタッチしてください。
  • 必要に応じて、AdMobコンソールで広告ユニットのIDを生成します。
    • 生成したIDを、インスペクタを使用してシーンのAdMobObjコンポーネントに設定します。
    • 生成した広告ユニットを使用する際には、テストデバイスを登録することをお勧めします。
      • テストデバイスでは、本番用のIDを使用してもテスト広告が表示され、安全にテストが可能です。
  • シンボルALLOW_ADSを定義して、広告を使用するコードを有効にしてください。

ネームスペース

以下のネームスペースを使用します。

using GoogleMobileAds.Api;
using GoogleMobileAds.Utility;

シンボル

  • ALLOW_ADS
    • シンボルが定義されている場合のみ広告を使用するコードが有効になります。

列挙型

  • GoogleMobileAds.Api.AdSize
    • Googleにより、バナーのサイズが定義されています。
  • GoogleMobileAds.Api.AdPosition
    • Googleにより、バナーの位置(主に、上、**、下)が定義されています。

初期化

  • AdMobApi.Allowを真にするまで初期化は実行されません。
    • 通常は、オプトイン後に初期化を行います。
  • 初期化の完了はAdMobApi.Acceptableでチェックできます。

生成

  • 《ユニット》の生成時に《シーン》の名前を与え、以降は、その名前で特定します。
    • 通常は、生成したAdMobApiインスタンスを保持する必要はありません。
    • バナーは、同一の《シーン》に複数の《ユニット》を割り当てることができます。
  • 《ユニット》の制御は《シーン》単位で行います。
  • 《ユニット》が生成されてから表示可能になるまでにはラグがあるので、あらかじめを生成しておく必要があります。
  new AdMobApi ("banner", true);
  new AdMobApi ("banner", AdSize.MediumRectangle, AdPosition.Center);
  new AdMobApi ("interstitial");
  new AdMobApi ("rewarded", reward => coins += (int) reward.Amount);

バナー

  • new AdMobApi (string scene, bool bottom);で、名前、下端(!上端)を与えて、アンカーアダプティブバナーを生成します。
  • new AdMobApi (string scene, AdSize size, AdPosition pos)で、名前、サイズ、位置を与えて生成します。

インタースティシャル

  • new AdMobApi (string scene)で、名前を与えて生成します。

リワード

  • new AdMobApi (string scene, Action<Reward> OnAdRewarded)で、名前と報酬獲得時の処理を与えて生成します。

表示の制御

  • AdMobApi.GetActive (string scene)で状態を取得できます。
  • AdMobApi.SetActive (string scene, bool active = true)で状態を制御できます。
    • 《シーン》間で排他的に制御されます。
  // バナーをOn/Off
  AdMobApi.SetActive ("banner", !AdMobApi.GetActive ("banner"));

報酬の取得

  • 《ユニット》の生成時に登録したコールバック先で報酬を得ます。
  • コールバック先は例えば以下のようなものになります。
  private void OnAdRewarded (object sender, Reward reward) {
    Debug.Log ($"Got {(int) reward.Amount} reward{((reward.Amount > 1)? "s" : "")}");
    coins += (int) reward.Amount;
    CoinsText.text = coins.ToString ();
  }
  • なお、一度の視聴で得られる報酬の量(reward.Amount)は、AdMobコンソールで定義する広告ユニットのパラメータの一つです。

破棄

  • 再利用しない《ユニット》は、instance.Destroy ()で破棄できます。
  • 再利用しない《シーン》は、AdMobApi.Destroy (string scene)で破棄できます。
  • 通常は、破棄と生成を繰り返さず、表示を制御して使い回します。

おわりに

説明が解りづらい、使いにくい、これがしたい、など何でも、コメントをお寄せいただけるとありがたいです。 最後までお読みいただきありがとうございました。

About

Using Google Mobile Ads (AdMob) with Unity

https://zenn.dev/tetr4lab/articles/a5f4436a169915

License:MIT License


Languages

Language:C# 100.0%