Files
sodalive-android/docs/20260420_무료라이브라이트팝업광고적용.md

5.1 KiB

20260420 무료 라이브 라이트 팝업 광고 적용

작업 체크리스트

  • 관련 모듈과 기존 패턴, 무료 라이브 판별값, 광고 연동 조건을 조사한다.
    QA: LiveRoomActivity, GetRoomInfoResponse, GetRoomDetailResponse, Daro 공식 Light Popup 가이드에서 조건 근거를 확인해야 한다.
  • 무료 라이브 라이트 팝업 노출 정책 테스트를 추가한다.
    QA: 비방장 + 무료 + 미시도 조합만 허용되고, 나머지 조합은 모두 차단되어야 한다.
  • LiveRoomActivityLiveRoomViewModel에 Light Popup 연동을 최소 변경으로 구현한다.
    QA: 방장이 아니고 무료 라이브일 때만 Daro Light Popup 시도 경로가 존재해야 하며, 같은 액티비티 인스턴스에서 중복 시도되지 않아야 한다.
  • Ad Unit ID를 추후 입력할 수 있도록 단일 수정 지점을 만든다.
    QA: 사용자가 수정해야 하는 상수 위치를 코드에서 즉시 확인할 수 있어야 한다.
  • 변경 사항을 진단하고 관련 Gradle 검증을 수행한 뒤 결과를 기록한다.
    QA: 관련 단위 테스트와 :app:assembleDebug 결과를 문서 하단 검증 기록에 남겨야 한다.

구현 메모

  • LiveRoomActivityGetRoomInfoResponse에는 creatorId는 있지만 price/isPaid가 없어 무료 여부를 직접 판별할 수 없다.
  • 무료 여부는 기존 LiveRepository.getRoomDetail(roomId, token) 경로의 GetRoomDetailResponse.price로 판별한다.
  • 유료 라이브 입장 여부를 뜻하는 GetRoomDetailResponse.isPaid는 무료 판별값이 아니므로 광고 게이트에는 사용하지 않는다.
  • Daro SDK는 이미 앱 전역에서 초기화되어 있으므로 LiveRoomActivity에는 Light Popup 로드/표시 로직만 추가한다.
  • Ad Unit ID와 placement는 LiveRoomActivity companion object의 상수로 두어 사용자가 추후 값만 교체할 수 있게 한다.

검증 기록

  • 2026-04-20
    • 무엇: LiveRoomActivity에 무료 라이브 비방장 전용 Daro Light Popup을 추가하기 위한 조건, SDK 사용 방식, 최소 수정 범위를 조사했다.
    • 왜: 현재 액티비티 응답에는 무료/유료 필드가 없어 별도 상세 응답 확인이 필요하고, Daro Light Popup은 공식 클래스/콜백명을 확인한 뒤 연결해야 하기 때문이다.
    • 어떻게:
      • 조사 파일: 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/live/room/detail/GetRoomDetailResponse.kt, app/src/main/java/kr/co/vividnext/sodalive/mypage/MyPageFragment.kt, app/src/main/java/kr/co/vividnext/sodalive/app/SodaLiveApp.kt
      • 조사 문서: https://guide.daro.so/ko/sdk-integration/android/ad-formats/lightpopup
      • 확인 결과: 비방장 조건은 creatorId != SharedPreferenceManager.userId, 무료 조건은 GetRoomDetailResponse.price == 0, SDK 타입은 DaroLightPopupAdUnit, DaroLightPopupAdLoader, DaroLightPopupAdListener 경로로 확정했다.
  • 2026-04-20
    • 무엇: LiveRoomActivity에 무료 라이브 비방장 전용 Daro Light Popup 시도 경로를 추가하고, Ad Unit ID 입력 위치를 companion object 상수로 고정했다.
    • 왜: 현재 GetRoomInfoResponse만으로는 무료 여부를 알 수 없어 별도 상세 조회가 필요했고, 사용자가 나중에 광고 단위 ID만 안전하게 교체할 수 있어야 했기 때문이다.
    • 어떻게:
      • 수정 파일: app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomActivity.kt, app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomViewModel.kt, app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomDaroLightPopupPolicy.kt, app/src/test/java/kr/co/vividnext/sodalive/live/room/LiveRoomDaroLightPopupPolicyTest.kt, docs/20260420_무료라이브라이트팝업광고적용.md
      • Ad Unit ID 위치: app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomActivity.ktDARO_LIGHT_POPUP_AD_UNIT_KEY
      • 실행 명령: ./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.live.room.LiveRoomDaroLightPopupPolicyTest"
      • 결과: 성공. 비방장/무료/중복시도 조건 테스트가 BUILD SUCCESSFUL로 통과했다.
      • 실행 명령: ./gradlew :app:assembleDebug
      • 결과: 성공. debug APK가 BUILD SUCCESSFUL로 생성됐다.
      • 실행 명령: ./gradlew :app:ktlintCheck
      • 결과: 실패. 이번 변경과 무관한 기존 파일(SodaLiveApp.kt, 기존 LiveRoomActivity.kt 누적 포맷 위반) 때문에 :app:ktlintMainSourceSetCheck가 실패했다.
      • 진단 도구: Kotlin(.kt)용 LSP 서버 미구성으로 변경 Kotlin 파일의 lsp_diagnostics는 실행 불가였고, Markdown 문서는 진단 이슈가 없었다.
      • 실행 명령: adb devices, adb devices -l, ./gradlew :app:installDebug
      • 결과: 장치 연결 상태가 일시적으로 변동됐고 최종적으로 연결된 기기가 없어 installDebug 수동 QA를 완료하지 못했다. 따라서 실기기 광고 노출 검증은 [blocked] 상태다.