기본 콘텐츠로 건너뛰기

Flutter GoogleSignInException 해결기 - Debug는 되는데 Release에서만 Google 로그인 실패하는 이유

Flutter로 안드로이드 앱을 개발하면서 Google Sign-In과 Firebase Authentication을 함께 사용하는 경우가 많다. 나 역시 Windows 환경에서 Antigravity IDE를 사용하여 Flutter 앱을 개발하고 있었고, 개발 중에는 Google 로그인이 정상적으로 동작했다. 하지만 앱을 Google Play Console의 내부 테스트 트랙에 배포한 후 테스트를 진행하자 예상치 못한 문제가 발생했다. Google Sign-in failed. GoogleSignInException( code: GoogleSignInExceptionCode.canceled, activity is cancelled by the user. ) 처음에는 정말 사용자가 로그인을 취소한 것처럼 보였다. 하지만 실제 원인은 전혀 다른 곳에 있었다. Debug에서는 정상인데 Release에서는 왜 실패할까? 개발 중에는 Antigravity에서 Debug 모드로 실행했기 때문에 모든 것이 정상적으로 동작했다. Google 계정을 선택하면 Firebase Authentication까지 문제없이 로그인되었다. 하지만 Release App Bundle(AAB)을 만들어 Google Play 내부 테스트에 업로드한 후 설치하면 Google 계정 선택 이후 바로 예외가 발생했다. 처음에는 Firebase 설정이나 코드의 문제라고 생각했지만, 실제 원인은 앱이 서명(Signing)되는 방식에 있었다. Google Sign-In은 SHA-1을 이용해 앱을 인증한다 Google Sign-In은 단순히 패키지 이름만 확인하는 것이 아니다. Android 앱은 다음 두 가지 정보를 이용해 인증된다. Package Name SHA-1 인증서 지문 Firebase Console에 Android 앱을 등록할 때 SHA-1을 입력하는 이유도 바로 이것이다. Debug 환경에서는 Debug Keystore의 SHA-1이 사용된다. Release APK를 직접 설치하면 Relea...

Flutter GoogleSignInException 해결기 - Debug는 되는데 Release에서만 Google 로그인 실패하는 이유

Firebase setting


Flutter로 안드로이드 앱을 개발하면서 Google Sign-In과 Firebase Authentication을 함께 사용하는 경우가 많다. 나 역시 Windows 환경에서 Antigravity IDE를 사용하여 Flutter 앱을 개발하고 있었고, 개발 중에는 Google 로그인이 정상적으로 동작했다.

하지만 앱을 Google Play Console의 내부 테스트 트랙에 배포한 후 테스트를 진행하자 예상치 못한 문제가 발생했다.

Google Sign-in failed.
GoogleSignInException(
  code: GoogleSignInExceptionCode.canceled,
  activity is cancelled by the user.
)

처음에는 정말 사용자가 로그인을 취소한 것처럼 보였다. 하지만 실제 원인은 전혀 다른 곳에 있었다.

Debug에서는 정상인데 Release에서는 왜 실패할까?

개발 중에는 Antigravity에서 Debug 모드로 실행했기 때문에 모든 것이 정상적으로 동작했다.

Google 계정을 선택하면 Firebase Authentication까지 문제없이 로그인되었다.

하지만 Release App Bundle(AAB)을 만들어 Google Play 내부 테스트에 업로드한 후 설치하면 Google 계정 선택 이후 바로 예외가 발생했다.

처음에는 Firebase 설정이나 코드의 문제라고 생각했지만, 실제 원인은 앱이 서명(Signing)되는 방식에 있었다.

Google Sign-In은 SHA-1을 이용해 앱을 인증한다

Google Sign-In은 단순히 패키지 이름만 확인하는 것이 아니다.

Android 앱은 다음 두 가지 정보를 이용해 인증된다.

  • Package Name
  • SHA-1 인증서 지문

Firebase Console에 Android 앱을 등록할 때 SHA-1을 입력하는 이유도 바로 이것이다.

Debug 환경에서는 Debug Keystore의 SHA-1이 사용된다.

Release APK를 직접 설치하면 Release Keystore의 SHA-1이 사용된다.

여기까지는 대부분의 개발자가 알고 있는 내용이다.

하지만 Google Play를 통하면 이야기가 달라진다.

Google Play는 앱을 다시 서명한다

이번 문제를 조사하면서 가장 크게 배운 부분이다.

