using System; using System.Collections; using System.Collections.Generic; using Newtonsoft.Json; using Unity.VisualScripting; using UnityEngine; namespace WZ { public static class AdConfigParser { private static AdConfig _config; private static Dictionary _configDict = new Dictionary(); public static AdConfig Parse(string json) { try { // 处理 JSON 字符串,确保它是有效的 if (string.IsNullOrEmpty(json)) { LoggerUtils.Error("JSON string is null or empty"); return null; } // 使用 JsonUtility 解析 JSON _config = JsonUtility.FromJson(json); _configDict = JsonToDictionary(json); if (_config == null) { LoggerUtils.Error("Failed to parse JSON to AdConfig"); return null; } LoggerUtils.Info("AdConfig parsed successfully"); return _config; } catch (Exception e) { LoggerUtils.Error($"Error parsing AdConfig: {e.Message}"); return null; } } public static Dictionary JsonToDictionary(string jsonStr) { Dictionary dic= JsonConvert.DeserializeObject>(jsonStr); return dic; } /// /// 获取 Admob 广告单元ID /// public static List GetAdmobAdUnits(AdsType adType) { if (_config == null) { return adType switch { AdsType.Banner => new List { StaticValue.AdmobNormalBannerId }, AdsType.Rewarded => new List { StaticValue.AdmobRewardId }, AdsType.Native => new List { StaticValue.AdmobNativeId, StaticValue.AdmobMinddleNativeId, StaticValue.AdmobSmallNativeId, StaticValue.AdmobFullNativeId }, AdsType.Splash => new List { StaticValue.AdmobSplashId }, AdsType.Interstitial => new List { StaticValue.AdmobInterId }, _ => new List() }; } switch (adType) { case AdsType.Banner: if (_configDict.ContainsKey("admob_banner_units")) { return _config.admob_banner_units ?? new List(); } else { return new List{ StaticValue.AdmobNormalBannerId }; } case AdsType.Rewarded: if (_configDict.ContainsKey("admob_rewarded_units")) { return _config.admob_rewarded_units ?? new List(); } else { return new List{ StaticValue.AdmobRewardId }; } case AdsType.Native: if (_configDict.ContainsKey("admob_native_units")) { return _config.admob_native_units ?? new List(); } else { return new List{ StaticValue.AdmobNativeId, StaticValue.AdmobMinddleNativeId, StaticValue.AdmobSmallNativeId, StaticValue.AdmobFullNativeId }; } case AdsType.Splash: if (_configDict.ContainsKey("admob_splash_units")) { return _config.admob_splash_units ?? new List(); } else { return new List{ StaticValue.AdmobSplashId }; } case AdsType.Interstitial: if (_configDict.ContainsKey("admob_interstitial_units")) { return _config.admob_interstitial_units ?? new List(); } else { return new List{ StaticValue.AdmobInterId }; } default: return new List(); } } /// /// 获取 TopOn 广告单元ID /// public static List GetTopOnAdUnits(AdsType adType) { if (_config == null) { return adType switch { AdsType.Interstitial => new List { StaticValue.TopOnInterAdUnitID }, AdsType.Rewarded => new List { StaticValue.TopOnRewardAdUnitID }, _ => new List() }; } switch (adType) { case AdsType.Interstitial: if (_configDict.ContainsKey("topon_interstitial_units")) { return _config.topon_interstitial_units ?? new List(); } else { return new List{ StaticValue.TopOnInterAdUnitID }; } case AdsType.Rewarded: if (_configDict.ContainsKey("topon_rewarded_units")) { return _config.topon_rewarded_units ?? new List(); } else { return new List{ StaticValue.TopOnRewardAdUnitID };; } default: return new List(); } } /// /// 获取 AppLovin MAX 广告单元ID /// public static List GetMaxAdUnits(AdsType adType) { if (_config == null) { return adType switch { AdsType.Interstitial => new List { StaticValue.MaxInterAdUnitID,StaticValue.MaxSparespareInterAdUnitID }, AdsType.Rewarded => new List { StaticValue.MaxRewardAdUnitID,StaticValue.MaxSparespareRewardAdUnitID }, _ => new List() }; } switch (adType) { case AdsType.Interstitial: if (_configDict.ContainsKey("max_interstitial_units")) { return _config.max_interstitial_units ?? new List(); } else { return new List{ StaticValue.MaxInterAdUnitID,StaticValue.MaxSparespareInterAdUnitID }; } case AdsType.Rewarded: if (_configDict.ContainsKey("max_rewarded_units")) { return _config.max_rewarded_units ?? new List(); } else { return new List{ StaticValue.MaxRewardAdUnitID,StaticValue.MaxSparespareRewardAdUnitID }; } default: return new List(); } } /// /// 获取 Bigo 广告单元ID /// public static List GetBigoAdUnits(AdsType adType) { if (_config == null) return new List(); return adType switch { AdsType.Interstitial => _config.bigo_i_inter_units ?? new List(), AdsType.Rewarded => _config.bigo_i_reward_units ?? new List(), _ => new List() }; } /// /// 获取 Kwai 广告单元ID /// public static List GetKwaiAdUnits(AdsType adType) { if (_config == null) return new List(); return adType switch { AdsType.Interstitial => _config.kwai_i_inter_units ?? new List(), AdsType.Rewarded => _config.kwai_i_reward_units ?? new List(), _ => new List() }; } /// /// 获取 TopOn App ID /// public static string GetTopOnAppId() { if (_config == null) return StaticValue.TopOnAppID; if (_configDict.ContainsKey("topon_app_id")) { return _config?.topon_app_id; } else { return StaticValue.TopOnAppID; } } /// /// 获取 TopOn App Key /// public static string GetTopOnAppKey() { if (_config == null) return StaticValue.TopOnAppKey; if (_configDict.ContainsKey("topon_app_key")) { return _config?.topon_app_key; } else { return StaticValue.TopOnAppKey; } } /// /// 获取 AppLovin MAX App Key /// public static string GetMaxAppKey() { if (_config == null) return StaticValue.ApplovinKey; return _config?.max_app_key; } /// /// 获取 Bigo App ID /// public static string GetBigoAppId() { return _config?.bigo_app_id; } /// /// 获取 Kwai App ID /// public static string GetKwaiAppId() { return _config?.kwai_app_id; } /// /// 获取 Kwai App Token /// public static string GetKwaiAppToken() { return _config?.kwai_app_token; } /// /// 获取广告过期时间(秒) /// public static int GetAdExpireInSec() { return _config?.ad_expire_in_sec ?? -1; // 默认值 } /// /// 检查配置是否已加载 /// public static bool IsConfigLoaded() { return _config != null; } /// /// 清空已加载的配置 /// public static void ClearConfig() { _config = null; } } [Serializable] public class AdConfig { // Admob 配置 public List admob_interstitial_units; public List admob_splash_units; public List admob_rewarded_units; public List admob_banner_units; public List admob_native_units; // TopOn 配置 public string topon_app_id; public string topon_app_key; public List topon_interstitial_units; public List topon_splash_units; public List topon_rewarded_units; public List topon_banner_units; public List topon_native_units; // AppLovin MAX 配置 public string max_app_key; public List max_interstitial_units; public List max_splash_units; public List max_rewarded_units; public List max_banner_units; public List max_native_units; // Bigo 配置 public string bigo_app_id; public List bigo_i_inter_units; public List bigo_i_reward_units; // Kwai 配置 public string kwai_app_id; public string kwai_app_token; public List kwai_i_inter_units; public List kwai_i_reward_units; // 通用配置 public int ad_expire_in_sec; } }