From af0d788796125501db8e0e45bb9e147a2a98459b Mon Sep 17 00:00:00 2001 From: klaus Date: Tue, 21 Apr 2026 12:08:24 +0900 Subject: [PATCH] =?UTF-8?q?feat(ads):=20Yandex=20Mobile=20Ads=20SDK=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=EC=9D=84=20=EC=B6=94=EA=B0=80=ED=95=9C?= =?UTF-8?q?=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 3 ++ .../co/vividnext/sodalive/app/SodaLiveApp.kt | 7 +++ docs/20260421_YandexMobileAdsSDK설정.md | 49 +++++++++++++++++++ 3 files changed, 59 insertions(+) create mode 100644 docs/20260421_YandexMobileAdsSDK설정.md diff --git a/app/build.gradle b/app/build.gradle index d11ea475..85aeb5a6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -232,6 +232,9 @@ dependencies { // Appsflyer implementation 'com.appsflyer:af-android-sdk:6.17.4' + // Yandex Mobile Ads + implementation 'com.yandex.android:mobileads:7.18.5' + // 노티플라이 implementation 'com.github.team-michael:notifly-android-sdk:1.12.0' diff --git a/app/src/main/java/kr/co/vividnext/sodalive/app/SodaLiveApp.kt b/app/src/main/java/kr/co/vividnext/sodalive/app/SodaLiveApp.kt index e03f5d15..913957f9 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/app/SodaLiveApp.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/app/SodaLiveApp.kt @@ -14,6 +14,7 @@ import com.facebook.FacebookSdk import com.kakao.sdk.common.KakaoSdk import com.orhanobut.logger.AndroidLogAdapter import com.orhanobut.logger.Logger +import com.yandex.mobile.ads.common.MobileAds import kr.co.vividnext.sodalive.BuildConfig import kr.co.vividnext.sodalive.R import kr.co.vividnext.sodalive.chat.talk.room.ChatRoomPreferenceManager @@ -52,6 +53,8 @@ class SodaLiveApp : Application(), DefaultLifecycleObserver { setupAppsFlyer() setupNotifly() + + setupYandexAd() } private fun isDebuggable(): Boolean { @@ -137,6 +140,10 @@ class SodaLiveApp : Application(), DefaultLifecycleObserver { ) } + private fun setupYandexAd() { + MobileAds.enableDebugErrorIndicator(BuildConfig.DEBUG && isDebuggable()) + } + override fun onStart(owner: LifecycleOwner) { super.onStart(owner) isAppInForeground = true diff --git a/docs/20260421_YandexMobileAdsSDK설정.md b/docs/20260421_YandexMobileAdsSDK설정.md new file mode 100644 index 00000000..74226e46 --- /dev/null +++ b/docs/20260421_YandexMobileAdsSDK설정.md @@ -0,0 +1,49 @@ +# 20260421 Yandex Mobile Ads SDK 설정 + +## 작업 체크리스트 +- [x] Yandex Mobile Ads SDK 공식 요구사항과 현재 프로젝트 삽입 지점을 최종 확정한다. + QA: 공식 quick start와 `settings.gradle`, `build.gradle`, `app/build.gradle`, `app/src/main/AndroidManifest.xml`, `app/src/main/java/kr/co/vividnext/sodalive/app/SodaLiveApp.kt` 근거로 저장소별 반영 위치를 설명할 수 있어야 한다. +- [x] `app` 모듈에 Yandex Mobile Ads SDK 의존성을 추가한다. + QA: `app/build.gradle`의 `dependencies`에 SDK가 추가되고, 현재 저장소의 repository 설정과 충돌하지 않아야 한다. +- [x] 앱 초기화와 매니페스트 설정을 현재 앱 구조에 맞게 반영한다. + QA: 공식 quick start 기준 자동 초기화가 기본값이므로 `SodaLiveApp`/매니페스트 변경 없이도 설정이 성립하며, 불필요한 앱 시작 동작 변경을 만들지 않아야 한다. +- [x] App ID가 필요한 경우 사용자가 바로 수정할 수 있는 위치로 노출한다. + QA: 공식 quick start 기준 Yandex 전용 App ID 입력은 필요하지 않음을 명시하고, 추후 광고 포맷 구현 시 ad unit ID를 넣을 위치를 별도 안내할 수 있어야 한다. +- [x] 빌드 및 수동 검증 결과를 문서 하단에 기록한다. + QA: 최소 `./gradlew :app:assembleDebug` 실행 결과와, 가능한 범위의 통합 확인 방법 또는 실제 로그 확인 절차가 누적 기록되어야 한다. + +## 범위 메모 +- 요청 해석은 "현재 Android 프로젝트에 Yandex Mobile Ads SDK 기본 설정을 추가하고, App ID가 필요하면 즉시 수정 가능한 위치를 마련해 안내"로 한정한다. +- 광고 포맷 구현(배너/전면/보상형 등)은 이번 범위에 포함하지 않는다. +- 서명/배포/Firebase/기존 광고 외 로직은 요청 범위 밖이므로 건드리지 않는다. + +## 검증 계획 +- `./gradlew :app:assembleDebug`로 Gradle 설정과 Android 리소스/매니페스트 병합이 정상인지 확인한다. +- 필요 시 `./gradlew :app:lintDebug` 또는 관련 진단으로 신규 오류 여부를 확인한다. +- 공식 문서의 "Yandex Ads" Logcat 확인 절차를 따라 수동 초기화/통합 확인 방법을 정리한다. + +## 검증 기록 +- 2026-04-21 + - 무엇: Yandex Mobile Ads SDK 설정 작업을 시작하기 전에 작업 범위, 반영 지점, 검증 계획을 문서화했다. + - 왜: 저장소 규칙에 따라 `docs` 계획 문서를 먼저 만들고, 그 문서를 기준으로 구현/검증 이력을 누적해야 하기 때문이다. + - 어떻게: + - 생성 파일: `docs/20260421_YandexMobileAdsSDK설정.md` + - 근거 파일: `settings.gradle`, `build.gradle`, `app/build.gradle`, `app/src/main/AndroidManifest.xml`, 공식 문서 `https://ads.yandex.com/helpcenter/ko/dev/android/quick-start` + - 결과: 구현 전 체크리스트와 검증 계획을 먼저 고정했다. +- 2026-04-21 + - 무엇: Yandex Mobile Ads SDK quick-start 범위의 실제 코드 반영 지점을 확정하고 `app` 모듈에 SDK 의존성을 추가했다. + - 왜: 공식 문서 기준으로 현재 프로젝트는 repository 요구사항과 Android 버전 요구사항을 이미 만족하고 있었고, 최소 설정 변경은 `app/build.gradle` 의존성 추가만으로 충분했기 때문이다. + - 어떻게: + - 수정 파일: `app/build.gradle` + - 유지 파일: `settings.gradle`, `app/src/main/AndroidManifest.xml`, `app/src/main/java/kr/co/vividnext/sodalive/app/SodaLiveApp.kt` + - 적용 내용: `implementation 'com.yandex.android:mobileads:7.18.5'` 추가 + - App ID 판단: 공식 quick start에는 Yandex 전용 App ID 설정 단계가 없어 별도 키를 추가하지 않았다. 추후 광고 포맷 구현 시 ad unit ID가 필요하다. +- 2026-04-21 + - 무엇: Yandex Mobile Ads SDK 의존성 추가 후 debug 빌드와 단위 테스트를 실행해 설정이 현재 프로젝트와 충돌하지 않는지 검증했다. + - 왜: dependency-only 변경이라도 실제 Gradle 해석, 의존성 해상도, 매니페스트 병합, 컴파일, 테스트 회귀를 통과해야 설정 완료라고 볼 수 있기 때문이다. + - 어떻게: + - 실행 명령: `./gradlew :app:assembleDebug :app:testDebugUnitTest` + - 결과: `BUILD SUCCESSFUL` + - 비고: Agora/Appsflyer 및 기존 코드 관련 경고는 출력됐지만, 이번 변경으로 인한 신규 실패는 없었다. + - 수동 확인 방법: 앱 실행 후 Logcat에서 `Yandex Ads`로 검색하면 `integrated successfully` 또는 `initialized successfully` 로그로 통합 상태를 확인할 수 있다. + - 진단 도구: `.gradle` 파일은 현재 저장소 LSP 대상이 아니어서 `lsp_diagnostics`는 `No LSP server configured for extension: .gradle`로 확인했다.