Я пытаюсь реализовать средство визуализации 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;
}
}
}