1. Google Service 추가
프로젝트의 build.gradle 파일에 Google 서비스 플러그인과 Google 로그인 라이브러리를 추가해야합니다.
// Project-level build.gradle
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
id("com.google.gms.google-services")
}
dependencies {
//firebase
implementation(platform("com.google.firebase:firebase-bom:32.7.0"))
implementation("com.google.firebase:firebase-analytics")
implementation("com.google.firebase:firebase-analytics-ktx")
implementation("com.google.firebase:firebase-crashlytics")
implementation("com.google.firebase:firebase-auth-ktx")
implementation("com.google.android.gms:play-services-auth:20.7.0")
}
// App-level build.gradle
plugins {
id("com.android.application") version "8.1.1" apply false
id("org.jetbrains.kotlin.android") version "1.8.10" apply false
id("com.google.gms.google-services") version "4.4.0" apply false
}
2. Google API Console 프로젝트 설정
- Google API Console에 접속하여 프로젝트를 선택하거나 새 프로젝트를 생성합니다.
- "OAuth 2.0 클라이언트 ID"를 생성합니다. 이 과정에서 Android 애플리케이션의 패키지 이름과 SHA-1 인증서 지문이 필요합니다.
- 안드로이드에서 SHA-1 생성법
- shift 두번 누른 후, gradle task 검색하면 나오는 “Excute Gradle Task” 선택
- gradle signingReport라고 검색
- SHA1이라고 적힌 키 복사
- 안드로이드에서 SHA-1 생성법
- 생성된 클라이언트 ID를 google-services.json 파일로 프로젝트의 app/ 디렉토리에 추가합니다.
3. Compose UI에서 Google 로그인 버튼 구현
주의 : Android Client Key가 아니라 Web Client Key를 사용해야합니다.
@Composable
fun GoogleLoginElement(modifier: Modifier = Modifier) {
val context = LocalContext.current
val viewModel: LoginFormViewModel = hiltViewModel()
val launcher = rememberLauncherForActivityResult(
contract = ActivityResultContracts.StartActivityForResult()
) {
viewModel.loginGoogle(activityResult = it)
}
Row(
modifier = modifier
.wrapContentWidth()
) {
ImageButton(R.drawable.google_icon, "Google") {
val googleSignInOptions = GoogleSignInOptions
.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken("your_web_client_key")
.requestEmail()
.build()
val googleSignInClient = GoogleSignIn.getClient(context, googleSignInOptions)
launcher.launch(googleSignInClient.signInIntent)
}
}
}
fun loginGoogle(
activityResult: ActivityResult
) {
val task = GoogleSignIn.getSignedInAccountFromIntent(activityResult.data)
task.addOnCompleteListener { completedTask ->
try {
val account = completedTask.getResult(ApiException::class.java)
val idToken = account.idToken
if (idToken != null) {
performLoginSocial(SignUpType.GOOGLE, idToken, "")
} else {
LogUtils.e("Google ID Token is null")
}
} catch (e: ApiException) {
LogUtils.e("Google sign in failed: ${e.statusCode} ${e.status}")
LogUtils.e(e.printStackTrace().toString())
}
}
}
'질문 정리' 카테고리의 다른 글
안드로이드 컴포즈 페이스북 로그인 연동 정리 (0) | 2024.05.26 |
---|---|
위임하는 방식(By)과 직접 할당하는 방식(=)의 차이는 무엇일까? (0) | 2024.05.24 |
연속된 버튼 클릭, api 요청 처리법 (1) | 2024.04.24 |
서버로 요청을 보내는 테스트 코드 (0) | 2024.04.18 |
_username과 username 왜 나누는 것일까?(백킹 프로퍼티) (0) | 2024.04.16 |