ものすごくハマった

ことの事象

「Disable Ads」ボタンで、広告を非表示にするような課金が可能です。

課金して、アプリを再稼働させれば「Disable Ads」ボタンも「Google Ads」の広告バナーも非表示になりました。

が、購入したすぐには、「Disable Ads」ボタンだけ消えて、バナー広告が残り続ける。広告が非表示なるのはアプリを再起動させた時だけ!

現在は修正できましたので、そのメモ書き。

DestroyとHideの差異?

すでに表示されているのAdmobの広告バナーを見せないためには「Destroy」と「Hide」がある。

◆公式サイト:https://firebase.google.com/docs/admob/unity/start?hl=ja#ad_events

私の理解が、「Destroy」が完全に今の広告バナーの情報を消し去るということだったので、課金が終わればDestroyしてもらうことにしていました。

どうやら、今見せていた広告を見せないのは「Hide」であって、「Destory」は参照していたという情報(状態?)を初期化するようです。メモリー解放とか。この言葉であっているのか・・・。

思った通りに動かなかったソースがこれ。c#。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using GoogleMobileAds.Api;
using UnityEngine.UI;
 
public class AdmobScript : MonoBehaviour {
 
    //UnitID情報
    string adUnitId;
    BannerView bannerView;
    AdRequest request;
 
    //広告非表示購入用ボタン
    public Button disableAdsButton;
 
    //課金有無確認用
    int AdsFalse;
 
    // Use this for initialization
    void Start () {
 
        //if UNITY_ANDROID
        adUnitId = "ca-app-pub-XXXXXXXXXXX";
 
        // Create a 320x50 banner at the top of the screen.
        bannerView = new BannerView(adUnitId, AdSize.Banner, AdPosition.Bottom);
        // Create an empty ad request.
        request = new AdRequest.Builder().Build();
 
        AdsFalse = PlayerPrefs.GetInt ("adsFalse", 0);
 
        if (AdsFalse == 0) {
            //広告表示
            RequestAdmob ();
        } else {
            //購入ボタン非表示
            disableAdsButton.gameObject.SetActive (false);
        }
    }
     
    // Update is called once per frame
    void Update () {
         
    }
 
    public void RequestAdmob() {
        //Admod表示
        bannerView.LoadAd(request);
    }
 
    public void PurchaseOK (){
 
        //課金情報を記録
        PlayerPrefs.SetInt ("adsFalse", 1);
 
        //Admod非表示
        bannerView.Destroy();
        //購入ボタン非表示
        disableAdsButton.gameObject.SetActive (false);
    }
}

ということで、「Disable Ads」ボタンを押した時に動く「Purchase OK」のところを少し修正しました。

bannerView.Destroy();

を、

bannerView.Hide();

になりました。あとは、広告を表示するところを少し修正。
万が一のために、非表示判定時に「Destroy」を追加。といった感じでしょう。

あー。やっぱりなんでハマったのか、解決したあとだとよくわかりません。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using GoogleMobileAds.Api;
using UnityEngine.UI;

public class AdmobScript : MonoBehaviour {

	//UnitID情報
	string adUnitId;
	BannerView bannerView;
	AdRequest request;

	//広告非表示購入用ボタン
	public Button disableAdsButton;

	//課金有無確認用
	int AdsFalse;

	// Use this for initialization
	void Start () {

		//if UNITY_ANDROID
		adUnitId = "ca-app-pub-XXXXXXXXXXX";

		// Create a 320x50 banner at the top of the screen.
		bannerView = new BannerView(adUnitId, AdSize.Banner, AdPosition.Bottom);
		// Create an empty ad request.
		request = new AdRequest.Builder().Build();

		AdsFalse = PlayerPrefs.GetInt ("adsFalse", 0);

		if (AdsFalse == 0) {
			//広告表示
			bannerView.LoadAd(request);
			bannerView.Show();
		} else {
			//購入ボタン非表示
			bannerView.Destroy();
			disableAdsButton.gameObject.SetActive (false);
		}
	}
	
	// Update is called once per frame
	void Update () {
		
	}

	public void PurchaseOK (){
		//課金情報を記録
		PlayerPrefs.SetInt ("adsFalse", 1);
		PlayerPrefs.Save ();

		//Admod非表示
		bannerView.Hide();
		//購入ボタン非表示
		disableAdsButton.gameObject.SetActive (false);
	}
}