dev/aos

[AOS] Google API Sign-in Login구현

캄춰 2023. 11. 9. 15:49
728x90
반응형

참고할 링크 : https://developers.google.com/identity/one-tap/android/overview?hl=ko

 

1. 프로젝트 만들기

2. 해당 프로젝트 내에서 'API 및 서비스'에서 사용자 인증 정보로 이동

3. +사용자 인증 정보 만들기 클릭

4. OAuth 클라이언트 ID 클릭

5. 동의 화면 구성 클릭

6. OAuth동의 화면 전체 사용으로 클릭

 

이렇게 계정을 만든 뒤

 

다시, '+사용자 인증 정보 만들기' 클릭

 

앱 유형을 선택할 수 있고, 'Android' 선택

패키지명을 적는데, Android Manifest에 Package명 등록을 해주어야 함

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
	package="kr.co.cavedwellers.testapp">
    
    ...
    
</manifest>

 

 

'SHA-1 인증서 디지털 지문' 이라는 것이 있는데, 이것은 'jks' keystore서명 파일을 파싱하여 만들 수 있다.

여러 방법이 있지만, 나는 Android Studio에서 Build - General Signed Bundle'탭에서

: 'Create New'하여 jks파일을 새로 만든다

 

jks파일이 만들어지면 다음과 같이 keytool명령어를 입력한다.

keytool -list -v -keystore .\testapp_keystore.jks

 

또는, gradle명령으로 생성한다

: gradle siginingReport

 

그럼, 쭉~ 항목이 나열되는데 그중 SHA1의 값을 복사하면 된다.

그리고 생성...!

X

 

[수정]

Android Client는 남겨두고 '웹 클라이언트'로 재생성

Client ID는 웹 클라이언트의 아이디를 사용한다.

 

http://m.google.android.gms.common.api.ApiException: 10 에러가 발생하면,

꼭 Firebase때문이 아니다. 인증서 키가 다르기 때문이다.

 

 

 

이제 'Android Studio'로 넘어가면,

build.gradle에서 라이브러리를 추가한다

apply plugin: 'com.android.application'

dependencies {
  // ...

  // google api login
  implementation 'com.google.android.gms:play-services-auth:20.7.0'
}

 

 

 

참고링크 : https://developers.google.com/identity/sign-in/android/sign-in?hl=ko

 

 

google login Intent를 전송(request)하면 받을 onActivityForResult함수가 Deprecated되어

result를 받을 수 있는 'activityResultLauncher'인스턴스를 만든다.

private val activityResultLauncher: ActivityResultLauncher<Intent> = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> 
	when (result.resultCode) {
    	Constants.RequestCode.LoginGoogleCode -> {
        	val task = GoogleSignIn.getSignedInAccountFromIntent(result.data)
            
            try {
            	val account = task.getResult(ApiException::class.java)
                
            } catch (e: ApiException) {
            	e.printStackTrace
            }
        }
    }
}

 

 

 

구글 로그인 요청 함수

    private fun requestGoogleLogin(): Unit {
        // google sign-in options object
        val googleSignInOptions = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestScopes(Scope((Scopes.DRIVE_APPFOLDER)))
            .requestServerAuthCode(resources.getString(R.string.login_google_client_id))
            .requestEmail()
            .build();

        // create client
        val googleSignInClient: GoogleSignInClient = GoogleSignIn.getClient(this@MainActivity, googleSignInOptions)

        val signInIntent: Intent = googleSignInClient.signInIntent
        // startActivityForResult(signInIntent, Constants.RequestCode.LoginGoogleCode)  --> deprecated
        activityResultLauncher.launch(signInIntent)
    }
728x90
반응형