모바일Flutter
7

구글 소셜로그인 설정 가이드 (Flutter + Java)

Firebase Console과 Google Cloud Console을 활용한 구글 소셜로그인 전체 설정 과정을 정리한 가이드입니다.

구글 소셜로그인 설정 가이드 (Flutter + Java)

전체 흐름

사용자 앱 (Flutter)
        ↓  구글 로그인 버튼 클릭
Google Sign-In SDK
        ↓  인증 요청
Google OAuth 서버
        ↓  ID Token 발급
백엔드 (Java)
        ↓  Token 검증
자체 서버 로그인 처리

Firebase vs Google Cloud Console 역할

Firebase Console = 앱 개발자용 간편 UI
Google Cloud Console = Firebase 뒤에서 돌아가는 실제 인프라

작업Firebase ConsoleGoogle Cloud Console
SHA-1 등록
google-services.json 다운로드
구글 로그인 활성화
Web Client ID 확인✅ 자동 생성 후 확인✅ 직접 생성 가능
OAuth 클라이언트 ID 관리
API 활성화

Firebase에서 SHA-1 등록 및 구글 로그인 활성화 시 → GCP에 OAuth 클라이언트 ID 자동 생성


STEP 1. SHA-1 추출

터미널(cmd)을 열고 아래 명령어를 입력합니다.

Windows:

keytool -list -v -keystore %USERPROFILE%\.android\debug.keystore -alias androiddebugkey -storepass android

Mac:

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

실행 결과 예시:

SHA1: AA:BB:CC:DD:EE:FF:11:22:33:44:55:66:77:88:99:00:AA:BB:CC:DD

⚠️ keytool을 찾을 수 없는 경우
JDK가 환경변수에 미등록된 것
Windows: 제어판 → 환경변수 → Path에 C:\Program Files\Java\jdk-XX\bin 추가 후 cmd 재실행

⚠️ PC마다 SHA-1이 다름
디버그 키스토어는 PC 최초 실행 시 자동 생성되는 고유 파일
회사 PC, 집 PC 등 개발 환경이 여러 개라면 각 PC에서 추출 후 모두 등록 필요


STEP 2. Firebase Console 설정

2-1. SHA-1 등록

console.firebase.google.com 접속
        ↓
⚙️ 프로젝트 설정 → 일반
        ↓
내 앱 → Android 앱 선택
        ↓
SHA 인증서 지문 → + 추가
        ↓
SHA-1 값 붙여넣기 → 저장

2-2. google-services.json 재다운로드

⚠️ SHA-1 추가 후 반드시 재다운로드 필요 (파일 내용이 변경됨)

같은 페이지 상단
        ↓
google-services.json 다운로드 버튼 클릭
        ↓
android/app/ 폴더에 덮어쓰기

STEP 3. 구글 로그인 활성화

Firebase Console
        ↓
Authentication → Sign-in method
        ↓
Google 클릭 → 사용 설정 토글 ON
        ↓
프로젝트 지원 이메일 선택 → 저장

STEP 4. Web Client ID 확인

Firebase Console
        ↓
⚙️ 프로젝트 설정 → 일반
        ↓
내 앱 → 웹 앱
        ↓
웹 클라이언트 ID 복사

Web Client ID는 Flutter serverClientId와 Java 백엔드 토큰 검증에 사용됨


STEP 5. GCP Console 확인

console.cloud.google.com 접속
        ↓
APIs & Services → Credentials
        ↓
아래 3가지 항목 생성 여부 확인
항목있어야 하는 것
AndroidAndroid client for [앱이름]
iOSiOS client for [앱이름]
WebWeb client (auto created by Google Service)

⚠️ 아무것도 없는 경우
Firebase Authentication → Google 토글 OFF → 저장 → 다시 ON → 저장
→ GCP Credentials에 자동 재생성됨


STEP 6. Flutter 코드 적용

final GoogleSignIn _googleSignIn = GoogleSignIn(
  serverClientId: "여기에 Web Client ID 입력",
);

⚠️ serverClientId 누락 시 idTokennull로 반환됨


STEP 7. iOS 설정

7-1. Firebase iOS 앱 등록

Firebase Console
        ↓
⚙️ 프로젝트 설정 → 내 앱 → 앱 추가 → iOS 선택
        ↓
Bundle ID 입력 (예: com.company.appname)
        ↓
GoogleService-Info.plist 다운로드
        ↓
Xcode 프로젝트 루트에 배치

Bundle ID 확인: Xcode → Runner → General → Bundle Identifier

7-2. iOS URL Scheme 설정 (필수)

Xcode 실행
        ↓
Runner → Info → URL Types
        ↓
+ 버튼 클릭
        ↓
URL Schemes에 REVERSED_CLIENT_ID 입력

