Files
sodalive-android/docs/plan-task/20260421_라이브룸무료방전면광고추가.md

5.8 KiB

20260421 라이브룸 무료방 전면 광고 추가

작업 체크리스트

  • 무료방 판단값과 실제 입장 완료 시점을 근거 파일로 확정한다.
    QA: GetRoomInfoResponse.isFreeRoom, LiveRoomActivity.joinChannel(...).rtmChannelJoinSuccess를 근거로 설명할 수 있어야 한다.
  • 광고 SDK 적용 방식과 ad unit id 주입 방식을 기존 패턴과 연결해 문서에 먼저 고정한다.
    QA: MyPageFragmentBuildConfig 사용 패턴과 Yandex interstitial 공식 API(InterstitialAdLoader, AdRequestConfiguration.Builder, show(activity))가 문서에 반영되어야 한다.
  • app/build.gradle에 라이브룸 interstitial ad unit id를 debug/release별로 추가한다.
    QA: BuildConfig.YANDEX_INTERSTITIAL_LIVE_ROOM_AD_UNIT_ID가 두 buildType에서 생성되어야 한다.
  • LiveRoomActivity.kt에 무료방 전면 광고 상태와 로드/노출/정리 로직을 추가한다.
    QA: 무료방일 때만 광고를 준비하고, 입장 완료 시점에 한 번만 전면 광고를 시도해야 하며, 실패해도 라이브 입장은 유지되어야 한다.
  • 검증 결과를 문서 하단에 누적 기록한다.
    QA: 최소 빌드/테스트/수동 확인 결과와 실행 명령이 남아 있어야 한다.

범위 메모

  • 요청 해석은 LiveRoomActivity에서 무료방 입장 시 Yandex interstitial 광고를 한 번 표시하는 것으로 한정한다.
  • 무료방 여부는 app/src/main/java/kr/co/vividnext/sodalive/live/room/info/GetRoomInfoResponse.ktisFreeRoom을 사용한다.
  • 광고 노출 시점은 실제 라이브룸 입장이 완료되는 LiveRoomActivity.joinChannel(...).rtmChannelJoinSuccess로 고정한다.
  • ad unit id는 MyPageFragment 배너 광고와 같은 방식으로 app/build.gradledebug/release buildConfigField에 추가한다.
  • 앱 전역 Yandex SDK 기본 설정은 이미 SodaLiveApp.kt에 있으므로 이번 작업에서 앱 초기화 로직은 변경하지 않는다.
  • 요청 범위를 넘는 UI 변경, 광고 재시도 루프, 별도 화면 분기 추가는 제외한다.
  • 현재 ad unit id 기본값은 debug/release 모두 demo-interstitial-yandex로 두고, 추후 실제 값 교체 위치를 app/build.gradle에 고정한다.

예상 수정 파일

  • docs/20260421_라이브룸무료방전면광고추가.md
  • app/build.gradle
  • app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomActivity.kt

검증 계획

  • ./gradlew :app:assembleDebug로 debug 빌드와 BuildConfig/컴파일 반영 여부를 확인한다.
  • ./gradlew :app:testDebugUnitTest로 기존 단위 테스트 회귀 여부를 확인한다.
  • 가능하면 무료방 진입 동작을 실제 앱에서 실행해 광고 시도와 라이브 입장 유지 여부를 수동 확인한다.

검증 기록

  • 2026-04-21
    • 무엇: 라이브룸 무료방 전면 광고 작업 범위와 구현 위치를 문서화했다.
    • 왜: 저장소 규칙에 따라 docs 계획 문서를 먼저 만들고, 그 문서를 기준으로 구현과 검증 이력을 누적해야 하기 때문이다.
    • 어떻게:
      • 생성 파일: docs/20260421_라이브룸무료방전면광고추가.md
      • 근거 파일: app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomActivity.kt, app/src/main/java/kr/co/vividnext/sodalive/live/room/info/GetRoomInfoResponse.kt, app/src/main/java/kr/co/vividnext/sodalive/mypage/MyPageFragment.kt, app/build.gradle
      • 근거 문서: https://ads.yandex.com/helpcenter/ko/dev/android/interstitial
      • 결과: 무료방 판별값, 광고 노출 시점, ad unit id 설정 위치, 검증 계획을 구현 전에 먼저 고정했다.
  • 2026-04-21
    • 무엇: 라이브룸 무료방 전면 광고 설정과 진입 시 interstitial 노출 로직을 추가했다.
    • 왜: 무료방 입장 시에만 전면 광고를 한 번 보여주고, MyPageFragment와 같은 방식으로 buildType별 ad unit id를 관리해야 하기 때문이다.
    • 어떻게:
      • 수정 파일: app/build.gradle, app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomActivity.kt
      • Gradle 반영: debug/release 각각에 YANDEX_INTERSTITIAL_LIVE_ROOM_AD_UNIT_ID buildConfigField 추가
      • 기본값: debug/release 모두 demo-interstitial-yandex
      • 코드 반영: GetRoomInfoResponse.isFreeRoom일 때만 광고를 preload하고, joinChannel(...).rtmChannelJoinSuccess에서 1회성으로 show(activity) 시도
      • 정리 로직: onAdDismissed, onAdFailedToShow, onDestroy에서 listener와 ad 참조 해제
  • 2026-04-21
    • 무엇: 변경 사항의 진단, 빌드, 테스트, 수동 실행 가능 여부를 확인했다.
    • 왜: 이번 작업은 BuildConfig 생성과 Activity 진입 로직을 함께 바꾸므로 실제 컴파일과 런타임 실행 가능 여부를 함께 확인해야 하기 때문이다.
    • 어떻게:
      • 진단 도구: lsp_diagnostics
      • 진단 결과: .kt LSP 서버 미설정으로 No LSP server configured for extension: .kt
      • 실행 명령: ./gradlew :app:assembleDebug :app:assembleRelease :app:testDebugUnitTest
      • 실행 결과: BUILD SUCCESSFUL
      • 수동 확인 시도 1: adb devices
      • 결과 1: 최초 확인 시 연결 기기 1대(2cec640c34017ece)가 보였다.
      • 수동 확인 시도 2: adb -s 2cec640c34017ece install -r "/Users/klaus/Develop/sodalive/Android/SodaLive/app/build/outputs/apk/debug/app-debug.apk"
      • 결과 2: adb: device '2cec640c34017ece' not found
      • 수동 확인 시도 3: adb devices
      • 결과 3: 이후에는 연결 기기 목록이 비어 실제 무료방 진입과 광고 실노출까지는 이어서 확인하지 못했다.
      • 비고: 기능 런타임 확인은 ADB 연결이 다시 안정화된 뒤 debug 앱에서 무료방 진입 경로로 추가 확인이 필요하다.