Skip to content

Google 로그인을 공통 서버 callback과 Firebase custom token 흐름으로 전환한다 #720

Description

@opficdev

문제

현재 GoogleAuthenticationServiceImpl은 다음 Google 인증 책임을 직접 수행합니다.

  • GoogleSignIn SDK 로그인
  • ID token과 access token 수신
  • Firebase credential 생성
  • Firebase provider 직접 연결·해제
  • Google 연결 해제와 grant 정리
  • Google 사용자 이름과 사진 처리

Apple·GitHub와 같은 서버 callback 구조를 사용하려면 iOS는 Google token을 직접 다루지 않고 공통 OAuth session과 ticket만 사용해야 합니다.

결정 사항

  • GoogleSignIn SDK 인증을 ASWebAuthenticationSession 기반 서버 callback 흐름으로 전환합니다.
  • GitHub에서 만든 공통 모델과 helper를 재사용합니다.
  • 서버에서 Google 인증 URL을 받고 callback ticket만 해석합니다.
  • ticket 교환으로 FirebaseCustomTokenResponse를 받습니다.
  • Firebase custom token은 signIn(withCustomToken:)에 즉시 사용합니다.
  • 계정 작업 응답은 EmptyAPIResponse를 사용합니다.
  • Google provider 오류는 기존 AuthError 계약으로 변환합니다.

기대 동작

  • Google 로그인 화면이 시스템 브라우저 시트로 표시됩니다.
  • iOS가 Google ID token, access token, refresh token을 받지 않습니다.
  • 서버가 Firebase 사용자 이름과 사진을 provider 정보에 반영합니다.
  • 로그인 이후 기존 UserService.upsertUser와 초기 데이터 생성 흐름이 유지됩니다.
  • 로그인 취소는 nil, 계정 연결 취소는 false를 유지합니다.
  • 계정 연결·해제 후 currentUser.reload()을 호출합니다.

수정 방향

  • GoogleAuthenticationServiceImplGIDSignIn 호출과 token 처리를 제거합니다.
  • sign-in, link, unlink, deleteAuth를 공통 session·ticket REST 계약으로 전환합니다.
  • GoogleSignIn package와 import 사용처가 0건이면 Tuist package dependency를 제거합니다.
  • GIDClientID, REVERSED_CLIENT_ID와 Google callback URL scheme 사용 여부를 확인한 뒤 불필요한 설정을 제거합니다.
  • Firebase와 앱 공통 설정에 필요한 GoogleService-Info.plist는 유지합니다.
  • 일반 로그아웃에서는 Firebase와 FCM 세션만 정리하고 Google REST API를 호출하지 않습니다.

수용 기준

  • iOS 코드에 Google provider token 처리가 남지 않습니다.
  • Apple·GitHub·Google이 동일한 session·ticket·custom token 모델을 사용합니다.
  • 공급자별 endpoint와 오류는 Google service 내부에 유지됩니다.
  • Google 사용자 이름과 사진, provider 목록이 FirebaseAuth에 반영됩니다.
  • 기존 로그인·연결·해제·회원탈퇴 후처리가 유지됩니다.
  • 불필요한 GoogleSignIn dependency와 URL scheme이 제거됩니다.
  • 새 target dependency가 추가되지 않습니다.
  • SwiftLint와 iOS build가 통과합니다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions