Added AdsScripts
parent
ce8820e802
commit
0f798993bc
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3faf72e5fd4b5594885be40431ca3fe0
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,71 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
public class AdmobUIHandler : MonoBehaviour
|
||||
{
|
||||
public Text admobInitText, admobInitTextBool;
|
||||
public Text iAdLoadingTextBool, rAdLoadingTextBool;
|
||||
public Text iAdLoadedTextBool, rAdLoadedTextBool;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
AdsManager.Instance.OnAdmobInitializedEvent += OnAdmobInitComplete;
|
||||
AdsManager.Instance.OniAdLoading += OniAdStartedLoading;
|
||||
AdsManager.Instance.OnrAdLoading += OnrAdStartedLoading;
|
||||
AdsManager.Instance.OniAdLoaded += OniAdLoaded;
|
||||
AdsManager.Instance.OnrAdLoaded += OnrAdLoaded;
|
||||
}
|
||||
|
||||
private void OnAdmobInitComplete()
|
||||
{
|
||||
admobInitText.text = "Admob Initialized";
|
||||
admobInitTextBool.text = "true";
|
||||
}
|
||||
|
||||
private void OniAdStartedLoading(bool val)
|
||||
{
|
||||
iAdLoadingTextBool.text = val.ToString();
|
||||
}
|
||||
|
||||
private void OniAdLoaded(bool val)
|
||||
{
|
||||
iAdLoadedTextBool.text = val.ToString();
|
||||
}
|
||||
|
||||
private void OnrAdStartedLoading(bool val)
|
||||
{
|
||||
rAdLoadingTextBool.text = val.ToString();
|
||||
}
|
||||
|
||||
private void OnrAdLoaded(bool val)
|
||||
{
|
||||
rAdLoadedTextBool.text = val.ToString();
|
||||
}
|
||||
|
||||
public void InitAdmob()
|
||||
{
|
||||
AdsManager.Instance.InitializeAdmob();
|
||||
}
|
||||
|
||||
public void RequestrAd()
|
||||
{
|
||||
AdsManager.Instance.LoadRewardedAdWithDelay();
|
||||
}
|
||||
|
||||
public void RequestiAd()
|
||||
{
|
||||
AdsManager.Instance.LoadInterstitialAdWithDelay();
|
||||
}
|
||||
|
||||
public void ShowiAd()
|
||||
{
|
||||
AdsManager.Instance.ShowInterstitialAd("placement_name");
|
||||
}
|
||||
|
||||
public void ShowrAd()
|
||||
{
|
||||
AdsManager.Instance.ShowRewardedAd(RewardedTypes.Color);
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dce9aed54179cfb4792ca72bdd213712
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 100
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,381 @@
|
||||
using GoogleMobileAds.Api;
|
||||
using GoogleMobileAds.Common;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class AdsManager : MonoBehaviour
|
||||
{
|
||||
//test ad units
|
||||
#if UNITY_ANDROID
|
||||
public string iAdUnit = "ca-app-pub-3940256099942544/1033173712";
|
||||
#elif UNITY_IPHONE
|
||||
public string iAdUnit = "ca-app-pub-3940256099942544/4411468910";
|
||||
#endif
|
||||
|
||||
// test ad units
|
||||
#if UNITY_ANDROID
|
||||
public string rAdUnit = "ca-app-pub-3940256099942544/5224354917";
|
||||
#elif UNITY_IPHONE
|
||||
public string rAdUnit = "ca-app-pub-3940256099942544/1712485313";
|
||||
#endif
|
||||
|
||||
private InterstitialAd _interstitialAd;
|
||||
private int interstitialRetryAttempt = 1;
|
||||
private bool loadingiAd = false;
|
||||
private string iAdPlacement;
|
||||
|
||||
private RewardedAd _rewardedAd;
|
||||
private int rewardedRetryAttempt = 1;
|
||||
private bool loadingrAd = false;
|
||||
private RewardedTypes rewardType;
|
||||
private bool isRewardAvailable = false;
|
||||
|
||||
public static AdsManager Instance;
|
||||
public Action<RewardedTypes> OnUserEarnedReward;
|
||||
public Action OnAdmobInitializedEvent;
|
||||
public Action<bool> OniAdLoading;
|
||||
public Action<bool> OnrAdLoading;
|
||||
public Action<bool> OniAdLoaded;
|
||||
public Action<bool> OnrAdLoaded;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
if (Instance is null)
|
||||
Instance = this;
|
||||
else
|
||||
DestroyImmediate(this);
|
||||
DontDestroyOnLoad(gameObject);
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
InitializeAdmob();
|
||||
}
|
||||
|
||||
private void FixedUpdate()
|
||||
{
|
||||
if (isRewardAvailable)
|
||||
{
|
||||
isRewardAvailable = false;
|
||||
OnUserEarnedReward?.Invoke(rewardType);
|
||||
}
|
||||
}
|
||||
|
||||
public void InitializeAdmob()
|
||||
{
|
||||
if (!CanShowAds()) return;
|
||||
|
||||
MobileAds.RaiseAdEventsOnUnityMainThread = true;
|
||||
// Initialize the Google Mobile Ads SDK.
|
||||
MobileAds.Initialize(OnAdmobInitialized);
|
||||
}
|
||||
|
||||
public void OnAdmobInitialized(InitializationStatus initStatus)
|
||||
{
|
||||
MobileAdsEventExecutor.ExecuteInUpdate(() =>
|
||||
{
|
||||
Debug.Log("Admob Initialized");
|
||||
OnAdmobInitializedEvent?.Invoke();
|
||||
Invoke(nameof(LoadInterstitialAdWithDelay), 3f);
|
||||
Invoke(nameof(LoadRewardedAdWithDelay), 6f);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
public bool CanShowAds()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
private void OnAdPaid(AdValue adValue)
|
||||
{
|
||||
Debug.Log(String.Format("ad paid {0} {1}.",
|
||||
adValue.Value,
|
||||
adValue.CurrencyCode));
|
||||
}
|
||||
|
||||
private void PauseGame()
|
||||
{
|
||||
Time.timeScale = 0f;
|
||||
AudioListener.pause = true;
|
||||
}
|
||||
|
||||
private void ResumeGame()
|
||||
{
|
||||
Time.timeScale = 1f;
|
||||
AudioListener.pause = false;
|
||||
}
|
||||
|
||||
#region Interstitial_Ads
|
||||
public void LoadInterstitialAdWithDelay()
|
||||
{
|
||||
if (!CanShowAds()) return;
|
||||
|
||||
var currentAttempt = Mathf.Min(interstitialRetryAttempt, 5);
|
||||
var delayTime = Mathf.Pow(2, currentAttempt);
|
||||
if(!loadingiAd)
|
||||
{
|
||||
OniAdLoading?.Invoke(loadingiAd);
|
||||
loadingiAd = true;
|
||||
Invoke(nameof(LoadInterstitialAd), delayTime);
|
||||
}
|
||||
}
|
||||
|
||||
private void LoadInterstitialAd()
|
||||
{
|
||||
// Clean up the old ad before loading a new one.
|
||||
if (_interstitialAd != null)
|
||||
{
|
||||
_interstitialAd.Destroy();
|
||||
_interstitialAd = null;
|
||||
}
|
||||
|
||||
// create our request used to load the ad.
|
||||
var adRequest = new AdRequest();
|
||||
// send the request to load the ad.
|
||||
InterstitialAd.Load(iAdUnit, adRequest, OnInterstitialAdLoaded);
|
||||
}
|
||||
|
||||
private void OnInterstitialAdLoaded(InterstitialAd ad, LoadAdError error)
|
||||
{
|
||||
MobileAdsEventExecutor.ExecuteInUpdate(() =>
|
||||
{
|
||||
loadingiAd = false;
|
||||
OniAdLoading?.Invoke(loadingiAd);
|
||||
// if error is not null, the load request failed.
|
||||
if (error != null || ad == null)
|
||||
{
|
||||
OniAdLoaded?.Invoke(false);
|
||||
interstitialRetryAttempt++;
|
||||
//load ad again
|
||||
LoadInterstitialAdWithDelay();
|
||||
Debug.LogError("interstitial ad failed to load an ad " +
|
||||
"with error : " + error);
|
||||
return;
|
||||
}
|
||||
|
||||
interstitialRetryAttempt = 1;
|
||||
Debug.Log("Interstitial ad loaded with response : "
|
||||
+ ad.GetResponseInfo());
|
||||
OniAdLoaded?.Invoke(true);
|
||||
_interstitialAd = ad;
|
||||
RegisterEventHandlers(_interstitialAd);
|
||||
});
|
||||
}
|
||||
|
||||
public void ShowInterstitialAd(string adPlacement)
|
||||
{
|
||||
if (!CanShowAds()) return;
|
||||
|
||||
iAdPlacement = adPlacement;
|
||||
if (_interstitialAd != null && _interstitialAd.CanShowAd())
|
||||
{
|
||||
Debug.Log("Showing interstitial ad.");
|
||||
_interstitialAd.Show();
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError("Interstitial ad is not ready yet.");
|
||||
LoadInterstitialAdWithDelay();
|
||||
}
|
||||
}
|
||||
|
||||
private void RegisterEventHandlers(InterstitialAd interstitialAd)
|
||||
{
|
||||
// Raised when the ad is estimated to have earned money.
|
||||
//interstitialAd.OnAdPaid += OnAdPaid;
|
||||
// Raised when an impression is recorded for an ad.
|
||||
//interstitialAd.OnAdImpressionRecorded += () =>
|
||||
//{
|
||||
// Debug.Log("Interstitial ad recorded an impression.");
|
||||
//};
|
||||
// Raised when a click is recorded for an ad.
|
||||
//interstitialAd.OnAdClicked += () =>
|
||||
//{
|
||||
// Debug.Log("Interstitial ad was clicked.");
|
||||
//};
|
||||
//Raised when an ad opened full screen content.
|
||||
interstitialAd.OnAdFullScreenContentOpened += OnInterstitialAdOpen;
|
||||
// Raised when the ad closed full screen content.
|
||||
interstitialAd.OnAdFullScreenContentClosed += () =>
|
||||
{
|
||||
MobileAdsEventExecutor.ExecuteInUpdate(() =>
|
||||
{
|
||||
Debug.Log("Interstitial ad full screen content closed.");
|
||||
ResumeGame();
|
||||
LoadInterstitialAdWithDelay();
|
||||
});
|
||||
};
|
||||
// Raised when the ad failed to open full screen content.
|
||||
interstitialAd.OnAdFullScreenContentFailed += (AdError error) =>
|
||||
{
|
||||
MobileAdsEventExecutor.ExecuteInUpdate(() =>
|
||||
{
|
||||
Debug.LogError("Interstitial ad failed to open full screen content " +
|
||||
"with error : " + error);
|
||||
LoadInterstitialAdWithDelay();
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
private void OnInterstitialAdOpen()
|
||||
{
|
||||
MobileAdsEventExecutor.ExecuteInUpdate(() =>
|
||||
{
|
||||
PauseGame();
|
||||
});
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Rewarded_Ads
|
||||
|
||||
public void LoadRewardedAdWithDelay()
|
||||
{
|
||||
if (!CanShowAds()) return;
|
||||
|
||||
var currentAttempt = Mathf.Min(rewardedRetryAttempt, 5);
|
||||
var delayTime = Mathf.Pow(2, currentAttempt);
|
||||
if (!loadingrAd)
|
||||
{
|
||||
OnrAdLoading?.Invoke(loadingrAd);
|
||||
loadingrAd = true;
|
||||
Invoke(nameof(LoadRewardedAd), delayTime);
|
||||
}
|
||||
}
|
||||
|
||||
public void LoadRewardedAd()
|
||||
{
|
||||
// Clean up the old ad before loading a new one.
|
||||
if (_rewardedAd != null)
|
||||
{
|
||||
_rewardedAd.Destroy();
|
||||
_rewardedAd = null;
|
||||
}
|
||||
|
||||
Debug.Log("Loading the rewarded ad.");
|
||||
|
||||
// create our request used to load the ad.
|
||||
var adRequest = new AdRequest();
|
||||
|
||||
// send the request to load the ad.
|
||||
RewardedAd.Load(rAdUnit, adRequest, OnRewardedAdLoaded);
|
||||
}
|
||||
|
||||
private void OnRewardedAdLoaded(RewardedAd ad, LoadAdError error)
|
||||
{
|
||||
MobileAdsEventExecutor.ExecuteInUpdate(() =>
|
||||
{
|
||||
loadingrAd = false;
|
||||
OnrAdLoading?.Invoke(loadingrAd);
|
||||
// if error is not null, the load request failed.
|
||||
if (error != null || ad == null)
|
||||
{
|
||||
OnrAdLoaded?.Invoke(false);
|
||||
rewardedRetryAttempt++;
|
||||
//load ad again
|
||||
LoadRewardedAdWithDelay();
|
||||
Debug.LogError("rewarded ad failed to load an ad " +
|
||||
"with error : " + error);
|
||||
return;
|
||||
}
|
||||
|
||||
rewardedRetryAttempt = 1;
|
||||
Debug.Log("rewarded ad loaded with response : "
|
||||
+ ad.GetResponseInfo());
|
||||
|
||||
OnrAdLoaded?.Invoke(true);
|
||||
_rewardedAd = ad;
|
||||
RegisterEventHandlers(_rewardedAd);
|
||||
});
|
||||
}
|
||||
|
||||
private void RegisterEventHandlers(RewardedAd ad)
|
||||
{
|
||||
// Raised when the ad is estimated to have earned money.
|
||||
//ad.OnAdPaid += OnAdPaid;
|
||||
// Raised when an impression is recorded for an ad.
|
||||
//ad.OnAdImpressionRecorded += () =>
|
||||
//{
|
||||
// Debug.Log("Rewarded ad recorded an impression.");
|
||||
//};
|
||||
// Raised when a click is recorded for an ad.
|
||||
//ad.OnAdClicked += () =>
|
||||
//{
|
||||
// Debug.Log("Rewarded ad was clicked.");
|
||||
//};
|
||||
// Raised when an ad opened full screen content.
|
||||
ad.OnAdFullScreenContentOpened += OnRewardedAdOpen;
|
||||
// Raised when the ad closed full screen content.
|
||||
ad.OnAdFullScreenContentClosed += () =>
|
||||
{
|
||||
MobileAdsEventExecutor.ExecuteInUpdate(() =>
|
||||
{
|
||||
Debug.Log("Rewarded ad full screen content closed.");
|
||||
ResumeGame();
|
||||
LoadRewardedAdWithDelay();
|
||||
});
|
||||
};
|
||||
// Raised when the ad failed to open full screen content.
|
||||
ad.OnAdFullScreenContentFailed += (AdError error) =>
|
||||
{
|
||||
MobileAdsEventExecutor.ExecuteInUpdate(() =>
|
||||
{
|
||||
Debug.LogError("Rewarded ad failed to open full screen content " +
|
||||
"with error : " + error);
|
||||
LoadRewardedAdWithDelay();
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
private void OnRewardedAdOpen()
|
||||
{
|
||||
MobileAdsEventExecutor.ExecuteInUpdate(() =>
|
||||
{
|
||||
PauseGame();
|
||||
});
|
||||
}
|
||||
|
||||
public void ShowRewardedAd(RewardedTypes rewardFor)
|
||||
{
|
||||
rewardType = rewardFor;
|
||||
|
||||
if (!CanShowAds())
|
||||
{
|
||||
isRewardAvailable = true;
|
||||
return;
|
||||
}
|
||||
|
||||
if (_rewardedAd != null && _rewardedAd.CanShowAd())
|
||||
{
|
||||
_rewardedAd.Show((Reward reward) =>
|
||||
{
|
||||
// TODO: Reward the user.
|
||||
isRewardAvailable = true;
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError("No Video!");
|
||||
LoadRewardedAdWithDelay();
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
}
|
||||
|
||||
public enum RewardedTypes
|
||||
{
|
||||
None,
|
||||
Revive,
|
||||
ClaimDouble,
|
||||
LevelUnlock,
|
||||
FootSteps,
|
||||
NewCharacter,
|
||||
Color,
|
||||
Animation,
|
||||
InventoryPurchase,
|
||||
Hint
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a853c83bcccfa14468a366e0290483a3
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 50
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Loading…
Reference in New Issue