Search
🎈

Flutter with Firebase

생성일
2021/05/06 15:12
태그
Flutter
속성
Flutter 의 가장 장점은 역시 Google 의 형제(?) Firebase 지원이 빵빵하다는 것이다.
Flutter 에 Firebase 를 적용하는 가이드가 너무 잘 되어있다.

2022.03.06 내용 업데이트

Google 에서 Flutter를 조금 더 강력하게 지원합니다. FlutterFire 라는 이름으로 Flutter를 위한 firebase 기능과 문서를 제공합니다.
Flutter에서 Firebase 기능을 사용하기 위해 firebase를 초기화 하는 방법이 변경되었습니다. (매우 쉽게)

AS-IS

Firebase Console 에서 google-services.json, GoogleService-Info.plist 파일을 iOS, Android 워크스페이스에 저장하고, Flutter의 main 함수에서 Firebase.initializeApp() 를 호출, 개발자가 해당 return 값에 대한 처리를 진행

TO-BE

$dart pub global activate flutterfire_cli
Bash
복사
flutter 버전이 낮으면 오류가 발생합니다. flutter upgrade 명령어를 통해 flutter를 최신화하고 진행해주세요.
$flutterfire configure
Bash
복사
위 명령어를 입력하면, 현재 flutter workspace를 firebase의 어떤 project와 연결할지 입력받는 커맨드가 나옵니다.
그 후 앱의 bundleID를 입력하고 나면 설정 끝.
flutter workspace에 `lib/firebase_options.dart` 파일이 추가됩니다.
firebase project에 android, iOS앱이 자동으로 등록됩니다.
// main.dart void main() async { Constants.setEnvironment(Environment.STAGING); WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform); runApp(App()); }
Dart
복사
Firebase init 방식도 위와 같이 변경되었습니다.
끝. 더 이상 iOS, Android 프로젝트에서 수정이 필요한 내용이 없습니다.

Deprecated (2022.03.06 ~)

Dependency Install

Cocoapod, Gradle, Maven .... Flutter 에도 역시 의존성 관리를 위한 Tool 이 존재한다.
pub 이라는 툴을 사용하는 것 같다
몇몇 유명한 라이브러리들을 검색해봤는데 놀랍다. 많은 Publisher이 이름이 firebase.google.com 이다.
거의 모든 Thrid-party library 가 산발되어 있는 RN 과는 전혀 다른 모습이다. Flutter 로 넘어오길 잘했다는 생각이 드는 순간이다;;
심지어 업데이트 날짜가 거의다 1~2주 내외다.. 업데이트 주기가 빠른 것 같다.
결론은 flutter 프로젝트에서 아래의 명령어를 실행하면 된다.
flutter pub add firebase_core
Bash
복사
일단 Flutter 프로젝트 실행 오류
flutter pub add firebase_core
JavaScript
복사
명령어는 flutter 하위 ios 디렉토리의 Podfile 의 수정 내용을 만든다.
그리고 Android Studio 에서 실행하면, Pod install 을 실행하는데, 최신 firebase_core 는 iOS 10 이상부터 지원한다. 하지만 XCode 프로젝트를 생성하면 최소 지원버전이 9.0 으로 생성된다.
XCode 를 실행 후 최소 지원 버전을 10 이상으로 수정해주면 된다. 결국 Flutter 도 기본적인 iOS, Android 개발지식은 필수이다.

Flutter에 Firebase Initialize 추가

import 'dart:io'; import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; import 'Page/LoginPage.dart'; void main() { WidgetsFlutterBinding.ensureInitialized(); runApp(App()); } class App extends StatefulWidget { _AppState createState() => _AppState(); } class _AppState extends State<App> { // Set default `_initialized` and `_error` state to false bool _initialized = false; bool _error = false; // Define an async function to initialize FlutterFire void initializeFlutterFire() async { try { // Wait for Firebase to initialize and set `_initialized` state to true await Firebase.initializeApp(); setState(() { _initialized = true; }); } catch(e) { setState(() { _error = true; }); } } @override void initState() { initializeFlutterFire(); super.initState(); } @override Widget build(BuildContext context) { if(_error) { return MaterialApp(home: LoginPage()); // Firebase Init 실패. iOS, Android 에서 추가 설정이 누락됐을 가능성이 크다. } if (!_initialized) { return MaterialApp(home: LoginPage()); // Firebase Init 실패. iOS, Android 에서 추가 설정이 누락됐을 가능성이 크다. } return MaterialApp(home: LoginPage()); // 정상적으로 Firebase Initialize 된 경우 } }
JavaScript
복사

iOS

iOS에 Google-Info.plist 파일 추가

Flutter 앱에서 Firebase Initialize 코드만 추가한 경우 app key, id 등이 누락되어 실패한다. iOS, Android 각각 추가 설정이 필요한데, 이 부분은 Flutter 만으로 해결이 불가능하고, Android Studio, XCode 에서 직접 설정이 필요하다.

iOS 설정

Google-Info.plist 파일을 iOS 디렉토리 구조에서 최상단에 복사한다

Android

1. google-services.json 추가

firebase 에서 android app 을 추가하고 google-services.json을 내려받아 안드로이드 프로젝트 root에 옮겨둡니다.

2. gradle 설정

Firebase가 가이드한 대로 그대로! 하면 됩니다. 다만, 가이드 중 코드에 이미 있는 내용들도 있으니 중복이 되지 않게 필요한 부분들만 찾아서 복붙하면 됩니다.

Flutter Rebuild

Android Studio 에서 Flutter 앱을 재실행 하면 정상적으로 Firebase Initialize 되었음을 확인할 수 있다.