Androidでアプリ内にAdmobテストバナー広告を実装(Unity)
概要
本記事では、25年4月時点のUnity(2022.3.43f1)で、
Google Mobile Ads Unity Plugin v10.0.0でエラーが出た為、
Google Mobile Ads Unity Plugin v9.6.0での導入と
Admobのテストバナー広告の簡単な実装方法を解説します。
-
準備するもの
- Unity(2022.3.43f1)
-
Mobile Ads SDK (Unity)の導入
- 下記リンク先を開くと画像の画面になる
https://developers.google.com/admob/unity/quick-start?hl=ja
- 下にスクロールして、GitHub からインポートを押し、.unitypackageを押す。
- 下記GitHub画面になる。Releasesを押す。
- 下記リンク先を開くと画像の画面になる
- 下にスクロールしてGoogle Mobile Ads Unity Plugin v9.6.0を押す
- 下記画面になるので、GoogleMobileAds-v9.6.0.unitypackageを押してダウンロード
- Assets > Import Package > Custom Packageを押す
- GoogleMobileAds-v9.6.0.unitypackageを選択して開く
- 下記画面でImportを押す
- 下記画面が出た場合Enableを押す
- 上記画面が出なかった場合は手動で、
Assets > External Dependency Manager > Android Resolver > Force Resolver
- 下記画面になったらOK
- Assets > Google Mobile Ads > Settingsを押す
- GoogleMobileAdsSettingsを押して下記テストIDを入力
Androidテスト用AppID : ca-app-pub-3940256099942544~3347511713
iOSテスト用AppID : ca-app-pub-3940256099942544~1458002511
- 下記空のGame Objectを作成して、名前をAdmobManagerにします
- スクリプトは下記をコピーして、AdmobManagerにアタッチします
using UnityEngine;
using GoogleMobileAds.Api;
public class AdmobManager : MonoBehaviour
{
public static AdmobManager Instance
{
get
{
if (instance == null)
{
instance = FindObjectOfType<AdmobManager>();
}
return instance;
}
}
public static AdmobManager instance;
private bool isReady = false;
public bool IsReady
{
get
{
return isReady;
}
}
void Start()
{
if (this != Instance)
{
Destroy(gameObject);
return;
}
else
{
DontDestroyOnLoad(gameObject);
instance = this;
}
MobileAds.RaiseAdEventsOnUnityMainThread = true;
MobileAds.Initialize(initStatus =>
{
isReady = true;
Debug.Log(initStatus);
});
}
}
- スクリプトは下記をコピーして、AdmobUnitBaseを作成。アタッチしません。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using GoogleMobileAds.Api;
using GoogleMobileAds.Common;
public abstract class AdmobUnitBase : MonoBehaviour
{
[SerializeField] private string unitIDAndroid;
[SerializeField] private string unitIDIOS;
protected string UnitID
{
get
{
#if UNITY_ANDROID
return unitIDAndroid;
#elif UNITY_IOS
return unitIDIOS;
#else
return "";
#endif
}
}
private void OnAppStateChangedBase(AppState state)
{
Debug.Log("App State changed to : " + state);
OnAppStateChanged(state);
}
private IEnumerator Start()
{
while (AdmobManager.Instance.IsReady == false)
{
yield return 0;
}
Initialize();
}
protected virtual void Initialize()
{
// AdsManagerの初期化が終わったあとに呼ばれる
}
protected virtual void OnAppStateChanged(AppState state)
{
}
}
- 下記空のGame Objectを作成して、名前をAdmobUnitBannerにします
- 下記スクリプトは、バナー表示とボタンを押した場合に任意のシーン
下記例では "Title", "Leaderboard" のシーンでバナー広告が出ない。
任意のボタンをアタッチするとバナーが出なくなります。
ボタンをアタッチしなかった場合はバナー広告は出っ放しになります。
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using GoogleMobileAds.Api;
public class AdmobUnitBanner : AdmobUnitBase
{
public BannerView bannerView;
public Button StartButton;
public Button TitleButton;
// Start メソッドを使用して、ゲームが開始されたときに広告を表示するかどうかをチェックします。
private void Start()
{
SceneManager.sceneLoaded += OnSceneLoaded;
// 最初のシーンが読み込まれたときに広告をチェック
CheckAndShowBanner(SceneManager.GetActiveScene());
// ボタンの参照を設定
if (StartButton != null)
{
StartButton.onClick.AddListener(OnButtonClick);
}
else
{
Debug.Log("StartButtonが設定されていません");
}
if (TitleButton != null)
{
TitleButton.onClick.AddListener(OnButtonClick);
}
else
{
Debug.Log("TitleButtonが設定されていません");
}
}
private void OnButtonClick()
{
Debug.Log("ボタンが押されました");
DestroyBanner();
}
private void OnDestroy()
{
SceneManager.sceneLoaded -= OnSceneLoaded;
}
private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
// 新しいシーンが読み込まれるたびに広告をチェック
CheckAndShowBanner(scene);
}
private void CheckAndShowBanner(Scene scene)
{
// 広告を表示するシーンの名前をリスト化
string[] targetSceneNames = { "Title", "Leaderboard" };
// 現在のシーンがリストに含まれている場合のみ広告を表示
if (System.Array.Exists(targetSceneNames, element => element == scene.name))
{
Debug.Log(scene.name + "でバナーを表示します");
ShowBanner();
}
else
{
Debug.Log(scene.name + "ではバナーを表示しません");
// ここを修正 → ボタンが設定されている場合だけDestroy
if (StartButton != null || TitleButton != null)
{
DestroyBanner();
}
else
{
Debug.Log("ボタンが設定されていないため、バナーはそのままにします");
}
}
}
public void ShowBanner()
{
if (bannerView != null)
{
bannerView.Destroy();
bannerView = null;
}
// AdSizeを新たに作成
AdSize adaptiveSize = AdSize.GetCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(AdSize.FullWidth);
// 作成したAdSizeを引数に指定する
bannerView = new BannerView(
UnitID,
adaptiveSize,
AdPosition.Bottom);
bannerView.OnBannerAdLoaded += () =>
{
Debug.Log("ロードされました - 表示します");
bannerView.Show();
};
bannerView.OnBannerAdLoadFailed += (LoadAdError error) =>
{
Debug.LogError("ロード失敗しました");
};
//リクエストを生成
var adRequest = new AdRequest();
bannerView.LoadAd(adRequest);
}
public void DestroyBanner()
{
if (bannerView != null)
{
Debug.Log("バナーは消えました");
bannerView.Destroy();
bannerView = null;
}
}
}
- 下記Build Setting を開いて、Player Settingsを開く
- 下記Other Settings のMinimum API Level 24、Target API Level 34に設定。
- あとはBuild or Build And Runボタンで完了です。
- あとはBuild or Build And Runボタンで完了です。
Discussion