Admob 20.1.0 中永远不会调用 onUserEarnedReward

Joe*_*Joe 3 android admob kotlin google-ads-api

我正在努力将我的 Kotlin 应用程序转换为 Admob 20.1.0。集成激励广告时遇到问题。

问题是onUserEarnedReward永远不会被调用。我目前无法用用户解锁的内容来奖励他们。我下面的代码放置在一个onClickListenerAppCompatActivity()

if (mRewardedAd != null) {
    mRewardedAd?.show(this, OnUserEarnedRewardListener { // Redundant SAM-constructor 
        fun onUserEarnedReward(rewardItem: RewardItem) { // Function "onUserEarnedReward" is never used 
            
            val rewardAmount = rewardItem.amount
            val rewardType = rewardItem.type
            println("======================= TYPE -  $rewardType /// AMOUNT - $rewardAmount")
            // This never gets called.
        }
    })
} else {
    println("=======================The rewarded ad wasn't ready yet.")
}
Run Code Online (Sandbox Code Playgroud)

我的进口:

import com.google.android.gms.ads.*
import com.google.android.gms.ads.rewarded.RewardItem
import com.google.android.gms.ads.rewarded.RewardedAd
import com.google.android.gms.ads.rewarded.RewardedAdLoadCallback
import com.google.android.gms.ads.OnUserEarnedRewardListener
Run Code Online (Sandbox Code Playgroud)

为什么我会得到冗余 SAM 构造函数并且函数“onUserEarnedReward”从未被使用

Nit*_*ain 11

原因是您正在高阶函数中创建函数而不是调用该函数。请尝试使用下面的代码。会起作用的

       mRewardedAd?.show(this, OnUserEarnedRewardListener { rewardItem ->
        val rewardAmount = rewardItem.amount
        val rewardType = rewardItem.type
        println("======================= TYPE -  $rewardType /// AMOUNT - $rewardAmount")
      }
Run Code Online (Sandbox Code Playgroud)

为了您更好地理解高阶函数,下面的代码也可以工作

   mRewardedAd?.show(this, OnUserEarnedRewardListener { 
    fun onUserEarnedReward(rewardItem: RewardItem) { 
        val rewardAmount = rewardItem.amount
        val rewardType = rewardItem.type
        println("======================= TYPE -  $rewardType /// AMOUNT - $rewardAmount")
    }
    onUserEarnedReward(it)
})
Run Code Online (Sandbox Code Playgroud)