본문 바로가기
Android/Kotlin

Android 에서 Google 소셜 로그인을 구현해보자

by wannagohome97 2024. 6. 11.

모바일 앱들을 보면 구글로 로그인!(혹은 카카오 / 네이버 등등) 과 같은 소셜 로그인을 지원하는 경우가 많은데

오늘은 이 중 구글 로그인을 구현해볼겁니다.

 

일단 Firebase 에서 프로젝트를 만들고(로그인 기능을 넣을것이기 때문에 SHA -1 인증서가 필요합니다)

앱과 프로젝트를 연동해줍니다. 그 후 google-services.json 을 app 수준의 디렉토리에 넣어주면 됩니다.

 

이제 종속성을 추가해줍시다.

Project Level 의 build.gradle 에 아래 구문을 작성하고

id("com.google.gms.google-services") version "4.4.1" apply false

 

App Level 의 build.gradle 에 gms 를 추가해줍니다.

//libs.versions.toml
[versions]
playServicesAuth = "21.2.0"
[libraries]
play-services-auth = { module = "com.google.android.gms:play-services-auth", version.ref = "playServicesAuth" }

//build.gradle(app)
plugins {
    id("com.google.gms.google-services")
}
dependencies {
    implementation(libs.play.services.auth)
}

 

 

이제 로그인하는 과정을 구현해봅시다.

val signInOptions = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
    .requestIdToken(getString(R.string.default_webclient_id))
    .requestEmail()
    .build()
val googleSignInClient = GoogleSignIn.getClient(this@MainActivity, signInOptions)
val intent = googleSignInClient.signInIntent

 

위 코드와 같이 googleSignInIntent 를 만들어서 startActivityForResult 나 Compose 의 ActivityResultLauncher 를 이용해 실행시켜주고

private var auth: FirebaseAuth
{activityResult ->
    if (auth == null){
    	auth = FirebaseAuth.getInstance()
    }
    val data = activityResult.data
    // onActivityResult 에서 처리한다면 data:Intent? 를 그대로 사용하시면 됩니다
    val signInTask : Task<GoogleSignInAccount> = GoogleSignIn.getSignedInAccountFromIntent(data)
            try {
                val account = signInTask.getResult(ApiException::class.java)
                val credential = GoogleAuthProvider.getCredential(account.idToken, null)
                auth.signInWithCredential(credential)
                    .addOnCompleteListener {authTask->
                        if (authTask.isSuccessful) {
                            val id = "${account.id}"
                            val token = "${account.idToken}"
                            val email = "${account.email}"
                            val user = auth.currentUser
                        } 
                    }
            }
            catch (e: ApiException){
                e.printStackTrace()
            }
}

 

ActivityResult 를 위와 같이 처리해 줌으로써 로그인 결과(유저 정보)를 확인할 수 있습니다.