AdMobの表示回数が少なかった話

全画面広告

AdMobを使ってるんですが、どうにも表示回数が少なかったんです。
リクエストのわりにそこまで表示されてないなと。
なんでかなと思ったら広告の読み込みに失敗したときそのままにしてたからっぽくて。

OnAdLoadFailedのイベントハンドラに、広告を読み直す処理を入れたらちゃんと表示されるようになりました。
あと再表示するときは一度Destroyを呼び出して再度生成する必要があります。OnAdClosedのイベントで処理してます。

下のスクリプトはフリーのアセット使用してますのでインポートしないと使えないです。時間をおく処理に使ってるだけですが。
UniRx – Reactive Extensions for Unity

AdMobのSDKは公式からDLをどうぞ。

 
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using UniRx;//アセット使用
using GoogleMobileAds.Api;

    public class InterstitialAdAsset : MonoBehaviour
    {
        public string INTERSTITIAL_ID = "";//アプリごとに設定
        const string TEST_ID_INTERSTITIAL = "ca-app-pub-3940256099942544/1033173712";
        protected InterstitialAd _interstitialAd;
        public InterstitialAd Interstitial { get => _interstitialAd; }
        // Start is called before the first frame update
        public override void Start()
        {

            SetId();
            AdRequest();
            _interstitialAd.OnAdFailedToLoad += OnAdLoadFailed;
            _interstitialAd.OnAdClosed += this.OnAdClosed;
        }

        /// 
        ///  全画面広告は見せた後に再度読み込まないと、再表示されない
        ///
        public virtual void InterstitialShow()
        {
            if (_interstitialAd.IsLoaded())
            {
                _interstitialAd.Show();
            }
        }

        /// 
        /// 広告読み込みに失敗したときに呼ばれる
        ///
        /// 
        /// 
        protected virtual void OnAdLoadFailed(object sender,AdFailedToLoadEventArgs args)
        {
            if(Application.internetReachability == NetworkReachability.NotReachable)//ネットにつながっていない
            {
                return;
            }
            Observable
                .Timer(TimeSpan.FromMilliseconds(3000))
                .Subscribe(_ =>
                {
                    _interstitialAd.Destroy();
                    AdRequest();
                });
        }
        /// 
        /// 広告の表示が終わったときに呼ばれる
        /// 全画面広告は再表示する場合再度リクエストする必要がある
        ///
        /// 
        /// 
        protected virtual void OnAdClosed(object sender, EventArgs args)
        {
            _interstitialAd.Destroy();
            AdRequest();
        }
        protected virtual void AdRequest()
        {
            _interstitialAd = 
              new GoogleMobileAds.Api.InterstitialAd("INTERSTITIAL_ID"/*使うID*/);
            _interstitialAd.LoadAd(AdRequest.Builder().Build());
        }
    
    }

バナーでもOnAdLoadTofailedのイベントがありますので同じようにできるかと。あと、広告を登録したばかりだと表示されないこともあるみたいです。時間を置いたら(1日、2日くらい?)表示されるという話をちらほら見ます。ネットで。

ゆうても、たくさんの人にプレイされなかったらどうしようもないんですけ……ど!!

コメント

タイトルとURLをコピーしました