Skip to content

Android SDK - Rewarded ads

Rewarded ads are full-screen ads that give the user an in-app reward, such as coins or an extra life, for watching the ad to the end. Users choose to watch them, so offer them in exchange for something the user wants.

Before you start, install and initialize the SDK.

1. Get the rewarded ad object

Get the ad object for your ad unit ID. The SDK caches one instance per ad unit, so calling getRewardedAd again with the same ID returns the same object. Call after initializing MDN11 SDK.

private val rewarded by lazy { A11.getRewardedAd("adUnitId") }

2. Set the listener

Set the listener before calling load(), so you don't miss any events. When an ad closes or fails to show, load the next one. When loading fails, we recommend retrying with exponential backoff. See the full example.

rewarded.listener = object : RewardedAdListener {
    override fun onRewardedAdLoaded(adInfo: AdInfo) {}
    override fun onRewardedAdLoadFailed(error: LoadError) {}
    override fun onRewardedAdShown(adInfo: AdInfo) {}
    override fun onRewardedAdShowFailed(adInfo: AdInfo?, error: ShowError) {}
    override fun onRewardedAdClicked(adInfo: AdInfo) {}
    override fun onRewardedAdRewardEarned(adInfo: AdInfo) {
        // Grant the reward here, see step 5
    }
    override fun onRewardedAdClosed(adInfo: AdInfo) {}
    override fun onRewardedAdRevenue(adInfo: AdInfo) {}
}

3. Load the ad

Load the ad well before you need it. When onRewardedAdLoaded fires, offer the reward to the user.

rewarded.load(activity)

4. Show the ad

Call show() only when the user chooses to watch, for example when they tap "Watch ad for a reward".

rewarded.show(activity)

5. Grant the reward

Grant the reward in onRewardedAdRewardEarned.

override fun onRewardedAdRewardEarned(adInfo: AdInfo) {
    grantReward() // Your own reward logic, for example add coins
}

Caution

onRewardedAdClosed fires whether or not the user earned the reward. The reward should be granted only in onRewardedAdRewardEarned.

Full example

class MainActivity : AppCompatActivity() {

    private val rewarded by lazy { A11.getRewardedAd("adUnitId") }
    private val retryHandler = Handler(Looper.getMainLooper())
    private var retryDelayMs = 5_000L
    private var isRewardedReady = false

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        rewarded.listener = object : RewardedAdListener {
            override fun onRewardedAdLoaded(adInfo: AdInfo) {
                isRewardedReady = true // Offer the reward to the user
                retryDelayMs = 5_000L
            }
            override fun onRewardedAdLoadFailed(error: LoadError) {
                Log.e("Ads", "Rewarded load failed: $error")
                // Retry with exponential backoff: 5 s, 10 s, 20 s and so on, up to 60 s
                retryHandler.postDelayed({ rewarded.load(this@MainActivity) }, retryDelayMs)
                retryDelayMs = (retryDelayMs * 2).coerceAtMost(60_000L)
            }
            override fun onRewardedAdShown(adInfo: AdInfo) {}
            override fun onRewardedAdShowFailed(adInfo: AdInfo?, error: ShowError) {
                Log.e("Ads", "Rewarded show failed: $error")
                rewarded.load(this@MainActivity)
            }
            override fun onRewardedAdClicked(adInfo: AdInfo) {}
            override fun onRewardedAdRewardEarned(adInfo: AdInfo) {
                // Grant the reward here
            }
            override fun onRewardedAdClosed(adInfo: AdInfo) {
                // Preload the next one
                rewarded.load(this@MainActivity)
            }
            override fun onRewardedAdRevenue(adInfo: AdInfo) {}
        }
        rewarded.load(this)
    }

    // Call when the user chooses to watch, for example taps "Watch ad for a reward"
    fun showRewarded() {
        if (!isRewardedReady) return
        isRewardedReady = false
        rewarded.show(this)
    }

    override fun onDestroy() {
        super.onDestroy()
        retryHandler.removeCallbacksAndMessages(null) // Cancel pending retries
        rewarded.listener = null // Release this Activity
    }
}