兼容两个版本获取admob价格

This commit is contained in:
luojian 2025-09-25 10:20:26 +08:00
parent da1e02b790
commit 5e6e7f32cb
1 changed files with 202 additions and 60 deletions

View File

@ -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)
{
string responseInfoJson = responseInfo.ToString();
JObject responseInfoObj = JObject.Parse(responseInfoJson);
JToken loadedAdapterResponse = responseInfoObj["Response Extras"];
if (loadedAdapterResponse != null)
return stackName switch
{
pubid = loadedAdapterResponse["mediation_group_name"]?.ToString();
"BannerStack" => GetBannerStack(),
"SpStack" => GetSpStack(),
"IvStack" => GetIvStack(),
"RvStack" => GetRvStack(),
"NaStack" => GetNaStack(),
_ => Array.Empty<string>()
};
}
}
catch
internal class Stack1 : IStack
{
}
return pubid;
}
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;
}
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<string>();
}
protected override string[] GetSpStack()
{
return Array.Empty<string>();
}
protected override string[] GetIvStack()
{
return Array.Empty<string>();
}
protected override string[] GetRvStack()
{
return Array.Empty<string>();
}
protected override string[] GetNaStack()
{
return Array.Empty<string>();
}
}
public class AdmobUtils
{
private static IStack _stack;
private static readonly List<IStack> 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;
}
/// <summary>
/// 获取java ad view 对象