Flutter
[Flutter] Android - deeplink가 앱을 재실행시키는 현상
devyong
2025. 4. 16. 20:39
딥링크로 Android앱을 실행시키는데, 앱이 이미 실행되어있으면 해당 Task에서 그대로 처리되기를 원했다.
하지만 새로운 Task로 실행되면서, 재시작되는듯한 처리가 진행되었다.
launchMode 값 변경으로 해결된 솔루션들이 있어서 적용했지만, 효과는 없었다.
AndroidManifest를 분석하면서 해결에 성공해냈다.
해결방법
<meta-data
android:name="flutter_deeplinking_enabled"
android:value="true" />
AndroidManifest에서 해당 부분제거로 정상작동 확인완료.
수정은 잘되었지만 왜 고쳐진것인지 파악을 좀 더 해봤다.
flutter_deeplinking_enabled는 Android 플랫폼이 딥링크 인텐트를 받았을때,
Flutter 엔진이 해당 URI를 initalRoute로 간주해서 앱을 딥링크 경로로 초기화된 상태로 시작시킨다.
flutter_deeplinking_enabled는 라우팅 시스템을 통해 딥링크를 처리할 때, 필요한 설정이다.
Android → Flutter → onGenerateInitialRoutes 등으로 URI 전달
위 방식으로 동작하는데, 나는 getInitialLink()를 통해 처리하기에 제거만해도 정상작동되는 것이다.
정리하자면
항목 / flutter_deeplinking_enabled / getInitialLink()
| 딥링크 처리 방식 | 앱을 초기 라우트로 리런칭함 | 앱 상태 유지, URI만 추출 |
| 앱 재시작 | 될 수 있음 (특히 cold start로) | 안 됨 |
| 상태 유지 | 힘듦 | 쉬움 |
| 적합한 상황 | 라우트 중심 앱, 자동 전환 원할 때 | 커스텀 처리 원할 때 |
- 만약 앱의 상태(예: 로그인, 사용자 컨텍스트)를 유지한 채 딥링크만 처리하고 싶다면 getInitialLink()가 더 안전하고 유연하다.
- 반면에 딥링크를 자동 라우팅하고 싶은 경우엔 flutter_deeplinking_enabled도 좋지만, 앱이 꺼졌다 켜지는 건 사용자 UX에 주의해야 한다.