메인 콘텐츠로 건너뛰기

인터스티셜 광고 형태 소개

  • 화면 전체를 덮는 형태로 노출되는 광고입니다.
  • 이미지/동영상 모두 포함되나 동영상 소재가 더 많이 노출되며 일반적으로 5초 후부터 스킵이 가능합니다.
Interstitial Example Gif Kor Gi

광고 연동하기

1

adUnit 생성

val adUnit = DaroInterstitialAdUnit(
    key = ${AdUnitId},
    placement = ${placement}, //로그 상 보여질 이름입니다. 공백을 보내도 무관합니다.
)
2

Loader 생성 및 광고 로드

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

리스너 설정 및 광고 표시

loader.setListener(object : DaroInterstitialAdLoaderListener {
    override fun onAdLoadSuccess(ad: DaroInterstitialAd, adInfo: DaroAdInfo) {
        ad.setListener(object : DaroInterstitialAdListener {
            override fun onAdImpression(adInfo: DaroAdInfo) {}
            override fun onAdClicked(adInfo: DaroAdInfo) {}
            override fun onShown(adInfo: DaroAdInfo) {}
            override fun onFailedToShow(adInfo: DaroAdInfo, error: DaroAdDisplayFailError) {}
            override fun onDismiss(adInfo: DaroAdInfo) {}
        })
        ad.show(activity = this@MainActivity)
    }
    override fun onAdLoadFail(err: DaroAdLoadError) {}
})
4

광고 시청 완료 후 destroy 호출

ad.destroy()

Example

private fun showInterstitialAd() {
  DaroInterstitialAdLoader(
    context = context,
    adUnit = DaroInterstitialAdUnit(
      key = ${AdUnitId},
      placement = ${placement},
    ),
  ).apply {
    setListener(
      object : DaroInterstitialAdLoaderListener {
        override fun onAdLoadSuccess(
          ad: DaroInterstitialAd,
          adInfo: DaroAdInfo,
        ) {
          Log.d("Ad Test", "interstitial - success")

          ad.setListener(object : DaroInterstitialAdListener {
            override fun onAdImpression(adInfo: DaroAdInfo) {
              Log.d("Ad Test", "interstitial - impression")
            }

            override fun onAdClicked(adInfo: DaroAdInfo) {
              Log.d("Ad Test", "interstitial - clicked")
            }

            override fun onShown(adInfo: DaroAdInfo) {
              Log.d("Ad Test", "interstitial - onShown")
            }

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

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

          ad.show(activity = this@MainActivity)
        }

        override fun onAdLoadFail(err: DaroAdLoadError) {
          Log.d("Ad Test", "interstitial - fail : ${err.message}")
        }

      }
    )
    load()
  }
}

광고 표시 동안 Status Bar 숨기기 가이드

목적

  • 인터스티셜/리워드 비디오와 같은 Full Screen 광고가 상단 Safe Area(노치/Status Bar 영역)를 침범해 보이는 현상을 완화합니다.
  • 앱에서 광고 표시 구간에만 Status Bar를 숨김으로써 Safre Area 침범시 발생할 수 있는 UX 오류(닫기 버튼 클릭 불가, 등)를 방지합니다.
참고: Status Bar 숨김은 “침범이 보이는 현상”을 가리는 방어책입니다. SDK 내부 레이아웃 버그 자체를 앱이 직접 수정할 수는 없습니다.

공통 적용 원칙

  1. 광고를 ‘보여주기 직전’ Status Bar 숨김 적용
  2. 광고가 dismiss/close 된 직후 Status Bar 원복
  3. 전환 중(화면 push/pop/모달 전환)에는 show를 미루는 것이 안정적입니다.

요구사항

  • DARO Android SDK 요구사항: minSdkVersion 23

구현 전략

  • Activity(Window) 단에서 시스템 바(특히 Status Bar) 표시/숨김을 토글합니다.
  • 광고 SDK(DARO 포함)의 광고 표시/종료 콜백 또는 앱의 “show 호출 지점”에서 토글하세요.
  • DARO의 인터스티셜/리워드는 Loader/Listener 기반으로 로드 성공/실패를 처리하도록 되어 있으므로, 실제 표시 시점에 맞춰 토글을 끼워 넣는 방식이 자연스럽습니다.

코드 (권장: WindowInsetsControllerCompat 사용)

androidx.core 사용(권장). API 레벨별 분기 부담이 줄어듭니다.
import android.app.Activity
import androidx.core.view.WindowCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.WindowInsetsControllerCompat

fun Activity.hideStatusBarForAd() {
    WindowCompat.setDecorFitsSystemWindows(window, false)
    val controller = WindowInsetsControllerCompat(window, window.decorView)
    controller.hide(WindowInsetsCompat.Type.statusBars())
    controller.systemBarsBehavior =
        WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
}

fun Activity.restoreStatusBarAfterAd() {
    val controller = WindowInsetsControllerCompat(window, window.decorView)
    controller.show(WindowInsetsCompat.Type.statusBars())
    WindowCompat.setDecorFitsSystemWindows(window, true)
}

적용 위치 예시

  • 광고 show 직전: hideStatusBarForAd()
  • 광고 종료 콜백(dismiss/closed/failure-to-show 등): restoreStatusBarAfterAd()
DARO의 경우 문서상 인터스티셜/리워드 로딩은 DaroInterstitialAdLoaderListener, DaroRewardedAdLoaderListener를 통해 성공/실패를 받도록 되어 있습니다. 로드 성공 후 실제 show를 호출하는 지점에 위 토글을 넣고, 종료 콜백에서 원복하는 구조를 권장합니다.

주의사항

  • Compose 사용 앱도 동일하게 Activity window에서 제어하면 됩니다.
  • 광고가 다른 Activity/전용 Fullscreen Activity를 띄우는 네트워크라면, “현재 Activity”가 아닌 “광고가 뜨는 Activity”에 적용돼야 합니다(대부분은 현재 Activity window로 충분).
  • UI/디자인 정책상 Status Bar가 꼭 필요하면, 숨김 대신 상단 오버레이(safe area 높이만 덮기)가 더 적합할 수 있습니다.