サイトアイコン StudioFun

TapTapTap!!!(50)~Unity Ads がテスト用しか表示されない~

TapTapTap

TapTapTap!!!(49)~製品版の公開を行う~ではベータ版として公開していた TapTapTap!!! を製品版として公開した。しかしながら、Unity Ads の広告がテスト広告しか表示されなかった。今回はこれを正しく表示できるよう修正を行う。

1.現象の把握

現在、TapTapTap!!! の広告を見てライフを回復する機能では以下のように Unity のテスト用広告が表示されてしまっている。本来であれば他のアプリの広告が表示される予定であるのだが、想定と異なる挙動となってしまっているのがわかる。

Unity のテスト用広告

2.原因の調査

原因調査にあたり、今一度 Unity Ads の使用方法について確認を行っていく。これについては公式サイトに記載があったため、こちらを確認していく。


Welcome to Unity Ads - unity3d.com

公式サイトを確認したところ、Ads の表示方法に問題があることがわかったため、公式サイトの記載に合わせて修正を行ってく。

また、もう一点原因があり広告のテストモードが有効になっていると広告がテスト用のものしか表示されなくなるようだ。これについてはこちらのサイト様が参考になった。

UnityAdsでは、広告表示メソッドの第二引数に true を指定することで、テスト用の特殊な広告を表示させることができます。 Advertisement.Initialize("XXXxxxxx", true); が、falseにしてもテスト広告しか表示されなくなってしまうケースがあります。そのままだとリリースしても収益があげられません。
Unity Ads でテスト用広告しか表示されなくなってしまった場合 - いんでぃーづ - いんでぃーづ

具体的な場所については以下の画像の赤枠部分のチェックをはずすことで広告が有効になるとのこと。

広告のテストモード

3.問題の修正

今までは以下のように、広告を表示させる際「Advertisement.IsReady()」で広告の準備が完了しているか確認し、「Advertisement.Show()」で広告の表示を行っていた。しかしながら、これではうまく広告が表示されない。

[cce_csharp]using System.Reflection;
using UnityEngine;
using UnityEngine.Advertisements;

public class ShowAdsOnStart : MonoBehaviour
{
#if UNITY_IOS
    /// < summary>
    /// IOS 用のゲームID
    /// < /summary>
    private string gameId = "XXXXXXX";
#elif UNITY_ANDROID
    /// < summary>
    /// Android 用のゲームID
    /// < /summary>
    private string gameId = "XXXXXXX";
#endif
    /// < summary>
    /// シーン開始時の処理
    /// < /summary>
    public void Start()
    {
        MyLogger.GetInstance().StartLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
        if (Advertisement.isSupported)
        {
            // 初期化
            Advertisement.Initialize(gameId, false);
        }
        MyLogger.GetInstance().EndLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
    }
    /// < summary>
    /// 「ライフを回復する」ボタンタップ時の処理
    /// < /summary>
    public void OnClick()
    {
        MyLogger.GetInstance().StartLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
        // 広告表示の初期化処理
        if (Advertisement.isInitialized && Advertisement.IsReady())
        {
            // 広告の表示.
            ShowOptions options = new ShowOptions { resultCallback = HandleShowResult };
            Advertisement.Show();
        }
        MyLogger.GetInstance().EndLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
    }
    /// < summary>
    /// 広告を見た結果の挙動
    /// < /summary>
    /// < param name="result">広告を見た結果< /param>
    private void HandleShowResult(ShowResult result)
    {
        switch (result)
        {
            case ShowResult.Finished:   // 完了した
                Debug.Log("The ad was successfully shown.");
                FindObjectOfType< LifeManager>().AddLife();
                break;
            case ShowResult.Skipped:    // スキップした
                Debug.Log("The ad was skipped before reaching the end.");
                break;
            case ShowResult.Failed:     // 失敗した
                Debug.LogError("The ad failed to be shown.");
                break;
        }
    }
}[/cce_csharp]

そのため、広告表示部分を以下のように修正を加えることで正しく広告が表示されるようになるらしい。修正内容としては「Advertisement.IsReady()」と「Advertisement.Show()」の引数として「”rewardedVideo”」という文字列を与えるだけである。

[cce_csharp]using System.Reflection;
using UnityEngine;
using UnityEngine.Advertisements;

public class ShowAdsOnStart : MonoBehaviour
{
#if UNITY_IOS
    /// < summary>
    /// IOS 用のゲームID
    /// < /summary>
    private string gameId = "XXXXXXX";
#elif UNITY_ANDROID
    /// < summary>
    /// Android 用のゲームID
    /// < /summary>
    private string gameId = "XXXXXXX";
#endif
    /// < summary>
    /// シーン開始時の処理
    /// < /summary>
    public void Start()
    {
        MyLogger.GetInstance().StartLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
        if (Advertisement.isSupported)
        {
            // 初期化
            Advertisement.Initialize(gameId, false);
        }
        MyLogger.GetInstance().EndLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
    }
    /// < summary>
    /// 「ライフを回復する」ボタンタップ時の処理
    /// < /summary>
    public void OnClick()
    {
        MyLogger.GetInstance().StartLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
        // 広告表示の初期化処理
        if (Advertisement.isInitialized && Advertisement.IsReady("rewardedVideo"))
        {
            // 広告の表示.
            ShowOptions options = new ShowOptions { resultCallback = HandleShowResult };
            Advertisement.Show("rewardedVideo", options);
        }
        MyLogger.GetInstance().EndLog(this.GetType().Name, MethodBase.GetCurrentMethod().Name);
    }
    /// < summary>
    /// 広告を見た結果の挙動
    /// < /summary>
    /// < param name="result">広告を見た結果< /param>
    private void HandleShowResult(ShowResult result)
    {
        switch (result)
        {
            case ShowResult.Finished:   // 完了した
                Debug.Log("The ad was successfully shown.");
                FindObjectOfType< LifeManager>().AddLife();
                break;
            case ShowResult.Skipped:    // スキップした
                Debug.Log("The ad was skipped before reaching the end.");
                break;
            case ShowResult.Failed:     // 失敗した
                Debug.LogError("The ad failed to be shown.");
                break;
        }
    }
}[/cce_csharp]

4.動作の確認を行う

無事広告が表示されるようになった。これを期にゲーム関係でも収入が増えるよう努めていきたい。

広告の表示
モバイルバージョンを終了