AdMob RewardedVideoAd.loadAd始终返回“无法加载广告,错误代码:0”

时间:2016-07-04 09:35:21

标签: android firebase admob

我正在使用firebase-ads:9.2.0,API级别为24。

通过在我的build.gradle中添加compile(名称:'unity-ads',ext:'aar')来导入unity-ads aar模块。

如果我选择直接使用UnityAds API,一切都会顺利。

但是,当我尝试将统一广告与AdMob整合在一起时:

    mRewardedVideoAd = MobileAds.getRewardedVideoAdInstance( this );

    mRewardedVideoAd.setRewardedVideoAdListener(new RewardedVideoAdListener() {
        @Override
        public void onRewardedVideoAdLoaded() {
            logger.debug("onRewardedVideoAdLoaded");
        }

        @Override
        public void onRewardedVideoAdOpened() {
            logger.debug("onRewardedVideoAdOpened");
        }

        @Override
        public void onRewardedVideoStarted() {
            logger.debug("onRewardedVideoStarted");
        }

        @Override
        public void onRewardedVideoAdClosed() {
            logger.debug("onRewardedVideoAdClosed");
        }

        @Override
        public void onRewarded(RewardItem rewardItem) {
            logger.debug("onRewarded");
        }

        @Override
        public void onRewardedVideoAdLeftApplication() {
            logger.debug("onRewardedVideoAdLeftApplication");
        }

        @Override
        public void onRewardedVideoAdFailedToLoad(int i) {
            Toast.makeText( 
                getApplicationContext(), 
                "onRewardedVideoAdFailedToLoad", 
                Toast.LENGTH_SHORT ).show();
        }
    });

    AdRequest adRewardRequest = new AdRequest.Builder()
        .addTestDevice("E921B48960E16DA3ABD13C4AFB7052A4")
        .build();

    mRewardedVideoAd.loadAd( 
        getResources().getString(R.string.reward_ad_unit_id), 
        adRewardRequest );

它总是返回

  

收到广告回复时出现问题。 ErrorCode:0
  无法加载广告:0。

有什么我以错误的方式做到了吗?

或者我错过了一些步骤?

以下是我的AdMob页面截图:

AdMob page

3 个答案:

答案 0 :(得分:6)

好的,我找到了解决方案。

首先,我的项目中没有包含适配器。

我必须在这里下载adpaters: Third-party network adapters

并将其放入libs文件夹中。 这些适配器不包含在SDK中(如果从github下载)。

其次,我必须从我的代码中删除这一行。

private static Dictionary<Type, Type> s_ControlTypes = new Dictionary<Type, Type>() {
  {typeof(string), typeof(TextBox)},
  {typeof(bool), typeof(RadioButton)},
};

如果AdMob将此设备视为测试设备,则不会下载任何视频广告(至少在我的情况下)。

如果我选择使用AVD,他们会强制在这些模拟器上显示测试广告。

所以我改为Genymotion,删除addTestDevice()然后它就可以了。

答案 1 :(得分:4)

  

通常会在新制作的广告中出现这种情况,所以请等待一小时   再试一次。

public static final int ERROR_CODE_INTERNAL_ERROR

内部发生了一些事情;例如,广告服务器收到了无效的回复。

常数:0

来源:Google Developers

答案 2 :(得分:1)

我使用插页式广告,但我认为这是同样的问题。谷歌有时会提供不起作用的代码,不要问我为什么会这样做。

mRewardedVideoAd.loadAd()方法之后添加此内容:

mRewardedVideoAd.setAdListener(new AdListener() {
        @Override
        public void onAdLoaded() {
            //your code when Ad is loaded
            //you can show your ad immediately, but I don't suggest it
            if (mRewardedVideoAd.isLoaded()) {
                mRewardedVideoAd.show(); //this shows ad immediately
            }
        }

        @Override
        public void onAdClosed() {
        }
    });

或者您可以设置AdListener,不要立即显示,而是制作新方法:

public static void displayAd() {
    if (mRewardedVideoAd.isLoaded()) {
        mRewardedVideoAd.show();
    }
}

这样,您可以从任何活动中调用此方法,该活动几乎立即显示广告(因为它已经加载),而无需再次加载。