Conversation
- InviteLaunchDispatcher: custom scheme(twix://) 및 App Links(https) 처리 - InviteLaunchEventSource: INVITE_WEB_HOST, PLAY_STORE_URL 상수 및 buildInviteDeepLink 추가 - core:share 모듈을 settings.gradle.kts, app/build.gradle.kts에 등록 - Koin shareModule 등록 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- ShareInviteLink Intent/SideEffect 추가 - OnBoardingViewModel: ShareInviteLink 인텐트 처리 - CoupleConnectRoute: 공유하기 버튼 클릭 시 딥링크 + 스토어 URL 포함한 텍스트 공유 - strings.xml: 공유 메시지 문자열 상수화 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- NavRoutes.InviteRoute: code 쿼리 파라미터 추가 및 createRoute() 함수 구현
- OnboardingNavGraph: InviteRoute navArgument 등록, initialInviteCode 전달
- InviteCodeRoute: initialInviteCode로 코드 자동 입력 처리
- CoupleConnectionRoute → InviteRoute 이동 시 createRoute() 사용으로 {code} 리터럴 버그 수정
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- SplashViewModel: 토큰 갱신 성공 후 온보딩 상태 체크 추가 - SplashSideEffect: NavigateToOnBoarding(status) 추가 - SplashRoute: navigateToOnBoarding 콜백 추가 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- MainActivity: InviteLaunchEventSource inject 및 onCreate/onNewIntent에서 dispatchFromIntent 호출 - AppNavHost: inviteLaunchEventSource koinInject 기본값 적용 - SplashNavGraph: 온보딩 미완료 + pendingInviteCode 존재 시 InviteRoute로 직접 이동 - LoginNavGraph: 로그인 완료 후 COUPLE_CONNECTION 상태 + pendingInviteCode 존재 시 InviteRoute로 이동 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- AndroidManifest: singleTask launchMode, custom scheme(twix://) 및 App Links(https://keepiluv.web.app) intent-filter 추가 - Firebase Hosting: 앱 미설치 시 Play Store 리다이렉트 페이지 배포 - .gitignore: assetlinks.json 민감 정보 제외 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (2)
feature/splash/src/main/java/com/twix/splash/navigation/SplashNavGraph.kt (1)
43-64:pendingInviteCode.value직접 접근 방식에 대한 검토PR 설명에서 요청하신 대로 StateFlow의
.value직접 접근 방식을 검토했습니다.현재 구현 방식:
- Line 47에서
inviteLaunchEventSource.pendingInviteCode.value를 동기적으로 읽고 있습니다.- 이 접근법은 네비게이션 콜백이 호출되는 시점의 스냅샷 값만 읽습니다.
이 방식은 다음과 같은 상황에서 유효합니다:
- Splash → OnBoarding 전환은 일회성 이벤트이므로 StateFlow를 계속 관찰할 필요가 없음
- 딥링크 코드는 앱 시작 시 이미 설정되어 있어야 함
그러나
OnboardingNavGraph.kt에서는collectAsStateWithLifecycle()+LaunchedEffect패턴을 사용하고 있어 두 파일 간 일관성이 다릅니다.제안: 현재 방식이 의도적이라면 주석으로 이유를 명시하면 향후 유지보수에 도움이 될 것 같습니다. 예를 들어:
// 스플래시 전환은 일회성이므로 StateFlow 스냅샷 값을 직접 읽음 val pendingCode = inviteLaunchEventSource.pendingInviteCode.value🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@feature/splash/src/main/java/com/twix/splash/navigation/SplashNavGraph.kt` around lines 43 - 64, The code reads inviteLaunchEventSource.pendingInviteCode.value directly inside the navigateToOnBoarding lambda in SplashNavGraph (synchronous snapshot access) which differs from other files that use collectAsStateWithLifecycle(); if this direct .value access is intentional because the splash-to-onboarding transition is a one-off and deep link is pre-populated, add a concise comment next to the read (referencing inviteLaunchEventSource.pendingInviteCode.value and the navigateToOnBoarding lambda in SplashNavGraph) explaining that the synchronous snapshot is deliberate and why, so future maintainers understand the reasoning.feature/onboarding/src/main/java/com/twix/onboarding/navigation/OnboardingNavGraph.kt (1)
104-106: DdayRoute의navigateToBack동작 확인 필요
navigateToBack에서popBackStack()대신navController.navigate(NavRoutes.ProfileRoute.route)를 사용하고 있습니다.이 방식은 백스택에 ProfileRoute를 새로 추가하므로, 사용자가 뒤로가기를 여러 번 누르면 중복된 화면이 나타날 수 있습니다. 의도적인 구현인지 확인이 필요합니다.
만약 단순히 이전 화면으로 돌아가는 것이 목적이라면:
♻️ popBackStack 사용 제안
navigateToBack = { - navController.navigate(NavRoutes.ProfileRoute.route) + navController.popBackStack() },🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@feature/onboarding/src/main/java/com/twix/onboarding/navigation/OnboardingNavGraph.kt` around lines 104 - 106, 현재 DdayRoute의 콜백 navigateToBack이 navController.navigate(NavRoutes.ProfileRoute.route)를 호출해 ProfileRoute를 새로 푸시하고 있어 백스택 중복을 일으킬 수 있습니다; 의도한 동작이 아니라면 navigateToBack에서 navController.popBackStack()을 호출하도록 변경해 이전 화면으로 돌아가게 하거나 특정 목적지로 되돌리고 싶다면 navController.popBackStack(NavRoutes.ProfileRoute.route, false)처럼 popBackStack을 사용해 중복된 인스턴스 생성을 방지하세요; 관련 식별자: navigateToBack, navController.navigate, NavRoutes.ProfileRoute.route, navController.popBackStack().
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@feature/splash/src/main/java/com/twix/splash/navigation/SplashNavGraph.kt`:
- Line 57: The SplashRoute branch for OnboardingStatus.COMPLETED currently does
a bare return (return@SplashRoute) which can leave the user stuck on the splash
screen; update the handler to call navigateToMain() instead of returning so the
app navigates to the main screen (this aligns with
SplashViewModel.checkOnboardingStatus() emitting NavigateToMain), and apply the
same change pattern to the analogous branch in LoginNavGraph or, if you truly
consider COMPLETED unreachable, replace the return with an explicit error()
throw and a clear comment explaining why.
- Around line 60-64: The current flow in SplashNavGraph.kt calls
navController.navigate(NavRoutes.OnboardingGraph.route) then immediately
navController.navigate(destination), which leaves an unwanted intermediate
CoupleConnectionRoute on the back stack; change the logic to perform a single
direct navigation to the target destination (use
navController.navigate(destination) with the
popUpTo(NavRoutes.SplashGraph.route) { inclusive = true } and launchSingleTop =
true options) instead of first navigating to NavRoutes.OnboardingGraph.route, so
the back stack goes straight from SplashGraph to the requested onboarding child
(destination) without the extra startDestination entry.
---
Nitpick comments:
In
`@feature/onboarding/src/main/java/com/twix/onboarding/navigation/OnboardingNavGraph.kt`:
- Around line 104-106: 현재 DdayRoute의 콜백 navigateToBack이
navController.navigate(NavRoutes.ProfileRoute.route)를 호출해 ProfileRoute를 새로 푸시하고
있어 백스택 중복을 일으킬 수 있습니다; 의도한 동작이 아니라면 navigateToBack에서
navController.popBackStack()을 호출하도록 변경해 이전 화면으로 돌아가게 하거나 특정 목적지로 되돌리고 싶다면
navController.popBackStack(NavRoutes.ProfileRoute.route, false)처럼 popBackStack을
사용해 중복된 인스턴스 생성을 방지하세요; 관련 식별자: navigateToBack, navController.navigate,
NavRoutes.ProfileRoute.route, navController.popBackStack().
In `@feature/splash/src/main/java/com/twix/splash/navigation/SplashNavGraph.kt`:
- Around line 43-64: The code reads
inviteLaunchEventSource.pendingInviteCode.value directly inside the
navigateToOnBoarding lambda in SplashNavGraph (synchronous snapshot access)
which differs from other files that use collectAsStateWithLifecycle(); if this
direct .value access is intentional because the splash-to-onboarding transition
is a one-off and deep link is pre-populated, add a concise comment next to the
read (referencing inviteLaunchEventSource.pendingInviteCode.value and the
navigateToOnBoarding lambda in SplashNavGraph) explaining that the synchronous
snapshot is deliberate and why, so future maintainers understand the reasoning.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yml
Review profile: CHILL
Plan: Pro
Run ID: 2c3efdbc-485c-4403-93a6-55fc53c12b11
📒 Files selected for processing (8)
core/design-system/src/main/res/values/strings.xmlcore/navigation-contract/src/main/java/com/twix/navigation_contract/InviteLaunchEventSource.ktcore/navigation/src/main/java/com/twix/navigation/AppNavHost.ktcore/share/src/main/java/com/twix/share/InviteLaunchDispatcher.ktfeature/onboarding/src/main/java/com/twix/onboarding/couple/CoupleConnectRoute.ktfeature/onboarding/src/main/java/com/twix/onboarding/navigation/OnboardingNavGraph.ktfeature/splash/src/main/java/com/twix/splash/contract/SplashSideEffect.ktfeature/splash/src/main/java/com/twix/splash/navigation/SplashNavGraph.kt
✅ Files skipped from review due to trivial changes (2)
- core/design-system/src/main/res/values/strings.xml
- core/navigation-contract/src/main/java/com/twix/navigation_contract/InviteLaunchEventSource.kt
🚧 Files skipped from review as they are similar to previous changes (3)
- feature/splash/src/main/java/com/twix/splash/contract/SplashSideEffect.kt
- core/navigation/src/main/java/com/twix/navigation/AppNavHost.kt
- core/share/src/main/java/com/twix/share/InviteLaunchDispatcher.kt
feature/splash/src/main/java/com/twix/splash/navigation/SplashNavGraph.kt
Show resolved
Hide resolved
feature/splash/src/main/java/com/twix/splash/navigation/SplashNavGraph.kt
Outdated
Show resolved
Hide resolved
- `onboarding_invite_share_message` 문자열의 가독성 향상을 위해 타이틀 및 연결 코드 부분에 줄바꿈(`\n`) 반영
불필요한 중간 화면이 백스택에 쌓이는 문제 수정 OnboardingGraph로 먼저 이동 후 destination으로 이동하는 2단계 패턴을 destination으로 직접 이동하는 단일 호출로 변경 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
서버 응답 G4000(400) 코드에 대한 처리 추가 - strings.xml: toast_self_invite_code 문자열 추가 - OnBoardingViewModel: SELF_INVITE_CODE_ERROR_CODE 상수 추가 및 handleCoupleConnectException에 G4000 케이스 처리 - 기존 else 미처리 케이스도 일반 에러 토스트로 정리 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
Actionable comments posted: 2
♻️ Duplicate comments (1)
feature/onboarding/src/main/java/com/twix/onboarding/OnBoardingViewModel.kt (1)
52-53:⚠️ Potential issue | 🟠 Major초대 코드 로딩 전 공유 시 빈 코드가 전송될 수 있습니다.
초기 로딩이 끝나기 전에 공유 액션이 들어오면 빈 문자열이 그대로 공유되어 링크 품질이 깨집니다. 공유 전에
isBlank()를 검사하고, 비어 있으면 토스트 후 재조회하도록 가드해 주세요.가드 로직 제안
- OnBoardingIntent.ShareInviteLink -> - emitSideEffect(OnBoardingSideEffect.InviteCode.ShareInviteLink(currentState.inviteCode.myInviteCode)) + OnBoardingIntent.ShareInviteLink -> { + val inviteCode = currentState.inviteCode.myInviteCode + if (inviteCode.isBlank()) { + showToast(R.string.onboarding_couple_fetch_my_invite_code_fail, ToastType.ERROR) + fetchMyInviteCode() + return + } + emitSideEffect(OnBoardingSideEffect.InviteCode.ShareInviteLink(inviteCode)) + }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@feature/onboarding/src/main/java/com/twix/onboarding/OnBoardingViewModel.kt` around lines 52 - 53, 현재 OnBoardingViewModel에서 OnBoardingIntent.ShareInviteLink 처리 시 currentState.inviteCode.myInviteCode를 바로 공유해 빈 문자열이 전송될 수 있으니, ShareInviteLink 분기에서 inviteCode = currentState.inviteCode.myInviteCode를 받아 isBlank()로 검사하고 비어있으면 emitSideEffect로 토스트(예: OnBoardingSideEffect.ShowToast("초대코드 로딩중입니다"))를 발행한 뒤 재조회용 인텐트(예: dispatch(OnBoardingIntent.LoadInviteCode) 또는 loadInviteCode() 호출)를 트리거해 중복 전송을 막고, 비어있지 않을 때만 emitSideEffect(OnBoardingSideEffect.InviteCode.ShareInviteLink(inviteCode))를 호출하도록 변경하세요.
🧹 Nitpick comments (1)
feature/onboarding/src/main/java/com/twix/onboarding/OnBoardingViewModel.kt (1)
106-117: 404 케이스의error.message문자열 분기는 취약합니다.메시지 문구가 서버/번역 정책으로 바뀌면 분기가 바로 깨질 수 있습니다. 404도 백엔드와 에러
code계약이 가능하다면 code 기반 분기로 전환하는 쪽이 더 안전한데, 이 방향으로 맞춰보는 건 어떨까요?🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@feature/onboarding/src/main/java/com/twix/onboarding/OnBoardingViewModel.kt` around lines 106 - 117, The 404 branch in the when block currently inspects error.message (lines handling AppError.Http && error.status == 404) which is fragile; change it to branch on a stable error code property (e.g., use AppError.Http.code or add one if missing) instead of INVALID_INVITE_CODE_MESSAGE / ALREADY_USED_INVITE_CODE_MESSAGE string constants, updating the conditional inside the AppError.Http && error.status == 404 case to check error.code values and then call showToast(...) or emitSideEffect(OnBoardingSideEffect.InviteCode.NavigateToNext) accordingly; keep a safe fallback to the existing message-based checks only when error.code is null to preserve behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@core/design-system/src/main/res/values/strings.xml`:
- Line 191: Fix the typo in the onboarding invite share message string resource:
update the value of the string named "onboarding_invite_share_message" to
replace "메이트과" with the correct particle "메이트와" so the displayed share text
reads correctly for users.
In `@feature/splash/src/main/java/com/twix/splash/navigation/SplashNavGraph.kt`:
- Around line 47-53: The current branch choosing logic uses only pendingCode !=
null which allows empty strings to be treated as valid; update the check around
inviteLaunchEventSource.pendingInviteCode.value so you treat blank/empty the
same as null (use isNullOrBlank()), call
inviteLaunchEventSource.consumePendingInviteCode() when a pending value exists,
and only call NavRoutes.InviteRoute.createRoute(pendingCode) when
pendingCode.isNullOrBlank() is false; otherwise fall back to
NavRoutes.CoupleConnectionRoute.route.
---
Duplicate comments:
In `@feature/onboarding/src/main/java/com/twix/onboarding/OnBoardingViewModel.kt`:
- Around line 52-53: 현재 OnBoardingViewModel에서 OnBoardingIntent.ShareInviteLink
처리 시 currentState.inviteCode.myInviteCode를 바로 공유해 빈 문자열이 전송될 수 있으니,
ShareInviteLink 분기에서 inviteCode = currentState.inviteCode.myInviteCode를 받아
isBlank()로 검사하고 비어있으면 emitSideEffect로 토스트(예:
OnBoardingSideEffect.ShowToast("초대코드 로딩중입니다"))를 발행한 뒤 재조회용 인텐트(예:
dispatch(OnBoardingIntent.LoadInviteCode) 또는 loadInviteCode() 호출)를 트리거해 중복 전송을
막고, 비어있지 않을 때만
emitSideEffect(OnBoardingSideEffect.InviteCode.ShareInviteLink(inviteCode))를
호출하도록 변경하세요.
---
Nitpick comments:
In `@feature/onboarding/src/main/java/com/twix/onboarding/OnBoardingViewModel.kt`:
- Around line 106-117: The 404 branch in the when block currently inspects
error.message (lines handling AppError.Http && error.status == 404) which is
fragile; change it to branch on a stable error code property (e.g., use
AppError.Http.code or add one if missing) instead of INVALID_INVITE_CODE_MESSAGE
/ ALREADY_USED_INVITE_CODE_MESSAGE string constants, updating the conditional
inside the AppError.Http && error.status == 404 case to check error.code values
and then call showToast(...) or
emitSideEffect(OnBoardingSideEffect.InviteCode.NavigateToNext) accordingly; keep
a safe fallback to the existing message-based checks only when error.code is
null to preserve behavior.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yml
Review profile: CHILL
Plan: Pro
Run ID: cf08e12c-44fe-4a7a-812d-a881f18bb6db
📒 Files selected for processing (3)
core/design-system/src/main/res/values/strings.xmlfeature/onboarding/src/main/java/com/twix/onboarding/OnBoardingViewModel.ktfeature/splash/src/main/java/com/twix/splash/navigation/SplashNavGraph.kt
feature/splash/src/main/java/com/twix/splash/navigation/SplashNavGraph.kt
Show resolved
Hide resolved
InviteRoute에서도 pendingInviteCode를 collectAsStateWithLifecycle로 구독하여 딥링크 수신 시 WriteInviteCode intent로 코드 자동 입력 처리 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthrough이 변경은 초대 코드를 통한 앱 공유 및 딥링크 처리 기능을 구현합니다. Firebase 호스팅 설정을 추가하고, 새로운 Estimated code review effort🎯 4 (Complex) | ⏱️ ~55분 상세 검토 의견✅ 우수한 점1. 명확한 아키텍처 계층화
2. 일관된 패턴 적용
3. 안전한 상태 관리
|
| Check name | Status | Explanation | Resolution |
|---|---|---|---|
| Docstring Coverage | Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. | Write docstrings for the functions missing them to satisfy the coverage threshold. |
✅ Passed checks (4 passed)
| Check name | Status | Explanation |
|---|---|---|
| Title check | ✅ Passed | PR 제목은 초대 코드 공유 및 딥링크 진입 처리라는 주요 변경사항을 명확하게 요약하고 있으며, 변경 내용과 직접 관련성이 높습니다. |
| Linked Issues check | ✅ Passed | PR이 #130 이슈의 모든 요구사항을 충족합니다: (1) 앱 설치 시 초대코드 입력 화면으로 이동 [구현], (2) 앱 미설치 시 플레이스토어로 리다이렉트 [Firebase Hosting 배포]. |
| Out of Scope Changes check | ✅ Passed | 모든 변경사항이 초대 코드 공유 및 딥링크 진입 처리라는 명확한 범위 내에 있으며, 불필요한 추가 기능이나 범위 외 수정은 없습니다. |
| Description check | ✅ Passed | PR 설명이 이슈 #130과 관련이 있으며, 구현된 기능(초대 코드 공유, 딥링크 처리, Firebase Hosting 배포)을 명확히 설명하고 있습니다. |
✏️ Tip: You can configure your own custom pre-merge checks in the settings.
✨ Finishing Touches
📝 Generate docstrings
- Create stacked PR
- Commit on current branch
🧪 Generate unit tests (beta)
- Create PR with unit tests
- Commit unit tests in branch
feat/#130-invitation
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.
Comment @coderabbitai help to get the list of available commands and usage tips.
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
feature/onboarding/src/main/java/com/twix/onboarding/navigation/OnboardingNavGraph.kt (1)
69-86: NavGraph에서 코드 주입 경로가 이중화되어 상태 흐름이 복잡해집니다왜 문제인지: 현재는
initialInviteCode전달(Line 85)과vm.dispatch(OnBoardingIntent.WriteInviteCode(...))(Line 76)를 모두 사용합니다. 같은 상태를 두 경로에서 세팅하면 추후 유지보수 시 동기화 누락이 생기기 쉽습니다.
어떻게 개선할지: 코드 주입 경로를 하나로 통일하는 게 좋습니다(예:InviteCodeRoute/ViewModel에서 단일 진입점으로 처리). 이 방향으로 정리하면 어떨까요?As per coding guidelines
feature/**: "단방향 데이터 플로우(Intent → ViewModel → State → View)가 유지되는가?"🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@feature/onboarding/src/main/java/com/twix/onboarding/navigation/OnboardingNavGraph.kt` around lines 69 - 86, The nav graph is setting the invite code in two places which duplicates state flow; choose one entrypoint—either have InviteCodeRoute/its ViewModel handle the code (keep initialInviteCode on InviteCodeRoute and remove the LaunchedEffect + inviteLaunchEventSource.pendingInviteCode collection and vm.dispatch(OnBoardingIntent.WriteInviteCode(...))), or keep the LaunchedEffect dispatch path and remove passing initialInviteCode into InviteCodeRoute; update code so only one of InviteCodeRoute.initialInviteCode or vm.dispatch(OnBoardingIntent.WriteInviteCode) (and inviteLaunchEventSource.pendingInviteCode usage) is used to seed the ViewModel state (referencing InviteCodeRoute, initialInviteCode, inviteLaunchEventSource.pendingInviteCode.collectAsStateWithLifecycle, and OnBoardingIntent.WriteInviteCode).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In
`@feature/onboarding/src/main/java/com/twix/onboarding/navigation/OnboardingNavGraph.kt`:
- Around line 43-47: The code consumes the pending invite code before navigation
and calls InviteRoute.createRoute(code) without percent-encoding, risking lost
codes on navigation failure and broken routes for special characters; change the
flow to first build the encoded route using android.net.Uri.encode(code) (or
have InviteRoute.createRoute perform encoding), call navController.navigate(...)
with that encoded route, and only after successful navigation call
inviteLaunchEventSource.consumePendingInviteCode(); update usages in
LaunchedEffect where pendingInviteCode is read and in InviteRoute.createRoute to
apply Uri.encode to the code.
---
Nitpick comments:
In
`@feature/onboarding/src/main/java/com/twix/onboarding/navigation/OnboardingNavGraph.kt`:
- Around line 69-86: The nav graph is setting the invite code in two places
which duplicates state flow; choose one entrypoint—either have
InviteCodeRoute/its ViewModel handle the code (keep initialInviteCode on
InviteCodeRoute and remove the LaunchedEffect +
inviteLaunchEventSource.pendingInviteCode collection and
vm.dispatch(OnBoardingIntent.WriteInviteCode(...))), or keep the LaunchedEffect
dispatch path and remove passing initialInviteCode into InviteCodeRoute; update
code so only one of InviteCodeRoute.initialInviteCode or
vm.dispatch(OnBoardingIntent.WriteInviteCode) (and
inviteLaunchEventSource.pendingInviteCode usage) is used to seed the ViewModel
state (referencing InviteCodeRoute, initialInviteCode,
inviteLaunchEventSource.pendingInviteCode.collectAsStateWithLifecycle, and
OnBoardingIntent.WriteInviteCode).
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yml
Review profile: CHILL
Plan: Pro
Run ID: ee6c43e8-5add-4438-badc-6ee6b01ab371
📒 Files selected for processing (2)
core/design-system/src/main/res/values/strings.xmlfeature/onboarding/src/main/java/com/twix/onboarding/navigation/OnboardingNavGraph.kt
🚧 Files skipped from review as they are similar to previous changes (1)
- core/design-system/src/main/res/values/strings.xml
이슈 번호
closes #130
작업내용
요구사항
1. 멘트
2. 액션
배포는 우리 파이어베이스 계정에 Firebase Hosting 사용해서 했어 !!

초대 링크 공유하기
CoupleConnectScreen의 공유하기 버튼 클릭 시 Android 기본 공유 시트 호출딥링크 처리 (App Links)
keepiluv.web.app) 배포: 앱 미설치 시 Play Store 리다이렉트AndroidManifest:twix://custom scheme +https://keepiluv.web.appApp Links intent-filter 등록InviteLaunchDispatcher: custom scheme / App Links 두 가지 scheme 모두 처리결과물
리뷰어에게 추가로 요구하는 사항 (선택)
이번 작업하면서 필요해서 내가 구현해놨어 ! 현수가 구현한거랑 다르거나 추가로 설정해야하는 작업 있으면 말해줘 :)
릴리즈 빌드에서 잘 돌아가는지 테스트 부탁해 !!