[기타/앱운영] AdMob 수익 최적화를 위한 배너/전면/리워드 배치 회고

업데이트:



문제/배경

앱 운영에서 광고 수익을 높이려다가 사용성(콘텐츠 가림, 흐름 끊김)이 먼저 망가지는 경우가 자주 생겼습니다.
실제로 HorrorWorldsirenpackage를 정비하면서, 광고를 많이 넣는 것보다 언제/어디에/어떤 조건으로 노출하느냐가 성과를 좌우했습니다.

원인

기존 이슈는 크게 세 가지였습니다.

  1. 콘텐츠와 광고 레이어 충돌(특히 코드/본문/상세 UI 영역)
  2. 준비되지 않은 전면 광고 호출(빈 화면 전환, 체감 끊김)
  3. 동의 상태와 무관한 광고 초기화 시도

적용 코드/설정

1) 동의 상태 기반 광고 로딩

HorrorWorld는 UMP 동의 결과를 기준으로 canRequestAds를 관리하고, true일 때만 모바일 광고 SDK를 초기화하도록 정리했습니다.

if (!_canRequestAds.value) return
if (!isMobileAdsInitialized.compareAndSet(false, true)) return
MobileAds.initialize(context) {}

2) 전면 광고는 “게이트 지점”에서만 호출

GalleryInterstitialAdManager로 선로딩(preload) 후, 실제 노출은 콘텐츠 흐름이 끊기지 않는 지점에서만 showIfAvailable를 호출합니다.

val shown = interstitialManager?.showIfAvailable(activity) {
    // 광고 종료 후 다음 동작 진행
} ?: false

3) 배너는 하단 고정 + 생명주기 연동

sirenpackage는 배너를 화면 하단으로 고정하고, resume/pause/destroy를 명시해 회전/백그라운드 전환 시 누수를 줄였습니다.

Lifecycle.Event.ON_RESUME -> adView.resume()
Lifecycle.Event.ON_PAUSE -> adView.pause()
Lifecycle.Event.ON_DESTROY -> adView.destroy()

4) 리워드 광고는 “미도입 기준”을 먼저 정의

리워드 광고는 당장 붙이지 않고, 아래 조건 충족 시에만 도입하도록 정책화했습니다.

  • 보상 가치가 명확한 화면(예: 힌트/프리미엄 기능 해제)
  • 강제 시청이 아닌 명시적 선택 진입
  • 핵심 사용 흐름과 분리된 위치

검증 결과

  • 콘텐츠/네비게이션을 가리는 광고 이슈가 줄어 UX 불만 포인트가 감소
  • 전면 광고 노출 타이밍이 안정되어 “갑작스러운 튐” 체감이 완화
  • 동의 상태 기반 로딩으로 정책 대응 및 디버깅 경로가 단순화

체크리스트

  • 광고 SDK 초기화가 동의 상태 이후에만 실행되는가
  • 전면 광고는 선로딩 + 게이트 지점 호출로 분리되어 있는가
  • 배너가 콘텐츠 핵심 영역을 가리지 않는가
  • 배너 resume/pause/destroy가 화면 생명주기와 동기화되는가
  • 리워드 광고는 “도입 이유/보상/진입 조건”이 문서화되어 있는가

관련 글



다음 읽을거리

관련 허브 페이지에서 같은 주제의 글을 이어서 확인할 수 있습니다.

댓글남기기