fix(deeplink): 딥링크 포그라운드 라우팅을 정비한다
This commit is contained in:
87
docs/20260306_딥링크스플래시우회및라이브룸확인다이얼로그.md
Normal file
87
docs/20260306_딥링크스플래시우회및라이브룸확인다이얼로그.md
Normal file
@@ -0,0 +1,87 @@
|
||||
# 딥링크 실행 시 Splash 우회 및 LiveRoom 이동 확인 다이얼로그 구현
|
||||
|
||||
- [x] 요구사항 정리 및 영향 범위 확정 (`DeepLinkActivity`, `MainActivity`, `LiveRoomActivity`, `AndroidManifest.xml`, 문자열 리소스)
|
||||
- [x] 딥링크 진입/라우팅 및 기존 다이얼로그 패턴 전수 탐색 (내부 검색 + 백그라운드 에이전트 병렬 탐색)
|
||||
- [x] 앱 실행 중 딥링크 진입 시 `SplashActivity`를 거치지 않고 `MainActivity`로 직접 라우팅하도록 구현
|
||||
- [x] 딥링크 파라미터를 `MainActivity.executeDeeplink`에서 즉시 처리할 수 있도록 전달/파싱 보강
|
||||
- [x] `LiveRoomActivity`에서 앱 딥링크 실행 시 "현재 페이지 종료 후 이동" 확인 다이얼로그 추가 (확인 시 이동+현재 화면 종료, 취소 시 유지)
|
||||
- [x] 신규 다이얼로그 문구 다국어 문자열(`values`, `values-en`, `values-ja`) 추가
|
||||
- [x] 푸시 메시지 클릭 진입도 딥링크와 동일 라우팅 규칙 적용 (실행 중 Splash 우회)
|
||||
- [x] 정적 진단/테스트/빌드 실행 후 결과를 검증 기록에 누적
|
||||
|
||||
## 검증 기록
|
||||
|
||||
### 2026-03-06 14:54 (KST)
|
||||
- 무엇/왜/어떻게: 구현 착수 전 요구사항을 작업 단위로 분해하고, 딥링크 진입 경로와 현재 라우팅 구조를 기준으로 변경 포인트를 계획 문서에 확정했다.
|
||||
- 전수 탐색: `explore` 3건 + `librarian` 2건 병렬 실행, `grep`/`ast-grep` 수행, `rg`는 로컬 미설치(`command not found`) 확인.
|
||||
- 실행 명령 및 결과:
|
||||
- `rg -n --hidden --glob '!**/build/**' "..." app/src/main` -> `command not found`
|
||||
- 나머지 구현 검증 명령은 구현 완료 후 본 문서에 누적 기록 예정
|
||||
|
||||
### 2026-03-06 15:08 (KST)
|
||||
- 무엇/왜/어떻게: `DeepLinkActivity`에서 앱 foreground 시 `MainActivity`로 직접 전달하도록 분기하고, URL query(`deep_link_value`, `deep_link_sub5`)를 `Constants.EXTRA_DATA`로 매핑해 `MainActivity.executeDeeplink`에서 즉시 처리되게 보강했다. 또한 `LiveRoomActivity` 공지 URL 클릭 시 앱 딥링크인 경우 `LiveDialog` 확인 후 이동/종료하도록 처리했다.
|
||||
- 수정 파일:
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/main/DeepLinkActivity.kt`
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/main/MainActivity.kt`
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomActivity.kt`
|
||||
- `app/src/main/res/values/strings.xml`
|
||||
- `app/src/main/res/values-en/strings.xml`
|
||||
- `app/src/main/res/values-ja/strings.xml`
|
||||
- 실행 명령 및 결과:
|
||||
- `lsp_diagnostics` (`DeepLinkActivity.kt`, `MainActivity.kt`, `LiveRoomActivity.kt`) -> `.kt` 확장자 LSP 서버 미구성으로 실행 불가
|
||||
- `./gradlew :app:testDebugUnitTest :app:assembleDebug :app:ktlintCheck` -> `:app:ktlintMainSourceSetCheck FAILED` (기존 누적 ktlint 위반 다수 + 기존 파일 이슈 포함)
|
||||
- `./gradlew :app:testDebugUnitTest :app:assembleDebug` -> `BUILD SUCCESSFUL`
|
||||
|
||||
### 2026-03-06 15:21 (KST)
|
||||
- 무엇/왜/어떻게: 푸시 클릭 진입도 딥링크와 동일하게 처리하기 위해 `SodaFirebaseMessagingService`의 PendingIntent 타깃을 `DeepLinkActivity`로 통일하고, 푸시 payload를 `Constants.EXTRA_DATA` 번들(`room_id`, `channel_id`, `message_id`, `audition_id`, `content_id`)로 전달했다. 동시에 `DeepLinkActivity`에서 URI query + `EXTRA_DATA` + 레거시 long extras를 모두 병합 파싱하도록 보강해 warm 상태 Splash 우회 규칙을 푸시에도 적용했다.
|
||||
- 수정 파일:
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/fcm/SodaFirebaseMessagingService.kt`
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/main/DeepLinkActivity.kt`
|
||||
- 실행 명령 및 결과:
|
||||
- `lsp_diagnostics` (`SodaFirebaseMessagingService.kt`, `DeepLinkActivity.kt`) -> `.kt` 확장자 LSP 서버 미구성으로 실행 불가
|
||||
- `./gradlew :app:testDebugUnitTest :app:assembleDebug` -> `BUILD SUCCESSFUL`
|
||||
- `./gradlew :app:testDebugUnitTest :app:assembleDebug` (최종 수정 후 재실행) -> `BUILD SUCCESSFUL`
|
||||
|
||||
### 2026-03-06 15:29 (KST)
|
||||
- 무엇/왜/어떻게: LiveRoom 화면 체류 중 외부 딥링크/푸시 탭 시 즉시 이동하지 않도록 `DeepLinkActivity`에서 `LiveRoomActivity.isForeground`를 확인해 확인 요청 브로드캐스트를 보내고 종료하도록 변경했다. `LiveRoomActivity`는 브로드캐스트 수신 시 `LiveDialog` 확인/취소를 표시하며, 확인 시 현재 화면을 종료하고 `MainActivity`로 딥링크 번들(`Constants.EXTRA_DATA`)을 전달해 목적지로 이동하고 취소 시 이동하지 않는다.
|
||||
- 수정 파일:
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/common/Constants.kt`
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/main/DeepLinkActivity.kt`
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomActivity.kt`
|
||||
|
||||
### 2026-03-06 15:34 (KST)
|
||||
- 실행 명령 및 결과:
|
||||
- `lsp_diagnostics` (`Constants.kt`, `DeepLinkActivity.kt`, `LiveRoomActivity.kt`) -> `.kt` 확장자 LSP 서버 미구성으로 실행 불가
|
||||
- `./gradlew :app:testDebugUnitTest :app:assembleDebug` -> 1차 컴파일 실패(`LiveRoomActivity` companion object 중복)
|
||||
- companion 중복 선언 정리 후 `./gradlew :app:testDebugUnitTest :app:assembleDebug` 재실행 -> `BUILD SUCCESSFUL`
|
||||
|
||||
### 2026-03-06 15:43 (KST)
|
||||
- 무엇/왜/어떻게: LiveRoom 체류 상태에서 다이얼로그가 누락되는 문제를 수정하기 위해, 브로드캐스트 방식 대신 `DeepLinkActivity`에서 직접 확인 다이얼로그(`AlertDialog`)를 표시하도록 전환했다. 조건은 `SodaLiveApp.isAppInForeground && LiveRoomActivity.isForeground`이며, 확인 시 `MainActivity`로 `Constants.EXTRA_DATA`를 전달해 이동하고, 취소/백키/바깥영역 dismiss 시 `DeepLinkActivity`만 종료되어 이동하지 않는다. 또한 `LiveRoomActivity.isForeground` 판단을 `onStart/onStop` 기준으로 조정해 전환 순간에도 상태가 유지되도록 보강했다.
|
||||
- 수정 파일:
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/main/DeepLinkActivity.kt`
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomActivity.kt`
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/common/Constants.kt`
|
||||
- 실행 명령 및 결과:
|
||||
- `lsp_diagnostics` (`DeepLinkActivity.kt`, `LiveRoomActivity.kt`, `Constants.kt`) -> `.kt` 확장자 LSP 서버 미구성으로 실행 불가
|
||||
- `./gradlew :app:testDebugUnitTest :app:assembleDebug` -> `BUILD SUCCESSFUL`
|
||||
|
||||
### 2026-03-06 15:50 (KST)
|
||||
- 무엇/왜/어떻게: 사용자 피드백(검은 배경 노출) 반영으로 `AlertDialog` 경유를 제거하고, LiveRoom 화면에서 직접 `SodaDialog`가 뜨도록 플로우를 조정했다. `DeepLinkActivity`는 LiveRoom 활성 시 `Constants.ACTION_LIVE_ROOM_DEEPLINK_CONFIRM` 브로드캐스트만 전송하고 종료하며, `LiveRoomActivity`는 이를 수신해 `SodaDialog`를 표시한다. 확인 시 `MainActivity`로 이동+현재 화면 종료, 취소 시 이동하지 않는다.
|
||||
- 수정 파일:
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/common/Constants.kt`
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/main/DeepLinkActivity.kt`
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomActivity.kt`
|
||||
- 실행 명령 및 결과:
|
||||
- `lsp_diagnostics` (`DeepLinkActivity.kt`, `LiveRoomActivity.kt`, `Constants.kt`) -> `.kt` 확장자 LSP 서버 미구성으로 실행 불가
|
||||
- `./gradlew :app:testDebugUnitTest :app:assembleDebug` -> `BUILD SUCCESSFUL`
|
||||
|
||||
### 2026-03-06 15:57 (KST)
|
||||
- 무엇/왜/어떻게: LiveRoom 확인 다이얼로그 문구를 정적으로 `딥링크 목적지`라고 표시하던 방식에서, 실제 이동 대상 페이지명을 삽입하는 방식으로 변경했다. `LiveRoomActivity.resolveDestinationPageName`에서 `room_id/channel_id/content_id/message_id` 및 `deep_link_value`를 기반으로 목적지명을 결정하고, `SodaDialog` 설명에 `screen_live_room_deeplink_move_message(%1$s)` 포맷으로 주입한다. 예: 콘텐츠 등록 푸시 탭 시 `콘텐츠 상세 페이지`로 이동 문구 표시.
|
||||
- 수정 파일:
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomActivity.kt`
|
||||
- `app/src/main/res/values/strings.xml`
|
||||
- `app/src/main/res/values-en/strings.xml`
|
||||
- `app/src/main/res/values-ja/strings.xml`
|
||||
- 실행 명령 및 결과:
|
||||
- `lsp_diagnostics` (`LiveRoomActivity.kt`, `DeepLinkActivity.kt`) -> `.kt` 확장자 LSP 서버 미구성으로 실행 불가
|
||||
- `./gradlew :app:testDebugUnitTest :app:assembleDebug` -> `BUILD SUCCESSFUL`
|
||||
Reference in New Issue
Block a user