我正在使用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页面截图:
答案 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
答案 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();
}
}
这样,您可以从任何活动中调用此方法,该活动几乎立即显示广告(因为它已经加载),而无需再次加载。