45 lines
4.9 KiB
Markdown
45 lines
4.9 KiB
Markdown
# 2026-03-13 푸시 메시지 터치 딥링크 우선 처리
|
|
|
|
## 체크리스트
|
|
- [x] 기존 푸시 터치/딥링크 라우팅 경로 분석
|
|
- [x] 푸시 터치 시 `deep_link` 비어있지 않으면 딥링크 우선 실행, 비어 있으면 기존 로직 유지
|
|
- [x] 앱 실행 중 딥링크 실행 시 메인 페이지 호출 없이 현재 페이지에서 목적지로 이동하도록 수정
|
|
- [x] 앱 미실행 후 `MainActivity` 진입 로직에도 동일한 `deep_link` 우선 분기 반영
|
|
- [x] `deep_link` 존재 시 번들에 `deep_link`만 넣고, 미존재 시 fallback(`room_id` 등)만 넣도록 상호배타 분기 적용
|
|
- [x] `MainActivity` 딥링크/푸시 처리에서도 `deep_link` 존재 시 fallback과 병합하지 않도록 상호배타 분기 적용
|
|
- [x] 정적 진단/빌드/테스트 및 결과 기록
|
|
|
|
## 검증 기록
|
|
- 2026-03-13
|
|
- 무엇/왜/어떻게: 작업 착수 전 요구사항에 맞는 푸시 터치/딥링크 처리 지점을 찾기 위해 코드베이스 탐색을 시작했다.
|
|
- 실행 명령: `grep(pattern="deep_link|deeplink|deepLink", path=".", include="*.{kt,kts,xml,java}")`, `grep(pattern="FirebaseMessagingService|notification|push|PendingIntent|MainActivity", path=".", include="*.{kt,java,xml}")`
|
|
- 결과: `SodaFirebaseMessagingService`, `MainActivity`, `DeepLinkActivity`를 핵심 수정 후보로 확인했다.
|
|
- 2026-03-13
|
|
- 무엇/왜/어떻게: 푸시 탭 시 raw `deep_link` 유무로 분기하기 위해 FCM payload 전달/포그라운드 라우팅/MainActivity 파싱 로직을 함께 수정했다.
|
|
- 실행 명령: `git diff -- app/src/main/java/kr/co/vividnext/sodalive/fcm/SodaFirebaseMessagingService.kt app/src/main/java/kr/co/vividnext/sodalive/main/DeepLinkActivity.kt app/src/main/java/kr/co/vividnext/sodalive/main/MainActivity.kt`
|
|
- 결과: `deep_link` 전달(`SodaFirebaseMessagingService`) + 포그라운드 직접 이동 분기(`DeepLinkActivity`) + cold start 시 `MainActivity`의 `deep_link` 우선 파싱 분기가 반영됨을 확인했다.
|
|
- 2026-03-13
|
|
- 무엇/왜/어떻게: 수정 파일 정적 진단 가능 여부를 확인했다.
|
|
- 실행 명령: `lsp_diagnostics(filePath="app/src/main/java/kr/co/vividnext/sodalive/fcm/SodaFirebaseMessagingService.kt")`, `lsp_diagnostics(filePath="app/src/main/java/kr/co/vividnext/sodalive/main/DeepLinkActivity.kt")`, `lsp_diagnostics(filePath="app/src/main/java/kr/co/vividnext/sodalive/main/MainActivity.kt")`
|
|
- 결과: 현재 실행 환경에서 Kotlin(`.kt`) LSP 서버가 미구성되어 진단을 수행할 수 없음을 확인했다.
|
|
- 2026-03-13
|
|
- 무엇/왜/어떻게: 변경으로 인한 컴파일/단위테스트 회귀 여부를 확인하기 위해 Debug 빌드와 단위 테스트를 실행했다.
|
|
- 실행 명령: `./gradlew :app:testDebugUnitTest :app:assembleDebug`
|
|
- 결과: `BUILD SUCCESSFUL`.
|
|
- 2026-03-13
|
|
- 무엇/왜/어떻게: `deep_link`와 fallback 파라미터가 섞이지 않도록 FCM 번들 생성을 상호배타 분기로 변경했다.
|
|
- 실행 명령: `grep(pattern="val deepLinkExtras = if \(!deepLinkUrl.isNullOrBlank\(\)\)|putString\(\"deep_link\"|messageData\[\"room_id\"\]", path="app/src/main/java/kr/co/vividnext/sodalive/fcm/SodaFirebaseMessagingService.kt", output_mode="content")`
|
|
- 결과: `deep_link` 존재 시 `putString("deep_link", deepLinkUrl)`만 수행하고, fallback 필드(`room_id` 등)는 else 블록에서만 채워지도록 분리가 확인되었다.
|
|
- 2026-03-13
|
|
- 무엇/왜/어떻게: 상호배타 분기 변경 이후 컴파일/테스트 회귀 여부를 재검증했다.
|
|
- 실행 명령: `lsp_diagnostics(filePath="app/src/main/java/kr/co/vividnext/sodalive/fcm/SodaFirebaseMessagingService.kt")`, `./gradlew :app:testDebugUnitTest :app:assembleDebug`
|
|
- 결과: Kotlin LSP 서버 미구성으로 `.kt` 진단은 불가, Gradle 검증은 `BUILD SUCCESSFUL`.
|
|
- 2026-03-13
|
|
- 무엇/왜/어떻게: cold start 구간에서도 섞임이 없도록 `MainActivity.executeBundleDeeplink`의 `deep_link` 처리에서 기존 fallback 번들과 병합 로직을 제거했다.
|
|
- 실행 명령: `grep(pattern="mergedBundle|putAll\\(deepLinkBundle\\)|return executeBundleRoute\\(deepLinkBundle\\)|return executeBundleRoute\\(bundle\\)", path="app/src/main/java/kr/co/vividnext/sodalive/main/MainActivity.kt", output_mode="content")`
|
|
- 결과: `putAll(deepLinkBundle)`/병합 흔적 없이 `deep_link` 경로(`return executeBundleRoute(deepLinkBundle)`)와 fallback 경로(`return executeBundleRoute(bundle)`)가 상호배타로 분리됨을 확인했다.
|
|
- 2026-03-13
|
|
- 무엇/왜/어떻게: `MainActivity` 분기 수정 후 컴파일/단위 테스트 회귀를 재확인했다.
|
|
- 실행 명령: `lsp_diagnostics(filePath="app/src/main/java/kr/co/vividnext/sodalive/main/MainActivity.kt")`, `./gradlew :app:testDebugUnitTest :app:assembleDebug`
|
|
- 결과: Kotlin LSP 서버 미구성으로 `.kt` 진단은 불가, Gradle 검증은 `BUILD SUCCESSFUL`.
|