9.3 KiB
9.3 KiB
딥링크 실행 시 Splash 우회 및 LiveRoom 이동 확인 다이얼로그 구현
- 요구사항 정리 및 영향 범위 확정 (
DeepLinkActivity,MainActivity,LiveRoomActivity,AndroidManifest.xml, 문자열 리소스) - 딥링크 진입/라우팅 및 기존 다이얼로그 패턴 전수 탐색 (내부 검색 + 백그라운드 에이전트 병렬 탐색)
- 앱 실행 중 딥링크 진입 시
SplashActivity를 거치지 않고MainActivity로 직접 라우팅하도록 구현 - 딥링크 파라미터를
MainActivity.executeDeeplink에서 즉시 처리할 수 있도록 전달/파싱 보강 LiveRoomActivity에서 앱 딥링크 실행 시 "현재 페이지 종료 후 이동" 확인 다이얼로그 추가 (확인 시 이동+현재 화면 종료, 취소 시 유지)- 신규 다이얼로그 문구 다국어 문자열(
values,values-en,values-ja) 추가 - 푸시 메시지 클릭 진입도 딥링크와 동일 라우팅 규칙 적용 (실행 중 Splash 우회)
- 정적 진단/테스트/빌드 실행 후 결과를 검증 기록에 누적
검증 기록
2026-03-06 14:54 (KST)
- 무엇/왜/어떻게: 구현 착수 전 요구사항을 작업 단위로 분해하고, 딥링크 진입 경로와 현재 라우팅 구조를 기준으로 변경 포인트를 계획 문서에 확정했다.
- 전수 탐색:
explore3건 +librarian2건 병렬 실행,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.ktapp/src/main/java/kr/co/vividnext/sodalive/main/MainActivity.ktapp/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomActivity.ktapp/src/main/res/values/strings.xmlapp/src/main/res/values-en/strings.xmlapp/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.ktapp/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.ktapp/src/main/java/kr/co/vividnext/sodalive/main/DeepLinkActivity.ktapp/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차 컴파일 실패(LiveRoomActivitycompanion 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.ktapp/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomActivity.ktapp/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.ktapp/src/main/java/kr/co/vividnext/sodalive/main/DeepLinkActivity.ktapp/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.ktapp/src/main/res/values/strings.xmlapp/src/main/res/values-en/strings.xmlapp/src/main/res/values-ja/strings.xml
- 실행 명령 및 결과:
lsp_diagnostics(LiveRoomActivity.kt,DeepLinkActivity.kt) ->.kt확장자 LSP 서버 미구성으로 실행 불가./gradlew :app:testDebugUnitTest :app:assembleDebug->BUILD SUCCESSFUL
2026-03-06 16:01 (KST)
- 무엇/왜/어떻게: 요청에 따라 문구를 다시 고정 텍스트로 변경했다. 다이얼로그 제목은
딥링크 이동에서알림으로 바꾸고, 설명은다른 페이지로 이동시 현재 라이브에서 나가게 됩니다.로 통일했다. 이 변경으로 더 이상 사용되지 않는 목적지명 매핑 코드(resolveDestinationPageName,buildDeepLinkExtrasFromUri)와 관련 문자열(screen_live_room_deeplink_target_*)을 제거했다. - 수정 파일:
app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomActivity.ktapp/src/main/res/values/strings.xmlapp/src/main/res/values-en/strings.xmlapp/src/main/res/values-ja/strings.xml
- 실행 명령 및 결과:
lsp_diagnostics(LiveRoomActivity.kt) ->.kt확장자 LSP 서버 미구성으로 실행 불가./gradlew :app:testDebugUnitTest :app:assembleDebug->BUILD SUCCESSFUL