구글 로그인을 구현 해보겠습니다.
일단 Firebase 홈페이지에 들어가셔서 Authentication -> Sign-in-method 에 들어가 Google 로그인을 사용할 수 있도록 설정 하겠습니다. 사용 설정 클릭하시고 이메일 입력 후에 저장하시면 됩니다.
1. 인증 라이브러리 받기
build.gradle(app)으로 들어가서 implementation을 넣어준 후에 Snyc Now를 누르겠습니다.
이미 추가되어 있으시면 추가 안해도 됩니다.
implementation 'com.google.firebase:firebase-auth:16.0.5'
implementation 'com.google.android.gms:play-services-auth:19.0.0'
2. LoginActivity에 코드 추가
먼저 필요한 변수들을 추가해주겠습니다.
var googleSignInClient : GoogleSignInClient? = null
var GOOGLE_LOGIN_CODE = 9001
onCreate 안에 하단의 코드를 추가해주겠습니다.
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build()
googleSignInClient = GoogleSignIn.getClient(this,gso)
.requestIdToken(getString(R.string.default_web_client_id)) 의 가로 안의 문자는
res(generated) -> values -> values.xml 로 들어가서 "default_web_client_id"안의 문자열을 넣어주시면 됩니다.
onCreate 바깥에 googleLogin 함수와 onActivityResult 함수를 만들어 주겠습니다.
fun googleLogin(){
var signInIntent = googleSignInClient?.signInIntent
startActivityForResult(signInIntent,GOOGLE_LOGIN_CODE)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if(requestCode == GOOGLE_LOGIN_CODE){
var result = Auth.GoogleSignInApi.getSignInResultFromIntent(data)
if (result != null) {
if (result.isSuccess){
var account = result.signInAccount
firebaseAuthWithGoogle(account)
}
}
}
}
firebaseAuthWithGoogle 함수도 추가해줍니다.
fun firebaseAuthWithGoogle(account : GoogleSignInAccount?){
var credential = GoogleAuthProvider.getCredential(account?.idToken,null)
auth?.signInWithCredential(credential)
?.addOnCompleteListener {
task ->
if(task.isSuccessful){
//Login
moveMainPage(task.result?.user)
}
else{
Toast.makeText(this,task.exception?.message, Toast.LENGTH_LONG).show()
//Show the error message
}
}
}
그리고 마지막으로 구글 로그인 버튼을 누르면 로그인되어 메인액티비티로 넘어갈 수 있도록 onCreate 안에 코드를 추가 해주겠습니다.
btn_login_google.setOnClickListener {
googleLogin()
}
구글 로그인을 하면 Users에 구글 이메일이 추가된 것을 확인 하실 수 있습니다.
자세한 내용은 파이어베이스 홈페이지를 참고해주세요.
Android에서 Google 로그인을 사용하여 인증 | Firebase
Google 로그인을 앱에 통합하여 사용자가 Google 계정으로 Firebase에 인증하도록 설정할 수 있습니다. 시작하기 전에 아직 추가하지 않았다면 Android 프로젝트에 Firebase를 추가합니다. Firebase Android BoM
firebase.google.com
LoginActivity.kt
package com.example.carrotmarket
import android.content.Intent
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.google.android.gms.auth.api.Auth
import com.google.android.gms.auth.api.signin.GoogleSignIn
import com.google.android.gms.auth.api.signin.GoogleSignInAccount
import com.google.android.gms.auth.api.signin.GoogleSignInClient
import com.google.android.gms.auth.api.signin.GoogleSignInOptions
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.FirebaseUser
import com.google.firebase.auth.GoogleAuthProvider
import com.google.firebase.auth.ktx.auth
import com.google.firebase.ktx.Firebase
import kotlinx.android.synthetic.main.activity_login.*
class LoginActivity : AppCompatActivity() {
private lateinit var auth: FirebaseAuth
var googleSignInClient : GoogleSignInClient? = null
var GOOGLE_LOGIN_CODE = 9001
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
auth = Firebase.auth
btn_sign_up_go.setOnClickListener {
val nextIntent = Intent(this, SingUpActivity::class.java)
startActivity(nextIntent)
}
btn_login.setOnClickListener {
signin()
}
btn_login_google.setOnClickListener {
googleLogin()
}
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken("567256059244-f9uocncnrjkv5jkf1ml1vj7d714e8840.apps.googleusercontent.com")
.requestEmail()
.build()
googleSignInClient = GoogleSignIn.getClient(this,gso)
}
fun googleLogin(){
var signInIntent = googleSignInClient?.signInIntent
startActivityForResult(signInIntent,GOOGLE_LOGIN_CODE)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if(requestCode == GOOGLE_LOGIN_CODE){
var result = Auth.GoogleSignInApi.getSignInResultFromIntent(data)
if (result != null) {
if (result.isSuccess){
var account = result.signInAccount
firebaseAuthWithGoogle(account)
}
}
}
}
fun firebaseAuthWithGoogle(account : GoogleSignInAccount?){
var credential = GoogleAuthProvider.getCredential(account?.idToken,null)
auth?.signInWithCredential(credential)
?.addOnCompleteListener {
task ->
if(task.isSuccessful){
//Login
moveMainPage(task.result?.user)
}
else{
Toast.makeText(this,task.exception?.message, Toast.LENGTH_LONG).show()
//Show the error message
}
}
}
fun signin(){
auth?.signInWithEmailAndPassword(editText_email.text.toString(),editText_password.text.toString())
?.addOnCompleteListener {
task ->
if(task.isSuccessful){
moveMainPage(task.result?.user)
}else{
//Show the error message
Toast.makeText(this,task.exception?.message, Toast.LENGTH_LONG).show()
}
}
}
fun moveMainPage(user: FirebaseUser?){
if(user !=null){
startActivity(Intent(this,MainActivity::class.java))
}
}
}