Flutter/Flutter 강좌

Flutter + Firebase + Google Sign

하랑파파♡ 2019. 8. 20. 09:15

#Flutter + Firebase + Google Sign


-Firebase 프로젝트 생성
-android 설정
	-> Firebase 프로젝트에 android 추가
  		- android/app/src/main/AndroidManifest.xml 에서 패키지명 복사해서
        Firebase 프로젝트 android 패키지명에 붙여넣기  

  		- 디버그 서명 인증서 SHA-1 등록
    		=> Window
    		keytool -exportcert -list -v -alias androiddebugkey -keystore C:\Users\{user name}\.android\debug.keystore

			=> mac
    		keytool -exportcert -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore

    	※ 디버그 키 스토어의 기본 비밀번호는 android

  -> 앱 등록 클릭
  -> google-services.json 파일을 다운로드
  -> google-services.json 파일을 Flutter 앱의 android/app 디렉토리로 이동
  -> android/app/build.gradle 파일의 제일 하단에 아래 내용 추가  
    apply plugin: 'com.google.gms.google-services'
    
  -> android/build.gradle에서 buildscript 태그 안에 새 종속성 항목을 추가    
    buildscript {
      repositories {
          // ,,,
      }
      dependencies {
          // ...
          classpath 'com.google.gms:google-services:3.2.1'   // new
      }
    }

  -> pubspec.yaml 파일에 플러그인 추가
    firebase_auth: ^0.6.2+1
    google_sign_in: ^3.2.2
    
  -> Google Sign 기능 만들기    

 

#Sample


import 'dart:async';
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:google_sign_in/google_sign_in.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Flutter Demo',
      theme: new ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: new MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final FirebaseAuth _auth = FirebaseAuth.instance;
  final GoogleSignIn googleSignIn = new GoogleSignIn();
  
  Future<FirebaseUser> _signIn() async {
    GoogleSignInAccount googleSignInAccount = await googleSignIn.signIn();
    GoogleSignInAuthentication gSA = await googleSignInAccount.authentication;

    FirebaseUser user = await _auth.signInWithGoogle(
      idToken: gSA.idToken,
      accessToken: gSA.accessToken,
    );

    print("User Name : ${user.displayName}");
    // print("User Name : ${user}");
    return user;
  }

  void _signOut() {
    googleSignIn.signOut();
    print("User Signed out");
  }

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
  }

  @override
  void dispose() {
    // TODO: implement dispose
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text("Firebase Demo"),
      ),
      body: new Padding(
        padding: const EdgeInsets.all(20.0),
        child: new Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.stretch,
            children: <Widget>[
              new RaisedButton(
                onPressed: () => _signIn()
                    .then((FirebaseUser user) => print(user))
                    .catchError((e) => print(e)),
                child: new Text("Sign In"),
                color: Colors.green,
              ),
              new RaisedButton(
                onPressed: _signOut,
                child: new Text("Sign out"),
                color: Colors.red,
              ),
            ],
         ),
      ),
    );
  }
}