android - AdMob:测试广告只展示一次,不再加载
问题描述
我什至切换到实时广告并看到完全相同的行为。当我编译应用程序并在手机上运行它时,广告会首次加载、显示并按预期工作。当我尝试在同一会话中第二次加载它时,广告不会加载。下面的代码用于测试广告单元。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
rewardedAd = RewardedAd(this, "ca-app-pub-3940256099942544/5224354917")
initialiseAds()
}
private fun initialiseAds() {
MobileAds.initialize(this) { initializationStatus ->
val statusMap = initializationStatus.adapterStatusMap
for (adapterClass in statusMap.keys) {
val status = statusMap[adapterClass]
Log.d(
TAG, String.format(
"Adapter name: %s, Status: %s, Latency: %d",
adapterClass, status!!.initializationState, status.latency
)
)
}
// Start loading ads here...
loadAds()
}
}
private fun loadAds() {
if(!rewardedAd.isLoaded) {
Log.d(TAG, "Ad not ready")
runOnUiThread {
val adLoadCallback = object : RewardedAdLoadCallback() {
override fun onRewardedAdLoaded() {
// Ad successfully loaded.
Log.d(TAG, "Ad ready.")
}
override fun onRewardedAdFailedToLoad(adError: LoadAdError) {
// Ad failed to load.
Log.d(TAG, "Ad can't load. ${adError.message}")
}
}
rewardedAd.loadAd(AdRequest.Builder().build(), adLoadCallback)
}
}
} else {
Log.d(TAG, "Ad ready, no need to load Ads.")
}
}
private fun showAd() {
if (rewardedAd.isLoaded) {
val activityContext: Activity = this@MainActivity
val adCallback = object : RewardedAdCallback() {
override fun onRewardedAdOpened() {
// Ad opened.
Log.d(TAG, "Ad opened.")
}
override fun onRewardedAdClosed() {
// Ad closed.
Log.d(TAG, "Ad closed.")
loadAds()
}
override fun onUserEarnedReward(@NonNull reward: RewardItem) {
// User earned reward.
failedOnceAlready = false
Log.d(TAG, "Full credit unlocked.")
}
override fun onRewardedAdFailedToShow(adError: AdError) {
// Ad failed to display.
Log.d(TAG, "Failed to display the ad. ${adError.message}")
}
}
Log.d(TAG, "Showing video ad.")
rewardedAd.show(activityContext, adCallback)
} else if (failedOnceAlready) {
failedOnceAlready = false
Log.d(TAG, "Failed to show the ads a second time.")
loadAds()
} else {
failedOnceAlready = true
loadAds()
Log.d(TAG, "Failed to show the ads first time.")
showTimerDialog()
}
}
日志非常有趣。如您所见,广告只有ready
一次。而且再也不会。
2020-12-27 14:35:14.154 25732-25732/ D/MainActivity: Ad not ready
2020-12-27 14:35:14.747 25732-25732/ D/MainActivity: Adapter name: com.google.android.gms.ads.MobileAds, Status: READY, Latency: 4
2020-12-27 14:35:14.748 25732-25732/ D/MainActivity: Adapter name: com.google.ads.mediation.ironsource.IronSourceMediationAdapter, Status: READY, Latency: 902
2020-12-27 14:35:14.748 25732-25732/ D/MainActivity: Adapter name: com.google.ads.mediation.adcolony.AdColonyMediationAdapter, Status: READY, Latency: 847
2020-12-27 14:35:14.748 25732-25732/ D/MainActivity: Ad not ready
2020-12-27 14:35:17.396 25732-25732/ D/MainActivity: Ad ready.
2020-12-27 14:40:53.353 25732-25732/ D/MainActivity: Connect
2020-12-27 14:41:18.803 25732-25732/ D/MainActivity: Ad ready, no need to load Ads.
2020-12-27 14:41:19.921 25732-25732/ D/MainActivity: Showing video ad.
2020-12-27 14:41:19.991 25732-25732/ D/MainActivity: Ad opened.
2020-12-27 14:41:25.228 25732-25732/ D/MainActivity: Full credit unlocked.
2020-12-27 14:41:25.270 25732-25732/ D/MainActivity: Connect
2020-12-27 14:41:30.237 25732-25732/ D/MainActivity: Ad closed.
2020-12-27 14:41:30.237 25732-25732/ D/MainActivity: Ad not ready
2020-12-27 14:41:30.281 25732-25732/ D/MainActivity: Ad not ready
2020-12-27 14:42:02.400 25732-25732/ D/MainActivity: Ad not ready
2020-12-27 14:42:05.660 25732-25732/ D/MainActivity: Ad not ready
2020-12-27 14:42:05.662 25732-25732/ D/MainActivity: Failed to show the ads first time.
2020-12-27 14:42:20.707 25732-25732/ D/MainActivity: Failed to show the ads a second time.
这是加载广告的正确方法吗?
解决方案
private fun loadAds() {
rewardedAd = RewardedAd(this, "ca-app-pub-3940256099942544/5224354917")
val adLoadCallback = object: RewardedAdLoadCallback() {
fun onRewardedAdLoaded() {
// Ad successfully loaded.
}
fun onRewardedAdFailedToLoad(adError: LoadAdError) {
// Ad failed to load.
}
}
rewardedAd.loadAd(AdRequest.Builder().build(), adLoadCallback)
}
推荐阅读
- java - 将 0 到 255(1 字节)范围的 10 个不同值编码为 3 字节长度值并将其恢复为原始值
- javascript - 如何使用 Wikipedia 的 URL 获取 Wikipedia 内容?
- python - 根据数据框中的值从字典中删除嵌套的键值对
- asp.net-core - ASP.NET Core Web API 操作的永久不记名令牌身份验证
- python - conda环境需要pipwin
- c# - 在不使用开始表单或帖子的情况下将文本框的值获取到视图组件中
- python - 打开文件并将内容存储在变量中
- python - UnicodeEncodeError:“ascii”编解码器无法对位置 25-32 中的字符进行编码:序数不在范围内(128)
- python - 向量化前向传播
- python - 海龟子类“对象没有属性'_shown'”