使用xamarin投放原生广告:“广告加载失败:0”

时间:2019-09-18 17:01:00

标签: xamarin admob native-ads

此问题仅在我实施原生广告时发生。横幅广告可以正常工作。我改编了this blog中的自定义渲染器,以与原生广告一起使用。我使用了测试广告单元ID。

这是我为Android定制的渲染器:

[assembly: ExportRenderer(typeof(NativeAdView), typeof(NativeRendererAndroid))]
namespace XXX.Droid
{
    public class NativeRendererAndroid : ViewRenderer<NativeAdView, AdView>
    {
        public NativeRendererAndroid(Context context) : base(context) { }

        protected override void OnElementChanged(ElementChangedEventArgs<NativeAdView> e)
        {
            base.OnElementChanged(e);

            if (e.NewElement != null && Control == null)
                SetNativeControl(CreateAdView());
        }

        protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            base.OnElementPropertyChanged(sender, e);

            if (e.PropertyName == nameof(AdView.AdUnitId))
                Control.AdUnitId = Element.AdUnitId;
        }

        private AdView CreateAdView()
        {
            var adView = new AdView(Context)
            {
                AdSize = new AdSize(AdSize.FullWidth, AdSize.AutoHeight),
                AdUnitId = Element.AdUnitId
            };

            adView.LayoutParameters = new LinearLayout.LayoutParams(LayoutParams.MatchParent, LayoutParams.MatchParent);

            adView.LoadAd(new AdRequest.Builder().Build());

            return adView;
        }
    }
}

对于iOS:

[assembly: ExportRenderer(typeof(NativeAdView), typeof(NativeRendereriOS))]
namespace XXX.iOS
{
    public class NativeRendereriOS : ViewRenderer<NativeAdView, NativeExpressAdView>
    {
        protected override void OnElementChanged(ElementChangedEventArgs<NativeAdView> e)
        {
            base.OnElementChanged(e);
            if (Control == null)
            {
                SetNativeControl(CreateNativeAd());
            }
        }

        protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            base.OnElementPropertyChanged(sender, e);

            if (e.PropertyName == nameof(NativeExpressAdView.AdUnitID))
                Control.AdUnitID = Element.AdUnitId;
        }

        private NativeExpressAdView CreateNativeAd()
        {
            AdSize adSize = new AdSize();
            adSize.Size = new CGSize(UIScreen.MainScreen.Bounds.Size.Width, 49);

            var nativeAd = new NativeExpressAdView(adSize)
            {
                AdUnitID = Element.AdUnitId,
                RootViewController = GetVisibleViewController()
            };

            nativeAd.LoadRequest(GetRequest());

            Request GetRequest()
            {
                var request = Request.GetDefaultRequest();
                return request;
            }

            return nativeAd;
        }

        private UIViewController GetVisibleViewController()
        {
            var windows = UIApplication.SharedApplication.Windows;
            foreach (var window in windows)
            {
                if (window.RootViewController != null)
                {
                    return window.RootViewController;
                }
            }
            return null;
        }
    }
}

这些自定义渲染器与上面博客中链接的渲染器非常相似。 也许我需要为横幅广告中不包含的原生广告添加一些内容?

一旦我正确加载了广告,我想将其放入ListView,但现在我只是将其作为View

编辑:为澄清起见,使用上述自定义渲染器时,所有内容均会成功构建,但是当广告尝试加载时,在调试和NativeAdView中会打印“广告加载失败:0”保持透明。这都是两个平台。

0 个答案:

没有答案
相关问题