предупреждающие сообщения, влияющие на всплывающую рекламу admob?

У меня есть некоторые запутанные опыты с admob в моей первой сборке приложения. Приложение для Android было создано с телефонной связью, и я пытаюсь дважды отобразить межстраничную рекламу во время игры. Это игра в стиле Jeopardy, поэтому реклама появляется, когда они достигают ежедневного удвоения и когда они достигают финальной опасности. Когда я впервые заставил его работать, у меня была куча предупреждающих сообщений, из-за которых реклама затемнялась, но, по крайней мере, они появлялись. Когда я закомментировал предупреждения, все работало отлично. Позже я внес некоторые изменения в приложение и, возможно, по ошибке изменил часть кода, который использовал для рекламы. После этого изменения реклама появляется только один раз на ежедневной двойной отметке. Я снова вставил оповещения, чтобы увидеть, где он зависает, но когда я вставляю оповещения, они работают как для двойной опасности, так и для последнего раунда. За исключением того, что реклама затемнена, как и раньше. После дополнительного тестирования предупреждение, которое влияет на все, звучит как «оповещение («у нас есть одно заседание, должно быть показано»);» как часть showInterstitialAd(). Закомментированная реклама показывается только во время ежедневного удвоения, но когда она активна, затемненная реклама будет воспроизводиться во время ежедневного удвоения и последнего раунда.

var isPendingInterstitial = false;
var isAutoshowInterstitial = false;

function prepareInterstitialAd() {
//alert("preparing");
    if (!isPendingInterstitial) {
        //alert("requesting interstitial");
        admob.requestInterstitialAd({
        autoShowInterstitial: isAutoshowInterstitial
        });
    }
}

function onAdLoadedEvent(e) {
    if (e.adType === admob.AD_TYPE.INTERSTITIAL && !isAutoshowInterstitial) {
        isPendingInterstitial = true;
        //alert("ad load event");
    }
}

function onDeviceReady() {
    document.removeEventListener('deviceready', onDeviceReady, false);

    //alert("device is ready");

    admob.setOptions({
        //alert("setting options");
        publisherId:          "pub-XXXXXXXXXXXXXXXX",
        interstitialAdId:     "ca-app-pub-XXXXXXXXXXXXXXXXXXXXXXXXXXX",
    });   

    document.addEventListener(admob.events.onAdLoaded, onAdLoadedEvent);
    prepareInterstitialAd();
}

document.addEventListener("deviceready", onDeviceReady, false);

function showInterstitialAd() {
    //alert("trying to show");
    if (isPendingInterstitial) {
        admob.showInterstitialAd(function () {
            //alert("we've got one sitting, should be shown");
            isPendingInterstitial = false;
            isAutoshowInterstitial = false;
            prepareInterstitialAd();
        });
    } 
    else {
        //alert("not ready yet, bring it in when ready");
        isAutoshowInterstitial = true;
        admob.requestInterstitialAd({
            autoShowInterstitial: isAutoshowInterstitial
        });
    }
}

Проблема не в вызове showInterstitialAd(). Его вызывают дважды, я могу судить по предупреждениям. Также не должно быть запущенного кода, который может нарушить работу рекламы во время финального раунда. В тот момент, когда должна отображаться реклама, программа ожидает от пользователя ввода его ставки. В качестве теста я попытался вызвать showInterstitialAd с setInterval с интервалом в одну минуту. Это работает, и оно показывает рекламу несколько раз. Я совершенно озадачен. К сожалению, я не уверен, как получить какие-либо консольные журналы из этого. Я тестирую их в своем браузере, но не могу с активным кодом admob.

Почему вызов showInterstitialAd будет работать несколько раз с setInterval, а не наоборот? Известно, что второй способ — оба раза вызывать showInterstitialAd.

Почему наличие предупреждения может привести к появлению рекламы, или почему ее отсутствие может привести к сбою рекламы?

Любая помощь будет потрясающей, спасибо! На всякий случай вот код для вызова showInterstitialAd.

function runQuestion() {
    showInterstitialAd();
    $('.clickBlock').hide();
    $('.doublePageBody').hide();
    $('.questionPage').show();
    $('.answerInputs').show();
    if (finalRound) {
        document.getElementById('category').innerHTML = titleCase(finalCategory);
    }
    if (total <= 500) {

        document.getElementById('showQuestion').innerHTML = "Place your wager between $5 and $500.";
    }
    else {
        document.getElementById('showQuestion').innerHTML = "Place your wager between $5 and " + total;
    }
    document.getElementById('timer').innerHTML = '';
}

ИЗМЕНИТЬ В моем исходном сообщении была ошибка в коде, которая существовала только здесь и отсутствовала в коде моего приложения. Я удалил это сейчас.


person B.Minor    schedule 15.05.2017    source источник


Ответы (1)


Проблема была в prepareInterstitialAd() в этой части кода.

function showInterstitialAd() {
//alert("trying to show");
if (isPendingInterstitial) {
    admob.showInterstitialAd(function () {
        //alert("we've got one sitting, should be shown");
        isPendingInterstitial = false;
        isAutoshowInterstitial = false;
        prepareInterstitialAd();
    });
} 
else {
    //alert("not ready yet, bring it in when ready");
    isAutoshowInterstitial = true;
    admob.requestInterstitialAd({
        autoShowInterstitial: isAutoshowInterstitial
    });
}

Показ текущего межстраничного объявления, должно быть, повлиял на подготовку следующего, поскольку по большей части они происходили в одно и то же время. Теперь я готовлю следующее межстраничное объявление после того, как пользователь введет свою ставку на раунд двойной опасности. Я использовал эту ссылку в качестве примера для своего кода. в исходном сообщении, которое было первым ответом Google на «admob phonegap». Вдобавок к проблеме, описанной выше, они также неправильно написали функцию prepareInterstitial в части готовности устройства, но я сразу понял эту часть. Хотя для кого-то еще это просто предостережение.

person B.Minor    schedule 18.05.2017