diff --git a/.gitignore b/.gitignore index 4a76db27..97174e4e 100644 --- a/.gitignore +++ b/.gitignore @@ -16,4 +16,5 @@ local.properties .idea/deploymentTargetSelector.xml .idea/misc.xml .idea/gradle.xml -.idea/appInsightsSettings.xml \ No newline at end of file +.idea/appInsightsSettings.xml +/app/google-services.json \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 26d33521..00000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index d6d11a6d..1d79ed0c 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -108,9 +108,11 @@ dependencies { //implementation ("androidx.datastore:datastore-preferences:1.1.1") // 구글 로그인 - implementation(platform("com.google.firebase:firebase-bom:34.1.0")) - implementation("com.google.firebase:firebase-auth") implementation("com.google.android.gms:play-services-auth:21.2.0") + + implementation("androidx.credentials:credentials:1.2.2") + implementation("androidx.credentials:credentials-play-services-auth:1.2.2") + } kapt { diff --git a/app/google-services.json b/app/google-services.json deleted file mode 100644 index c3a720e4..00000000 --- a/app/google-services.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "project_info": { - "project_number": "353417813537", - "project_id": "thip-3a698", - "storage_bucket": "thip-3a698.firebasestorage.app" - }, - "client": [ - { - "client_info": { - "mobilesdk_app_id": "1:353417813537:android:69029c2bc957df7fab4d60", - "android_client_info": { - "package_name": "com.texthip.thip" - } - }, - "oauth_client": [ - { - "client_id": "353417813537-1q82ucn3u64be1idm53dqecqh65jqr8b.apps.googleusercontent.com", - "client_type": 1, - "android_info": { - "package_name": "com.texthip.thip", - "certificate_hash": "c5598e96d1aface5acbc3b1a82d94b57ed7979f5" - } - }, - { - "client_id": "353417813537-gqd3v6turdn9l26rfeorapgj55pe4nd4.apps.googleusercontent.com", - "client_type": 1, - "android_info": { - "package_name": "com.texthip.thip", - "certificate_hash": "1f2681ba8d7a53b61b3a10214109763221ed6150" - } - }, - { - "client_id": "353417813537-ihcvubi6dsbsbq1psgbr1sqj0g4i4c17.apps.googleusercontent.com", - "client_type": 1, - "android_info": { - "package_name": "com.texthip.thip", - "certificate_hash": "673c2d448182cb54e88248b18ba155fb25891115" - } - }, - { - "client_id": "353417813537-lovs0p2tb9kjnjlp493a7098ov0cb2bu.apps.googleusercontent.com", - "client_type": 1, - "android_info": { - "package_name": "com.texthip.thip", - "certificate_hash": "99315de9382f8b2903131eb4ae926a4739803ef1" - } - }, - { - "client_id": "353417813537-ck9g1v0qprlb5nf4dvasinim403eng0f.apps.googleusercontent.com", - "client_type": 3 - } - ], - "api_key": [ - { - "current_key": "AIzaSyCFzpbeT-8JQCGxiSKuVXMvcNNYFtl6Fuo" - } - ], - "services": { - "appinvite_service": { - "other_platform_oauth_client": [ - { - "client_id": "353417813537-ck9g1v0qprlb5nf4dvasinim403eng0f.apps.googleusercontent.com", - "client_type": 3 - } - ] - } - } - } - ], - "configuration_version": "1" -} \ No newline at end of file diff --git a/app/src/main/java/com/texthip/thip/data/repository/AuthRepository.kt b/app/src/main/java/com/texthip/thip/data/repository/AuthRepository.kt index 4b9dbd58..ff69d8f5 100644 --- a/app/src/main/java/com/texthip/thip/data/repository/AuthRepository.kt +++ b/app/src/main/java/com/texthip/thip/data/repository/AuthRepository.kt @@ -1,9 +1,6 @@ package com.texthip.thip.data.repository import android.content.Context -import com.google.firebase.Firebase -import com.google.firebase.auth.GoogleAuthProvider -import com.google.firebase.auth.auth import com.kakao.sdk.user.UserApiClient import com.texthip.thip.data.model.auth.request.AuthRequest import com.texthip.thip.data.model.auth.response.AuthResponse @@ -11,7 +8,10 @@ import com.texthip.thip.data.model.base.handleBaseResponse import com.texthip.thip.data.service.AuthService import kotlinx.coroutines.CancellableContinuation import kotlinx.coroutines.suspendCancellableCoroutine -import kotlinx.coroutines.tasks.await +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.jsonObject +import kotlinx.serialization.json.jsonPrimitive +import java.util.Base64 import javax.inject.Inject import javax.inject.Singleton import kotlin.coroutines.resume @@ -36,13 +36,14 @@ class AuthRepository @Inject constructor( } suspend fun loginWithGoogle(idToken: String): Result { return runCatching { - //Firebase에 구글 ID 토큰으로 로그인 - val credential = GoogleAuthProvider.getCredential(idToken, null) - val authResult = Firebase.auth.signInWithCredential(credential).await() - val googleUid = authResult.user?.uid ?: throw IllegalStateException("Google User UID is null") + val payload = idToken.split('.')[1]//ID 토큰을 .기준 분리 + val decodedJson = String(Base64.getUrlDecoder().decode(payload))//디코딩 해서 JSON 문자열 반환 + + val jsonObject = Json.parseToJsonElement(decodedJson).jsonObject + val googleSubId = jsonObject["sub"]?.jsonPrimitive?.content ?: throw IllegalStateException("구글 userID (sub)값이 없습니다.")//sub 값 추출 //받아온 UID로 신규/기존 유저인지 확인 요청 - val request = AuthRequest(oauth2Id = "google_$googleUid") + val request = AuthRequest(oauth2Id = "google_$googleSubId") authService.checkNewUser(request) .handleBaseResponse() .getOrThrow() diff --git a/app/src/main/java/com/texthip/thip/ui/mypage/screen/MypageEditScreen.kt b/app/src/main/java/com/texthip/thip/ui/mypage/screen/MypageEditScreen.kt index 12599855..c749cc1b 100644 --- a/app/src/main/java/com/texthip/thip/ui/mypage/screen/MypageEditScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/mypage/screen/MypageEditScreen.kt @@ -114,7 +114,7 @@ fun EditProfileContent( WarningTextField( containerColor = colors.DarkGrey02, value = uiState.nickname, - onValueChange = onNicknameChange, + onValueChange = { newNickname -> onNicknameChange(newNickname.lowercase()) }, hint = stringResource(R.string.nickname_condition), showWarning = uiState.nicknameWarningMessageResId != null, showIcon = false, diff --git a/app/src/main/java/com/texthip/thip/ui/mypage/viewmodel/MyPageViewModel.kt b/app/src/main/java/com/texthip/thip/ui/mypage/viewmodel/MyPageViewModel.kt index 4cb77adc..84bcf07a 100644 --- a/app/src/main/java/com/texthip/thip/ui/mypage/viewmodel/MyPageViewModel.kt +++ b/app/src/main/java/com/texthip/thip/ui/mypage/viewmodel/MyPageViewModel.kt @@ -71,7 +71,7 @@ class MyPageViewModel @Inject constructor( viewModelScope.launch { tokenManager.clearTokens() // 2. 카카오 SDK에서 로그아웃 - UserApiClient.instance.unlink { error -> + UserApiClient.instance.logout { error -> if (error != null) { Log.e("MyPageViewModel", "카카오 로그아웃 실패", error) } else { diff --git a/app/src/main/java/com/texthip/thip/ui/signin/screen/SignupNicknameScreen.kt b/app/src/main/java/com/texthip/thip/ui/signin/screen/SignupNicknameScreen.kt index 3033a780..9b27f717 100644 --- a/app/src/main/java/com/texthip/thip/ui/signin/screen/SignupNicknameScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/signin/screen/SignupNicknameScreen.kt @@ -100,7 +100,7 @@ fun SignupNicknameContent( WarningTextField( containerColor = colors.DarkGrey02, value = nickname, - onValueChange = onNicknameChange, + onValueChange = { newNickname -> onNicknameChange(newNickname.lowercase()) },//소문자로 즉시 변경 hint = stringResource(R.string.nickname_condition), showWarning = warningMessageResId != null, showIcon = false, diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 24c043da..8976d38e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -445,6 +445,6 @@ 과학/IT - 353417813537-ck9g1v0qprlb5nf4dvasinim403eng0f.apps.googleusercontent.com + 211189590640-a2ul4bnsvislm12ov7k8eu61mtketl8d.apps.googleusercontent.com \ No newline at end of file