admob - 使用 AdMob AppOpenAds 时如何解决此错误?错误:代码:1
问题描述
我在实施 Google AdMob AppOpenAds 时遇到此错误。我正在使用 Android Emulator ID 作为测试设备,并且还使用 Google 测试广告单元进行 AppOpenAd。我曾尝试在物理设备和模拟器上进行测试。我正在使用我自己的 AdMob app-id 并以 SDK 30 为目标。
这是调试控制台中的错误消息。
D/AppOpenManager: {
"Code": 1,
"Message": "Error building request URL.",
"Domain": "com.google.android.gms.ads",
"Cause": "null",
"Response Info": {
"Response ID": "null",
"Mediation Adapter Class Name": "",
"Adapter Responses": []
}
}
我遵循了https://developers.google.com/ad-manager/mobile-ads-sdk/android/app-open-ads上提供的文档
这是我的完整代码:
/** Request an ad */
public void fetchAd() {
// Have unused ad, no need to fetch another.
if (isAdAvailable()) {
return;
}
loadCallback =
new AppOpenAd.AppOpenAdLoadCallback() {
/**
* Called when an app open ad has loaded.
*
* @param ad the loaded app open ad.
*/
@Override
public void onAppOpenAdLoaded(AppOpenAd ad) {
AppOpenManager.this.appOpenAd = ad;
AppOpenManager.this.loadTime = (new Date()).getTime();
}
/**
* Called when an app open ad has failed to load.
*
* @param loadAdError the error.
*/
@Override
public void onAppOpenAdFailedToLoad(LoadAdError loadAdError) {
Log.d(LOG_TAG, loadAdError.toString());
Log.d(LOG_TAG, "AppOpen ad failed to load");
}
};
AdRequest request = getAdRequest();
AppOpenAd.load(
myApplication,
String.valueOf(R.string.app_open_ad_unit_id),
request,
AppOpenAd.APP_OPEN_AD_ORIENTATION_PORTRAIT,
loadCallback);
}
/** Creates and returns ad request. */
private AdRequest getAdRequest() {
/** Add test devices here*/
List<String> testDeviceIds = Arrays.asList(AdRequest.DEVICE_ID_EMULATOR);
RequestConfiguration configuration =
new RequestConfiguration.Builder().setTestDeviceIds(testDeviceIds).build();
MobileAds.setRequestConfiguration(configuration);
return new AdRequest.Builder().build();
}
/** Utility method to check if ad was loaded more than n hours ago. */
private boolean wasLoadTimeLessThanNHoursAgo(long numHours) {
long dateDifference = (new Date()).getTime() - this.loadTime;
long numMilliSecondsPerHour = 3600000;
return (dateDifference < (numMilliSecondsPerHour * numHours));
}
/** Utility method that checks if ad exists and can be shown. */
public boolean isAdAvailable() {
return appOpenAd != null && wasLoadTimeLessThanNHoursAgo(4);
}
/** Shows the ad if one isn't already showing. */
public void showAdIfAvailable() {
// Only show ad if there is not already an app open ad currently showing
// and an ad is available.
if (!isShowingAd && isAdAvailable()) {
Log.d(LOG_TAG, "Will show ad.");
FullScreenContentCallback fullScreenContentCallback =
new FullScreenContentCallback() {
@Override
public void onAdDismissedFullScreenContent() {
// Set the reference to null so isAdAvailable() returns false.
AppOpenManager.this.appOpenAd = null;
isShowingAd = false;
fetchAd();
}
@Override
public void onAdFailedToShowFullScreenContent(AdError adError) {
Log.d(LOG_TAG, "Ad Failed To Show FullScreen Content");
}
@Override
public void onAdShowedFullScreenContent() {
isShowingAd = true;
}
};
appOpenAd.show(currentActivity, fullScreenContentCallback);
} else {
Log.d(LOG_TAG, "Can not show ad.");
fetchAd();
}
}
解决方案
我有同样的错误,但我有一个错误我在 ads:adUnitId 中添加了应用程序 ID
<com.google.android.gms.ads.AdView xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/adView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
ads:adSize="SMART_BANNER"
ads:adUnitId="XXX"
ads:layout_constraintBottom_toBottomOf="parent" />
而不是unitid,问题就解决了
推荐阅读
- jquery - 未捕获的范围错误;超出最大调用堆栈大小
- python - 如何在 python 中测试 SOAP 服务?
- html - 如何将图像居中在英雄部分的顶部?
- javascript - angular - 对数组长度时间发出 HTTP 请求并连接对数组的响应
- sql - 成套查询思想?
- javascript - ReactJS - 为滚动添加动力
- symfony - Symfony 命令问题输入未完成
- python - 为什么 [:1] 和 [0] 不会产生相同的结果?
- python - Django将字典从Json保存到DB
- select - SQLite3:指定起始 rowid 以开始 SELECT 搜索?