diff --git a/Assets/Script/SDKManager/AdsSDKManager/AdmobAdsManager/Utils/AdmobTools.cs b/Assets/Script/SDKManager/AdsSDKManager/AdmobAdsManager/Utils/AdmobTools.cs index c3fade2..c396952 100644 --- a/Assets/Script/SDKManager/AdsSDKManager/AdmobAdsManager/Utils/AdmobTools.cs +++ b/Assets/Script/SDKManager/AdsSDKManager/AdmobAdsManager/Utils/AdmobTools.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Linq; using System.Reflection; using GoogleMobileAds.Api; @@ -7,77 +8,218 @@ using Newtonsoft.Json.Linq; namespace WZ { - public class AdmobUtils + abstract class IStack { - public static string ParseResponseInfo(ResponseInfo responseInfo) - { - string pubid = ""; + public abstract string GetStackName(); + protected abstract string[] GetBannerStack(); + protected abstract string[] GetSpStack(); + protected abstract string[] GetIvStack(); + protected abstract string[] GetRvStack(); + protected abstract string[] GetNaStack(); - try + public string[] GetStackFromName(string stackName) + { + return stackName switch { - string responseInfoJson = responseInfo.ToString(); - JObject responseInfoObj = JObject.Parse(responseInfoJson); - JToken loadedAdapterResponse = responseInfoObj["Response Extras"]; - - if (loadedAdapterResponse != null) - { - pubid = loadedAdapterResponse["mediation_group_name"]?.ToString(); - } - } - catch - { - } - - return pubid; + "BannerStack" => GetBannerStack(), + "SpStack" => GetSpStack(), + "IvStack" => GetIvStack(), + "RvStack" => GetRvStack(), + "NaStack" => GetNaStack(), + _ => Array.Empty() + }; } + } - public static double GetBannerEcpm(BannerView bannerView) - { - return GetEcpm(bannerView, "bannerView", "adView", BannerStack); - } - - public static double GetRewardedAdEcpm(RewardedAd rewardedAd) - { - return GetEcpm(rewardedAd, "androidRewardedAd", "rewardedAd", RvStack); - } - - public static double GetInterstitialAdEcpm(InterstitialAd interstitialAd) - { - return GetEcpm(interstitialAd, "androidInterstitialAd", "interstitialAd", IvStack); - } - - public static double GetAppOpenAdEcpm(AppOpenAd appOpenAd) - { - return GetEcpm(appOpenAd, "androidAppOpenAd", "appOpenAd", SpStack); - } - - - public static double GetNativeEcpm(NativeOverlayAd ad) - { - return GetEcpm(ad, "nativeOverlayAd", "nativeAd", NaStack); - } - - private static double GetEcpm(object o, string cShapeFieldName, string javaFieldName, string[] stack) - { - try - { - return GetEcpm(GetAdValue(GetJavaAdViewOjb(o, cShapeFieldName, javaFieldName), stack)); - } - catch (Exception e) - { - LoggerUtils.Error("[AdmobTools] e : " + e.Message + "\t cShapeFieldName : " + cShapeFieldName); - } - - return -1; - } - - + internal class Stack1 : IStack + { private static readonly string[] BannerStack = { "zza", "zzj", "zzi", "zze", "zza", "zzk", "zzae" }; private static readonly string[] SpStack = { "zzb", "zza", "zzc", "zza", "zzk", "zzae" }; private static readonly string[] IvStack = { "zzc", "zzj", "zzf", "zzd", "zzae" }; private static readonly string[] RvStack = { "zzb", "zzi", "zze", "zze", "zzae" }; private static readonly string[] NaStack = { "zza", "zzb", "zzf", "zzD", "zzb", "zzae" }; + public override string GetStackName() + { + return "Stack1"; + } + + protected override string[] GetBannerStack() + { + return BannerStack; + } + + protected override string[] GetSpStack() + { + return SpStack; + } + + protected override string[] GetIvStack() + { + return IvStack; + } + + protected override string[] GetRvStack() + { + return RvStack; + } + + protected override string[] GetNaStack() + { + return NaStack; + } + } + + internal class Stack2 : IStack + { + private static readonly string[] BannerStack = { "zza", "zzj", "zza", "a", "a", "e", "a", "e", "ae" }; + private static readonly string[] SpStack = { "zzb", "zza", "a", "a", "a", "e", "ae" }; + private static readonly string[] IvStack = { "zzc", "zza", "a", "a", "d", "d", "ae" }; + private static readonly string[] RvStack = { "zzb", "zza", "b", "g", "e", "ae" }; + private static readonly string[] NaStack = { "zza", "zza", "b", "c", "c", "ae" }; + + public override string GetStackName() + { + return "Stack2"; + } + + protected override string[] GetBannerStack() + { + return BannerStack; + } + + protected override string[] GetSpStack() + { + return SpStack; + } + + protected override string[] GetIvStack() + { + return IvStack; + } + + protected override string[] GetRvStack() + { + return RvStack; + } + + protected override string[] GetNaStack() + { + return NaStack; + } + } + + internal class EmptyStack : IStack + { + public override string GetStackName() + { + return "EmptyStack"; + } + + protected override string[] GetBannerStack() + { + return Array.Empty(); + } + + protected override string[] GetSpStack() + { + return Array.Empty(); + } + + protected override string[] GetIvStack() + { + return Array.Empty(); + } + + protected override string[] GetRvStack() + { + return Array.Empty(); + } + + protected override string[] GetNaStack() + { + return Array.Empty(); + } + } + + + public class AdmobUtils + { + private static IStack _stack; + + private static readonly List AvailableStrategies = new() + { + new Stack1(), + new Stack2() + // 新增策略只需在此处添加 + }; + + public static double GetBannerEcpm(BannerView bannerView) + { + return GetEcpm(bannerView, "bannerView", "adView", "BannerStack"); + } + + public static double GetRewardedAdEcpm(RewardedAd rewardedAd) + { + return GetEcpm(rewardedAd, "androidRewardedAd", "rewardedAd", "RvStack"); + } + + public static double GetInterstitialAdEcpm(InterstitialAd interstitialAd) + { + return GetEcpm(interstitialAd, "androidInterstitialAd", "interstitialAd", "IvStack"); + } + + public static double GetAppOpenAdEcpm(AppOpenAd appOpenAd) + { + return GetEcpm(appOpenAd, "androidAppOpenAd", "appOpenAd", "SpStack"); + } + + + public static double GetNativeEcpm(NativeOverlayAd ad) + { + return GetEcpm(ad, "nativeOverlayAd", "nativeAd", "NaStack"); + } + + private static double GetEcpm(object o, string cShapeFieldName, string javaFieldName, string stack) + { + if (_stack is EmptyStack) + { + return -0.1; + } + + try + { + if (_stack != null) + { + return GetEcpm(GetAdValue(GetJavaAdViewOjb(o, cShapeFieldName, javaFieldName), _stack.GetStackFromName(stack))); + } + } + catch (Exception e) + { + LoggerUtils.Error("[AdmobTools] e : " + e.Message + "\t cShapeFieldName : " + cShapeFieldName); + return -0.2; + } + + + foreach (var availableStrategy in AvailableStrategies) + { + try + { + var ecpm = GetEcpm(GetAdValue(GetJavaAdViewOjb(o, cShapeFieldName, javaFieldName), availableStrategy.GetStackFromName(stack))); + _stack = availableStrategy; + LoggerUtils.Debug("[AdmobTools] stack name : " + _stack.GetStackName()); + return ecpm; + } + catch (Exception e) + { + LoggerUtils.Error("[AdmobTools] stack name " + availableStrategy.GetStackName() + "e : " + e.Message + "\t cShapeFieldName : " + cShapeFieldName); + } + } + + _stack = new EmptyStack(); + + return -1.0; + } /// /// 获取java ad view 对象