REVERSED_CLIENT_IDGoogleService-Info.plist 파일 내에 있음
예: com.googleusercontent.apps.XXXXXXX

⚠️ 이 설정 누락 시 iOS에서 구글 로그인 후 앱으로 복귀가 안 됨

Android vs iOS 설정 비교

항목AndroidiOS
필수 파일google-services.jsonGoogleService-Info.plist
추가 설정SHA-1 등록URL Scheme 등록
파일 위치android/app/Xcode 프로젝트 루트
고유 식별자패키지명 + SHA-1Bundle ID

STEP 8. 릴리즈 키스토어 SHA-1 등록

⚠️ 디버그 SHA-1만 등록하면 실제 출시 앱에서 구글 로그인이 동작하지 않음

릴리즈 키스토어 생성 (없는 경우)

keytool -genkey -v -keystore [키스토어파일명].jks -alias [alias명] -keyalg RSA -keysize 2048 -validity 10000

⚠️ 이 파일을 잃어버리면 앱 업데이트 영구 불가 → 반드시 안전한 곳에 백업

릴리즈 SHA-1 추출

keytool -list -v -keystore [키스토어경로].jks -alias [alias명]

Firebase에 릴리즈 SHA-1 추가 등록

Firebase Console → ⚙️ 프로젝트 설정 → 내 앱 → Android 앱
        ↓
SHA 인증서 지문 → + 추가 → 릴리즈 SHA-1 붙여넣기 → 저장
        ↓
google-services.json 재다운로드 → 덮어쓰기

디버그 vs 릴리즈 SHA-1 비교

구분용도키스토어 위치
디버그개발 / 테스트%USERPROFILE%\.android\debug.keystore (자동 생성)
릴리즈실제 출시 앱직접 생성한 .jks 파일

PC가 바뀌었을 때

디버그 키스토어는 PC마다 고유하게 자동 생성되므로 새 PC에서는 SHA-1이 달라짐

새 PC 추가 시 해야 할 것

작업필요 여부이유
SHA-1 추출✅ 필수PC마다 debug.keystore가 다름
Firebase SHA-1 추가 등록✅ 필수미등록 시 12500 에러 발생
google-services.json 재다운로드✅ 필수SHA-1 추가 후 json 내용 변경됨
Web Client ID❌ 그대로 사용PC가 바뀌어도 동일한 값
Flutter serverClientId❌ 그대로 사용PC가 바뀌어도 동일한 값

새 PC 추가 순서

새 PC에서 cmd 실행
        ↓
keytool 명령어로 SHA-1 추출
        ↓
Firebase Console → SHA-1 추가 등록
        ↓
google-services.json 재다운로드
        ↓
android/app/ 폴더에 덮어쓰기
        ↓
완료 ✅

PC별 SHA-1 관리 예시

PCSHA-1Firebase 등록 여부
회사 PCAA:BB:CC...
집 PCDD:EE:FF...
신규 PCGG:HH:II...✅ 추가 등록 필요

✅ SHA-1은 기존 값 삭제 없이 계속 추가하는 방식으로 관리


오류 해결 모음 (FAQ)

오류원인해결
ApiException 12500OAuth 클라이언트 ID 없음 or SHA-1 불일치Firebase 토글 OFF→ON / SHA-1 재등록
DEVELOPER_ERRORSHA-1 불일치현재 PC SHA-1 Firebase 등록 확인
idToken nullserverClientId 누락Flutter 코드에 Web Client ID 입력
Keystore does not existWindows ~ 경로 인식 불가%USERPROFILE% 로 교체
iOS 로그인 후 앱 복귀 안됨URL Scheme 미설정Xcode URL Types에 REVERSED_CLIENT_ID 추가
출시 앱에서 로그인 실패릴리즈 SHA-1 미등록릴리즈 키스토어 SHA-1 Firebase 추가 등록
새 PC에서 로그인 실패새 PC SHA-1 미등록새 PC SHA-1 추출 후 Firebase 추가 등록

Web Client ID 사용 위치

Flutter (프론트엔드)

final GoogleSignIn _googleSignIn = GoogleSignIn(
  serverClientId: "여기에 Web Client ID 입력",
);

Java (백엔드)

GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(
    new NetHttpTransport(),
    new GsonFactory()
)
.setAudience(Collections.singletonList("여기에 Web Client ID 입력"))
.build();

전체 흐름

Flutter 앱
  serverClientId로 구글 로그인 요청
        ↓
구글 서버가 idToken 발급
        ↓
Flutter가 idToken을 Java 백엔드로 전송
        ↓
Java 백엔드가 Web Client ID로 idToken 검증
        ↓
검증 성공 → 로그인 처리
#구글#소셜로그인#Firebase Console#Google Cloud Console#구글소셜로그인

댓글

(0)
구글 소셜로그인 설정 가이드 (Flutter + Java) | 강민석의 개발블로그