将感兴趣的广告放置在离子安卓平台

时间:2016-10-25 13:11:34

标签: android cordova ionic-framework admob

为了在我的Android应用中显示感兴趣的广告(我使用离子制作),我使用了以下代码:

<script type="text/javascript">
function runads(){
document.addEventListener("deviceready", onDeviceReady, false);
}

function initAds() {
if (admob) {
  var adPublisherIds = {
    ios : {
      banner : "###############",
      interstitial : "##################"
    },
    android : {
      banner : "#############",
      interstitial : "#########################"
    }
  };

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

  admob.setOptions({
    publisherId:      admobid.banner,
    interstitialAdId: admobid.interstitial,
    tappxIdiOs:       "/XXXXXXXXX/Pub-XXXX-iOS-IIII",
    tappxIdAndroid:   "/XXXXXXXXX/Pub-XXXX-Android-AAAA",
    tappxShare:       0.5
  });

  registerAdEvents();

} else {
  alert('AdMobAds plugin not ready');
}
}

 function onAdLoaded(e) {
if (e.adType === admob.AD_TYPE.INTERSTITIAL) {
  admob.showInterstitialAd();
  showNextInterstitial = setTimeout(function() {
    admob.requestInterstitialAd();
  }, 2 * 60 * 1000); // 2 minutes
}
}

 // optional, in case respond to events
 function registerAdEvents() {
document.addEventListener(admob.events.onAdLoaded, onAdLoaded);
document.addEventListener(admob.events.onAdFailedToLoad, function (e) {});
document.addEventListener(admob.events.onAdOpened, function (e) {});
document.addEventListener(admob.events.onAdClosed, function (e) {});
document.addEventListener(admob.events.onAdLeftApplication, function (e) {});
document.addEventListener(admob.events.onInAppPurchaseRequested, function (e) {});
}

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

// display a banner at startup
admob.createBannerView();

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

我感兴趣的广告正在使用此代码完美展示。然后,我已将其上传到Google Play商店。很明显,我收到了Google Admob小组关于感兴趣的广告投放的消息。消息是 -

  

您好,我们警告您,您的应用目前违反了AdMob计划政策。重要的是,这需要您采取措施以确保广告投放不会中断。请阅读以下内容,了解有关您需要采取的行动的更多信息:

     

违规说明

     

布局鼓励意外点击 - 插页式广告:不允许发布商鼓励用户以任何方式点击AdMob插页式广告。请检查您是如何实施插页式广告的,并注意以下不符合规定的实施方式:在用户查看应用内容时意外加载的插页式广告。有关我们的政策和有关如何遵守的提示的详情,请参阅阅读以下内容:

     

在用户查看应用内容时意外加载的插页式广告。有关我们的政策和有关如何遵守的提示的详情,请参阅以下内容:AdMob广告展示位置政策广告插页式广告指南需要Android和iOSAction的AdMob预加载说明:请立即对您的应用进行更改,以符合AdMob计划政策。当前帐户状态:有效您在对应用进行必要的更改后,无需与我们联系。请注意,如果累积了其他违规行为,可能会禁用上面列出的应用广告投放。请注意,上面列出的应用只是一个示例,您拥有的其他应用可能存在相同的违规行为。我们建议您检查所有应用是否符合AdMob计划政策,以降低未来警告的可能性。有关我们的政策警告通知的详情,请访问我们的帮助中心。感谢您的合作。此致Google AdMob小组< / p>

我如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

可能发生的事情是加载插页式广告需要一些时间,因此您需要计划插页式广告的加载,并确保在您需要展示插页式广告时可以使用插页式广告。如果没有,启动admob.showInterstitialAd()将加载interstital并在可用时显示(因为标记autoShowInterstitial默认为true,请参阅https://github.com/appfeel/admob-google-cordova/wiki/setOptions)。

有一个关于如何规划插页式广告的完整示例:https://github.com/appfeel/admob-google-cordova/wiki/showInterstitialAd

您的基本操作是请求插页式广告,并让应用知道插页式广告是否可用。你的离子代码可能看起来像这样:

angular.module('myApp', ['admobModule'])

    .constant('AdmobConfig', {
        bannerId: /(android)/i.test(navigator.userAgent) ? "ca-app-pub-XXXXXXXXXXXXXXXX/ANDROID_BANNER_ID" : "ca-app-pub-XXXXXXXXXXXXXXXX/IOS_BANNER_ID",
        interstitialId: /(android)/i.test(navigator.userAgent) ? "ca-app-pub-XXXXXXXXXXXXXXXX/ANDROID_INTERSTITIAL_ID" : "ca-app-pub-XXXXXXXXXXXXXXXX/IOS_INTERSTITIAL_ID",
    })

    .config(function (admobSvcProvider, AdmobConfig) {
        admobSvcProvider.setOptions({
            publisherId: AdmobConfig.bannerId,
            interstitialAdId: AdmobConfig.interstitialId,
            autoShowInterstitial: false,
        });
    })

    .run(function ($rootScope, $ionicPlatform, $timeout, admobSvc) {
        admobSvc.requestInterstitialAd();

        $rootScope.isInterstitialAvailable = false;
        $rootScope.isAppForeground = false;

        $rootScope.$on(admobSvc.events.onAdLoaded, function onAdLoaded(evt, e) {
            if ($rootScope.isAppForeground) {
                if (e.adType === admobSvc.AD_TYPE.INTERSTITIAL) {
                    $rootScope.isInterstitialAvailable = true;
                }
            }
        });

        $rootScope.$on(admobSvc.events.onAdOpened, function onAdOpened(evt, e) {
            if ($rootScope.isAppForeground) {
                if (e.adType === admobSvc.AD_TYPE.INTERSTITIAL) {
                    $rootScope.isInterstitialAvailable = false;
                    $timeout(admobSvc.requestInterstitialAd, 1); // Immediately request next interstitial asap
                }
            }
        });

        $ionicPlatform.on('pause', function onPause() {
            if ($rootScope.isAppForeground) {
                $rootScope.isAppForeground = false;
            }
        });
        $ionicPlatform.on('resume', function onResume() {
            if (!$rootScope.isAppForeground) {
                $timeout(admobSvc.requestInterstitialAd, 1);
                $rootScope.isAppForeground = true;
            }
        });
    })

    .controller('YourController', function ($rootScope, admobSvc) {
        var vm = this;

        vm.pleaseShowInterstitial = function () {
            if ($rootScope.isInterstitialAvailable) {
                admobSvc.showInterstitialAd();
            }
        };
    });

另请注意,前台应用程序有一个管理。这很重要,如果没有,用户可以将应用程序放在后台,并自动显示插页式广告。在您的情况下,它不是那么相关,因为您控制何时显示插页式广告,但我建议您保留此内容,以防您决定开始自动显示插页式广告:)