#본글은 Firebase에 프로젝트 등록까지 진행 후 내용입니다.
Google 로그인 기능을 추가하여 회원가입 없이 로그인 하는 용도로 사용됩니다.
Firebase에서 지원하고 있으며 기능을 구현해보도록 하겠습니다.
우선 Firebase 에 접속합니다.
https://console.firebase.google.com
Authenfication 으로 들어간 뒤 '로그인 방법' 탭을 클릭합니다.
여러가지 로그인 기능이 있는데 Google 로그인을 사용 설정 합니다.
사용자 탭으로 가보면 아직 사용자 정보가 보여지지 않고 있습니다.
정상적으로 로그인을 하면 이 화면에서 사용자가 보여집니다.
Android Studio 로 돌아가 앱 수준 build.gradle 파일에
Firebase 인증 및 Google 로그인에 대한 종속 항목을 추가합니다.
implementation 'com.google.firebase:firebase-auth:16.0.3'
implementation 'com.google.android.gms:play-services-auth:16.0.0'
|
cs |
activity_main.xml 에 아래와 같이 추가해 주었습니다.
<com.google.android.gms.common.SignInButton
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" android:layout_marginLeft="16dp"
android:layout_marginRight="16dp" android:id="@+id/googleLoginBtn"/>
|
cs |
ConstraintLayout 으로 구성하였고 Design 에 이렇게 보여지게 됩니다.
RC_SIGN_IN 은 Activity 의 requestCode 를 정해주었고
googleSigninClient 객체, firebaseAuth 객체 변수를 전역으로 선언해 주었습니다.
// Google Login result
private val RC_SIGN_IN = 9001
// Google Api Client
private var googleSigninClient: GoogleSignInClient? = null
// Firebase Auth
private var firebaseAuth: FirebaseAuth? = null
|
cs |
Android 앱에 Google 로그인 통합하기 페이지를 참고해 Google 로그인을 앱에 통합
아래와 같이 GoogleSignInOptions 객체를 구성할 때 requestIdToken을 호출합니다.
구글 버튼이 클릭이 되면 구글 계정 인증 Activity가 보여지게 됩니다.
// [START onCreate]
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// [START config_signin]
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build()
// [END config_signin]
googleSigninClient = GoogleSignIn.getClient(this, gso)
firebaseAuth = FirebaseAuth.getInstance();
googleLoginBtn.setOnClickListener {
val signInIntent = googleSigninClient?.getSignInIntent()
startActivityForResult(signInIntent, RC_SIGN_IN)
}
}
// [END onCreate]
|
cs |
정상적으로 로그인이 되었다는 것이고 Firebase에 등록을 수행합니다.
이렇게 응답이 정상이면 firebaseAuthWithGoogle 함수를 호출 합니다.
// [START onActivityResult]
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
// Google 로그인 인텐트 응답
if (requestCode === RC_SIGN_IN) {
val task = GoogleSignIn.getSignedInAccountFromIntent(data)
try {
// Google Sign In was successful, authenticate with Firebase
val account = task.getResult(ApiException::class.java)
firebaseAuthWithGoogle(account)
} catch (e: ApiException) {
}
}
}
// [END onActivityResult]
|
cs |
사용자가 정상적으로 로그인한 후에 GoogleSignInAccount 객체에서 ID 토큰을 가져와
Firebase 사용자 인증 정보로 교환하고 Firebase 사용자 인증 정보를 사용해 Firebase에 인증합니다.
signInWithCredential 에 대한 호출이 성공하면 getCurrentUser 메소드로 사용자의 계정 데이터를 가져올 수 있습니다.
// [START firebaseAuthWithGoogle]
private fun firebaseAuthWithGoogle(acct: GoogleSignInAccount) {
val credential = GoogleAuthProvider.getCredential(acct.idToken, null)
firebaseAuth!!.signInWithCredential(credential)
.addOnCompleteListener(this) {
// 성공여부
if (it.isSuccessful) {
val user = firebaseAuth?.currentUser
Toast.makeText(this, "로그인 성공", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this, "로그인 실패", Toast.LENGTH_SHORT).show()
}
}
}
// [END firebaseAuthWithGoogle]
|
cs |
정상적으로 로그인이 되었다면 Firebase 사용자 탭으로 이동해 보겠습니다.
아래와 같이 사용자 정보가 추가되어있다면 잘 적용된 것입니다.
사용자를 로그아웃시키려면 signOut을 호출하면 됩니다.
FirebaseAuth.getInstance().signOut();
|
cs |
'프로그래밍 > Android' 카테고리의 다른 글
[Kotlin] EditText addTextChangedListener 람다 (0) | 2019.03.21 |
---|---|
Button 디자인 Radius 속성 (0) | 2019.03.21 |
[Kotlin] Firebase com.google.android.gms:play-services-measurement-base is being requested by various other libraries 오류 (0) | 2019.03.19 |
[Kotlin] Firebase Email 회원가입, 로그인, 로그아웃 (0) | 2019.03.19 |
Android 디버그 서명 인증서 SHA-1 확인 (0) | 2019.03.19 |