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