Files
Amir_NutBolt_Updated/Assets/AdManager/AdManager.cs
2026-06-07 22:59:32 +08:00

546 lines
20 KiB
C#

using System.Diagnostics;
using System;
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.Advertisements;
public enum BannerPosition
{
TopLeft,
TopCenter,
TopRight,
Centered,
CenterLeft,
CenterRight,
BottomLeft,
BottomCenter,
BottomRight
}
public enum MBRPosition
{
TopLeft,
TopCenter,
TopRight,
Centered,
CenterLeft,
CenterRight,
BottomLeft,
BottomCenter,
BottomRight
}
public class AdManager : MonoBehaviour
{
public string MaxSdkKey = "Enter_SDK_Key_HERE";
public string InterstitialAdUnitId = "ENTER_INTER_AD_UNIT_ID_HERE";
public string RewardedAdUnitId = "ENTER_REWARD_AD_UNIT_ID_HERE";
public string RewardedInterstitialAdUnitId = "ENTER_REWARD_INTER_AD_UNIT_ID_HERE";
public string BannerAdUnitId = "ENTER_BANNER_AD_UNIT_ID_HERE";
public string MRecAdUnitId = "ENTER_MBR_AD_UNIT_ID_HERE";
[Header("Banner & MBR Settings")]
public BannerPosition BannerPosition = BannerPosition.TopCenter;
MaxSdkBase.BannerPosition position;
public MBRPosition MBRPosition = MBRPosition.BottomCenter;
MaxSdkBase.AdViewPosition MBRposition;
public bool AutoShowBanner=true;
private bool isBannerShowing;
private bool isMRecShowing;
private int interstitialRetryAttempt;
private int rewardedRetryAttempt;
private int rewardedInterstitialRetryAttempt;
public float IntestetailAdbreakDelay;
private bool ShowIntestetial=false;
private float timecounter;
public static AdManager _Instance;
private static bool IsAdUnitArrayNullOrEmpty (ICollection<string> adUnitArray)
{
return (adUnitArray == null || adUnitArray.Count == 0);
}
void Awake ()
{
MakeSingleton ();
}
void MakeSingleton ()
{
if (_Instance != null) {
Destroy (this.gameObject);
} else {
_Instance = this;
DontDestroyOnLoad (this.gameObject);
}
}
void Start()
{
MaxSdkCallbacks.OnSdkInitializedEvent += sdkConfiguration =>
{
// AppLovin SDK is initialized, configure and start loading ads.
UnityEngine.Debug.Log("MAX SDK Initialized");
position = (MaxSdkBase.BannerPosition)BannerPosition;
MBRposition = (MaxSdkBase.AdViewPosition)MBRPosition;
InitializeInterstitialAds();
InitializeRewardedAds();
InitializeRewardedInterstitialAds();
InitializeBannerAds();
InitializeMRecAds();
};
MaxSdk.SetSdkKey(MaxSdkKey);
MaxSdk.InitializeSdk();
}
void Update(){
if(ShowIntestetial){
timecounter+=Time.unscaledDeltaTime;
if(timecounter>=IntestetailAdbreakDelay){
ShowIntestetial=false;
timecounter=0;
ShowIntestetialafterdelay();
}
}
}
#region Interstitial Ad Methods
private void InitializeInterstitialAds()
{
// Attach callbacks
MaxSdkCallbacks.Interstitial.OnAdLoadedEvent += OnInterstitialLoadedEvent;
MaxSdkCallbacks.Interstitial.OnAdLoadFailedEvent += OnInterstitialFailedEvent;
MaxSdkCallbacks.Interstitial.OnAdDisplayFailedEvent += InterstitialFailedToDisplayEvent;
MaxSdkCallbacks.Interstitial.OnAdHiddenEvent += OnInterstitialDismissedEvent;
MaxSdkCallbacks.Interstitial.OnAdRevenuePaidEvent += OnInterstitialRevenuePaidEvent;
// Load the first interstitial
LoadInterstitial();
}
void LoadInterstitial()
{
MaxSdk.LoadInterstitial(InterstitialAdUnitId);
}
public void ShowInterstitial()
{
if (MaxSdk.IsInterstitialReady(InterstitialAdUnitId))
{
this.gameObject.transform.GetChild(0).gameObject.SetActive(true);
ShowIntestetial=true;
}
}
void ShowIntestetialafterdelay(){
this.gameObject.transform.GetChild(0).gameObject.SetActive(false);
MaxSdk.ShowInterstitial(InterstitialAdUnitId);
}
private void OnInterstitialLoadedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
// Interstitial ad is ready to be shown. MaxSdk.IsInterstitialReady(interstitialAdUnitId) will now return 'true'
// Reset retry attempt
interstitialRetryAttempt = 0;
}
private void OnInterstitialFailedEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo)
{
// Interstitial ad failed to load. We recommend retrying with exponentially higher delays up to a maximum delay (in this case 64 seconds).
interstitialRetryAttempt++;
double retryDelay = Math.Pow(2, Math.Min(6, interstitialRetryAttempt));
UnityEngine.Debug.Log("Interstitial failed to load with error code: " + errorInfo.Code);
Invoke("LoadInterstitial", (float) retryDelay);
}
private void InterstitialFailedToDisplayEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo, MaxSdkBase.AdInfo adInfo)
{
// Interstitial ad failed to display. We recommend loading the next ad
UnityEngine.Debug.Log("Interstitial failed to display with error code: " + errorInfo.Code);
LoadInterstitial();
}
private void OnInterstitialDismissedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
// Interstitial ad is hidden. Pre-load the next ad
UnityEngine.Debug.Log("Interstitial dismissed");
LoadInterstitial();
}
private void OnInterstitialRevenuePaidEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
// Interstitial ad revenue paid. Use this callback to track user revenue.
UnityEngine.Debug.Log("Interstitial revenue paid");
// Ad revenue
double revenue = adInfo.Revenue;
// Miscellaneous data
string countryCode = MaxSdk.GetSdkConfiguration().CountryCode; // "US" for the United States, etc - Note: Do not confuse this with currency code which is "USD" in most cases!
string networkName = adInfo.NetworkName; // Display name of the network that showed the ad (e.g. "AdColony")
string adUnitIdentifier = adInfo.AdUnitIdentifier; // The MAX Ad Unit ID
string placement = adInfo.Placement; // The placement this ad's postbacks are tied to
}
#endregion
#region Rewarded Ad Methods
private void InitializeRewardedAds()
{
// Attach callbacks
MaxSdkCallbacks.Rewarded.OnAdLoadedEvent += OnRewardedAdLoadedEvent;
MaxSdkCallbacks.Rewarded.OnAdLoadFailedEvent += OnRewardedAdFailedEvent;
MaxSdkCallbacks.Rewarded.OnAdDisplayFailedEvent += OnRewardedAdFailedToDisplayEvent;
MaxSdkCallbacks.Rewarded.OnAdDisplayedEvent += OnRewardedAdDisplayedEvent;
MaxSdkCallbacks.Rewarded.OnAdClickedEvent += OnRewardedAdClickedEvent;
MaxSdkCallbacks.Rewarded.OnAdHiddenEvent += OnRewardedAdDismissedEvent;
MaxSdkCallbacks.Rewarded.OnAdReceivedRewardEvent += OnRewardedAdReceivedRewardEvent;
MaxSdkCallbacks.Rewarded.OnAdRevenuePaidEvent += OnRewardedAdRevenuePaidEvent;
// Load the first RewardedAd
LoadRewardedAd();
}
private void LoadRewardedAd()
{
MaxSdk.LoadRewardedAd(RewardedAdUnitId);
}
public void showRewardedVideo()
{
if (MaxSdk.IsRewardedAdReady(RewardedAdUnitId))
{
MaxSdk.ShowRewardedAd(RewardedAdUnitId);
}else if (MaxSdk.IsRewardedInterstitialAdReady(RewardedInterstitialAdUnitId))
{
MaxSdk.ShowRewardedInterstitialAd(RewardedInterstitialAdUnitId);
}
}
private void OnRewardedAdLoadedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
// Rewarded ad is ready to be shown. MaxSdk.IsRewardedAdReady(rewardedAdUnitId) will now return 'true'
UnityEngine.Debug.Log("Rewarded ad loaded");
// Reset retry attempt
rewardedRetryAttempt = 0;
}
private void OnRewardedAdFailedEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo)
{
// Rewarded ad failed to load. We recommend retrying with exponentially higher delays up to a maximum delay (in this case 64 seconds).
rewardedRetryAttempt++;
double retryDelay = Math.Pow(2, Math.Min(6, rewardedRetryAttempt));
PlayerPrefs.SetInt ("reward", 2);
UnityEngine.Debug.Log("Rewarded ad failed to load with error code: " + errorInfo.Code);
Invoke("LoadRewardedAd", (float) retryDelay);
}
private void OnRewardedAdFailedToDisplayEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo, MaxSdkBase.AdInfo adInfo)
{
// Rewarded ad failed to display. We recommend loading the next ad
PlayerPrefs.SetInt ("reward", 2);
UnityEngine.Debug.Log("Rewarded ad failed to display with error code: " + errorInfo.Code);
LoadRewardedAd();
}
private void OnRewardedAdDisplayedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
UnityEngine.Debug.Log("Rewarded ad displayed");
}
private void OnRewardedAdClickedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
UnityEngine.Debug.Log("Rewarded ad clicked");
}
private void OnRewardedAdDismissedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
// Rewarded ad is hidden. Pre-load the next ad
UnityEngine.Debug.Log("Rewarded ad dismissed");
LoadRewardedAd();
}
private void OnRewardedAdReceivedRewardEvent(string adUnitId, MaxSdk.Reward reward, MaxSdkBase.AdInfo adInfo)
{
PlayerPrefs.SetInt ("reward", 1);
// Rewarded ad was displayed and user should receive the reward
UnityEngine.Debug.Log("Rewarded ad received reward");
}
private void OnRewardedAdRevenuePaidEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
// Rewarded ad revenue paid. Use this callback to track user revenue.
UnityEngine.Debug.Log("Rewarded ad revenue paid");
// Ad revenue
double revenue = adInfo.Revenue;
// Miscellaneous data
string countryCode = MaxSdk.GetSdkConfiguration().CountryCode; // "US" for the United States, etc - Note: Do not confuse this with currency code which is "USD" in most cases!
string networkName = adInfo.NetworkName; // Display name of the network that showed the ad (e.g. "AdColony")
string adUnitIdentifier = adInfo.AdUnitIdentifier; // The MAX Ad Unit ID
string placement = adInfo.Placement; // The placement this ad's postbacks are tied to
}
#endregion
#region Rewarded Interstitial Ad Methods
private void InitializeRewardedInterstitialAds()
{
// Attach callbacks
MaxSdkCallbacks.RewardedInterstitial.OnAdLoadedEvent += OnRewardedInterstitialAdLoadedEvent;
MaxSdkCallbacks.RewardedInterstitial.OnAdLoadFailedEvent += OnRewardedInterstitialAdFailedEvent;
MaxSdkCallbacks.RewardedInterstitial.OnAdDisplayFailedEvent += OnRewardedInterstitialAdFailedToDisplayEvent;
MaxSdkCallbacks.RewardedInterstitial.OnAdDisplayedEvent += OnRewardedInterstitialAdDisplayedEvent;
MaxSdkCallbacks.RewardedInterstitial.OnAdClickedEvent += OnRewardedInterstitialAdClickedEvent;
MaxSdkCallbacks.RewardedInterstitial.OnAdHiddenEvent += OnRewardedInterstitialAdDismissedEvent;
MaxSdkCallbacks.RewardedInterstitial.OnAdReceivedRewardEvent += OnRewardedInterstitialAdReceivedRewardEvent;
MaxSdkCallbacks.RewardedInterstitial.OnAdRevenuePaidEvent += OnRewardedInterstitialAdRevenuePaidEvent;
// Load the first RewardedInterstitialAd
LoadRewardedInterstitialAd();
}
private void LoadRewardedInterstitialAd()
{
MaxSdk.LoadRewardedInterstitialAd(RewardedInterstitialAdUnitId);
}
private void ShowRewardedInterstitialAd()
{
if (MaxSdk.IsRewardedInterstitialAdReady(RewardedInterstitialAdUnitId))
{
MaxSdk.ShowRewardedInterstitialAd(RewardedInterstitialAdUnitId);
}
}
private void OnRewardedInterstitialAdLoadedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
// Rewarded interstitial ad is ready to be shown. MaxSdk.IsRewardedInterstitialAdReady(rewardedInterstitialAdUnitId) will now return 'true'
UnityEngine.Debug.Log("Rewarded interstitial ad loaded");
// Reset retry attempt
rewardedInterstitialRetryAttempt = 0;
}
private void OnRewardedInterstitialAdFailedEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo)
{
PlayerPrefs.SetInt ("reward", 2);
// Rewarded interstitial ad failed to load. We recommend retrying with exponentially higher delays up to a maximum delay (in this case 64 seconds).
rewardedInterstitialRetryAttempt++;
double retryDelay = Math.Pow(2, Math.Min(6, rewardedInterstitialRetryAttempt));
UnityEngine.Debug.Log("Rewarded interstitial ad failed to load with error code: " + errorInfo.Code);
Invoke("LoadRewardedInterstitialAd", (float) retryDelay);
}
private void OnRewardedInterstitialAdFailedToDisplayEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo, MaxSdkBase.AdInfo adInfo)
{
PlayerPrefs.SetInt ("reward", 2);
// Rewarded interstitial ad failed to display. We recommend loading the next ad
UnityEngine.Debug.Log("Rewarded interstitial ad failed to display with error code: " + errorInfo.Code);
LoadRewardedInterstitialAd();
}
private void OnRewardedInterstitialAdDisplayedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
UnityEngine.Debug.Log("Rewarded interstitial ad displayed");
}
private void OnRewardedInterstitialAdClickedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
UnityEngine.Debug.Log("Rewarded interstitial ad clicked");
}
private void OnRewardedInterstitialAdDismissedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
// Rewarded interstitial ad is hidden. Pre-load the next ad
UnityEngine.Debug.Log("Rewarded interstitial ad dismissed");
LoadRewardedInterstitialAd();
}
private void OnRewardedInterstitialAdReceivedRewardEvent(string adUnitId, MaxSdk.Reward reward, MaxSdkBase.AdInfo adInfo)
{
PlayerPrefs.SetInt ("reward", 1);
// Rewarded interstitial ad was displayed and user should receive the reward
UnityEngine.Debug.Log("Rewarded interstitial ad received reward");
}
private void OnRewardedInterstitialAdRevenuePaidEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
// Rewarded interstitial ad revenue paid. Use this callback to track user revenue.
UnityEngine.Debug.Log("Rewarded interstitial ad revenue paid");
// Ad revenue
double revenue = adInfo.Revenue;
// Miscellaneous data
string countryCode = MaxSdk.GetSdkConfiguration().CountryCode; // "US" for the United States, etc - Note: Do not confuse this with currency code which is "USD" in most cases!
string networkName = adInfo.NetworkName; // Display name of the network that showed the ad (e.g. "AdColony")
string adUnitIdentifier = adInfo.AdUnitIdentifier; // The MAX Ad Unit ID
string placement = adInfo.Placement; // The placement this ad's postbacks are tied to
}
#endregion
#region Banner Ad Methods
private void InitializeBannerAds()
{
// Attach Callbacks
MaxSdkCallbacks.Banner.OnAdLoadedEvent += OnBannerAdLoadedEvent;
MaxSdkCallbacks.Banner.OnAdLoadFailedEvent += OnBannerAdFailedEvent;
MaxSdkCallbacks.Banner.OnAdClickedEvent += OnBannerAdClickedEvent;
MaxSdkCallbacks.Banner.OnAdRevenuePaidEvent += OnBannerAdRevenuePaidEvent;
// Banners are automatically sized to 320x50 on phones and 728x90 on tablets.
// You may use the utility method `MaxSdkUtils.isTablet()` to help with view sizing adjustments.
MaxSdk.CreateBanner(BannerAdUnitId, position);
// Set background or background color for banners to be fully functional.
MaxSdk.SetBannerBackgroundColor(BannerAdUnitId, Color.black);
}
public void ShowBanner ()
{
MaxSdk.ShowBanner(BannerAdUnitId);
}
public void HideBanner (){
MaxSdk.HideBanner(BannerAdUnitId);
}
private void OnBannerAdLoadedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
if(AutoShowBanner)
ShowBanner();
// Banner ad is ready to be shown.
// If you have already called MaxSdk.ShowBanner(BannerAdUnitId) it will automatically be shown on the next ad refresh.
UnityEngine.Debug.Log("Banner ad loaded");
}
private void OnBannerAdFailedEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo)
{
// Banner ad failed to load. MAX will automatically try loading a new ad internally.
UnityEngine.Debug.Log("Banner ad failed to load with error code: " + errorInfo.Code);
}
private void OnBannerAdClickedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
UnityEngine.Debug.Log("Banner ad clicked");
}
private void OnBannerAdRevenuePaidEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
// Banner ad revenue paid. Use this callback to track user revenue.
UnityEngine.Debug.Log("Banner ad revenue paid");
// Ad revenue
double revenue = adInfo.Revenue;
// Miscellaneous data
string countryCode = MaxSdk.GetSdkConfiguration().CountryCode; // "US" for the United States, etc - Note: Do not confuse this with currency code which is "USD" in most cases!
string networkName = adInfo.NetworkName; // Display name of the network that showed the ad (e.g. "AdColony")
string adUnitIdentifier = adInfo.AdUnitIdentifier; // The MAX Ad Unit ID
string placement = adInfo.Placement; // The placement this ad's postbacks are tied to
}
#endregion
#region MREC Ad Methods
private void InitializeMRecAds()
{
// Attach Callbacks
MaxSdkCallbacks.MRec.OnAdLoadedEvent += OnMRecAdLoadedEvent;
MaxSdkCallbacks.MRec.OnAdLoadFailedEvent += OnMRecAdFailedEvent;
MaxSdkCallbacks.MRec.OnAdClickedEvent += OnMRecAdClickedEvent;
MaxSdkCallbacks.MRec.OnAdRevenuePaidEvent += OnMRecAdRevenuePaidEvent;
// MRECs are automatically sized to 300x250.
MaxSdk.CreateMRec(MRecAdUnitId, MBRposition);
}
public void ShowMRec()
{
MaxSdk.ShowMRec(MRecAdUnitId);;
}
public void HideMRec(){
MaxSdk.HideMRec(MRecAdUnitId);
}
private void OnMRecAdLoadedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
// MRec ad is ready to be shown.
// If you have already called MaxSdk.ShowMRec(MRecAdUnitId) it will automatically be shown on the next MRec refresh.
UnityEngine.Debug.Log("MRec ad loaded");
}
private void OnMRecAdFailedEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo)
{
// MRec ad failed to load. MAX will automatically try loading a new ad internally.
UnityEngine.Debug.Log("MRec ad failed to load with error code: " + errorInfo.Code);
}
private void OnMRecAdClickedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
UnityEngine.Debug.Log("MRec ad clicked");
}
private void OnMRecAdRevenuePaidEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
// MRec ad revenue paid. Use this callback to track user revenue.
UnityEngine.Debug.Log("MRec ad revenue paid");
// Ad revenue
double revenue = adInfo.Revenue;
// Miscellaneous data
string countryCode = MaxSdk.GetSdkConfiguration().CountryCode; // "US" for the United States, etc - Note: Do not confuse this with currency code which is "USD" in most cases!
string networkName = adInfo.NetworkName; // Display name of the network that showed the ad (e.g. "AdColony")
string adUnitIdentifier = adInfo.AdUnitIdentifier; // The MAX Ad Unit ID
string placement = adInfo.Placement; // The placement this ad's postbacks are tied to
}
#endregion
public void MediationDebugger()
{
MaxSdk.ShowMediationDebugger();
}
}