Unity AdMob 5.4 Singleton Script
Unity AdMob 5.4 Singleton Script
Ad management script codes written as a singleton so you can easily manage your ads with AdMob.
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using GoogleMobileAds.Api;
// ReSharper disable once CheckNamespace
namespace UrhobA.Google.AdManager5x4
{
public class AdManager : MonoBehaviour
{
private static AdManager _adManager;
private InterstitialAd _interstitialAd;
private BannerView _bannerView;
private RewardedAd _rewardedAd;
[SerializeField] private string
bannerAdID,
interstitialAdID,
rewardedAdID;
[SerializeField] private bool testMode, childMode;
[SerializeField] private string testDeviceID;
[SerializeField] private AdPosition bannerPosition;
private IEnumerator _interstitialShowCoroutine, _rewardedAdShowCoroutine;
private float
_interstitialRequestTimeOutTime,
_rewardedVideoRequestTimeOutTime;
private float
_autoBannerAdRequestTime = float.PositiveInfinity,
_autoInterstitialAdRequestTime = float.PositiveInfinity,
_autoRewardedAdRequestTime = float.PositiveInfinity;
public delegate void RewardedAdGift(Reward gift);
private RewardedAdGift _giftDelegate;
private void Awake()
{
if (_adManager == null)
{
_adManager = this;
DontDestroyOnLoad(this);
#region Trim ID
bannerAdID = bannerAdID.Trim();
interstitialAdID = interstitialAdID.Trim();
rewardedAdID = rewardedAdID.Trim();
testDeviceID = testDeviceID.Trim();
#endregion
MobileAds.Initialize(adStatus => {});
#region ADS Configuration
var adConfiguration = new RequestConfiguration.Builder();
if (testMode && !string.IsNullOrEmpty(testDeviceID))
adConfiguration.SetTestDeviceIds(new List<string>() {testDeviceID});
if (childMode)
adConfiguration.SetTagForChildDirectedTreatment(TagForChildDirectedTreatment.True);
MobileAds.SetRequestConfiguration(adConfiguration.build());
#endregion
BannerAdLoad();
InterstitialAdLoad();
RewardedAdLoad();
}else if(this != _adManager) Destroy(this);
}
private void Update()
{
var time = Time.realtimeSinceStartup;
if (time >= _autoBannerAdRequestTime)
{
_autoBannerAdRequestTime = float.PositiveInfinity;
BannerAdLoad();
}
if (time >= _autoInterstitialAdRequestTime)
{
_autoInterstitialAdRequestTime = float.PositiveInfinity;
InterstitialAdLoad();
}
if (time >= _autoRewardedAdRequestTime)
{
_autoRewardedAdRequestTime = float.PositiveInfinity;
RewardedAdLoad();
}
}
#region Banner Ad
private void BannerAdLoad()
{
if(!testMode && string.IsNullOrEmpty(bannerAdID))
return;
_bannerView?.Destroy();
if (testMode && (string.IsNullOrEmpty(bannerAdID) || string.IsNullOrEmpty(testDeviceID)))
{
#if UNITY_ANDROID
_bannerView = new BannerView("ca-app-pub-3940256099942544/6300978111", AdSize.SmartBanner, bannerPosition);
#else
_bannerView = new BannerView("ca-app-pub-3940256099942544/2934735716", AdSize.SmartBanner, bannerPosition);
#endif
}
else
{
_bannerView = new BannerView(bannerAdID, AdSize.SmartBanner, bannerPosition);
}
_bannerView.OnAdFailedToLoad += BannerViewLoadFailed;
_bannerView.LoadAd(CreateAddRequest());
_bannerView.Hide();
}
private void BannerViewLoadFailed(object sender, AdFailedToLoadEventArgs adFailedToLoadEventArgs)
{
Debug.Log(adFailedToLoadEventArgs.Message);
if (_bannerView == null) return;
_bannerView.Destroy();
_bannerView = null;
}
public static void OnGetBannerAd() => GetBannerAd();
private static void GetBannerAd()
{
if(_adManager == null) return;
_adManager.BannerAdLoad();
}
public static void OnShowBannerAd() => ShowBannerAd();
private static void ShowBannerAd()
{
if(_adManager == null)
return;
if (_adManager._bannerView == null)
{
_adManager.BannerAdLoad();
if(_adManager._bannerView == null)
return;
}
_adManager._bannerView.Show();
}
public static void OnHideBannerAd() => HideBannerAd();
private static void HideBannerAd()
{
if(_adManager == null)
return;
_adManager._bannerView?.Hide();
}
#endregion
#region Interstitial Ad
private void InterstitialAdLoad()
{
if(!testMode && string.IsNullOrEmpty(interstitialAdID))
return;
if(_interstitialAd != null && _interstitialAd.IsLoaded())
return;
_interstitialAd?.Destroy();
if (testMode && (string.IsNullOrEmpty(testDeviceID) || string.IsNullOrEmpty(interstitialAdID)))
{
#if UNITY_ANDROID
_interstitialAd = new InterstitialAd("ca-app-pub-3940256099942544/1033173712");
#else
_interstitialAd = new InterstitialAd("ca-app-pub-3940256099942544/4411468910");
#endif
}
else
_interstitialAd = new InterstitialAd(interstitialAdID);
_interstitialAd.OnAdClosed += InterstitialDelegate;
_interstitialAd.OnAdFailedToLoad += InterstitialAdLoadFailed;
_interstitialAd.LoadAd(CreateAddRequest());
_interstitialRequestTimeOutTime = Time.realtimeSinceStartup + 10f;
}
private void InterstitialAdLoadFailed(object sender, AdFailedToLoadEventArgs adFailedToLoadEventArgs)
{
Debug.Log(adFailedToLoadEventArgs.Message);
_autoInterstitialAdRequestTime = Time.realtimeSinceStartup + 30f;
if (_interstitialAd == null) return;
_interstitialAd.Destroy();
_interstitialAd = null;
}
private void InterstitialDelegate(object sender, EventArgs eventArgs)
{
InterstitialAdLoad();
}
public static bool OnCheckInterstitialAd() => CheckInterstitialAd();
private static bool CheckInterstitialAd()
{
if (_adManager == null)
return false;
return _adManager._interstitialAd != null && _adManager._interstitialAd.IsLoaded();
}
public static void OnGetInterstitialAd() => GetInterstitialAd();
private static void GetInterstitialAd()
{
if (_adManager == null)
return;
_adManager.InterstitialAdLoad();
}
public static void OnShowInterstitialAd() => ShowInterstitialAd();
private static void ShowInterstitialAd()
{
if(_adManager == null)
return;
if (_adManager._interstitialAd == null)
{
_adManager.InterstitialAdLoad();
if(_adManager._interstitialAd == null)
return;
}
if (_adManager._interstitialShowCoroutine != null)
{
_adManager.StopCoroutine(_adManager._interstitialShowCoroutine);
_adManager._interstitialShowCoroutine = null;
}
if (_adManager._interstitialAd.IsLoaded())
_adManager._interstitialAd.Show();
else
{
if(Time.realtimeSinceStartup >= _adManager._interstitialRequestTimeOutTime)
_adManager.InterstitialAdLoad();
_adManager._interstitialShowCoroutine = _adManager.InterstitialShowCoroutine();
_adManager.StartCoroutine(_adManager._interstitialShowCoroutine);
}
}
private IEnumerator InterstitialShowCoroutine()
{
var requestTimeOutNow = Time.realtimeSinceStartup + 2.5f;
while (!_interstitialAd.IsLoaded())
{
if(Time.realtimeSinceStartup > requestTimeOutNow)
yield break;
yield return null;
if (_interstitialAd == null)
yield break;
}
_interstitialAd.Show();
}
#endregion
#region Rewarded Ad
private void RewardedAdLoad()
{
if(!testMode && string.IsNullOrEmpty(rewardedAdID))
return;
if(_rewardedAd != null && _rewardedAd.IsLoaded())
return;
if (testMode && (string.IsNullOrEmpty(testDeviceID) || string.IsNullOrEmpty(rewardedAdID)))
{
#if UNITY_ANDROID
_rewardedAd = new RewardedAd("ca-app-pub-3940256099942544/5224354917");
#else
_rewardedAd = new RewardedAd("ca-app-pub-3940256099942544/1712485313");
#endif
}
else
_rewardedAd = new RewardedAd(rewardedAdID);
_rewardedAd.OnAdClosed += RewardedAdDelegate;
_rewardedAd.OnAdFailedToLoad += RewardedAdLoadFailed;
_rewardedAd.OnUserEarnedReward += RewardedAdSendGift;
_rewardedAd.LoadAd(CreateAddRequest());
_rewardedVideoRequestTimeOutTime = Time.realtimeSinceStartup + 30f;
}
private void RewardedAdLoadFailed(object sender,AdErrorEventArgs adFailedToLoadEventArgs)
{
Debug.Log(adFailedToLoadEventArgs.Message);
_autoRewardedAdRequestTime = Time.realtimeSinceStartup + 30f;
if (_adManager != null)
{
_rewardedAd = null;
}
}
private void RewardedAdDelegate(object sender, EventArgs eventArgs)
{
RewardedAdLoad();
}
private void RewardedAdSendGift(object sender, Reward gift)
{
if (_giftDelegate == null) return;
_giftDelegate(gift);
_giftDelegate = null;
}
public static bool OnCheckRewardedAd() => CheckRewardedAd();
private static bool CheckRewardedAd()
{
if (_adManager == null)
return false;
return _adManager._rewardedAd != null && _adManager._rewardedAd.IsLoaded();
}
public static void OnGetRewardedAd() => GetRewardedAd();
private static void GetRewardedAd()
{
if(_adManager == null)
return;
_adManager.RewardedAdLoad();
}
public static void OnShowRewardedAd(RewardedAdGift rewardedAdGift) => ShowRewardedAd(rewardedAdGift);
private static void ShowRewardedAd(RewardedAdGift rewardedAdGift)
{
if (_adManager == null)
return;
if (_adManager._rewardedAd == null)
{
_adManager.RewardedAdLoad();
if(_adManager._rewardedAd == null)
return;
}
if (_adManager._rewardedAdShowCoroutine != null)
{
_adManager.StopCoroutine(_adManager._rewardedAdShowCoroutine);
_adManager._rewardedAdShowCoroutine = null;
}
_adManager._giftDelegate = rewardedAdGift;
if(_adManager._rewardedAd.IsLoaded())
_adManager._rewardedAd.Show();
else
{
if(Time.realtimeSinceStartup >= _adManager._rewardedVideoRequestTimeOutTime)
_adManager.RewardedAdLoad();
_adManager._rewardedAdShowCoroutine = _adManager.RewardedAdShowCoroutine();
_adManager.StartCoroutine(_adManager._rewardedAdShowCoroutine);
}
}
private IEnumerator RewardedAdShowCoroutine()
{
var requestTimeOutNow = Time.realtimeSinceStartup + 10f;
while (!_rewardedAd.IsLoaded())
{
if(Time.realtimeSinceStartup > requestTimeOutNow)
yield break;
yield return null;
if(_rewardedAd == null)
yield break;
}
_rewardedAd.Show();
}
#endregion
private static AdRequest CreateAddRequest()
{
return new AdRequest.Builder().Build();
}
}
}
After including the script in your project and making the necessary adjustments from the inspector window,
using UrhobA.Google.AdManager5x5;
add it to your script and, to use any ad command you want,
AdManager.ShowBannerAd();
AdManager.ShowInterstitialAd();
AdManager.ShowRewardedAd();
you can use it by saying.
You can use the link below to go to the project's GitHub page.


Yorum Gönder