のにっき

AdMob管理クラス作った

こんにちは。

昨日プライバシーポリシー違反的な奴で

Googleに公開していたアプリが全滅してアタフタしました。。。

 

今回はGoogleAdMobを実機に搭載する際、

通化したクラスで管理すると楽そうなので作ってみました。

※追記 2019/06/05
ver17.以降は必要な処理が増えたのでまとめたリンクを貼っておきます
GoogleAdMobインポート後に必要な作業 ※ver.17以降 - のにっき

クラス内容
    /***********************************************************
        クラス名    : GoogleAds
        概要        : 広告管理クラス
    ***********************************************************/
    public class GoogleAds
    {
        //===============================
        // 変数定義
        //===============================
        // テスト用
        //string appId = "ca-app-pub-3940256099942544~3347511713";         
        //string adUnitId = "ca-app-pub-3940256099942544/6300978111";     
        //string adUnitId_Pnl = "ca-app-pub-3940256099942544/1033173712";
        // 本番用
        string appId = "ここに取得したIDを設定";          // アプリID
        string adUnitId_Bnr = "ここに取得したIDを設定";   // 【バナー】広告ID
        string adUnitId_Pnl = "ここに取得したIDを設定";   // 【インスタンス】アプリID
        // 変数
        BannerView bannerView;
        AdRequest request;
        InterstitialAd interstitial;

        /***********************************************************
           コントラクタ   : GoogleAds
       ***********************************************************/
        public GoogleAds()
        {
            MobileAds.Initialize(appId);
            bannerView = new BannerView(adUnitId_Bnr, AdSize.SmartBanner, AdPosition.Bottom);
            request = new AdRequest.Builder().Build();
            bannerView.LoadAd(request);
            interstitial = new InterstitialAd(adUnitId_Pnl);
        }

        /***********************************************************
           メソッド     : SetBanner_
           概要           : バナー表示・非表示処理
       ***********************************************************/
        //********************************************************
        // バナー表示
        //********************************************************
        public void SetBanner_On()
        {
            bannerView.Show();
        }
        //********************************************************
        // バナー非表示
        //********************************************************
        public void SetBanner_Off()
        {
            bannerView.Hide();
        }

        /***********************************************************
           メソッド     : SetPanel_On
           概要           : インスタンス表示処理
       ***********************************************************/
        public void SetPanel_On()
        {
            //--------------------------------------------------------
            // 広告出力処理
            //--------------------------------------------------------
            AdRequest request = new AdRequest.Builder().Build();
            interstitial.LoadAd(request);
            //--------------------------------------------------------
            // 広告関係のイベント追加 ※固有の処理があったら記入
            //--------------------------------------------------------
            // 広告が表示可能になったとき
            interstitial.OnAdLoaded += (handler, EventArgs) =>
            {
                interstitial.Show();
            };
            // 広告が閉じられたとき
            interstitial.OnAdClosed += (handler, EventArgs) =>
            {
                interstitial.Destroy();
            };
            // 広告がエラーになったとき
            interstitial.OnAdFailedToLoad += (handler, EventArgs) =>
            {
                interstitial.Destroy();
            };
        }
    }
使い方例

1.シーンに影響しないスプリクトに下記のようにクラスを定義しておく

    public static GoogleAds Cls_Add = null;

 2.広告を表示したいシーンのどこかのオブジェクトに
  下記のスプリクトを設定する
【例】Title_AdCntrl という名のスプリクトを作成
仕様:ゲーム起動時にバナー広告を液晶下部に表示
タイトル画面に戻るたびに、ランダムでインスタンス広告を表示する

 public class Title_AdCntrl : MonoBehaviour
{
    void Start()
    {
        //=======================================================
        // 広告表示
        //=======================================================
        // 初回起動判定
        if (Cmn.Cls_Add == null)
        {
            Cmn.Cls_Add = new Cmn.GoogleAds();
            Cmn.Cls_Add.SetBanner_On();
            return;
        }

        //=======================================================
        // 2回目以降はインスタンス表示抽せん
        //=======================================================
        int i_Ransu = 0;
        int i_seed = 0;
        System.Random rnd_Ransuu;
        i_seed = Environment.TickCount + (int)DateTime.Now.Ticks;
        rnd_Ransuu = new System.Random(i_seed);
        i_Ransu = rnd_Ransuu.Next(100);
        if (i_Ransu < 66)
        {
         // インスタンス表示
            Cmn.Cls_Add.SetPanel_On();
        }

    }
}

f:id:apuridasuo:20190405182413p:plain
図:スクリプトの設定場所


以上です。
インスタンス広告が閉じられた時にシーンを移動したい!等の
機種固有の処理があれば、クラス内の
「interstitial.OnAdClosed += (handler, EventArgs) =>」
の中身に記入したりと拡張も分かりやすくできるかなと思います。

一行分のコードが長いと勝手に改行されるのはどうにかできるのでしょうか?
はてな記法 勝手に改行」等で調べても分からないので困ってます・・・