Files
sodalive-android/docs/20260306_딥링크스플래시우회및라이브룸확인다이얼로그.md

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)

  • 무엇/왜/어떻게: 구현 착수 전 요구사항을 작업 단위로 분해하고, 딥링크 진입 경로와 현재 라우팅 구조를 기준으로 변경 포인트를 계획 문서에 확정했다.
  • 전수 탐색: 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이며, 확인 시 MainActivityConstants.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_iddeep_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

2026-03-06 16:01 (KST)

  • 무엇/왜/어떻게: 요청에 따라 문구를 다시 고정 텍스트로 변경했다. 다이얼로그 제목은 딥링크 이동에서 알림으로 바꾸고, 설명은 다른 페이지로 이동시 현재 라이브에서 나가게 됩니다.로 통일했다. 이 변경으로 더 이상 사용되지 않는 목적지명 매핑 코드(resolveDestinationPageName, buildDeepLinkExtrasFromUri)와 관련 문자열(screen_live_room_deeplink_target_*)을 제거했다.
  • 수정 파일:
    • 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) -> .kt 확장자 LSP 서버 미구성으로 실행 불가
    • ./gradlew :app:testDebugUnitTest :app:assembleDebug -> BUILD SUCCESSFUL