Firebase의 기능인 Authentication을 이용해서 앱에서 바로 전화로 로그인할 수 있는 기능 구현
Firebase 프로젝트에서 SHA 인증서 지문에 SHA-1, SHA-256 추가
아래 url로 들어가서 Android DeviceCheck API 링크로 들어가기
Android에서 전화번호로 Firebase에 인증 | Firebase Documentation
Firebase의 기능인 Authentication을 이용해서 앱에서 바로 구글로 로그인할 수 있는 기능 구현
// 디버깅 위한 변수 선언 -> 확인하고 나면 삭제
private const val TAG = "LoginActivity"
// ActivityForResult 위한 Request gode 선언 , 값은 자연수 아무거나 가능
private const val REQUEST_GOOGLE_CODE = 9009
class LoginActivity : AppCompatActivity() {
// FirebaseAuth 변수 선언
private lateinit var auth: FirebaseAuth
// 데이터바인딩 변수 선언
private lateinit var binding: ActivityLoginBinding
// GoogleSignInClient 변수 선언
private lateinit var googleSignInClient : GoogleSignInClient
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_login)
auth = Firebase.auth
// 이벤트 관련 함수 선언 (onCreate를 깔끔하게 정리하기 위해
// 이벤트 관련 함수를 setupEvents에 모아놓음)
setupEvents()
}
private fun setupEvents() {
...
// "구글아이디로 로그인" 버튼 클릭 시 이벤트 발생
binding.googleLoginButton.setOnClickListener {
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(com.firebase.ui.auth.R.string.default_web_client_id))
.requestEmail()
.build()
googleSignInClient = GoogleSignIn.getClient(this, gso)
googleLogin()
}
}
private fun googleLogin() {
val signInClient = googleSignInClient?.signInIntent
startActivityForResult(signInClient, REQUEST_GOOGLE_CODE)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == REQUEST_GOOGLE_CODE) {
val result = Auth.GoogleSignInApi.getSignInResultFromIntent(data)
if (result!!.isSuccess) {
val account = result.signInAccount
firebaseAuthWithGoogle(account)
}
}
}
private fun firebaseAuthWithGoogle(account: GoogleSignInAccount?) {
val credential = GoogleAuthProvider.getCredential(account?.idToken, null)
auth?.signInWithCredential(credential)
?.addOnCompleteListener { task ->
if (task.isSuccessful) {
Log.d(TAG, "로그인 성공")
updateUI(auth.currentUser)
moveToMainActivity()
} else {
Toast.makeText(this, task.exception?.message, Toast.LENGTH_SHORT).show()
updateUI(null)
}
}
}
// 로그인 성공 시 메인액티비티로 가기 위한 함수
private fun moveToMainActivity() {
val intentMain = Intent(this, MainActivity::class.java)
finish()
startActivity(intentMain)
}
// 로그인 계정 유지
private fun updateUI(user: FirebaseUser?) {
}
public override fun onStart() {
super.onStart()
val currentUser = auth.currentUser
if (currentUser != null) {
reload()
}
}
private fun reload() {
}
}