123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306 |
- 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;
- /// <summary>
- /// 单例初始化,防止重复实例
- /// </summary>
- private void Awake()
- {
- if (instance == null)
- {
- instance = this;
- DontDestroyOnLoad(gameObject);
- }
- else
- {
- Destroy(gameObject);
- }
- }
- /// <summary>
- /// 启动时初始化广告SDK
- /// </summary>
- private void Start()
- {
- InitializeAds();
- }
- /// <summary>
- /// 初始化广告SDK及各类广告
- /// </summary>
- private void InitializeAds()
- {
- // 初始化SDK
- //MaxSdk.SetSdkKey("YOUR_SDK_KEY");
- MaxSdk.InitializeSdk();
- // 注册回调
- MaxSdkCallbacks.OnSdkInitializedEvent += OnSdkInitialized;
-
- // 初始化各类广告
- InitializeInterstitialAds();
- InitializeRewardedAds();
- InitializeBannerAds();
- }
- /// <summary>
- /// SDK初始化完成回调
- /// </summary>
- private void OnSdkInitialized(MaxSdkBase.SdkConfiguration sdkConfiguration)
- {
- Debug.Log("AppLovin SDK 初始化成功");
- }
- #region 插页广告
- /// <summary>
- /// 初始化插页广告及回调
- /// </summary>
- 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();
- }
- /// <summary>
- /// 加载插页广告
- /// </summary>
- private void LoadInterstitial()
- {
- MaxSdk.LoadInterstitial(interstitialAdUnitId);
- }
- /// <summary>
- /// 显示插页广告,按间隔计数
- /// </summary>
- 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 激励广告
- /// <summary>
- /// 初始化激励广告及回调
- /// </summary>
- 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();
- }
- /// <summary>
- /// 加载激励广告
- /// </summary>
- private void LoadRewardedAd()
- {
- MaxSdk.LoadRewardedAd(rewardedAdUnitId);
- }
- /// <summary>
- /// 显示激励广告,回调奖励
- /// </summary>
- 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 横幅广告
- /// <summary>
- /// 初始化横幅广告及回调
- /// </summary>
- private void InitializeBannerAds()
- {
- // 注册横幅广告回调
- MaxSdkCallbacks.Banner.OnAdLoadedEvent += OnBannerLoadedEvent;
- MaxSdkCallbacks.Banner.OnAdLoadFailedEvent += OnBannerLoadFailedEvent;
- MaxSdkCallbacks.Banner.OnAdClickedEvent += OnBannerClickedEvent;
- MaxSdkCallbacks.Banner.OnAdExpandedEvent += OnBannerExpandedEvent;
- MaxSdkCallbacks.Banner.OnAdCollapsedEvent += OnBannerCollapsedEvent;
- // 加载横幅广告
- LoadBanner();
- }
- /// <summary>
- /// 加载横幅广告
- /// </summary>
- private void LoadBanner()
- {
- MaxSdk.CreateBanner(bannerAdUnitId, MaxSdkBase.BannerPosition.BottomCenter);
- }
- /// <summary>
- /// 显示横幅广告
- /// </summary>
- public void ShowBanner()
- {
- MaxSdk.ShowBanner(bannerAdUnitId);
- }
- /// <summary>
- /// 隐藏横幅广告
- /// </summary>
- 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
- /// <summary>
- /// 脚本销毁时清理横幅广告
- /// </summary>
- private void OnDestroy()
- {
- // 清理横幅广告
- MaxSdk.DestroyBanner(bannerAdUnitId);
- }
- }
|