📌

【Flutter】Firebase初期セットアップ

2022/03/24に公開

Firebaseへログイン

https://console.firebase.google.com/?hl=ja

プロジェクトを追加

※プロジェクトの単位はアプリ(IOS・Android)で1つ作成
※無料プランだと作成できるプロジェクトは5-10

・プロジェクトの作成(手順 1/3)
アプリのプロジェクト名を付けましょう。

・プロジェクトの作成(手順 2/3)
Google アナリティクスの有効・無効を選択
※基本的に有効でOK

・プロジェクトの作成(手順 3/3)
Google アナリティクスの有効を選択した場合、どのアカウントに紐づけるかを設定。
※アカウントに対し、アプリの単位ごとに解析結果を照会できるため、既存のアカウントがあればそのまま使用してOK

プロジェクトの作成を押すとSpark(無料)プランでプロジェクトが作成される。

セットアップ(Android)

公式ドキュメント
https://firebase.google.com/docs/guides?hl=ja

Android公式ドキュメント
https://firebase.google.com/docs/flutter/setup?hl=ja&platform=android

プロジェクトのトップページの以下Androidアイコンを押下

①アプリの登録

・Androidパッケージ名
Flutterのプロジェクト作成時に設定したプロジェクト名を設定
※忘れてしまった場合は、androidパッケージ配下のアプリレベルのbuild.gradleファイルの"applicationId"の値を使用

・アプリのニックネーム
コンソール上で確認するのアプリの名前を設定
※省略可能(記載する場合はプラットフォームごとに名前を分けた方がいい)

・デバッグ用の署名証明書 SHA-1
認証時に使用するコード
※認証機能設定時に再設定可能なため一旦記載なしでOK

アプリの登録を押下で完了

②設定ファイルのダウンロード

google-services.json のダウンロード ボタンを押下し、設定ファイルを取得
ダウンロードしたファイルをプロジェクトフォルダのandroid/app配下に配置

③Firebase SDKの追加

プロジェクトレベルのbuild.gradleファイルを以下"classpath"の記載を追加

<project>/build.gradle
buildscript {
  repositories {
    // Check that you have the following line (if not, add it):
    google()  // Google's Maven repository

  }
  dependencies {
    ...
    // Add this line
    classpath 'com.google.gms:google-services:4.3.10'

  }
}

allprojects {
  ...
  repositories {
    // Check that you have the following line (if not, add it):
    google()  // Google's Maven repository

    ...
  }
}

※Googleのリポジトリ指定は基本的に設定済

アプリレベルのbuild.gradleファイルに以下記載を追加

<project>/<app-module>/build.gradle
...
// Add the following line:
apply plugin: 'com.google.gms.google-services'
...

※dependenciesにて追加するFirebaseの各種SDKは、firebase_coreプラグインに内包されているため設定不要

コンソール上での設定は以上で終了です。

Terminalから以下コマンドを実行。(AndroidStudioの場合)

flutter packages get

セットアップ(IOS)

iOS公式ドキュメント
https://firebase.google.com/docs/flutter/setup?hl=ja&platform=ios

プロジェクトのトップページの以下iOSアイコンを押下

①アプリの登録

・iOSバンドルID
Flutterのプロジェクト作成時に設定したプロジェクト名を設定
※忘れてしまった場合は、XcodeのGeneralタブに記載の"Bundle Identifier"の値を使用

・アプリのニックネーム
コンソール上で確認するのアプリの名前を設定
※省略可能(記載する場合はプラットフォームごとに名前を分けた方がいい)

・App Store ID
公開済みのアプリの場合はIDを入力

アプリの登録を押下で完了

②設定ファイルのダウンロード

GoogleService-Info.plist のダウンロード ボタンを押下し、設定ファイルを取得
ダウンロードしたファイルをXcodeのRunner/Runner ディレクトリにファイルに配置。
※AndroidStudioから配置しないように注意

その他手順(③・④・⑤)は全部スキップで構いません。

プラグインの追加

https://firebase.flutter.dev
https://pub.dev/packages/firebase_core/install

pubspec.yamlファイルに"firebase_core"プラグインを追加する。
※NullSafety対応が必要な場合は最新版ではなく、該当のバージョンでインストールしてください。

問題(iOSビルドが遅い場合)

https://firebase.flutter.dev/docs/overview/#improve-ios-build-times
iosフォルダの以下ファイルに記載を追加する。
※Podfileを修正した場合は念のため、"flutter clean"→"flutter pub get"を実行し直してみてください。

※最新のパッケージバージョンは以下サイトを参照。
https://github.com/invertase/firestore-ios-sdk-frameworks

Podfile
# ...
target 'Runner' do
  pod 'FirebaseFirestore', :git => 'https://github.com/invertase/firestore-ios-sdk-frameworks.git', :tag => '8.3.0'
# ...
end

iOS実行時エラー

https://qiita.com/tomono_22/items/1d71031d3832bb5a2cca

エラーログ
Error output from CocoaPods:
↳
    Ignoring ffi-1.14.1 because its extensions are not built. Try: gem pristine ffi --version 1.14.1

    [!] Automatically assigning platform `iOS` with version `9.0` on target `Runner` because no platform was specified. Please specify a platform for this target in your Podfile. See `https://guides.cocoapods.org/syntax/podfile.html#platform`.

Error running pod install

現在のデフォルト
https://guides.cocoapods.org/syntax/podfile.html#platform

amdroid
以下を修正(AndroidStudioから修正可)

<project>/<app-module>/build.gradle
...
    defaultConfig {
        applicationId ""
        minSdkVersion 21
        targetSdkVersion 30
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
    }
...

iOS
XcodeからRunnerのGeneralのDeplpyment InfoのiOSのバージョン指定を9.0→10.0に変更

設定動作確認

以下内容を追記し、エミュレーターで実行

main.dart
・・・
import 'package:firebase_core/firebase_core.dart';
・・・

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  final Future<FirebaseApp> _initialization = Firebase.initializeApp();
  runApp(MyApp());
}
・・・

Discussion