我的 AdMob 广告仅在我导航到另一个页面然后返回时才会加载
Posted
技术标签:
【中文标题】我的 AdMob 广告仅在我导航到另一个页面然后返回时才会加载【英文标题】:My AdMob Ad only loading up when I navigate to another page then back 【发布时间】:2020-11-25 08:45:32 【问题描述】:这是因为 OnElementChanged 事件吗?
我可以在应用启动时加载广告吗?
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.View> e)
base.OnElementChanged(e);
if (e.OldElement == null)
var adView = new AdView(Context);
switch ((Element as AdBanner).Size)
case AdBanner.Sizes.Standardbanner:
adView.AdSize = AdSize.Banner;
break;
...
adView.AdUnitId = "ca-app-pub-xxxxxxxxxxxxxxxx/xxxxxxxxxx";
var requestbuilder = new AdRequest.Builder();
adView.LoadAd(requestbuilder.Build());
SetNativeControl(adView);
【问题讨论】:
【参考方案1】:要在renderer 中的OnElementChanged
中创建本机控件,请在e.NewElement != null
和Control == null
上进行测试:
base.OnElementChanged(e);
if (e.NewElement != null && Control == null)
_adView = CreateNativeControl(...);
SetNativeControl(_adView);
根据renderer 文档,OnElementChanged
方法“在创建 Xamarin.Forms 自定义控件以呈现相应的本机控件时调用”。
【讨论】:
【参考方案2】:当应用程序在程序开始时调用 OnElementChanged 方法时,它不会显示任何广告。只有当它第二次调用时。
【讨论】:
【参考方案3】:我可以通过设置 VerticalOptions="FillAndExpand" 和 HorizontalOptions="FillAndExpand" 来解决同样的问题
【讨论】:
【参考方案4】:我找不到问题发生的原因,但经过多次尝试后,我找到了一个适合我的解决方法,我确实将以下代码放在 OnAppearing 覆盖的末尾:
if (!this.initialized)
this.initialized = true;
this.adMobView.IsVisible = false;
Task.Run(async () =>
await Task.Delay(delay).ConfigureAwait(false);
Device.BeginInvokeOnMainThread(() => this.adMobView.IsVisible = true);
);
基本上,我将 admob 视图的可见性更改为 false,一段时间后(为您测试好的延迟值),我再次将其更改为 true。
这远不是一个好的解决方案,最好的解决方案会很受欢迎,但现在它对我有用,可以暂时有用。
【讨论】:
以上是关于我的 AdMob 广告仅在我导航到另一个页面然后返回时才会加载的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin Android Admob 测试广告仅在设备上显示一次