Open1

FlutterにFirebaseを組み込む

ほすほす

目次

  • Flutterアプリのプロジェクトを作成
  • Firebaseプロジェクトを作成
  • FlutterFire CLI を起動
  • アプリ側での追加設定

Flutterアプリのプロジェクトを作成

  • 普通にFlutterアプリのプロジェクトを作成する
  • packageにfirebase_coreだけ入れておく
$ flutter pub add firebase_core

Firebaseプロジェクトを作成

  • 普通にFirebaseのプロジェクトを作成する
  • 名前はアプリに合わせる必要はないが、分かるような名前がベスト

FlutterFire CLI で設定

  • Firebaseプロジェクトの「アプリ追加」のメニューから「Flutter」を選択
  • 任意のディレクトリで flutter_cliのアクティベート
# これ毎回やる必要あるの?
$ dart pub global activate flutterfire_cli
  • アプリのプロジェクトルートでFlutterFireの設定を実行
    • 途中でプラットフォームの選択を促されるので、スペースキーで選択してエンターキー
# FirebaseのプロジェクトIDを指定することになる
$ flutterfire configure --project=■■■■■■■■■■■
  • このコマンドを実行することで、以下のことが行われる
    • アプリ内に設定ファイルが自動生成される
    • Androidプロジェクトに対して、プラグイン設定を行なってくれる
    • Firebaseの管理画面に、アプリの追加をおこなってくれる

アプリ側での追加設定

  • main.dartでFirebaseの初期化設定を行う
void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(
    options: DefaultFirebaseOptions.currentPlatform,
  );
  runApp(const MyApp());
}
  • iOSやmacOSのpodfileでバージョンを上げる
# iOSなら
platform :ios, '15.0'
# macOSなら
platform :osx, '12.0'
  • macOSのentitlementファイルに以下を追加する
macos/Runner/DebugProfile.entitlements
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.security.app-sandbox</key>
    <true/>
    <key>com.apple.security.cs.allow-jit</key>
    <true/>
    <key>com.apple.security.network.server</key>
    <true/>
  <!-- Add the following two lines -->
    <key>com.apple.security.network.client</key>
    <true/>
</dict>
</plist>
macos/Runner/Release.entitlements
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.security.app-sandbox</key>
    <true/>
  <!-- Add the following two lines -->
    <key>com.apple.security.network.client</key>
    <true/>
</dict>
</plist>
  • Android は、firebase_coreだけなら問題ないが、他のfirebaseサービスを入れる場合は、minSdkを上げる必要がある。
  • 最初からもう上げてもいいかもね