using UnityEngine;
using System;
public class AdManager : MonoBehaviour
{
// 单例实例
private static AdManager instance;
public static AdManager Instance => instance;
[Header("广告单元ID")]
// 插页广告ID
[SerializeField] private string interstitialAdUnitId = "YOUR_INTERSTITIAL_AD_UNIT_ID";
// 激励广告ID
[SerializeField] private string rewardedAdUnitId = "YOUR_REWARDED_AD_UNIT_ID";
// 横幅广告ID
[SerializeField] private string bannerAdUnitId = "YOUR_BANNER_AD_UNIT_ID";
[Header("广告设置")]
// 插页广告显示间隔(每多少次触发一次)
[SerializeField] private int interstitialAdInterval = 2; // 每多少次显示一次插页广告
// 插页广告计数器
private int interstitialAdCounter = 0;
///
/// 单例初始化,防止重复实例
///
private void Awake()
{
if (instance == null)
{
instance = this;
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
}
}
///
/// 启动时初始化广告SDK
///
private void Start()
{
InitializeAds();
}
///
/// 初始化广告SDK及各类广告
///
private void InitializeAds()
{
// 初始化SDK
//MaxSdk.SetSdkKey("YOUR_SDK_KEY");
MaxSdk.InitializeSdk();
// 注册回调
MaxSdkCallbacks.OnSdkInitializedEvent += OnSdkInitialized;
// 初始化各类广告
InitializeInterstitialAds();
InitializeRewardedAds();
InitializeBannerAds();
}
///
/// SDK初始化完成回调
///
private void OnSdkInitialized(MaxSdkBase.SdkConfiguration sdkConfiguration)
{
Debug.Log("AppLovin SDK 初始化成功");
}
#region 插页广告
///
/// 初始化插页广告及回调
///
private void InitializeInterstitialAds()
{
// 注册插页广告回调
MaxSdkCallbacks.Interstitial.OnAdLoadedEvent += OnInterstitialLoadedEvent;
MaxSdkCallbacks.Interstitial.OnAdLoadFailedEvent += OnInterstitialLoadFailedEvent;
MaxSdkCallbacks.Interstitial.OnAdDisplayedEvent += OnInterstitialDisplayedEvent;
MaxSdkCallbacks.Interstitial.OnAdClickedEvent += OnInterstitialClickedEvent;
MaxSdkCallbacks.Interstitial.OnAdHiddenEvent += OnInterstitialHiddenEvent;
MaxSdkCallbacks.Interstitial.OnAdDisplayFailedEvent += OnInterstitialDisplayFailedEvent;
// 加载第一个插页广告
LoadInterstitial();
}
///
/// 加载插页广告
///
private void LoadInterstitial()
{
MaxSdk.LoadInterstitial(interstitialAdUnitId);
}
///
/// 显示插页广告,按间隔计数
///
public void ShowInterstitial()
{
interstitialAdCounter++;
if (interstitialAdCounter >= interstitialAdInterval)
{
if (MaxSdk.IsInterstitialReady(interstitialAdUnitId))
{
MaxSdk.ShowInterstitial(interstitialAdUnitId);
interstitialAdCounter = 0;
}
LoadInterstitial();
}
}
private void OnInterstitialLoadedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
Debug.Log("插页广告加载成功");
}
private void OnInterstitialLoadFailedEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo)
{
Debug.LogError($"插页广告加载失败: {errorInfo.Message}");
LoadInterstitial();
}
private void OnInterstitialDisplayedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
Debug.Log("插页广告显示成功");
}
private void OnInterstitialClickedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
Debug.Log("插页广告被点击");
}
private void OnInterstitialHiddenEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
Debug.Log("插页广告关闭");
LoadInterstitial();
}
private void OnInterstitialDisplayFailedEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo, MaxSdkBase.AdInfo adInfo)
{
Debug.LogError($"插页广告显示失败: {errorInfo.Message}");
LoadInterstitial();
}
#endregion
#region 激励广告
///
/// 初始化激励广告及回调
///
private void InitializeRewardedAds()
{
// 注册激励广告回调
MaxSdkCallbacks.Rewarded.OnAdLoadedEvent += OnRewardedLoadedEvent;
MaxSdkCallbacks.Rewarded.OnAdLoadFailedEvent += OnRewardedLoadFailedEvent;
MaxSdkCallbacks.Rewarded.OnAdDisplayedEvent += OnRewardedDisplayedEvent;
MaxSdkCallbacks.Rewarded.OnAdClickedEvent += OnRewardedClickedEvent;
MaxSdkCallbacks.Rewarded.OnAdHiddenEvent += OnRewardedHiddenEvent;
MaxSdkCallbacks.Rewarded.OnAdDisplayFailedEvent += OnRewardedDisplayFailedEvent;
MaxSdkCallbacks.Rewarded.OnAdReceivedRewardEvent += OnRewardedReceivedRewardEvent;
// 加载第一个激励广告
LoadRewardedAd();
}
///
/// 加载激励广告
///
private void LoadRewardedAd()
{
MaxSdk.LoadRewardedAd(rewardedAdUnitId);
}
///
/// 显示激励广告,回调奖励
///
public void ShowRewardedAd(Action onRewarded)
{
if (MaxSdk.IsRewardedAdReady(rewardedAdUnitId))
{
MaxSdk.ShowRewardedAd(rewardedAdUnitId);
onRewarded?.Invoke();
}
LoadRewardedAd();
}
private void OnRewardedLoadedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
Debug.Log("激励广告加载成功");
}
private void OnRewardedLoadFailedEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo)
{
Debug.LogError($"激励广告加载失败: {errorInfo.Message}");
LoadRewardedAd();
}
private void OnRewardedDisplayedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
Debug.Log("激励广告显示成功");
}
private void OnRewardedClickedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
Debug.Log("激励广告被点击");
}
private void OnRewardedHiddenEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
Debug.Log("激励广告关闭");
LoadRewardedAd();
}
private void OnRewardedDisplayFailedEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo, MaxSdkBase.AdInfo adInfo)
{
Debug.LogError($"激励广告显示失败: {errorInfo.Message}");
LoadRewardedAd();
}
private void OnRewardedReceivedRewardEvent(string adUnitId, MaxSdkBase.Reward reward, MaxSdkBase.AdInfo adInfo)
{
Debug.Log($"激励广告奖励发放: {reward.Amount} {reward.Label}");
}
#endregion
#region 横幅广告
///
/// 初始化横幅广告及回调
///
private void InitializeBannerAds()
{
// 注册横幅广告回调
MaxSdkCallbacks.Banner.OnAdLoadedEvent += OnBannerLoadedEvent;
MaxSdkCallbacks.Banner.OnAdLoadFailedEvent += OnBannerLoadFailedEvent;
MaxSdkCallbacks.Banner.OnAdClickedEvent += OnBannerClickedEvent;
MaxSdkCallbacks.Banner.OnAdExpandedEvent += OnBannerExpandedEvent;
MaxSdkCallbacks.Banner.OnAdCollapsedEvent += OnBannerCollapsedEvent;
// 加载横幅广告
LoadBanner();
}
///
/// 加载横幅广告
///
private void LoadBanner()
{
MaxSdk.CreateBanner(bannerAdUnitId, MaxSdkBase.BannerPosition.BottomCenter);
}
///
/// 显示横幅广告
///
public void ShowBanner()
{
MaxSdk.ShowBanner(bannerAdUnitId);
}
///
/// 隐藏横幅广告
///
public void HideBanner()
{
MaxSdk.HideBanner(bannerAdUnitId);
}
private void OnBannerLoadedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
Debug.Log("横幅广告加载成功");
}
private void OnBannerLoadFailedEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo)
{
Debug.LogError($"横幅广告加载失败: {errorInfo.Message}");
LoadBanner();
}
private void OnBannerClickedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
Debug.Log("横幅广告被点击");
}
private void OnBannerExpandedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
Debug.Log("横幅广告展开");
}
private void OnBannerCollapsedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
Debug.Log("横幅广告收起");
}
#endregion
///
/// 脚本销毁时清理横幅广告
///
private void OnDestroy()
{
// 清理横幅广告
MaxSdk.DestroyBanner(bannerAdUnitId);
}
}