problem
1. 로그인하고 닉네임 입력 후 접속하고난 뒤에 로그아웃을하거나 앱삭재후 재실행했을때 재 로그인 해야되는 문제
2. 신규or 회원탈퇴 후 구글 로그인은 했는데 닉네임을 입력안하고 앱 삭제 후 재 실행 했을 경우 문제
Progress
1. "Google계정으로 로그인"을 하면 Firebase의 Auth에 유저정보가 저장됩니다.
2. 닉네임을 입력하고 중복체크 후 확인을 눌러야 Firebase의 RDB, SharedPreferences에 유저 정보가 저장됩니다.
3. 신규or 회원탈퇴 후 구글 로그인을 하고 닉네임을 입력하지않고 앱을 재실행했을때(Auth - O, RDB - X, SPF - X)
4. 로그인 된 상태에서 앱을 재 실행했을때 (Auth - O, RDB - O, SPF - O)
5. 로그인 된 상태에서 앱을 삭제 후 앱을 재 실행 했을때(Auth - O, RDB - O, SPF - X)와 같은 상황들을 체크했습니다.
▼ Splash Activity▼
private fun startSplash() {
val handler = Handler(Looper.getMainLooper())
handler.postDelayed({
if(viewModel.getUid().isNullOrEmpty()){
val intent = LoginActivity.newIntent(this@SplashActivity).apply {
addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
}
startActivity(intent)
} else {
val intent = MainActivity.newIntent(this@SplashActivity).apply {
addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
}
startActivity(intent)
}
finish()
}, 1000)
}
6. 우선 회원가입이 되어있는 상태(로그아웃을 하거나 앱을 재 실행했을 경우)에는 바로 메인화면으로 넘겨야 되기때문에 Splash페이지에서 조건을 설정하고 위 경우에 Login페이지가아니라 바로 Main페이지로 넘기도록 정하기로 했고, 그 외 나머지 상황들은 로그인에서 조건을 조절하기로 설계했습니다.
7. 유저 정보가 저장되는 부분은 Firebase의 Auth, RDB / SharedPreferences 였기 때문에 3종류중 가장 적합한 정보는 SharedPreferences로 조건을 설정하기로 결정 되었습니다.
8. 왜냐하면 로그인하고 닉네임을 입력할때 SharedPreferences에 유저정보가 저장이 되면, 회원 탈퇴할때만 삭제되기때문에 "로그아웃을 하거나, 앱을 재실행 했을경우"의 조건에 부합했습니다.
CoroutineScope(Dispatchers.Main).launch{
viewModel.getCurrentUser()?.uid?.let { currentUser ->
viewModel.getUserData(currentUser).collect(){user ->
if(user == null){ //spf정보가없는데 유저정보도 없는 경우
loginCenterConstraint.visibility = View.GONE
nickCenterConstraint.visibility = View.VISIBLE
shortToast("닉네임을 입력해주세요")
} else { //spf정보가 없는데 유저정보는 있는 경우
with(viewModel) {
user.login_Uid?.let {
saveUid(it)
}
// profile Image
user.login_profile?.let {
saveProfile(it)
}
user.login_NickName?.let{
saveNickName(it)
}
}
loginCenterConstraint.visibility = View.GONE
nickCenterConstraint.visibility = View.GONE
val intent = Intent(this@LoginActivity, MainActivity::class.java)
startActivity(intent)
finish()
}
}
}
//auth에 유저정보가 없는 경우
loginCenterConstraint.visibility = View.GONE
nickCenterConstraint.visibility = View.VISIBLE
shortToast("닉네임을 입력해주세요")
}
9. 다음으로 문제가 되는 남은 경우는 (Auth : Firebase의 Authentication / RDB : Firebase의 Realtime Database / SPF : SharedPreferences)
- 앱을 삭제 후 재 실행 했을 경우( 앱을 삭제하면 SharedPreferences에 저장된 유저정보들이 모두 삭제됩니다.)
ㄱ. 로그아웃하거나 단순히 앱을 종료하고, 앱 삭제 후 재 실행 했을 경우( Auth - O, RDB - O, SPF - X)
ㄴ. 신규 or 회원탈퇴 후 구글 로그인만 하고, 닉네임 입력창에서 앱을 삭제하고 재 실행 했을 경우( Auth - O, RDB - X, SPF - X)
ㄷ. 신규 or 회원탈퇴 했을때 앱을실행 했을 경우( Auth - X, RDB - X, SPF - X)
10. ㄱ의 경우 Auth와 RDB 모두 유저정보가 저장되어있으므로 SPF에 단순히 저장을 했습니다.
11. ㄴ의 경우 RDB와 SPF 모두 유저정보가 없으므로 닉네임을 입력하고 저장하도록 설정했습니다.
12. ㄷ의 경우 역시 RDB와 SPF 모두 유저정보가 없으므로 닉네임을 입력하고 저장하도록 설정했습니다.
Complete
1. 한개씩 해결하다보니 자꾸 다른 문제가 발생해서 문제가 발생하는 조건들을 찾는게 복잡하고 힘들었습니다.
2. 하지만 팀원분들이 전체적으로 설계를 하고 조건들을 정리해서 진행하는게 좋을것 같다는 말에 모든상황들을 테스트하고, 조건들을 정리했습니다.
3. 설계하고 정리한데로 하나씩 조건들을 설정하고 이벤트를 적용해서 잘 해결할 수 있었던것 같습니다.
썸네일 출처
'TIL, WIL(일기)' 카테고리의 다른 글
231113 [Trouble Shooting] 구글스토어 배포(앱 상태 : 거부됨) (0) | 2023.11.13 |
---|---|
231109 구글 스토어 앱 업데이트 하기 (0) | 2023.11.09 |
231108 SearchView - onQueryTextChange (0) | 2023.11.09 |
231107 Return Method (0) | 2023.11.07 |
231106 [Trouble Shooting] ListAdapter 갱신 이슈 (0) | 2023.11.06 |