프로젝트의 자동 로그인 기능을 어떤 방식으로 구현해야할지 고민하며 여러가지 방법을 시도하던 중 앱이 종료된 후 다시 실행되었을때에도 Auth에 로그인 되어있던 유저의 정보가 남아있는 것을 확인했다.
그래서 Firebase 공식 문서를 뒤져본 결과, 한 번 로그인 한 유저의 정보는 로컬에 캐싱되어 로그아웃을 하기 전까지는 삭제되지 않고 유지된다는 것을 알게되었다.
사용자가 로그인 했을 경우를 감지할 수 있는 데이터가 있으니 이제 이에 맞춰 앱 시작화면만 변경해주면 자동 로그인 기능을 구현할 수 있다.
우선 앱이 시작함과 동시에 AuthRepository
에서 currentUser
의 정보를 불러온 뒤 해당 정보가 없을 경우에는 startDestination
을 로그인 화면으로, 정보가 있을 경우에는 홈화면으로 변경하도록해 자동 로그인을 구현했다.
private fun setStartDestination() {
lifecycleScope.launch {
val currentUser = authRepo.getCurrentUserUid()
if (currentUser.isNotEmpty()) {
navGraph.setStartDestination(R.id.frag_home)
navController.graph = navGraph
return@launch
}
navGraph.setStartDestination(R.id.frag_login)
navController.graph = navGraph
}
}
하지만 회원가입을 해서 로그인을 할 경우에는 따로 시작화면을 변경해 주는 코드가 없었기 때문에
앱을 다시 실행할 경우 로그인 화면으로 접속되는 경우가 발생했다.
그래서 회원가입이 완료되고 프로필 설정이 나오기전에 startDestination
을 변경해주는 방법으로 자동 로그인 기능을 완성했다.
private fun navigateToOnBoarding() {
val navGraph = navController.navInflater.inflate(R.navigation.nav_graph)
exitTransition = TransitionInflater.from(requireContext()).inflateTransition(android.R.transition.fade)
// 온보딩 화면으로 전환
navController.navigate(R.id.action_frag_sign_up_to_frag_on_boarding)
// 시작 화면을 home으로 전환
navGraph.setStartDestination(R.id.frag_home)
navController.graph = navGraph
}
최종 프로젝트가 끝나면....
잠을 잘 수 있어....