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); } }