google static method

KAuthError google(
  1. GoogleSignInException e
)

구글 로그인 에러 → KAuthError

매핑 전략

  1. 에러 코드 기반 매핑 (안정적)
  2. description 문자열 패턴 매칭 (fallback)
  3. 기본 에러 반환

지원하는 에러 코드

  • canceled, interrupted: 사용자가 로그인을 취소/중단함
  • clientConfigurationError, providerConfigurationError: OAuth 설정 오류
  • unknownError: 알 수 없는 에러 (문자열 패턴으로 세분화)

Implementation

static KAuthError google(GoogleSignInException e) {
  final code = e.code;

  // 1. 사용자 취소/중단
  if (code == GoogleSignInExceptionCode.canceled ||
      code == GoogleSignInExceptionCode.interrupted) {
    return KAuthError.fromCode(ErrorCodes.userCancelled, originalError: e);
  }

  // 2. OAuth 설정 오류 (코드 기반)
  if (code == GoogleSignInExceptionCode.clientConfigurationError ||
      code == GoogleSignInExceptionCode.providerConfigurationError) {
    return KAuthError(
      code: ErrorCodes.googleMissingIosClientId,
      message: 'Google OAuth 설정 오류입니다.',
      hint: 'iosClientId 설정과 Cloud Console을 확인하세요.',
      docs: 'https://console.cloud.google.com/apis/credentials',
      originalError: e,
    );
  }

  // 3. description 문자열 패턴 매칭 (unknownError용 fallback)
  final desc = e.description?.toLowerCase() ?? '';

  // 네트워크 에러 패턴
  if (_GoogleErrorPatterns.matchesNetwork(desc)) {
    return KAuthError(
      code: ErrorCodes.networkError,
      message: '네트워크 오류가 발생했습니다.',
      hint: '인터넷 연결을 확인해주세요.',
      originalError: e,
    );
  }

  // OAuth 설정 에러 패턴
  if (_GoogleErrorPatterns.matchesOAuth(desc)) {
    return KAuthError(
      code: ErrorCodes.googleMissingIosClientId,
      message: 'Google OAuth 설정 오류입니다.',
      hint: 'iosClientId 설정과 Cloud Console을 확인하세요.',
      docs: 'https://console.cloud.google.com/apis/credentials',
      originalError: e,
    );
  }

  // 4. 기본 에러
  return KAuthError(
    code: ErrorCodes.googleSignInFailed,
    message: '구글 로그인 중 오류가 발생했습니다.',
    hint: e.description ?? 'Cloud Console 설정을 확인하세요.',
    docs: 'https://console.cloud.google.com/apis/credentials',
    originalError: e,
  );
}