Xamarin iOS Представитель AdMob NativeAd AdLoader никогда не вызывался - PullRequest
0 голосов
/ 06 января 2020

Я пытаюсь реализовать средство визуализации 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, делегат загрузчика всегда был нулевым. Реализация интерфейса работает, хотя, но никакие методы никогда не встречаются.

Не уверен, где отсюда go.

Спасибо!

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

[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;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...