いくつかAdMobの実装方法をご紹介していますが、実際にアプリをリリースするときに少し困ったことが起こります。今回はその症状と改善方法についてご紹介したいと思います。
アプリをリリースするときの注意点
作ってるだけと、実際にリリースする過程では若干気をつけるポイントが変わったりします。こういうのがいわゆるリリース慣れとかなんでしょうね。ちなみにアプリ更新すればいいじゃん!という人にとってはこの内容はなくても問題なし!
起こる問題点
広告を実装したアプリをリリースする際、次のような問題点が発生します。
- ストアには広告を実装する!と申告します
- AdMobのアプリの広告IDを実装すると、アプリがリリース前のため広告が表示されない
- AdMob自体にも審査があり、アプリがリリースされたことが確認されないと本番の広告IDが配信されません!
- ストア「広告ないやん!」審査通らない!
という感じで、テスト用の広告をダミーとして実装しなければ審査が通らなくなってしまいます。本番の広告を有効にするために審査通過後に再度申請するのはめんどいのでこれを解決しようと思います。
![](https://anogame.net/wp-content/uploads/2022/01/01スライム_face.png)
アプリが先か!広告が先か!
このあたりはもう少し融通効かせて欲しいと思う・・・
問題点を確認・どこにアプローチするか
AdMobとアプリストアそれぞれの行き来する関係ですが、以下のようになっています。
- AdMobへのアクション
- アプリを登録
- アプリIDを取得(すぐ出来る)
- 実装したい広告IDを取得(すぐ出来るけど、取得時点では無効・広告が出ない)
- アプリのリリース確認
- アプリストアの申請後、審査に通過したらAdMobに申告
- アプリリリースが確認されたら広告IDが有効に!(ここで本番の広告が配信されます)
- アプリを登録
- アプリストアへのアクション
- 申請時、このアプリでは広告が表示されます!と申告
- レビュー時に広告が出ていないと通らない!
- このときテスト用広告IDを使ってテスト広告を表示する
![](https://anogame.net/wp-content/uploads/2024/06/2024-06-22-11-15-05.jpg)
![](https://anogame.net/wp-content/uploads/2024/06/2024-06-22-11-15-05.jpg)
上図の赤い囲みのところで本番用の広告IDに変更したいのですが、アプリを再申請するのは面倒なので、今回はRemote Configというものを利用してアプリを更新せずに広告IDをテストから本番に切り替えたいと思います
Remote Config対応を追加する
ここからは今までのコードを変更しながらの作業になります。少し新しいことも増えるので変更時は気をつけて下さい!
Remote Configを有効にする
まずは対象のプロジェクトでRemote Configを使えるようにして下さい。Remote Configを有効にする方法は、下記リンクを参考にして下さい。下図のようなRemote Configのウインドが表示されたらOKです。
- Window>Remote Config
![](https://anogame.net/wp-content/uploads/2024/06/2024-06-22-15-47-41.jpg)
![](https://anogame.net/wp-content/uploads/2024/06/2024-06-22-15-47-41.jpg)
今回利用する環境はproduction環境のみです!
広告IDの設定を行う
続いて利用する広告IDの設定を行います。私の方ではBannerとReward広告を登録してみました。
広告 | キー | テスト広告ID |
---|---|---|
バナー | key_ad_banner | ca-app-pub-3940256099942544/6300978111 |
リワード | key_ad_reward | ca-app-pub-3940256099942544/5224354917 |
![](https://anogame.net/wp-content/uploads/2024/06/2024-06-22-15-46-44.jpg)
![](https://anogame.net/wp-content/uploads/2024/06/2024-06-22-15-46-44.jpg)
スクリプト更新
変更するスクリプトは2つ!
AdmobManager.cs
リモートコンフィグの初期化を行います。こういうときに他のBaseクラスでお行儀よく初期化を待つように制御出来ているととっても楽!
using UnityEngine;
using GoogleMobileAds.Api;
using Unity.Services.Authentication;
using Unity.Services.Core;
using Unity.Services.RemoteConfig;
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;
}
}
[SerializeField] private bool useRemoteConfig = false;
async void Start()
{
if (this != Instance)
{
Destroy(gameObject);
return;
}
else
{
DontDestroyOnLoad(gameObject);
instance = this;
}
if (useRemoteConfig)
{
if (Utilities.CheckForInternetConnection())
{
await UnityServices.InitializeAsync();
if (!AuthenticationService.Instance.IsSignedIn)
{
await AuthenticationService.Instance.SignInAnonymouslyAsync();
}
}
await RemoteConfigService.Instance.FetchConfigsAsync(new userAttributes(), new appAttributes());
}
MobileAds.RaiseAdEventsOnUnityMainThread = true;
MobileAds.Initialize(initStatus =>
{
isReady = true;
Debug.Log(initStatus);
});
}
}
AdmobUnitBase.cs
こちらもインスペクターで設定できるフラグと各広告IDのキーの文字列を設定出来るようにします。
using System.Collections;
using UnityEngine;
using GoogleMobileAds.Common;
using Unity.Services.RemoteConfig;
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
}
}
[Header("Remote Config")]
[SerializeField] private bool useRemoteConfig = false;
public bool UseRemoteConfig => useRemoteConfig;
[SerializeField] private string keyUnitIDAndroid = "unit_id_android";
[SerializeField] private string keyUnitIDIOS = "unit_id_ios";
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;
}
if (useRemoteConfig)
{
unitIDAndroid = RemoteConfigService.Instance.appConfig.GetString(keyUnitIDAndroid);
unitIDIOS = RemoteConfigService.Instance.appConfig.GetString(keyUnitIDIOS);
}
Initialize();
}
protected virtual void Initialize()
{
// AdsManagerの初期化が終わったあとに呼ばれる
}
protected virtual void OnAppStateChanged(AppState state)
{
}
}
インスペクターでの設定適応
まずはAdmobManagerでRemote Configを使うための設定。こちらはチェックボックスにチェックを入れるだけです。
![](https://anogame.net/wp-content/uploads/2024/06/2024-06-22-15-49-38.jpg)
![](https://anogame.net/wp-content/uploads/2024/06/2024-06-22-15-49-38.jpg)
あとはRemoteConfigを使った各ユニットの設定。こちらは対象のUnitにチェックを入れて、キーの名前を変更します。
![](https://anogame.net/wp-content/uploads/2024/06/2024-06-22-15-50-38.jpg)
![](https://anogame.net/wp-content/uploads/2024/06/2024-06-22-15-50-38.jpg)
![](https://anogame.net/wp-content/uploads/2022/01/03フェアリー_face.png)
![](https://anogame.net/wp-content/uploads/2022/01/03フェアリー_face.png)
![](https://anogame.net/wp-content/uploads/2022/01/03フェアリー_face.png)
今回はAndroidのバナーだけですが、プラットフォームのこと考えると、キーの名前にAndroid/iOSを分かるようにしておくと良いですね!
コメント
コメント一覧 (1件)
[…] Remote Configを使うかどうかの判定を、子どものクラスでも利用するためAdmobUnitBaseクラスに変更が入っています。お手数ですが更新をお願いします!(一応コメントでも補足してます・・・) […]