Skip to main content

Rewarded Video Ad Format

Provides in-app rewards (currency, features, content) in exchange for watching video ads. Videos are non-skippable and typically run 30 seconds. Rv Example Image Pn

How It Works

Rv Example Gif Gi

Integrating Ads

1

Create adUnit

val adUnit = DaroRewardedAdUnit(
    key = ${AdUnitId},
    placement = ${placement}, //Name displayed in logs. Can be left empty.
)
2

Create Loader and load ad

val loader = DaroRewardedAdLoader(
    context = context,
    adUnit = adUnit
)
loader.setListener(object : DaroRewardedAdLoaderListener {
    override fun onAdLoadSuccess(ad: DaroRewardedAd, adInfo: DaroAdInfo) {
        // ...
    }
    override fun onAdLoadFail(err: DaroAdLoadError) {
        // ...
    }
})
loader.load()
3

Set listener and show ad

loader.setListener(object : DaroRewardedAdLoaderListener {
    override fun onAdLoadSuccess(ad: DaroRewardedAd, adInfo: DaroAdInfo) {
        ad.setListener(object : DaroRewardedAdListener {
            override fun onShown(adInfo: DaroAdInfo) {}
            override fun onFailedToShow(adInfo: DaroAdInfo, error: DaroAdDisplayFailError) {}
            override fun onDismiss(adInfo: DaroAdInfo) {}
            override fun onEarnedReward(adInfo: DaroAdInfo, rewardItem: DaroRewardedAd.DaroRewardedItem) {}
        })
        ad.show(activity = this@MainActivity)
    }
    override fun onAdLoadFail(err: DaroAdLoadError) {}
})
4

Call destroy after ad viewing is complete

ad.destroy()
You can set the server callback method as follows:
  loader.setListener(object : DaroRewardedAdLoaderListener {
      override fun onAdLoadSuccess(ad: DaroRewardedAd, adInfo: DaroAdInfo) {
          ...
          Daro.setUserId(context = context, ${user_id})
          ad.setCustomData(${custom_data})
          ...
      }
      ...
  })

Example

private fun showRewardAd() {
    DaroRewardedAdLoader(
      context = context,
      adUnit = DaroRewardedAdUnit(
        key = ${AdUnitId},
        placement = ${placement}
      )
    ).apply {
      setListener(
        object : DaroRewardedAdLoaderListener {
          override fun onAdLoadSuccess(ad: DaroRewardedAd, adInfo: DaroAdInfo) {
            Log.d("Ad Test", "rewarded - success")

            ad.setListener(
              object : DaroRewardedAdListener {
                override fun onShown(adInfo: DaroAdInfo) {
                  Log.d("Ad Test", "rewarded - onShown")
                }

                override fun onFailedToShow(
                  adInfo: DaroAdInfo,
                  error: DaroAdDisplayFailError,
                ) {
                  Log.d("Ad Test", "rewarded - onFailedToShow")
                }

                override fun onDismiss(adInfo: DaroAdInfo) {
                  Log.d("Ad Test", "rewarded - onDismiss")
                  ad.destroy()
                }

                override fun onEarnedReward(
                  adInfo: DaroAdInfo,
                  rewardItem: DaroRewardedAd.DaroRewardedItem,
                ) {
                  Log.d("Ad Test", "rewarded - onEarnedReward")
                }
              },
            )

            Daro.setUserId(context = context, ${user_id})
            ad.setCustomData(${custom_data})

            ad.show(activity = this@MainActivity)
          }
        })
      load()
    }
  }

Troubleshooting: Ad Close Button Overlap Issue

When displaying rewarded ads using the DARO Android SDK, some ad creatives may visually overlap with the Status Bar or display cutout (notch, punch-hole) area. The following guide shows how to hide the Status Bar only while the ad is displayed and restore it once the ad is dismissed.
// Before showing ad - hide status bar
private fun hideStatusBar(activity: Activity) {
    WindowCompat.setDecorFitsSystemWindows(activity.window, false)
    WindowInsetsControllerCompat(activity.window, activity.window.decorView).apply {
        hide(WindowInsetsCompat.Type.statusBars())
        systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
    }
}

// After ad closes - restore status bar
private fun showStatusBar(activity: Activity) {
    WindowCompat.setDecorFitsSystemWindows(activity.window, true)
    WindowInsetsControllerCompat(activity.window, activity.window.decorView).apply {
        show(WindowInsetsCompat.Type.statusBars())
    }
}
Apply it in the ad listener as follows:
ad.setListener(object : DaroRewardedAdListener {
    override fun onShown(adInfo: DaroAdInfo) {
        hideStatusBar(activity)  // Defensive re-hide
    }
    override fun onFailedToShow(adInfo: DaroAdInfo, error: DaroAdDisplayFailError) {
        showStatusBar(activity)  // Restore on failure
    }
    override fun onDismiss(adInfo: DaroAdInfo) {
        showStatusBar(activity)  // Restore on dismiss
        ad.destroy()
    }
    override fun onEarnedReward(adInfo: DaroAdInfo, rewardItem: DaroRewardedAd.DaroRewardedItem) {}
})

hideStatusBar(activity)  // Call just before show()
ad.show(activity = this@MainActivity)