와챠의 우당탕탕 코딩 일기장

[Android] Google Login API 사용해보기 본문

코딩 일기장/Android(Kotlin)

[Android] Google Login API 사용해보기

minWachya 2023. 5. 8. 10:54
반응형

준비

0. 구글 API콘솔 프로젝트 생성

 - OAuth 2.0 클라이언트 ID를 Android 용으로 생성

 

 


개발

1. 의존성 추가

- 파이어베이스랑 구글 프로젝트 생성하다보면 의존성 추가하라고 안내해주는 대로 추가하다보면 이렇게 댑니다아

implementation 'com.google.firebase:firebase-auth-ktx:21.0.3'
implementation platform('com.google.firebase:firebase-bom:31.5.0')
implementation 'com.google.firebase:firebase-analytics-ktx'
implementation 'com.google.android.gms:play-services-auth:20.5.0'

 

2. 인터넷 권한 추가

- Manifest에 인터넷 접속 권한 추가해줍니다!

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

 

3. 코드 작성

xml은 그냥 버튼만 둠..ㅋ

설명은 주석에 있습니더

import android.content.Intent
import android.os.Bundle
import android.util.Log
import androidx.activity.result.ActivityResult
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
import com.example.googlelogingtest.databinding.ActivityMainBinding
import com.google.android.gms.auth.api.signin.GoogleSignIn
import com.google.android.gms.auth.api.signin.GoogleSignInClient
import com.google.android.gms.auth.api.signin.GoogleSignInOptions
import com.google.android.gms.common.api.ApiException

class MainActivity : BaseActivity<ActivityMainBinding>(R.layout.activity_main) {
    companion object {
        private val TAG = "mmm"
    }

    private lateinit var googleSignInOptions: GoogleSignInOptions
    private lateinit var googleSignInClient: GoogleSignInClient
    private lateinit var GoogleSingResultLauncher: ActivityResultLauncher<Intent>

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // 구글 로그인 옵션
        googleSignInOptions = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .build()
        googleSignInClient = GoogleSignIn.getClient(this, googleSignInOptions)

		// 구글 로그인 버튼 클릭 리스너
        initOnClickListener()

		// 구글 로그인 intent 띄우고 결과 처리하는 런처
        GoogleSingResultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()){ result:ActivityResult ->
            // 결과 잘 받으면 구글 계정 이메일 출력
            if(result.resultCode == RESULT_OK){
                result.data?.let{data->
                    val task = GoogleSignIn.getSignedInAccountFromIntent(data)
                    try {
                        val account = task.getResult(ApiException::class.java)
                        Log.d(TAG, account.email.toString())
                    }catch (e: ApiException){
                        Log.w(TAG, "Google sign in failed", e)
                    }

                }
            }else{
                println(result)
            }
        }

    }
	
    // 구글 로그인 버튼 클릭 리스너
    private fun initOnClickListener() {
        binding.btnGoogleSignIn.setOnClickListener {
            googleSignIn()
        }
    }

	// 구글 로그인
    private fun googleSignIn(){
        googleSignInClient.signOut()
        val signInIntent = googleSignInClient.signInIntent
        GoogleSingResultLauncher.launch(signInIntent)
    }
}

결과


파이어 베이스로 연동하고 싶으신 분들은 파베 콘솔도 생성해서 아래 설정을 해주시고 사용해주심 됩니더

1. 파이어베이스 프로젝트 생성

- Authentication을 on 해줍니다.

- 구글 로그인 설정도 허용해주세요!

- Android Studio에서도 파이어베이스 연동을 해줍니다.

Authentication on
구글 로그인 설정 허용
Android Studio: 파이어베이스 연동


오류 로그

1. 구글 로그인 10 Error가 났는데

com.google.android.gms.common.api.ApiException: 10:
  1. 테스트하는 App
  2. 구글 API OAuth 인증
  3. Firebase Project

이거 3개의 Sha1값을 똑같이 맞추니 해결되었음

 

2. 구글 API OAuth Android용 생성 시 같은 키를 사용하는 계정이 있다면서 안 만들어졌는데

이전에 생성한 모든 구글 프로젝트 뒤지면서 Android 계정 생성한 거 찾아서 삭제했더니..만들어짐ㅋㅋ

 

+ sha1 키 받는 법

3가지 방법이 있는데 이 중 하나만 해도 됨

 

방법 1. 키 받는 명령어 + 비밀번호까지 한꺼번에 입력하는 명령어

 터미널 열고 아래 명령어 입력

keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android

방법 2. 키 받는 명령어 입력 + 비밀번호 입력하라고 하면 android 입력

keytool -list -v -keystore ~/.android/debug.keystore

방법 3. 터미널에 아래 코드 입력

./gradlew signingReport

게시글 진자 올만,,, 안드는 더 올만인듯!!!! 개바쁨 졸프하느라

반응형
Comments