android - AdMob:测试广告只显示一次,再也不会加载

标签 android admob

我什至切换到实时广告并看到完全相同的行为。当我编译应用程序并在手机上运行时,广告第一次加载、显示并按预期工作。当我尝试在同一 session 中第二次加载它时,广告不会加载。以下代码用于测试广告单元。

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()
        }
    }

日志很有趣。如您所见,广告仅就绪 一次。再也不会了。

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)
}

关于android - AdMob:测试广告只显示一次,再也不会加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65466982/

相关文章:

java - setOnClickListener() 的空指针异常

Android AdMob 超时

objective-c - 我们应该在 viewDidLoad 还是 viewDidAppear 中调用广告?

android - 沿着直线(通过路径?)

android - AccountManager 第三个参数中的 blockingGetAuthToken

java - 如何在渲染 View 之前对其进行屏幕截图或快照?

android - 使用 MoPub 进行中介时看不到任何原生 AdMob 广告

android - 我可以从哪里更改已在 App Store 中的应用程序的刷新率?

android - 似乎无法同时显示 ListView 和 AdView

android - 如何将 Google Play 搜索图标添加到我的 Android 应用程序?