Search
🗞️

Flutter Google sign-in with firebase authentication 파이어베이스 구글 로그인 연동

생성일
2021/08/01 13:54
태그
Flutter
속성

Dependency

flutter pub add google_sign_in
Plain Text
복사

UI

Anonymous 로그인만 사용했는데, 여기에 Google 로그인을 위해 버튼 하나를 추가할게요.
애플 로그인은 애플 디자인 가이드 안따르면 심사때 리젝 먹는데,,, 안드로이드도 기준이 있었는지는 기억이 가물가물,,, 일단 기능 구현 먼저. 디자인은 이대로 일단 갑니다.

Firebase 설정

Firebase Authentication에서 Google 로그인 기능을 활성화 시켜주세요.

iOS 프로젝트 설정

Info.plist의 URL Types 값에 GoogleService-Info.plist의 Reversed Client ID값을 입력합니다.
왜 2개냐구요?
여기 포스팅에서 개발환경을 Staging, Production으로 분리해서 GoogleService-Info.plist 파일이 두개거든요. 환경을 1개로만 사용한다면 하나만 추가하면 됩니다.
/Users/jinguijung/kyulabs/chai-booster-flutter/ios/Pods/Pods.xcodeproj: warning: The iOS Simulator deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 8.0, but the range of supported deployment target versions is 9.0 to 14.5.99. (in target 'AppAuth' from project 'Pods')
Bash
복사
Flutter 프로젝트를 하다보면 Pub dev 과정에서 iOS Target version 관련 오류를 만날 수 있다. 해결방법은 이 포스팅을 참고해주세요.

Android 프로젝트 설정

Firebase Project를 정상적으로 생성하고, Google-service.json 파일을 추가했다면 그 이상의 별도 설정은 필요 없습니다 :)

Flutter 구현

AuthProvider.dart

import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/foundation.dart'; import 'package:google_sign_in/google_sign_in.dart'; 👈👈👈👈👈 추가추가 import 'package:shared_preferences/shared_preferences.dart'; class AuthProvider with ChangeNotifier { FirebaseAuth _auth = FirebaseAuth.instance; GoogleSignIn _googleSignIn = GoogleSignIn(); 👈👈👈👈👈👈👈👈👈 추가 필요 User _user; AuthProvider() { _prepareUser(); } User getUser() { return _user; } void _prepareUser() async { final pref = await SharedPreferences.getInstance(); bool isFirstLaunched = pref.getBool('isFirstLaunched') ?? false; if (!isFirstLaunched) { await FirebaseAuth.instance.signOut(); } await pref.setBool('isFirstLaunched', true); setUser(_auth.currentUser); } Future<void> signInAnonymously() async { final authResult = await _auth.signInAnonymously(); setUser(authResult.user); return Future<void>.value(); } Future<void> signInGoogle() async { 👈👈👈👈👈👈 이 함수가 추가됐지요~ final googleSignInAccount = await _googleSignIn.signIn(); try { final GoogleSignInAuthentication googleSignInAuthentication = await googleSignInAccount .authentication; final AuthCredential credential = GoogleAuthProvider.credential( accessToken: googleSignInAuthentication.accessToken, idToken: googleSignInAuthentication.idToken, ); final authResult = await _auth.signInWithCredential(credential); setUser(authResult.user); return Future<void>.value(); } catch(error) { setUser(null); return Future<void>.value(); } } void setUser(User user) { _user = user; notifyListeners(); } void signOut() async { await _auth.signOut(); setUser(null); } void withdrawalAccount() async { await getUser().delete(); setUser(null); } }
Dart
복사