Xamarin Forms 自适应横幅广告无法横向加载
Xamarin Forms Adaptive Banner Ad Won't Load in Landscape
我最近从 Galaxy S6 升级到 Galaxy S21 Ultra,现在 AdMob 自适应横幅广告无法横向加载。在 S6 上没问题,但在 S21 上出现错误:
[Ads] Ad failed to load : 1
我用来制作广告的代码在这里:
private void NewAdaptiveBannerAd()
{
try
{
adAdaptiveBannerView = new AdAdaptiveBannerView();
adAdaptiveBannerView.Padding = new Thickness(0);
adAdaptiveBannerView.BackgroundColor = (Color)Application.Current.Resources["baseBackground_Light"];
AdGrid.Children.Add(adAdaptiveBannerView, 0, 1);
adAdaptiveBannerView.HeightRequest = getCurrentOrientationAnchoredAdaptiveBannerAdSize(Android.App.Application.Context, (int)(DeviceDisplay.MainDisplayInfo.Width / DeviceDisplay.MainDisplayInfo.Density));
static int getCurrentOrientationAnchoredAdaptiveBannerAdSize(Context context, int adWidth)
{
int var3 = 0;
if (context == null)
{
return 0;
}
else
{
int var7 = 2;
switch (DeviceDisplay.MainDisplayInfo.Orientation)
{
case DisplayOrientation.Unknown: var7 = 0; break;
case DisplayOrientation.Portrait: var7 = 1; break;
case DisplayOrientation.Landscape: var7 = 2; break;
default: return 0;
}
if (var3 == 0)
{
var3 = var7;
}
int var8 = var3 == var7 ? (int)Math.Round((float)DeviceDisplay.MainDisplayInfo.Height / DeviceDisplay.MainDisplayInfo.Density) : (int)Math.Round((float)DeviceDisplay.MainDisplayInfo.Width / DeviceDisplay.MainDisplayInfo.Density);
int var9 = (int)Math.Min(90, Math.Round((float)var8 * 0.15F));
int var10;
if (adWidth > 655)
{
var10 = (int)Math.Round((float)adWidth / 728.0F * 90.0F);
}
else if (adWidth > 632)
{
var10 = 81;
}
else if (adWidth > 526)
{
var10 = (int)Math.Round((float)adWidth / 468.0F * 60.0F);
}
else if (adWidth > 432)
{
var10 = 68;
}
else
{
var10 = (int)Math.Round((float)adWidth / 320.0F * 50.0F);
}
var10 = Math.Max(Math.Min(var10, var9), 50);
return var10;
}
}
}
catch (Exception)
{
Console.WriteLine("Creation of banner ad in SavedCharts failed.");
}
}
adAdaptiveBannerView 在页面顶部声明 class。 getCurrentOrientationAnchoredAdaptiveBannerAdSize 函数来自这里的另一个 post,我现在找不到了。
我找不到任何可以解释这一点的内容,或者为什么这两款手机的行为会有所不同(是 Android 版本的差异,不同的宽高比还是什么?)。在模拟器上进行测试很困难,因为它无法正确报告方向。
有谁知道发生了什么事吗?
从本质上讲,我的应用程序主要在横向模式下使用,所以这个问题意味着很多人可能看不到广告。
PS 我正在使用 Xamarin.GooglePlayServices.Ads 版本 119.8.0。我无法实施版本 120,因为没有文档或任何可以帮助我做到这一点的东西。
编辑 1: 我试过在纵向时有条件地添加自适应横幅广告,并使用 MarcTron.Admob 添加标准横幅广告。没用。
我想知道是不是因为S21 Ultra的显示屏是1440 x 3200像素,纵横比是20:9,Google Ad Mob无法应付。如果真是这样,那就太愚蠢了('adaptive'?!)。因此,我尝试根据它在 S6 (1440x3200) 和 1600(即一半)上的工作情况,将屏幕宽度设置为 2560,但均无效。
编辑 2: 我意识到我在尝试将屏幕宽度限制为 2560px 时犯了一个错误,我只是为了视图的高度请求而这样做,而我还需要为 AdMob class 本身的 AdSize 属性 执行此操作。无论如何,是的问题所在 - 自适应横幅广告无法处理 3200 像素宽的显示器。
Google AdMab 自适应横幅广告无法处理 3200 像素的屏幕宽度。我不知道实际限制是多少,但由于它适用于我的另一台屏幕宽度为 2560 像素的设备,因此我将其限制为该值,如下所示:
adView.AdSize = AdSize.GetCurrentOrientationAnchoredAdaptiveBannerAdSize(Android.App.Application.Context, (int)(Math.Min(2560,DeviceDisplay.MainDisplayInfo.Width) / DeviceDisplay.MainDisplayInfo.Density));
并对我问题中的代码应用相同的 Math.Min() 限制器。
横幅广告 (3200-2560)/2=320 像素宽的两边有一个稍微不幸的副作用。不过,这并不违反 Google 的政策 (https://developers.google.com/admob/android/banner/adaptive)。
我认为这是 Google 的 API(或至少是 NuGet 包)中的错误,因为 'adaptive' 广告无法处理所有屏幕分辨率在真实设备中并不如其名。
我最近从 Galaxy S6 升级到 Galaxy S21 Ultra,现在 AdMob 自适应横幅广告无法横向加载。在 S6 上没问题,但在 S21 上出现错误:
[Ads] Ad failed to load : 1
我用来制作广告的代码在这里:
private void NewAdaptiveBannerAd()
{
try
{
adAdaptiveBannerView = new AdAdaptiveBannerView();
adAdaptiveBannerView.Padding = new Thickness(0);
adAdaptiveBannerView.BackgroundColor = (Color)Application.Current.Resources["baseBackground_Light"];
AdGrid.Children.Add(adAdaptiveBannerView, 0, 1);
adAdaptiveBannerView.HeightRequest = getCurrentOrientationAnchoredAdaptiveBannerAdSize(Android.App.Application.Context, (int)(DeviceDisplay.MainDisplayInfo.Width / DeviceDisplay.MainDisplayInfo.Density));
static int getCurrentOrientationAnchoredAdaptiveBannerAdSize(Context context, int adWidth)
{
int var3 = 0;
if (context == null)
{
return 0;
}
else
{
int var7 = 2;
switch (DeviceDisplay.MainDisplayInfo.Orientation)
{
case DisplayOrientation.Unknown: var7 = 0; break;
case DisplayOrientation.Portrait: var7 = 1; break;
case DisplayOrientation.Landscape: var7 = 2; break;
default: return 0;
}
if (var3 == 0)
{
var3 = var7;
}
int var8 = var3 == var7 ? (int)Math.Round((float)DeviceDisplay.MainDisplayInfo.Height / DeviceDisplay.MainDisplayInfo.Density) : (int)Math.Round((float)DeviceDisplay.MainDisplayInfo.Width / DeviceDisplay.MainDisplayInfo.Density);
int var9 = (int)Math.Min(90, Math.Round((float)var8 * 0.15F));
int var10;
if (adWidth > 655)
{
var10 = (int)Math.Round((float)adWidth / 728.0F * 90.0F);
}
else if (adWidth > 632)
{
var10 = 81;
}
else if (adWidth > 526)
{
var10 = (int)Math.Round((float)adWidth / 468.0F * 60.0F);
}
else if (adWidth > 432)
{
var10 = 68;
}
else
{
var10 = (int)Math.Round((float)adWidth / 320.0F * 50.0F);
}
var10 = Math.Max(Math.Min(var10, var9), 50);
return var10;
}
}
}
catch (Exception)
{
Console.WriteLine("Creation of banner ad in SavedCharts failed.");
}
}
adAdaptiveBannerView 在页面顶部声明 class。 getCurrentOrientationAnchoredAdaptiveBannerAdSize 函数来自这里的另一个 post,我现在找不到了。
我找不到任何可以解释这一点的内容,或者为什么这两款手机的行为会有所不同(是 Android 版本的差异,不同的宽高比还是什么?)。在模拟器上进行测试很困难,因为它无法正确报告方向。
有谁知道发生了什么事吗?
从本质上讲,我的应用程序主要在横向模式下使用,所以这个问题意味着很多人可能看不到广告。
PS 我正在使用 Xamarin.GooglePlayServices.Ads 版本 119.8.0。我无法实施版本 120,因为没有文档或任何可以帮助我做到这一点的东西。
编辑 1: 我试过在纵向时有条件地添加自适应横幅广告,并使用 MarcTron.Admob 添加标准横幅广告。没用。
我想知道是不是因为S21 Ultra的显示屏是1440 x 3200像素,纵横比是20:9,Google Ad Mob无法应付。如果真是这样,那就太愚蠢了('adaptive'?!)。因此,我尝试根据它在 S6 (1440x3200) 和 1600(即一半)上的工作情况,将屏幕宽度设置为 2560,但均无效。
编辑 2: 我意识到我在尝试将屏幕宽度限制为 2560px 时犯了一个错误,我只是为了视图的高度请求而这样做,而我还需要为 AdMob class 本身的 AdSize 属性 执行此操作。无论如何,是的问题所在 - 自适应横幅广告无法处理 3200 像素宽的显示器。
Google AdMab 自适应横幅广告无法处理 3200 像素的屏幕宽度。我不知道实际限制是多少,但由于它适用于我的另一台屏幕宽度为 2560 像素的设备,因此我将其限制为该值,如下所示:
adView.AdSize = AdSize.GetCurrentOrientationAnchoredAdaptiveBannerAdSize(Android.App.Application.Context, (int)(Math.Min(2560,DeviceDisplay.MainDisplayInfo.Width) / DeviceDisplay.MainDisplayInfo.Density));
并对我问题中的代码应用相同的 Math.Min() 限制器。
横幅广告 (3200-2560)/2=320 像素宽的两边有一个稍微不幸的副作用。不过,这并不违反 Google 的政策 (https://developers.google.com/admob/android/banner/adaptive)。
我认为这是 Google 的 API(或至少是 NuGet 包)中的错误,因为 'adaptive' 广告无法处理所有屏幕分辨率在真实设备中并不如其名。