尝试使用 Kotlin 在 Android Studio 中正确实施激励广告

问题描述

大家好,我有一个用于展示随机乐透球的应用程序。我有一个按钮,用于增加绑定到奖励广告的令牌计数。但我无法使其正常运行。这是我的代码

package com.zumatrahia.kazandiranlototahmini

import android.content.Context
import android.content.pm.ActivityInfo
import android.media.MediaPlayer
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.ArrayAdapter
import android.widget.Spinner
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
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


class SayisalActivity : AppCompatActivity() {
    lateinit var Ball01: TextView
    lateinit var Ball02: TextView
    lateinit var Ball03: TextView
    lateinit var Ball04: TextView
    lateinit var Ball05: TextView
    lateinit var Ball06: TextView
    lateinit var mediaPlayer: MediaPlayer
    lateinit var tokenText: TextView
    var tokenCount: Int = 0
    private var mRewardedAd: RewardedAd? = null
    private final var TAG = "SayisalActivity"

    override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_sayisal)
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)

        Ball01 = findViewById(R.id.Ball01)
        Ball02 = findViewById(R.id.Ball02)
        Ball03 = findViewById(R.id.Ball03)
        Ball04 = findViewById(R.id.Ball04)
        Ball05 = findViewById(R.id.Ball05)
        Ball06 = findViewById(R.id.Ball06)
        mediaPlayer = MediaPlayer.create(this,R.raw.success_sound)

        MobileAds.initialize(this) {loadRewardedAd()}

        val spinner: Spinner = findViewById(R.id.spinner)
        ArrayAdapter.createFromresource(
            this,R.array.lotto_choices,R.layout.spinner_list
        ).also { adapter ->
            adapter.setDropDownViewResource(R.layout.spinner_list)
            spinner.adapter = adapter
        }

        val sharedPreferences = getSharedPreferences("tokenCount",Context.MODE_PRIVATE)
        tokenCount = sharedPreferences.getInt("INT_KEY",5)
        tokenText = findViewById(R.id.token_text)
        tokenText.text = "Sahip olduğunuz çekiliş hakkı sayısı = $tokenCount"
    }

    private fun loadRewardedAd() {
        var adRequest = AdRequest.Builder().build()

        RewardedAd.load(this,"ca-app-pub-3940256099942544/5224354917",adRequest,object : RewardedAdLoadCallback() {
                override fun onAdFailedToLoad(adError: LoadAdError) {
                    Log.d(TAG,"Ad wasn't loaded")
                    mRewardedAd = null
                    loadRewardedAd()
                }

                override fun onAdLoaded(rewardedAd: RewardedAd) {
                    Log.d(TAG,"Ad was loaded.")
                    mRewardedAd = rewardedAd

                    mRewardedAd?.fullScreenContentCallback = object : FullScreenContentCallback() {
                        override fun onAddismissedFullScreenContent() {
                            Log.d(TAG,"Ad was dismissed.")
                            loadRewardedAd()
                        }

                        override fun onAdFailedToShowFullScreenContent(adError: AdError?) {
                            Log.d(TAG,"Ad Failed to show.")
                            loadRewardedAd()
                        }

                        override fun onAdShowedFullScreenContent() {
                            Log.d(TAG,"Ad showed fullscreen content.")
                            mRewardedAd = null
                        }
                    }
                }
            })
    }

    private fun showRewardedAd(){
        if (mRewardedAd != null) {
            mRewardedAd?.show(this,OnUserEarnedRewardListener() {
                fun onUserEarnedReward(rewardItem: RewardItem) {
                    var rewardamount = rewardItem.amount
                    var rewardType = rewardItem.type
                    Log.d(TAG,"User earned the reward.")
                    tokenCountUp()
                }
            })
        } else {
            Log.d(TAG,"The rewarded ad wasn't ready yet.")
            loadRewardedAd()
        }

    }


    fun playButtonpressed(view: View) {
        mediaPlayer.start()
        BallSayisal(Ball01,Ball02,Ball03,Ball04,Ball05,Ball06,50).textChange()
        BallSayisal(Ball01,100).textChange()
        BallSayisal(Ball01,150).textChange()
        BallSayisal(Ball01,200).textChange()
        BallSayisal(Ball01,300).textChange()
        BallSayisal(Ball01,400).textChange()
        BallSayisal(Ball01,500).textChange()
        BallSayisal(Ball01,800).textChange()
        BallSayisal(Ball01,1100).textChange()
        BallSayisal(Ball01,1600).textChange()
        tokenCountDown()
    }


    fun rewardButtonpressed(view: View) {
        showRewardedAd()
    }


    fun tokenCountDown() {
        val sharedPreferences = getSharedPreferences("tokenCount",Context.MODE_PRIVATE)
        val editor = sharedPreferences.edit()
        editor.apply {
            tokenCount -= 1
            tokenText.text = "Sahip olduğunuz çekiliş hakkı sayısı = $tokenCount"
            putInt("INT_KEY",tokenCount)
        }.apply()
    }


    fun tokenCountUp() {
        val sharedPreferences = getSharedPreferences("tokenCount",Context.MODE_PRIVATE)
        val editor = sharedPreferences.edit()
        editor.apply {
            tokenCount += 1
            tokenText.text = "Sahip olduğunuz çekiliş hakkı sayısı = $tokenCount"
            putInt("INT_KEY",tokenCount)
        }.apply()
    }
}

问题是当我点击按钮并在广告中打开奖励视频广告时,它会倒计时并显示用户获得奖励”,但 Log.d(TAG,“用户获得奖励。”)没有实现。当然,tokenCountUp() 也没有实现。只有广告加载和广告显示全屏内容进入日志。 但是在我跟随的教程中,用户获得了奖励标签来到日志屏幕。如果我将 tokenCountUp() 置于覆盖 fun onAdShowedFullScreenContent() 或 showRewardedAd(){ if (mRewardedAd != null) { 它有效,但在用户实际观看广告之前它会计数。 我哪里做错了?

解决方法

我将 showRewardedAd 函数内容更改为这个,现在可以使用了

if (mRewardedAd != null) {
            mRewardedAd!!.show(this) { rewardItem -> // Handle the reward.
                Log.d(TAG,"The user earned the reward.")
                val rewardAmount = rewardItem.amount
                val rewardType = rewardItem.type
                tokenCountUp()
            }
        } else {
            Log.d(TAG,"The rewarded ad wasn't ready yet.")
            loadRewardedAd()
        }