AdManager.cs 8.9 KB

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