flutter

Google 로그인 구현

WIKILOG 2022. 3. 27. 19:31

프로젝트 설정

Firebase 사이트에 접속하여 새 프로젝트를 생성합니다.

 

 

프로젝트 생성 후 안드로이드 버튼을 선택하여 firebase를 설정합니다.

 

 

firebase 생성시 디버그 서명 인증서 SHA-1을 입력해야 하는데 mac에서는 아래 명령어를 통해 출력된 SHA1을 입력해주면 됩니다.

 

keytool -list -v \ -alias androiddebugkey -keystore ~/.android/debug.keystore

 

윈도우는 아래 링크를 참고하시면 됩니다.

 

https://developers.google.com/android/guides/client-auth

 

다음으로는 json 파일을 해당 영역에 추가하고 SDK 설정을 해줍니다.

 

 

설정 완료 후 추가적으로 android - app - build.gradle 내 defaultConfig에서 아래와 같이 설정해줍니다.

 

 

모든 설정이 완료되었다면 Authentication 항목으로 이동하여 Google 로그인 항목을 활성화 해줍니다.

 

 

활성화까지 완료되었다면 이제는 코드 내에서 Google 로그인을 구현하도록 하겠습니다.

 

 

 

 

Flutter 내에 Google 로그인 구현

 

Flutter 내에 Google 로그인을 구현해보도록 하겠습니다.

 

우선 pubspec.yaml 내 dependencies 아래에 google_sign_in과 firebase_auth 플러그인을 추가해줍니다. 

 

  google_sign_in: ^5.2.4
  firebase_auth: ^3.3.11

 

그 후 아래 코드를 참고하여 main.dart를 수정합니다.

 

...
import 'package:firebase_core/firebase_core.dart';
...

void main() async {
  WidgetsFlutterBinding.ensureInitialized(); 
  await Firebase.initializeApp(); // 앱 실행 시 Firebase에 대해서도 초기화 진행
  runApp(MyApp());
}

 

로그인 페이지 UI를 구성합니다.

 

firebase 인증 및 Google 로그인을 설정할 sign_in.dart를 생성합니다.

 

import 'package:firebase_auth/firebase_auth.dart';
import 'package:google_sign_in/google_sign_in.dart';

final FirebaseAuth _auth = FirebaseAuth.instance;
final GoogleSignIn googleSignIn = GoogleSignIn();

String name;
String email;
String photoURL;

Future<String> signInWithGoogle() async {
  final GoogleSignInAccount googleSignInAccount = await googleSignIn.signIn();
  final GoogleSignInAuthentication googleSignInAuthentication =
      await googleSignInAccount.authentication;

  final AuthCredential credential = GoogleAuthProvider.credential(
    accessToken: googleSignInAuthentication.accessToken,
    idToken: googleSignInAuthentication.idToken,
  );

  final UserCredential authResult =
      await _auth.signInWithCredential(credential);
  final User user = authResult.user;

  assert(!user.isAnonymous);
  assert(await user.getIdToken() != null);

  final User currentUser = await _auth.currentUser;
  assert(user.uid == currentUser.uid);
  assert(currentUser.email != null);
  assert(currentUser.displayName != null);
  assert(currentUser.photoURL != null);

  name = currentUser.displayName;
  email = currentUser.email;
  photoURL = currentUser.photoURL;

  if (name.contains(" ")) {
    name = name.substring(0, name.indexOf(" "));
  }

  return 'signInWithGoogle succeeded: $user';
}

void signOutGoogle() async {
  await googleSignIn.signOut();
}

 

이 후 앱을 실행하면 정상적으로 firebase 안에 로그인 정보가 저장되어 있음을 확인할 수 있습니다.