[Flutter] Google Login

Flutter 프로젝트 설정 #

1flutter create my_project
2cd my_project

Firebase 설정 #

  1. Firebase Console에 가서 새 프로젝트를 생성한다.
  2. 안드로이드 앱을 추가한다.
  3. 패키지 이름을 입력합니다. - 예: com.example.my_project
  4. google-services.json 파일을 다운로드한다.
  5. 다운로드한 google-services.json 파일을 android/app Directory에 추가한다.

Dependencies 추가 #

  • pubspec.yaml 파일을 열고 google_sign_in과 firebase_auth 패키지를 추가한다.

    1dependencies:
    2  flutter:
    3    sdk: flutter
    4  google_sign_in: ^6.1.0
    5  firebase_auth: ^4.5.0
    6  firebase_core: ^2.16.0
  • 그런 다음, 패키지를 설치한다.

    1flutter pub get

Android 설정 #

  • android/build.gradle 파일을 열고 classpath에 Google 서비스 플러그인을 추가한다.

    1buildscript {
    2    dependencies {
    3        ......
    4        classpath 'com.google.gms:google-services:4.3.15'  // 최신 버전 확인
    5    }
    6}
  • 그 다음 android/app/build.gradle 파일을 열고 아래를 추가한다.

    1apply plugin: 'com.google.gms.google-services'
    2
    3android {
    4    ......
    5    defaultConfig {
    6        ......
    7        minSdkVersion 21
    8    }
    9}

Firebase 초기화 #

  • lib/main.dart 파일을 열고 Firebase를 초기화한다.
     1import 'package:flutter/material.dart';
     2import 'package:firebase_core/firebase_core.dart';
     3import 'package:google_sign_in/google_sign_in.dart';
     4import 'package:firebase_auth/firebase_auth.dart';
     5
     6void main() async {
     7  WidgetsFlutterBinding.ensureInitialized();
     8  await Firebase.initializeApp();
     9  runApp(MyApp());
    10}
    11
    12class MyApp extends StatelessWidget {
    13  @override
    14  Widget build(BuildContext context) {
    15    return MaterialApp(
    16      home: SignInScreen(),
    17    );
    18  }
    19}

Google 로그인 기능 구현 #

  • SignInScreen 클래스를 추가하여 Google 로그인 기능을 구현한다.
     1class SignInScreen extends StatelessWidget {
     2  final GoogleSignIn googleSignIn = GoogleSignIn();
     3  final FirebaseAuth firebaseAuth = FirebaseAuth.instance;
     4
     5  Future<User?> _signInWithGoogle() async {
     6    final GoogleSignInAccount? googleUser = await googleSignIn.signIn();
     7    final GoogleSignInAuthentication? googleAuth = await googleUser?.authentication;
     8
     9    final AuthCredential credential = GoogleAuthProvider.credential(
    10      accessToken: googleAuth?.accessToken,
    11      idToken: googleAuth?.idToken,
    12    );
    13
    14    UserCredential userCredential = await firebaseAuth.signInWithCredential(credential);
    15    return userCredential.user;
    16  }
    17
    18  @override
    19  Widget build(BuildContext context) {
    20    return Scaffold(
    21      appBar: AppBar(title: Text("Google Sign In")),
    22      body: Center(
    23        child: ElevatedButton(
    24          onPressed: () async {
    25            User? user = await _signInWithGoogle();
    26            if (user != null) {
    27              print("로그인 성공: ${user.displayName}");
    28            }
    29          },
    30          child: Text("Google로 로그인"),
    31        ),
    32      ),
    33    );
    34  }
    35}

권한 설정 #

  • AndroidManifest.xml 파일에 인터넷 권한을 추가한다.
    1<uses-permission android:name="android.permission.INTERNET"/>
Advertisement