flutter with firebase cli

flutter firebase cli 설정하여 쉽게 연결할 수 있다.

flutter with firebase cli
Photo by Chris Ried / Unsplash
  • 안내말 입니다.
  • 개인적으로 남기는 글입니다. 아래의 경우를 미리 공지합니다.
  • 높임말은 없는 경우가 있습니다.
  • 영어, 일본어, 베트남어를 공부하고 있습니다. 경우에 따라서 사용됩니다.
  • 보기 거북하다면 뒤로가기 해주세요.

이야기 시작-

  1. 1.firebase 에 접속해서 프로젝트를 1개 만든다.
  2. 다시 flutter 로 넘어와서 터미널에서 cli 관련 설정을 하자.
  3. flutter firebase core package 를 install 합시다.
    https://pub.dev/packages/firebase_core
dependencies:
  firebase_core: ^3.7.0

(This code is effective as of 09.Nov.2024)

  1. npm install -g firebase-tools
  2. dart pub global activate flutterfire_cli
  3. firebase login
    혹시 다른 아이디로 로그인 하고 싶으면, firebase login --reauth
  4. flutterfire configure
    에서 1에서 만든 프로젝트를 선택합니다.
  5. 뒤에 어디에 사용할 os를 선택하고, 팩키지 이름을 타이핑 합니다. 예를 들어 com.abcdef
  1. firebase 콘솔에서 확인하면 자신이 선택한 platforms 에 앱이 추가 된것을 확인할 수 있다.
  1. Enabling use of Firebase Emulator Suite

위치 ios/Runner/Info.plist >

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsLocalNetworking</key>
    <true/>
</dict>
  1. ios > Podfile.lock 파일이 있다면, 삭제
  2. ios > Podfile 안에서 # platform: ios, '12.0' 앞에 # 을 지우고, 뒤에 12.0 을 13.0 으로 변경
  3. ios > flutter> Release.xcconfig
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"
#include "Generated.xcconfig"
  1. 다시 프로젝트 터미널로 와서, cd ios > pod install
    12번 작업을 해주는 것은 firebasecore 팩키지를 사용하기 때문에 관련 기능?을 설치해주는 걸로 알고 있다.
    13번 작업을 해주는 것은 아래 에러를 해결하기 위함 이다.
  1. 위 작업을 다 하면 Podfile.lock 파일이 다시 생성된다.

이후, android 도 여러 에러가 발생할 수 도 있다. 그건 상황 보면서 해결하면된다.

  1. main.dart에 firebase core 연동에 관한 기능을 추가한다.

아래 코드는 예시 입니다. 각자에 상황에 맞도록 변경하세요.

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  SystemChrome.setPreferredOrientations([
    DeviceOrientation.portraitUp,
    DeviceOrientation.portraitDown,
  ]);
  await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
  runApp(const MyApp());
}

.gitignore에 중요점은 다들 아실거라 생각됩니다. 내용에 firebase options 관련 파일은 github에 올리기 못하도록 설정해두었습니다. 필요에 따라 추가 삭제 하셔서 사용하시기 바랍니다.

.gitignore関連

(This code is effective as of 09.Nov.2024)

# Created by https://www.toptal.com/developers/gitignore/api/dart,flutter,firebase
# Edit at https://www.toptal.com/developers/gitignore?templates=dart,flutter,firebase

### Dart ###
# See https://www.dartlang.org/guides/libraries/private-files

# Files and directories created by pub
.dart_tool/
.packages
build/
# If you're building an application, you may want to check-in your pubspec.lock
pubspec.lock

# Directory created by dartdoc
# If you don't generate documentation locally you can remove this line.
doc/api/

# dotenv environment variables file
.env*

# Avoid committing generated Javascript files:
*.dart.js
*.info.json      # Produced by the --dump-info flag.
*.js             # When generated by dart2js. Don't specify *.js if your
                 # project includes source files written in JavaScript.
*.js_
*.js.deps
*.js.map

.flutter-plugins
.flutter-plugins-dependencies

### Dart Patch ###
# dotenv environment variables file
.env

### Firebase ###
.idea
**/node_modules/*
**/.firebaserc

### Firebase Patch ###
.runtimeconfig.json
.firebase/

### Flutter ###
# Flutter/Dart/Pub related
**/doc/api/
.fvm/flutter_sdk
.pub-cache/
.pub/
coverage/
lib/generated_plugin_registrant.dart
# For library packages, don’t commit the pubspec.lock file.
# Regenerating the pubspec.lock file lets you test your package against the latest compatible versions of its dependencies.
# See https://dart.dev/guides/libraries/private-files#pubspeclock
#pubspec.lock

# Android related
**/android/**/gradle-wrapper.jar
**/android/.gradle
**/android/captures/
**/android/gradlew
**/android/gradlew.bat
**/android/key.properties
**/android/local.properties
**/android/**/GeneratedPluginRegistrant.java

# iOS/XCode related
**/ios/**/*.mode1v3
**/ios/**/*.mode2v3
**/ios/**/*.moved-aside
**/ios/**/*.pbxuser
**/ios/**/*.perspectivev3
**/ios/**/*sync/
**/ios/**/.sconsign.dblite
**/ios/**/.tags*
**/ios/**/.vagrant/
**/ios/**/DerivedData/
**/ios/**/Icon?
**/ios/**/Pods/
**/ios/**/.symlinks/
**/ios/**/profile
**/ios/**/xcuserdata
**/ios/.generated/
**/ios/Flutter/.last_build_id
**/ios/Flutter/App.framework
**/ios/Flutter/Flutter.framework
**/ios/Flutter/Flutter.podspec
**/ios/Flutter/Generated.xcconfig
**/ios/Flutter/app.flx
**/ios/Flutter/app.zip
**/ios/Flutter/flutter_assets/
**/ios/Flutter/flutter_export_environment.sh
**/ios/ServiceDefinitions.json
**/ios/Runner/GeneratedPluginRegistrant.*

# Exceptions to above rules.
!**/ios/**/default.mode1v3
!**/ios/**/default.mode2v3
!**/ios/**/default.pbxuser
!**/ios/**/default.perspectivev3
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages

# End of https://www.toptal.com/developers/gitignore/api/dart,flutter,firebase

# FlutterFire Congigure
lib/firebase_options.dart
ios/Runner/GoogleService-Info.plist
ios/firebase_app_id_file.json
macos/Runner/GoogleService-Info.plist
macos/firebase_app_id_file.json
android/app/google-services.json

# Google Services (e.g. APIs or Firebase)
google-services.json
GoogleService-Info.plist

# Plugins (already resolved through pubspec.yaml)
.flutter-plugins