App Bundle(AAB)을 Google Play에 업로드하면, 사용자가 설치하는 앱은 개발자가 만든 APK가 그대로 전달되는 것이 아니다.

Google Play App Signing 기능을 통해 Google이 다시 서명하여 사용자에게 배포한다.

즉 흐름은 다음과 같다.

개발자
    ↓
Release JKS로 AAB 생성
    ↓
Google Play 업로드
    ↓
Google Play App Signing
    ↓
Google이 새로운 인증서로 다시 서명
    ↓
사용자 설치

따라서 실제 기기에 설치된 앱은 개발자의 Release JKS가 아니라 Google Play App Signing 인증서를 사용하게 된다.

이 SHA-1이 Firebase에 등록되어 있지 않으면 Google Sign-In 인증이 실패한다. 이 경우 사용자 취소처럼 보이는 GoogleSignInExceptionCode.canceled 예외가 발생할 수 있다.

serverClientId는 왜 Web Client ID일까?

이번에 가장 헷갈렸던 부분이 바로 이것이다.

Android 앱인데 왜 Android OAuth Client가 아니라 Web Client ID를 사용하는지 이해되지 않았다.

동작 구조를 이해하고 나니 이유가 명확했다.

Android App
      │
      │ Google Sign-In
      ▼
Google OAuth
      │
      │ ID Token 발급
      ▼
Firebase Authentication
      │
      ▼
Firebase User 생성

Android 앱이 Google 로그인 화면을 띄울 때는 Android OAuth Client가 사용된다.

이 과정은 SHA-1과 Package Name을 이용하여 자동으로 처리되므로 개발자가 별도로 Android Client ID를 코드에 입력하지 않는다.

반면 Firebase Authentication은 Google이 발급한 ID Token을 검증해야 한다.

이때 필요한 것이 바로 Web Client ID이다.

Flutter의 GoogleSignIn에서 사용하는 serverClientId는 바로 이 Web Client ID를 의미한다.

즉,

  • Android Client → Google 계정 선택
  • Web Client(serverClientId) → Firebase가 토큰 검증

이라는 역할 분담이 이루어진다.

결국 해결 방법은 무엇이었을까?

문제를 해결하기 위해 확인해야 할 것은 다음과 같다.

  • Debug SHA-1 등록 여부
  • Release SHA-1 등록 여부
  • Google Play App Signing SHA-1 등록 여부
  • 새로운 google-services.json 다운로드
  • 앱 재빌드 후 다시 업로드

특히 내부 테스트나 프로덕션에서는 Google Play App Signing의 SHA-1 등록 여부를 가장 먼저 확인하는 것이 좋다.

이번 경험으로 이해한 Google Sign-In 구조

이번 문제를 해결하면서 단순히 오류 하나를 수정한 것이 아니라 Google Sign-In의 전체 구조를 이해하게 되었다.

처음에는 Google Sign-In과 Firebase Authentication이 하나의 기능처럼 느껴졌지만 실제로는 서로 다른 역할을 수행한다.

Google Sign-In은 사용자의 Google 계정을 인증하고,

Firebase Authentication은 그 결과로 전달받은 ID Token을 이용해 Firebase 사용자로 로그인시킨다.

그리고 그 사이에는 Android OAuth Client, Web Client ID, SHA-1 인증서, Google Play App Signing이라는 여러 요소가 함께 동작한다.

Debug에서는 정상인데 Google Play 내부 테스트에서만 로그인에 실패한다면, 단순히 Flutter 코드만 의심하기보다 앱 서명 방식과 Firebase에 등록된 SHA-1을 먼저 확인해 보길 추천한다.

이번 경험 덕분에 Google Sign-In의 동작 원리를 훨씬 깊이 이해할 수 있었고, 앞으로 비슷한 문제를 만나더라도 훨씬 빠르게 원인을 찾을 수 있을 것 같다.

댓글

이 블로그의 인기 게시물

