Показ промежуточной рекламы Google Admob в формах Xamarin без задержки - PullRequest
0 голосов
/ 31 августа 2018

Я работаю над проектом форм 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 Ответ

0 голосов
/ 01 сентября 2018

Так что я просто решил это. Вот код.

Класс 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();
    }
}

Теперь вызовите функцию Show () в конструкторе главной страницы в PCL и вызовите функцию 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.

Надеюсь, это поможет другим программистам. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...