AdManager.cs 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. using UnityEngine;
  2. using System;
  3. public class AdManager : MonoBehaviour
  4. {
  5. private static AdManager instance;
  6. public static AdManager Instance => instance;
  7. [Header("广告单元ID")]
  8. [SerializeField] private string interstitialAdUnitId = "YOUR_INTERSTITIAL_AD_UNIT_ID";
  9. [SerializeField] private string rewardedAdUnitId = "YOUR_REWARDED_AD_UNIT_ID";
  10. [SerializeField] private string bannerAdUnitId = "YOUR_BANNER_AD_UNIT_ID";
  11. [Header("广告设置")]
  12. [SerializeField] private int interstitialAdInterval = 2; // 每多少次显示一次插页广告
  13. private int interstitialAdCounter = 0;
  14. private void Awake()
  15. {
  16. if (instance == null)
  17. {
  18. instance = this;
  19. DontDestroyOnLoad(gameObject);
  20. }
  21. else
  22. {
  23. Destroy(gameObject);
  24. }
  25. }
  26. private void Start()
  27. {
  28. InitializeAds();
  29. }
  30. private void InitializeAds()
  31. {
  32. // 初始化SDK
  33. //MaxSdk.SetSdkKey("YOUR_SDK_KEY");
  34. MaxSdk.InitializeSdk();
  35. // 注册回调
  36. MaxSdkCallbacks.OnSdkInitializedEvent += OnSdkInitialized;
  37. // 初始化各类广告
  38. InitializeInterstitialAds();
  39. InitializeRewardedAds();
  40. InitializeBannerAds();
  41. }
  42. private void OnSdkInitialized(MaxSdkBase.SdkConfiguration sdkConfiguration)
  43. {
  44. Debug.Log("AppLovin SDK 初始化成功");
  45. }
  46. #region 插页广告
  47. private void InitializeInterstitialAds()
  48. {
  49. // 注册插页广告回调
  50. MaxSdkCallbacks.Interstitial.OnAdLoadedEvent += OnInterstitialLoadedEvent;
  51. MaxSdkCallbacks.Interstitial.OnAdLoadFailedEvent += OnInterstitialLoadFailedEvent;
  52. MaxSdkCallbacks.Interstitial.OnAdDisplayedEvent += OnInterstitialDisplayedEvent;
  53. MaxSdkCallbacks.Interstitial.OnAdClickedEvent += OnInterstitialClickedEvent;
  54. MaxSdkCallbacks.Interstitial.OnAdHiddenEvent += OnInterstitialHiddenEvent;
  55. MaxSdkCallbacks.Interstitial.OnAdDisplayFailedEvent += OnInterstitialDisplayFailedEvent;
  56. // 加载第一个插页广告
  57. LoadInterstitial();
  58. }
  59. private void LoadInterstitial()
  60. {
  61. MaxSdk.LoadInterstitial(interstitialAdUnitId);
  62. }
  63. public void ShowInterstitial()
  64. {
  65. interstitialAdCounter++;
  66. if (interstitialAdCounter >= interstitialAdInterval)
  67. {
  68. if (MaxSdk.IsInterstitialReady(interstitialAdUnitId))
  69. {
  70. MaxSdk.ShowInterstitial(interstitialAdUnitId);
  71. interstitialAdCounter = 0;
  72. }
  73. LoadInterstitial();
  74. }
  75. }
  76. private void OnInterstitialLoadedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
  77. {
  78. Debug.Log("插页广告加载成功");
  79. }
  80. private void OnInterstitialLoadFailedEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo)
  81. {
  82. Debug.LogError($"插页广告加载失败: {errorInfo.Message}");
  83. LoadInterstitial();
  84. }
  85. private void OnInterstitialDisplayedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
  86. {
  87. Debug.Log("插页广告显示成功");
  88. }
  89. private void OnInterstitialClickedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
  90. {
  91. Debug.Log("插页广告被点击");
  92. }
  93. private void OnInterstitialHiddenEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
  94. {
  95. Debug.Log("插页广告关闭");
  96. LoadInterstitial();
  97. }
  98. private void OnInterstitialDisplayFailedEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo, MaxSdkBase.AdInfo adInfo)
  99. {
  100. Debug.LogError($"插页广告显示失败: {errorInfo.Message}");
  101. LoadInterstitial();
  102. }
  103. #endregion
  104. #region 激励广告
  105. private void InitializeRewardedAds()
  106. {
  107. // 注册激励广告回调
  108. MaxSdkCallbacks.Rewarded.OnAdLoadedEvent += OnRewardedLoadedEvent;
  109. MaxSdkCallbacks.Rewarded.OnAdLoadFailedEvent += OnRewardedLoadFailedEvent;
  110. MaxSdkCallbacks.Rewarded.OnAdDisplayedEvent += OnRewardedDisplayedEvent;
  111. MaxSdkCallbacks.Rewarded.OnAdClickedEvent += OnRewardedClickedEvent;
  112. MaxSdkCallbacks.Rewarded.OnAdHiddenEvent += OnRewardedHiddenEvent;
  113. MaxSdkCallbacks.Rewarded.OnAdDisplayFailedEvent += OnRewardedDisplayFailedEvent;
  114. MaxSdkCallbacks.Rewarded.OnAdReceivedRewardEvent += OnRewardedReceivedRewardEvent;
  115. // 加载第一个激励广告
  116. LoadRewardedAd();
  117. }
  118. private void LoadRewardedAd()
  119. {
  120. MaxSdk.LoadRewardedAd(rewardedAdUnitId);
  121. }
  122. public void ShowRewardedAd(Action onRewarded)
  123. {
  124. if (MaxSdk.IsRewardedAdReady(rewardedAdUnitId))
  125. {
  126. MaxSdk.ShowRewardedAd(rewardedAdUnitId);
  127. onRewarded?.Invoke();
  128. }
  129. LoadRewardedAd();
  130. }
  131. private void OnRewardedLoadedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
  132. {
  133. Debug.Log("激励广告加载成功");
  134. }
  135. private void OnRewardedLoadFailedEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo)
  136. {
  137. Debug.LogError($"激励广告加载失败: {errorInfo.Message}");
  138. LoadRewardedAd();
  139. }
  140. private void OnRewardedDisplayedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
  141. {
  142. Debug.Log("激励广告显示成功");
  143. }
  144. private void OnRewardedClickedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
  145. {
  146. Debug.Log("激励广告被点击");
  147. }
  148. private void OnRewardedHiddenEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
  149. {
  150. Debug.Log("激励广告关闭");
  151. LoadRewardedAd();
  152. }
  153. private void OnRewardedDisplayFailedEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo, MaxSdkBase.AdInfo adInfo)
  154. {
  155. Debug.LogError($"激励广告显示失败: {errorInfo.Message}");
  156. LoadRewardedAd();
  157. }
  158. private void OnRewardedReceivedRewardEvent(string adUnitId, MaxSdkBase.Reward reward, MaxSdkBase.AdInfo adInfo)
  159. {
  160. Debug.Log($"激励广告奖励发放: {reward.Amount} {reward.Label}");
  161. }
  162. #endregion
  163. #region 横幅广告
  164. private void InitializeBannerAds()
  165. {
  166. // 注册横幅广告回调
  167. MaxSdkCallbacks.Banner.OnAdLoadedEvent += OnBannerLoadedEvent;
  168. MaxSdkCallbacks.Banner.OnAdLoadFailedEvent += OnBannerLoadFailedEvent;
  169. MaxSdkCallbacks.Banner.OnAdClickedEvent += OnBannerClickedEvent;
  170. MaxSdkCallbacks.Banner.OnAdExpandedEvent += OnBannerExpandedEvent;
  171. MaxSdkCallbacks.Banner.OnAdCollapsedEvent += OnBannerCollapsedEvent;
  172. // 加载横幅广告
  173. LoadBanner();
  174. }
  175. private void LoadBanner()
  176. {
  177. MaxSdk.CreateBanner(bannerAdUnitId, MaxSdkBase.BannerPosition.BottomCenter);
  178. }
  179. public void ShowBanner()
  180. {
  181. MaxSdk.ShowBanner(bannerAdUnitId);
  182. }
  183. public void HideBanner()
  184. {
  185. MaxSdk.HideBanner(bannerAdUnitId);
  186. }
  187. private void OnBannerLoadedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
  188. {
  189. Debug.Log("横幅广告加载成功");
  190. }
  191. private void OnBannerLoadFailedEvent(string adUnitId, MaxSdkBase.ErrorInfo errorInfo)
  192. {
  193. Debug.LogError($"横幅广告加载失败: {errorInfo.Message}");
  194. LoadBanner();
  195. }
  196. private void OnBannerClickedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
  197. {
  198. Debug.Log("横幅广告被点击");
  199. }
  200. private void OnBannerExpandedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
  201. {
  202. Debug.Log("横幅广告展开");
  203. }
  204. private void OnBannerCollapsedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
  205. {
  206. Debug.Log("横幅广告收起");
  207. }
  208. #endregion
  209. private void OnDestroy()
  210. {
  211. // 清理横幅广告
  212. MaxSdk.DestroyBanner(bannerAdUnitId);
  213. }
  214. }