호주 입국 신고서 작성법 총정리! 꼭 알아야 할 유의사항

 호주는 아름다운 자연과 높은 삶의 질로 많은 여행자와 유학생이 찾는 나라다. 하지만 입국 절차를 제대로 준비하지 않으면 공항에서 예상치 못한 문제를 겪을 수 있다. 그중에서도 "입국 신고서"는 필수적으로 작성해야 하는 문서 중 하나다. 이번 글에서는 호주 입국 신고서 작성법과 주의해야 할 사항 을 상세히 정리해 본다. 1. 호주 입국 신고서란? 호주 입국 신고서(Australian Incoming Passenger Card, IPC) 는 모든 여행자가 공항 입국 심사 시 제출해야 하는 서류다. 이는 세관 신고 및 검역 목적 으로 사용되며, 호주 정부가 여행자의 신상 정보와 반입 물품을 파악하는 데 도움을 준다. 2. 입국 신고서 작성 시기 및 방법 ① 언제 작성해야 할까? 호주 입국 신고서는 비행기 안에서 승무원이 배포 한다. 따라서 비행기가 호주 공항에 도착하기 전, 미리 작성해 두는 것이 좋다. ② 어떻게 작성해야 할까? 입국신고서 내용: 반드시 영어로 작성해야 한다. 개인 정보 입력: 여권에 기재된 영문 이름, 생년월일, 국적 등을 정확하게 기입한다. 호주 내 주소: 체류할 호텔이나 숙소 주소를 적어야 한다. 만약 정확한 주소를 모르면, 예약한 호텔 이름이라도 적어두는 것이 좋다. 방문 목적: 관광(Tourism), 사업(Business), 유학(Study) 등 방문 목적을 선택한다. 반입 물품 신고: 음식, 동식물, 의약품, 현금(10,000 AUD 이상) 등 신고해야 하는 품목이 있는지 체크 해야 한다. 특히 네 ( Yes )/아니오(No) 를 선택하는 부분에서는 잘 모르겠으면 무조건 네 ( Yes )에 체크해야 미신고 항목에 대한 벌금을 피할 수 있다. 건강 상태 및 범죄 이력: 최근 6일 이내에 방문한 국가 및 건강 상태에 대한 질문이 포함되며, 범죄 기록 여부도 체크해야 한다. 3. 신고해야 하는 물품과 주의사항 호주는 검역 규정이 매우 엄격한 국가 다. 따라서 아래와 같은 물품을 반입할 경우 반드시 신고해야 한다. ...

호주 485 졸업생 비자 비용 2배 인상! 2026년 변경 내용 총정리

2026년 3월부터 호주 정부가 졸업생 임시비자(Temporary Graduate Visa, Subclass 485) 신청 비용을 대폭 인상했다. 이번 조치는 국제학생 정책 변화의 일환으로 시행되었으며, 호주에서 학업을 마친 유학생들에게 상당한 영향을 줄 것으로 예상된다. 이 글에서는 485 비자 비용 인상 내용, 기본 조건, 그리고 유학생에게 미칠 영향 을 정리한다. 1. 호주 485 비자란 무엇인가 호주 졸업생 임시비자(Subclass 485) 는 호주에서 학업을 마친 국제학생이 일정 기간 동안 호주에서 거주하고 일할 수 있도록 허용하는 비자 다. 이 비자의 주요 목적은 다음과 같다. 호주 대학 졸업생에게 현지 취업 경험 제공 졸업 후 경력 개발 기회 제공 향후 영주권(PR) 신청을 위한 경력 확보 즉, 많은 유학생들에게 학업 이후 체류와 취업의 핵심 단계 로 활용되는 비자다. 2. 2026년 3월부터 485 비자 비용 대폭 인상 2026년 3월 1일부터 485 비자 신청 비용이 두 배로 인상 되었다. 변경 전 기본 신청비: AUD $2,300 변경 후 기본 신청비: AUD $4,600 이는 100% 인상 된 수준이며, 갑작스럽게 시행되어 많은 유학생들에게 부담이 되고 있다. 가족을 포함해 신청하는 경우 비용 은 다음과 같다. 주 신청자: $4,600 성인 동반자: $2,300 18세 미만 자녀: $1,160 예를 들어 배우자와 함께 신청하는 경우 총 비용이 6,900달러 이상 이 될 수 있다. 3. 이번 비자 비용 인상은 언제부터 적용되는가 이번 변경은 2026년 3월 1일부터 즉시 적용 된다. 즉 다음과 같은 경우 새로운 비용 이 적용된다. 2026년 3월 1일 이후 485 비자를 새로 신청하는 경우 이미 신청이 완료된 경우에는 이전 비용이 적용될 수 있지만, 신청 접수 날짜 기준으로 비용이 결정된다. 4. 485 비자의 기본 조건 호주 ...