kotlinandroid-jetpack-composeadmob-rewardedvideoad

How to show rewardedInterstitial ad which was loaded in mainActivity in a compose?


I try to load rewarded interestitial ad in Mainactivity and then show it in one composable screen in jetpack compose. I loaded it successfully but in my RewardedShow compose screen rewardedInterstitialAd is null? I used my code from https://developers.google.com/admob/android/rewarded-interstitial

This is my code in MainActivity

class MainActivity : ComponentActivity(){
var rewardedInterstitialAd: RewardedInterstitialAd? = null

private var TAG = "MainActivity"
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)



    setContent {
        MyBeautyAppInJetpackComposeTheme {
            MyNavGraph()
            MobileAds.initialize(this) {
                loadAd()
            }
        }
    }
}

private fun loadAd() {
    RewardedInterstitialAd.load(this, "ca-app-pub- 
3940256099942544/5354046379",
        AdRequest.Builder().build(), object : 
RewardedInterstitialAdLoadCallback() {
            override fun onAdLoaded(ad: RewardedInterstitialAd) {
                Log.d(TAG, "Ad was loaded.")
                rewardedInterstitialAd = ad
            }

            override fun onAdFailedToLoad(adError: LoadAdError) {
                Log.d(TAG, adError?.toString())
                rewardedInterstitialAd = null
            }
        })
    }
}

and this the RewardedShowCompose screen

@SuppressLint("UnrememberedMutableState")
@Composable
fun RewardedShowCompose( actions: MainActions, maskArg: String) {
    val context = LocalContext.current
    val loading = mutableStateOf(true)

 Surface(modifier = Modifier.fillMaxSize())
{
   if (MainActivity.rewardedInterstitialAd != null){
      
       MainActivity.rewardedInterstitialAd?.show(context as Activity, OnUserEarnedRewardListener {  actions.gotoFinalShow.invoke(maskArg) })

      }
   }
}

Solution

  • I made rewardedInterstitialAd Companion and now it works well. like this

      companion object {
     var rewardedInterstitialAd: RewardedInterstitialAd? = null
     }