Xamarin iOS AdMob NativeAd AdLoader Delegate никогда не вызывается

Я пытаюсь реализовать средство визуализации iOS для представления XF для отображения нативной рекламы. Кажется, я не могу загрузить собственное объявление. С помощью:

try
{
    loader.Delegate = new MyAdLoaderDelegate(renderer);
    loader.LoadRequest(request);

}catch(Exception e)
{
    Debug.WriteLine(e.Message);
}

Debug.WriteLine("Loading: " + loader.IsLoading);

Делегат настраивается правильно, и после loader.LoadRequest() позвонить в loader.IsLoading==true, но методы на MyAdLoaderDelegateникогда не называются. При вызове кLoadRequest() или.

Вот мой класс делегата:

private class MyAdLoaderDelegate : NSObject, IUnifiedNativeAdLoaderDelegate
{
    private readonly AdMobUnifiedNativeAdRenderer _renderer;

    public MyAdLoaderDelegate(AdMobUnifiedNativeAdRenderer renderer)
    {
        _renderer = renderer;
    }

    public void DidReceiveUnifiedNativeAd(AdLoader adLoader, UnifiedNativeAd nativeAd)
    {
        Debug.WriteLine("DidReceiveUnifiedNativeAd");
    }
    public void DidFailToReceiveAd(AdLoader adLoader, RequestError error)
    {
        Debug.WriteLine("DidFailToReceiveAd");
        //base.DidFailToReceiveAd(adLoader, error);
    }

    public void DidFinishLoading(AdLoader adLoader)
    {
        Debug.WriteLine("DidFinishLoading");
        //base.DidFinishLoading(adLoader);
    }
}

Любопытно, что класс делегата не будет работать при наследовании от UnifiedNativeAdLoaderDelegate, делегат загрузчика всегда был пустым. Однако реализация интерфейса работает, но никакие методы не используются.

Не уверен, куда идти дальше.

Спасибо!

РЕДАКТИРОВАТЬ:

[assembly: ExportRenderer(typeof(AdMobUnifiedNativeAd), typeof(AdMobUnifiedNativeAdRenderer))]
namespace XXXX.Mobile.iOS.CustomRenderers.NativeAds
{
    public class AdMobUnifiedNativeAdRenderer : ViewRenderer<AdMobUnifiedNativeAd,UnifiedNativeAdView>
    {
        protected override void OnElementChanged(ElementChangedEventArgs<AdMobUnifiedNativeAd> e)
        {
            base.OnElementChanged(e);
            if (Control == null)
            {
                CreateAdView(this);
            }
        }

        private void CreateAdView(AdMobUnifiedNativeAdRenderer renderer)
        {

            if (Element == null) return;

            var loader = new AdLoader(
                Element.AdUnitId,
                GetVisibleViewController(),
                new AdLoaderAdType[] { AdLoaderAdType.UnifiedNative },
                new AdLoaderOptions[] {
                    new NativeAdViewAdOptions {PreferredAdChoicesPosition = AdChoicesPosition.TopRightCorner}
                });

            var request = Request.GetDefaultRequest();
            request.TestDevices = new string[] { Request.SimulatorId };

            UnifiedNativeAdView adView = null;
            try
            {
                adView = MyUnifiedAdView.Create();
                SetNativeControl(adView);
            }
            catch(Exception e)
            {
                Debug.WriteLine(e.Message);
            }
            if (adView == null) return;

            try
            {
                loader.Delegate = new MyAdLoaderDelegate(renderer);
                loader.LoadRequest(request);
            }catch(Exception e)
            {
                Debug.WriteLine(e.Message);
            }

            Debug.WriteLine("Loading: " + loader.IsLoading);
        }

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

1 ответ

Я столкнулся с идентичной проблемой. Решение было довольно простым.

LoadRequest необходимо вызывать в основном потоке! Это решило проблему.

Device.BeginInvokeOnMainThread(() => { 
loader.LoadRequest(Request.GetDefaultRequest());
});
Другие вопросы по тегам