Admob与xamarin的本地广告:';Ad加载失败:0';
这个问题只发生在我执行本地广告时。横幅广告效果很好。我调整了来自的自定义渲染器以处理本地广告。我使用了测试广告单元ID 以下是我的Android自定义渲染器:Admob与xamarin的本地广告:';Ad加载失败:0';,xamarin,admob,native-ads,Xamarin,Admob,Native Ads,这个问题只发生在我执行本地广告时。横幅广告效果很好。我调整了来自的自定义渲染器以处理本地广告。我使用了测试广告单元ID 以下是我的Android自定义渲染器: [assembly: ExportRenderer(typeof(NativeAdView), typeof(NativeRendererAndroid))] namespace XXX.Droid { public class NativeRendererAndroid : ViewRenderer<NativeAdVie
[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;
}
}
}
[程序集:ExportRenderer(typeof(NativeAdView)、typeof(NativeRendererAndroid))]
名称空间XXX.Droid
{
公共类NativerEnderAndroid:ViewRenderer
{
公共NativeRendererAndroid(上下文):基(上下文){}
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if(e.NewElement!=null&&Control==null)
SetNativeControl(CreateAdView());
}
受保护的覆盖无效OnElementPropertyChanged(对象发送方,PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(发送方,e);
if(e.PropertyName==nameof(AdView.AdUnitId))
Control.AdUnitId=Element.AdUnitId;
}
私有AdView CreateAdView()
{
var adView=新adView(上下文)
{
AdSize=新的AdSize(AdSize.FullWidth、AdSize.AutoHeight),
AdUnitId=元素。AdUnitId
};
adView.LayoutParameters=新的LinearLayout.LayoutParams(LayoutParams.MatchParent,LayoutParams.MatchParent);
adView.LoadAd(新的addRequest.Builder().Build());
反馈意见;
}
}
}
对于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;
}
}
}
[程序集:导出渲染器(typeof(nativeaview)、typeof(nativerenderios))]
命名空间XXX.iOS
{
公共类NativeRendereriOS:ViewRenderer
{
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if(Control==null)
{
SetNativeControl(CreateNativeAd());
}
}
受保护的覆盖无效OnElementPropertyChanged(对象发送方,PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(发送方,e);
if(e.PropertyName==nameof(NativeExpressAdView.AdUnitID))
Control.AdUnitID=Element.AdUnitID;
}
私有NativeExpressAdView CreateNativeAd()
{
AdSize AdSize=新的AdSize();
adSize.Size=新的CGSize(UIScreen.MainScreen.Bounds.Size.Width,49);
var nativeAd=新的NativeExpressAdView(adSize)
{
AdUnitID=元素。AdUnitID,
RootViewController=GetVisibleViewController()
};
LoadRequest(GetRequest());
请求GetRequest()
{
var request=request.GetDefaultRequest();
返回请求;
}
回归本土;
}
私有UIViewController GetVisibleViewController()
{
var windows=UIApplication.SharedApplication.windows;
foreach(windows中的var窗口)
{
if(window.RootViewController!=null)
{
返回window.RootViewController;
}
}
返回null;
}
}
}
这些自定义渲染器与上面博客中链接的渲染器非常相似也许我需要为本地广告添加一些不用于横幅广告的内容?
一旦我正确加载了广告,我想把它放在列表视图中,但现在我只把它作为视图
使用
编辑:为了澄清,当使用上述自定义渲染器时,所有内容都会成功生成,但当ad尝试加载时,“ad未能加载:0”会在调试中打印出来,并且NativeAdView保持透明。这两个平台都有。@nahclark,你的意思是要在ListView模板中添加admob横幅?我更希望在ListView模板中使用本地广告,这样我可以将图像定位在我喜欢的位置,并使文本字体和颜色与应用程序的其余部分保持一致。