Xamarin Forms自适应横幅广告不会在横向加载

y1aodyip  于 2023-11-15  发布在  其他
关注(0)|答案(2)|浏览(137)

我最近从Galaxy S6升级到Galaxy S21 Ultra,现在AdMob自适应横幅广告将无法在横向加载。在S6上很好,但在S21上我得到错误:
[Ads]广告加载失败: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在pages类的顶部声明。getCurrentOrientationAnchoredAdaptiveBannerAdSize函数来自这里的另一篇文章,我现在找不到。
我找不到任何可以解释这一点的东西,或者为什么这两款手机的行为会有所不同(是Android版本的差异,不同的长宽比还是什么?)在模拟器上测试很困难,因为它不能正确报告方向。
有人知道发生了什么吗?
我的应用程序将,就其性质而言,主要是在横向模式下使用,所以这个问题意味着有一个机会,许多人不会看到广告。
PS我正在使用Xamarin.GooglePlayServices.Ads版本119.8.0。我还没有能够实现版本120,因为没有文档或任何东西可以帮助我做到这一点。

**编辑1:**我尝试过在纵向时有条件地添加自适应横幅广告,以及使用MarcTron.Admob.的标准横幅广告。它不起作用。

我想知道这是否是因为S21 Ultra的显示屏是1440 x 3200像素,宽高比为20:9,而Google Ad Mob无法科普它。如果是这样的话,这是相当愚蠢的(“自适应”?!)。所以我试着给它一个屏幕宽度为2560的基础上,它在S6(1440 x3200)和1600(即一半),但都没有工作。

**编辑2:**当我试图将屏幕宽度限制为2560 px时,我意识到我犯了一个错误,那就是我只为视图的高度请求这样做,而我也需要为AdMob类本身的AdSize属性这样做。无论如何,这就是问题所在-自适应横幅广告无法科普3200 px宽的显示。

m0rkklqb

m0rkklqb1#

谷歌AdMab自适应横幅广告无法科普3200 px的屏幕宽度.我不知道实际的限制是什么,但因为它在我的其他设备上有一个屏幕宽度2560 px我已经限制了它,像这样:

adView.AdSize = AdSize.GetCurrentOrientationAnchoredAdaptiveBannerAdSize(Android.App.Application.Context, (int)(Math.Min(2560,DeviceDisplay.MainDisplayInfo.Width) / DeviceDisplay.MainDisplayInfo.Density));

字符串
并对我的问题中的代码应用了相同的Math.Min()限制器。
有一个稍微不幸的副作用,横幅广告的两侧有一个间隙(3200-2560)/2=320像素宽。这并不违反谷歌的政策,虽然(https://developers.google.com/admob/android/banner/adaptive)。
我认为这是谷歌的API(或者至少是NuGet包)中的一个错误,因为一个“自适应”广告无法科普真实的设备中的所有屏幕分辨率,这与它的名字不符。

vmjh9lq9

vmjh9lq92#

在.NET MAUI的AdMob SDK for Android中,816像素宽似乎是您可以请求的最大值,仍然可以加载广告。817及以上无法加载任何广告。
请记住,这些是 * 最终 * 计算的宽度值,考虑到密度,你通过的广告宽度。

int adWidth = Math.Min(816, (int)(adWidthPixels / density));
adView.AdSize = AdSize.GetCurrentOrientationAnchoredAdaptiveBannerAdSize(Platform.AppContext, adWidth);

字符串
我能够使用上面的代码加载728x90自适应锚定广告。

相关问题