리워드 비디오 형태 소개
- 광고 시청을 대가로 인앱 가치를 지닌 보상(재화, 기능, 컨텐츠 등)을 제공하는 형태의 광고입니다.
- 보상을 대가로 시청하므로 동영상 광고의 스킵이 불가능하며 일반적인 길이는 30초입니다.

How It Works

광고 연동하기
adUnit 생성
복사
AI에게 묻기
val adUnit = DaroRewardedAdUnit(
key = ${AdUnitId},
placement = ${placement}, //로그 상 보여질 이름입니다. 공백을 보내도 무관합니다.
)
Loader 생성 및 광고 로드
복사
AI에게 묻기
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()
리스너 설정 및 광고 표시
복사
AI에게 묻기
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) {}
})
아래와 같은 방법으로 서버 콜백 메서드를 설정할 수 있습니다.
복사
AI에게 묻기
loader.setListener(object : DaroRewardedAdLoaderListener {
override fun onAdLoadSuccess(ad: DaroRewardedAd, adInfo: DaroAdInfo) {
...
Daro.setUserId(context = context, ${user_id})
ad.setCustomData(${custom_data})
...
}
...
})
Example
복사
AI에게 묻기
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()
}
}
트러블슈팅: 광고 닫기 버튼 겹침 이슈
DARO Android SDK를 사용해 보상형 광고를 표시할 때, 일부 광고 크리에이티브에서 Status Bar 또는 디스플레이 컷아웃(노치, 펀치홀) 영역과 UI가 겹쳐 보이는 현상이 발생할 수 있습니다.
아래는 광고가 표시되는 동안만 Status Bar를 숨기고, 광고 종료 시 원복하는 방법을 안내합니다.
복사
AI에게 묻기
// 광고 표시 전 - 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
}
}
// 광고 종료 후 - Status Bar 복구
private fun showStatusBar(activity: Activity) {
WindowCompat.setDecorFitsSystemWindows(activity.window, true)
WindowInsetsControllerCompat(activity.window, activity.window.decorView).apply {
show(WindowInsetsCompat.Type.statusBars())
}
}
복사
AI에게 묻기
ad.setListener(object : DaroRewardedAdListener {
override fun onShown(adInfo: DaroAdInfo) {
hideStatusBar(activity) // 방어적 재호출
}
override fun onFailedToShow(adInfo: DaroAdInfo, error: DaroAdDisplayFailError) {
showStatusBar(activity) // 실패 시 복구
}
override fun onDismiss(adInfo: DaroAdInfo) {
showStatusBar(activity) // 닫힘 시 복구
ad.destroy()
}
override fun onEarnedReward(adInfo: DaroAdInfo, rewardItem: DaroRewardedAd.DaroRewardedItem) {}
})
hideStatusBar(activity) // show() 직전에 호출
ad.show(activity = this@MainActivity)

