멘티 질문
•
구글 로그인을 하려는데 전에는 되던게 어느 날부터는 로그인 화면 창으로 이동조차 안합니다 ..
private fun signInWithGoogle() {
val googleSignInOptions = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build()
val googleSignInClient = GoogleSignIn.getClient(requireActivity(), googleSignInOptions)
val signInIntent = googleSignInClient.signInIntent
startActivityForResult(signInIntent, RC_SIGN_IN)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == RC_SIGN_IN) {
if (resultCode == Activity.RESULT_OK) {
val task = GoogleSignIn.getSignedInAccountFromIntent(data)
try {
val account = task.getResult(ApiException::class.java)
firebaseAuthWithGoogle(account)
} catch (e: ApiException) {
showSnackBar("로그인에 실패하였습니다.")
}
} else {
showSnackBar("로그인에 실패하였습니다.")
}
}
}
private fun firebaseAuthWithGoogle(account: GoogleSignInAccount?) {
val credential = GoogleAuthProvider.getCredential(account?.idToken, null)
auth?.signInWithCredential(credential)
?.addOnCompleteListener(requireActivity()) { task ->
if (task.isSuccessful) {
val user = auth!!.currentUser
// Firebase Firestore에서 정보 확인
checkUserInfoInFirestore(user)
} else {
// 로그인 실패 처리
showSnackBar("로그인에 실패하였습니다.")
}
}
}
private fun checkUserInfoInFirestore(user: FirebaseUser?) {
if (user != null) {
db.collection("users")
// 문서 확인을 해야할 듯
.document(user.uid)
.get()
.addOnSuccessListener { documentSnapshot ->
// name 이 널이 아니고 is_seller true or false 로 구분해야하는가 ?
if (documentSnapshot["name"].toString().length >= 2 && documentSnapshot["is_seller"] == false) {
findNavController().navigate(R.id.action_loginFragment_to_homeFragment)
showSnackBar("로그인에 성공하셨습니다.")
} else if (documentSnapshot["name"].toString().length >= 2 && documentSnapshot["is_seller"] == true) {
findNavController().navigate(R.id.action_loginFragment_to_sellerMypageFragment)
showSnackBar("로그인에 성공하셨습니다.")
}
}
} else {
// 정보가 없는 경우 SignupSelectFragment로 이동
findNavController().navigate(R.id.action_loginFragment_to_signupSelectFragment)
}
}
Kotlin
복사
멘토 답변
•
빌드 환경이 달라진 경우 SHA-1 key를 다시 등록해줘야 함
•
token id는 빌드하면 자동 생성되는 `R.string.default_web_client_id`를 사용 (local에 선언x)
•
디버깅 포인트 찍는 방법