1

我正在开发一款带有 floatinghotpot AdMobpro 插件的 Cordova 应用程序。该应用程序具有以下代码:

索引.html

<a href=“mainpage.html" id="btn_prepare" class="pure-button pure-button-primary">GO TO APP</a>

在 admobshow.js 中,我有这些片段:

$('#btn_prepare').click(function(){
  AdMob.prepareInterstitial({
    adId:admobid.interstitial,    

  });

         AdMob.showInterstitial();
       window.open($(this).attr('href'));
});

(代码取自这里:https ://github.com/floatinghotpot/cordova-admob-pro/blob/master/test/index.html

我希望发生这种情况: 1.) 用户单击 Go To APP,插件显示 Interstitial。2.) 当用户关闭插页式广告时,应该打开 mainpage.html。

但是,现在发生的是: 1.) mainpage.html 首先打开,然后在几秒钟内显示插页式广告。

我希望仅在显示插页式广告后才显示 mainpage.html。(或者当对插页式广告进行操作时。)我不希望 mainpage.html 自动显示。

有人可以帮我如何调整上面的代码吗?

4

2 回答 2

1

您需要准备AdMob.prepareInterstitial在用户单击该按钮之前调用插页式广告的代码。该插件需要一些时间来准备,所以当你调用它时它不能立即显示它AdMob.showInterstitial()

例如,只需在用户进入页面时准备插页式广告。

于 2016-08-25T07:47:27.960 回答
1

有关如何实现的一些代码和想法,请参阅此问题中的响应: https ://stackoverflow.com/a/31187541/4025963

编辑

假设cordova-admob插件,基本上这个想法可能是这个:

<a onclick="showInterstitial()" id="btn_prepare" class="pure-button pure-button-primary">GO TO APP</a>

在你的 js 代码中:

var isAppForeground = true;
var isShowMainOnCloseAd = false;
var isMainAlreadyShown = false;
var isInterstitialAvailable = false;    

function showInterstitial() {
  if (isInterstitialAvailable) {
    admob.showInterstitialAd();
  } else {
    showMain(function () {
      isMainAlreadyShown = true;
    });
  }
}

function initAds() {
  if (admob) {
    var adPublisherIds = {
      ios : {
        banner : "ca-app-pub-XXXXXXXXXXXXXXXX/BBBBBBBBBB",
        interstitial : "ca-app-pub-XXXXXXXXXXXXXXXX/IIIIIIIIII"
      },
      android : {
        banner : "ca-app-pub-XXXXXXXXXXXXXXXX/BBBBBBBBBB",
        interstitial : "ca-app-pub-XXXXXXXXXXXXXXXX/IIIIIIIIII"
      }
    };

    var admobid = (/(android)/i.test(navigator.userAgent)) ? adPublisherIds.android : adPublisherIds.ios;

    admob.setOptions({
      publisherId:          admobid.banner,
      interstitialAdId:     admobid.interstitial,
      autoShowInterstitial: false
    });

    registerAdEvents();

  } else {
    alert('cordova-admob plugin not ready');
  }
}

function onAdLoaded(e) {
  if (isAppForeground) {
    if (e.adType === admob.AD_TYPE.INTERSTITIAL) {
      isInterstitialAvailable = true;
    }
  }
}

function onAdOpened(e) {
  if (e.adType === admob.AD_TYPE.INTERSTITIAL && !isMainAlreadyShown) {
    isShowMainOnCloseAd = true;
  }
}

function onAdClosed(e) {
  if (e.adType === admob.AD_TYPE.INTERSTITIAL && isShowMainOnCloseAd) {
    isShowMainOnCloseAd = false;
    if (!isMainAlreadyShown) {
      showMain(function () {
        isMainAlreadyShown = true;
      });
    }
  }
}

function onPause() {
  if (isAppForeground) {
    isAppForeground = false;
  }
}

function onResume() {
  if (!isAppForeground) {
    setTimeout(admob.requestInterstitialAd, 1);
    isAppForeground = true;
  }
}

function registerAdEvents() {
  document.addEventListener(admob.events.onAdLoaded, onAdLoaded);
  document.addEventListener(admob.events.onAdOpened, onAdOpened);
  document.addEventListener(admob.events.onAdClosed, onAdClosed);

  document.addEventListener("pause", onPause, false);
  document.addEventListener("resume", onResume, false);
}

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

  // request an interstitial
  admob.requestInterstitialAd();
}

document.addEventListener("deviceready", onDeviceReady, false);
于 2016-08-26T08:48:25.167 回答