본문 바로가기
FireBase

Firebase - 파이어베이스로 구글로그인

by 봄석 2019. 1. 8.

Firebase - 구글로그인

구글아이디로 소셜 로그인 하는 기능은 구현이 매우 간편하며 이메일 ,비밀번호, 아이디 찾기 기능을 구현하지 않아도 되기 때문에 금방 적용할 수 있습니다. 

 

구글 로그인 기능을 적용하기 위해서는 먼저 프로젝트에 라이브러리 의존성을 추가합니다

 

파이어베이스를 이용하기 때문에 우선 

gradle.build(모듈)의 dependencies에 아래 내용을 추가합니다

dependencies {
      ...

    //Firebase
    implementation 'com.google.firebase:firebase-database:16.0.5'
    implementation 'com.google.firebase:firebase-auth:16.0.5'
    //Google Login
    implementation 'com.google.android.gms:play-services-auth:16.0.1'
}
apply plugin: "com.google.gms.google-services"
 

그리고 gradle.build(프로젝트)

buildscript {
    ext.kotlin_version = '1.3.11'
    ext.anko_version='0.10.5'
    repositories {
        google()
        jcenter()
    }
    dependencies {
        ...

        classpath 'com.google.gms:google-services:4.2.0' // update version

    }
}

allprojects {
    repositories {
        ...
        maven{
            url "https://maven.google.com"
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}​

 

 

Firebase 콘솔 사이트- https://console.firebase.google.com

 

콘솔 사이트에 들어가 왼쪽의 톱니바퀴-> 프로젝트설정-> 앱추가 -> 패키지이름 입력

->google-services.json 파일 다운로드하여 -> 안드로이드스튜디오 app 아래에 넣어주기

 

구글로그인 기능 구현 

1) 라이브러리 설치

module.gradle(모듈)의 dependencies에 아래 내용 추가

//Google Login
    implementation 'com.google.android.gms:play-services-auth:16.0.1'​

 

 

2) SHA1 키 추가하기

만약 Firebase를 연결할 때 Assistant를 쓰지 않고 직접 Gradle 방식으로 연결했다면 

SHA1 키를 넣어주어야 구글 로그인을 진행할 수 있습니다.

 

우측에 Gradle을 클릭 -> [Tasks] -> [android] -> [SigningReport] 를 클릭하면 SHA1 키가 발급됩니다.

 

발급된 키를 Firebase 콘솔로 옮긴후 SHA 인증서 지문을 추가합니다.

 

3) 구글 로그인 클래스 만들기

class MainActivity : AppCompatActivity() {

    lateinit var auth :FirebaseAuth
    lateinit var authListener : FirebaseAuth.AuthStateListener
    lateinit var googleSigneInClient : GoogleSignInClient //구글 로그인을 관리하는 클래스
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Configure Google Sign In
        //GoogleSignInOptions 옵션을 관리해주는 클래스로 API 키값과 요청할 값이 저장되어 있다.
        var gso=GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken(getString(R.string.default_web_client_id))
            .requestEmail()
            .build();

        googleSigneInClient=GoogleSignIn.getClient(this,gso)
    }

}
​
 
 
GoogleSignInClient - 구글 로그인을 관리하는 클래스
 
GoogleSignInOptions - 옵션을 관리해주는 클래스로 API 키값과 요청할 값이 저장되어 있다.
 

 

4) 구글 로그인 실행 이벤트 코드

private fun signIn(){
        val signInIntent =googleSigneInClient.signInIntent
        startActivityForResult(signInIntent,100)
    }​

 

5) 구글 로그인 결과 받는 코드

구글 로그인에 성공하게 되면 구글에서는 토큰을 넘겨줍니다. 

토큰에는 유저 아이디와 이름이 암호화(JsonWebToken)되어있습니다. 그 토큰을 Firebase에 서버로 넘겨줘 Firebase는 유저의 대한 계정을 만들게 됩니다. 

 

Firebase가 구글에서 서비스한다하여 자동으로 계정정보가 넘어가는 것은 아닙니다.

Firebase와 구글로그인은 엄연히 다른 기능이며 Firebase는 유저의 정보를 관리하는 통합서버이고 구글 로그인은 소셜 로그인의 한 부분입니다. 즉 구글 로그인에 성공했으면 성공했다는 

Credential을 Firebase에 넘겨줘야 Firebase는 이 사람이 구글에게 인증 받은 사람임을 알수 있는 것입니다.

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        
        if(requestCode==100){
            val result = Auth.GoogleSignInApi.getSignInResultFromIntent(data)
            if(result.isSuccess){
                //구글 로그인이 성공했을 경우
                val account =result.signInAccount
                val credential =GoogleAuthProvider.getCredential(account?.idToken, null)
                FirebaseAuth.getInstance().signInWithCredential(credential)
            }
        }
    }

 

 

로그인이 성공했을 경우 idToken을 넘겨주는데 그것을 이용하여 Credential 인증서를 만들어 준다. Credential을 Firebase에 넘겨주면 Firebase 에 구글 로그인 계정이 만들어진다.

 

6) 구글 콘솔 설정

안드로이드의 구글 로그인 설정이 끝났으면 Firebase Console로 이동한 후에 Google 로그인 사용 설정을 해줘야 합니다. 

Authentication -> 로그인 방법 -> Google로 이동하고 사용 설정을 선택한 후에 저장을 클릭.

 

7)로그아웃하기

1
FirebaseAuth.getInstance().signOut()
cs

 

댓글