【保存版 2019最新】Unity+AdMobでバナー/インタースティシャル広告を表示するスクリプト

UnityでAdMob広告を実装するときには、いつもこちらの記事を参考にしていました。

http://games.genieus.co.jp/unity/admob_unity/

ただこちらの記事で紹介されているスクリプトだと、場合によってインタースティシャルがロードされておらず、表示されないということがありました。

そこで、UnityでAdMobの広告を表示するスクリプトを書き直しました。

AdmobManager.cs


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

public class AdmobManager : MonoBehaviour {

	public string ios_Banner1;
	public string ios_Banner2;
	public string ios_Interstitial;
	public string android_Banner1;
	public string android_Banner2;
	public string android_Interstitial;

	private InterstitialAd interstitial;
	private AdRequest request;

	bool is_close_interstitial = false; 

	private int reShowCount;

	void Awake () {
		reShowCount = 0;

		RequestInterstitial ();
		RequestBanner ();
	}

	public void RequestBanner()
	{
		#if UNITY_ANDROID
		string adUnitId1 = android_Banner1;
		string adUnitId2 = android_Banner2;
		#elif UNITY_IPHONE
		string adUnitId1 = ios_Banner1;
		string adUnitId2 = ios_Banner2;
		#else
		string adUnitId = "unexpected_platform";
		#endif

		BannerView bannerView1 = new BannerView(adUnitId1, AdSize.Banner, AdPosition.Top);
		BannerView bannerView2 = new BannerView(adUnitId2, AdSize.Banner, AdPosition.Bottom);

		request = new AdRequest.Builder()
			.AddTestDevice(AdRequest.TestDeviceSimulator)
			.AddTestDevice("自分のiPhoneのUDID")
			.Build();

		bannerView1.LoadAd(request);
		bannerView2.LoadAd(request);
	}

	public void RequestInterstitial()
	{
		#if UNITY_ANDROID
		string adUnitId = android_Interstitial;
		#elif UNITY_IPHONE
		string adUnitId = ios_Interstitial;
		#else
		string adUnitId = "unexpected_platform";
		#endif

		if (is_close_interstitial == true) {
			interstitial.Destroy ();
		}


		interstitial = new InterstitialAd (adUnitId);

		request = new AdRequest.Builder()
			.AddTestDevice(AdRequest.TestDeviceSimulator)
			.AddTestDevice("自分のiPhoneのUDID")
			.Build();

		interstitial.LoadAd (request);

		interstitial.OnAdClosed += HandleAdClosed;
		interstitial.OnAdFailedToLoad += HandleAdReLoad;

		is_close_interstitial = false;
	}

	// インタースティシャル広告を閉じたとき
	void HandleAdClosed(object sender, System.EventArgs e)
	{
		is_close_interstitial = true;

		RequestInterstitial();
	}

	// 広告のロードに失敗したとき
	void HandleAdReLoad(object sender, System.EventArgs e)
	{
		is_close_interstitial = true;

		StartCoroutine(_waitConnect());
	}

	// 次のロードまで30秒待つ
	IEnumerator _waitConnect()
	{
		while (true)
		{
			yield return new WaitForSeconds(30.0f);

			// ネットに接続できるときだけリロード
			if (Application.internetReachability != NetworkReachability.NotReachable)
			{
				RequestInterstitial();
				break;
			}
		}
	}

	//インタースティシャル広告を表示したいときに呼び出す
	public void InterstitialShow()
	{
		//準備できてたら表示
		if (interstitial.IsLoaded ()) {
			interstitial.Show ();
			reShowCount = 0;
		} else {
			//準備できてなかったら0.1秒ごとに準備できてるか確認
			if (reShowCount < 10) {
				Invoke ("InterstitialShow", 0.1f);
				reShowCount++;
			} else {
				//1秒たっても準備できなかったとき
				reShowCount = 0;
			}
		}
	}

}

インタースティシャル広告がロードされていなかったときは、0.1秒ごとに10回呼び出しています。

だいたいの場合、0.2秒後にはロードが完了している様子。

これをAdmobManager.csとして保存し、インタースティシャル広告を表示したいときにInterstitialShow()を呼び出せばオッケー。

コメント

  1. Tһanks for sharing your info. Ӏ гeally appreciaste үour efforts аnd I wіll be waitіng fоr your further post thankѕ once
    again.

    • Thank you for reading my article.
      I would be happy if it was useful!