为了账号安全,请及时绑定邮箱和手机立即绑定

立即在 Xamarin Forms 中显示 Google Admob 插页式广告

立即在 Xamarin Forms 中显示 Google Admob 插页式广告

C#
繁华开满天机 2021-12-25 18:25:19
我正在从事 Xamarin 表单项目,并且在所有三个平台上都实施了插页式广告(Google admob 不支持 UWP)。广告工作正常,但显示延迟 4 到 5 秒。我想要的只是完成那个延迟,这样他们就可以立即显示。PCL 类。public interface IAdmobInterstitial{    void Show(string adUnit);}机器人代码。public class InterstitialAdListener : AdListener{    readonly InterstitialAd _ad;    public InterstitialAdListener(InterstitialAd ad)    {        _ad = ad;    }    public override void OnAdLoaded()    {        base.OnAdLoaded();        if (_ad.IsLoaded)            _ad.Show();    }}public class AdmobInterstitial : Controls.IAdmobInterstitial{    InterstitialAd _ad;    public void Show(string adUnit)    {        var context = Android.App.Application.Context;        _ad = new InterstitialAd(context);        _ad.AdUnitId = adUnit;        var intlistener = new InterstitialAdListener(_ad);        intlistener.OnAdLoaded();        _ad.AdListener = intlistener;        var requestbuilder = new AdRequest.Builder().AddTestDevice("302E90D530B2193F59FDD7F22A11B45A");        _ad.LoadAd(requestbuilder.Build());    }}iOS 代码。public class AdmobInterstitial : IAdmobInterstitial{    Interstitial _adInterstitial;    public void Show(string adUnit)    {        _adInterstitial = new Interstitial(adUnit);        var request = Request.GetDefaultRequest();        _adInterstitial.AdReceived += (sender, args) =>        {            if (_adInterstitial.IsReady)            {                var window = UIApplication.SharedApplication.KeyWindow;                var vc = window.RootViewController;                while (vc.PresentedViewController != null)                {                    vc = vc.PresentedViewController;                }                _adInterstitial.PresentFromRootViewController(vc);            }        };        _adInterstitial.LoadRequest(request);    }}在 PCL 页面上调用插页式广告。DependencyService.Get<IAdmobInterstitial>().Show("(id will come here)");Navigation.PushAsync(new Page());广告显示完美,但有延迟。我想先显示广告,然后再显示页面。
查看完整描述

1 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

所以我刚刚解决了这个问题。这是代码。


PCL 类。向您的界面添加另一个功能。


public interface IAdmobInterstitial

{

    void Show(string adUnit);


    void Give();

}

机器人代码。将 _ad.Show() 放入新函数中。


public class InterstitialAdListener : AdListener

{

    readonly InterstitialAd _ad;


    public InterstitialAdListener(InterstitialAd ad)

    {

        _ad = ad;

    }


    public override void OnAdLoaded()

    {

        base.OnAdLoaded();


        //if (_ad.IsLoaded)

        //    _ad.Show();

    }

}


public class AdmobInterstitial : Controls.IAdmobInterstitial

{

    InterstitialAd _ad;


    public void Show(string adUnit)

    {

        var context = Android.App.Application.Context;

        _ad = new InterstitialAd(context);

        _ad.AdUnitId = adUnit;


        var intlistener = new InterstitialAdListener(_ad);

        intlistener.OnAdLoaded();

        _ad.AdListener = intlistener;


        var requestbuilder = new AdRequest.Builder().AddTestDevice("302E90D530B2193F59FDD7F22A11B45A");

        _ad.LoadAd(requestbuilder.Build());

    }


    public void Give()

    {

        if (_ad.IsLoaded)

            _ad.Show();

    }

}

现在,在 PCL 的 MainPage 的构造函数中调用 Show() 函数,并在按下下一页按钮时调用 Give() 函数。


public MainPage()

    {

        InitializeComponent();


        DependencyService.Get<IAdmobInterstitial>().Show("ca-app-pub-3940256099942544/1033173712");

    }


private void button_Clicked(object sender, EventArgs e)

    {

        DependencyService.Get<IAdmobInterstitial>().Give();

        Navigation.PushAsync(new Percentage());

    }

这仅适用于 Android。iOS 也一样。


我希望它可以帮助其他程序员。:)


查看完整回答
反对 回复 2021-12-25
  • 1 回答
  • 0 关注
  • 187 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信