# 20260421 라이브룸 무료방 전면 광고 추가 ## 작업 체크리스트 - [x] 무료방 판단값과 실제 입장 완료 시점을 근거 파일로 확정한다. QA: `GetRoomInfoResponse.isFreeRoom`, `LiveRoomActivity.joinChannel(...).rtmChannelJoinSuccess`를 근거로 설명할 수 있어야 한다. - [x] 광고 SDK 적용 방식과 ad unit id 주입 방식을 기존 패턴과 연결해 문서에 먼저 고정한다. QA: `MyPageFragment`의 `BuildConfig` 사용 패턴과 Yandex interstitial 공식 API(`InterstitialAdLoader`, `AdRequestConfiguration.Builder`, `show(activity)`)가 문서에 반영되어야 한다. - [x] `app/build.gradle`에 라이브룸 interstitial ad unit id를 debug/release별로 추가한다. QA: `BuildConfig.YANDEX_INTERSTITIAL_LIVE_ROOM_AD_UNIT_ID`가 두 buildType에서 생성되어야 한다. - [x] `LiveRoomActivity.kt`에 무료방 전면 광고 상태와 로드/노출/정리 로직을 추가한다. QA: 무료방일 때만 광고를 준비하고, 입장 완료 시점에 한 번만 전면 광고를 시도해야 하며, 실패해도 라이브 입장은 유지되어야 한다. - [x] 검증 결과를 문서 하단에 누적 기록한다. QA: 최소 빌드/테스트/수동 확인 결과와 실행 명령이 남아 있어야 한다. ## 범위 메모 - 요청 해석은 `LiveRoomActivity`에서 무료방 입장 시 Yandex interstitial 광고를 한 번 표시하는 것으로 한정한다. - 무료방 여부는 `app/src/main/java/kr/co/vividnext/sodalive/live/room/info/GetRoomInfoResponse.kt`의 `isFreeRoom`을 사용한다. - 광고 노출 시점은 실제 라이브룸 입장이 완료되는 `LiveRoomActivity.joinChannel(...).rtmChannelJoinSuccess`로 고정한다. - ad unit id는 `MyPageFragment` 배너 광고와 같은 방식으로 `app/build.gradle`의 `debug`/`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 앱에서 무료방 진입 경로로 추가 확인이 필요하다.