docs(plan): 무료 라이브 라이트 팝업 작업 기록을 갱신한다

This commit is contained in:
2026-04-20 16:04:12 +09:00
parent d8221dc784
commit 002d20dc0f

View File

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