我的 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 != nullControl == null 上进行测试:

base.OnElementChanged(e); 

if (e.NewElement != null && Control == null) 
   
    _adView = CreateNativeControl(...);
    SetNativeControl(_adView); 
 

根据renderer 文档,OnElementChanged 方法“在创建 Xamarin.Forms 自定义控件以呈现相应的本机控件时调用”。

【讨论】:

【参考方案2】:

当应用程序在程序开始时调用 OnElementChanged 方法时,它不会显示任何广告。只有当它第二次调用时。

【讨论】:

【参考方案3】:

我可以通过设置 VerticalOptions="FillAndExpand" 和 Horizo​​ntalOptions="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 广告仅在我导航到另一个页面然后返回时才会加载的主要内容,如果未能解决你的问题,请参考以下文章

适用于单项活动的AdMob插页式广告

插页式广告(插件:admob-free)

Xamarin Android Admob 测试广告仅在设备上显示一次

我的应用显示测试广告,但没有真实广告(AdMob Google)

如何停用Admob插页式广告?

Admob 广告请求始终返回代码 3