Flutter Google Sign-In with google_sign_in 7: 새로운 인증 흐름 이해하기

발행: (2026년 3월 10일 AM 11:29 GMT+9)
5 분 소요
원문: Dev.to

Source: Dev.to

google_sign_in ^7.0.0의 변경 사항

google_sign_in ^7.0.0부터 플러그인이 Android Credential Manager와 최신 Google Identity Services를 지원하도록 대대적인 리팩터링이 이루어졌습니다. 이 과정에서 전통적인 “all‑in‑one” signIn() 메서드를 대체하는 여러 파괴적 변화가 도입되었습니다. 최근에 Flutter 프로젝트를 업그레이드했다면 다음과 같은 컴파일 오류나 예상치 못한 동작을 마주할 수 있습니다:

  • GoogleSignIn() 생성자가 더 이상 존재함
  • signIn() 메서드가 제거됨
  • GoogleSignInAuthentication에서 accessToken이 사라짐
  • initialize()를 호출하지 않으면 계정 선택기가 나타나지 않음

이러한 변화는 인증(Authentication)과 인가(Authorization)를 이제 별도로 처리하도록 하는 아키텍처 전환에서 비롯되었습니다.

해결 방법 1 — GoogleSignIn 생성자 제거 (싱글톤 패턴)

GoogleSignIn 클래스는 이제 GoogleSignIn()으로 직접 인스턴스를 만들 수 없습니다.
싱글톤 인스턴스를 사용하세요:

final googleSignIn = GoogleSignIn.instance;

해결 방법 2 — 초기화가 이제 필수

플러그인을 사용하기 전에 정확히 한 번 초기화를 수행해야 합니다. 앱 시작 시(main() 등) 혹은 인증 서비스 초기화 시점에 호출합니다:

await GoogleSignIn.instance.initialize();

이 단계를 건너뛰면 인증 시트가 나타나지 않을 수 있습니다.

해결 방법 3 — signIn()authenticate()로 교체

이전 signIn() 메서드는 authenticate()로 대체되었습니다. 이 메서드는 지원되는 Android 버전에서 새로운 시스템 수준 계정 선택기 / Credential Manager 시트를 호출합니다:

final GoogleSignInAccount googleUser =
    await GoogleSignIn.instance.authenticate();

해결 방법 4 — accessToken 누락 (인증 vs. 인가)

Google은 인증(사용자가 누구인지)과 인가(앱이 어떤 권한을 갖는지)를 분리했습니다. authenticate() 호출 후 googleUser.authentication을 통해 idToken을 얻을 수 있지만, accessToken은 자동으로 반환되지 않습니다. 필요한 스코프를 명시적으로 요청해 주세요:

final clientAuth = await googleUser.authorizationClient
    .authorizeScopes(['email', 'profile']);

예시: Google과 Firebase 연동 로그인

두 토큰이 모두 필요할 경우(예: Firebase) 다음 패턴을 사용합니다:

Future signInWithGoogle() async {
  // 1. 초기화 보장
  final googleSignIn = GoogleSignIn.instance;
  await googleSignIn.initialize();

  // 2. 인증 (Identity)
  final GoogleSignInAccount googleUser =
      await googleSignIn.authenticate();

  // 3. 인가 (Permissions)
  final List scopes = ['email', 'profile'];
  final clientAuth =
      await googleUser.authorizationClient.authorizeScopes(scopes);

  // 4. Firebase Credential 생성
  final credential = GoogleAuthProvider.credential(
    idToken: googleUser.authentication.idToken,
    accessToken: clientAuth.accessToken,
  );

  // 5. Firebase 로그인
  return await FirebaseAuth.instance.signInWithCredential(credential);
}

중요: signInWithGoogle()를 호출하기 전에 앱 시작 시 한 번 GoogleSignIn.instance.initialize()를 실행하세요.

마무리 생각

새로운 google_sign_in API는 익숙한 메서드들이 제거되거나 재설계되면서 처음엔 헷갈릴 수 있습니다. 인증과 인가를 구분하는 방식을 이해하면 새로운 흐름을 파악하기 쉬워지고, 플러그인이 최신 아이덴티티 시스템에 맞춰진다는 점을 알 수 있습니다. 이 가이드가 디버깅 시간을 절약하는 데 도움이 되길 바랍니다.

0 조회
Back to Blog

관련 글

더 보기 »