Flutter2.8以降のFirebaseプロジェクトの初期設定方法(2022年5月時点)

※当サイトは、アフィリエイト広告を利用しています

Flutter

(2022.5.23更新)

Flutter2.8以降を対象とした、Firebaseプロジェクトの設定方法について、手順や注意点などを知りたい

という方向けの記事です。

 

2021年12月から、Firebaseの初期設定が、Flutterのバージョン2.8以降を対象として、「Firebase CLI」というコマンドラインを用いた方法に変更されましたが、ネット上には解説記事が少なく、自分自身が苦労したので、留意点などを共有したいと思います。

 

Flutter2.8より前(2.5.3以下)を対象とした旧来の方法は、下記記事に整理したので、本記事では旧来の方法との相違点を中心に、順を追って記載します。

 

 

主なポイントは、以下のとおりです。

 

  • 「Firebase CLI」のインストールが必要(コマンドラインでFirebaseにアクセスするため)
  • 手動での設定ファイル(「.json」と「.plist」)の配置作業が不要になった
  • Googleサインインを実装する場合は、iOSの「.plist」ファイルの配置作業は結局必要
  • 「flutterfire configure」を実行するには、パスを通す設定後、ターミナルの再起動が必要
  • SHA-1を登録した場合は、旧来の「.json」ファイル再配置に代わり、再度「flutterfire configure」を実行する
  • Androidは「minSdkVersion」を19以上、iOSは「Podfile」の「platform」バージョンを10.0以上にしておく

 


40代からプログラミング(Flutter)を始めて、GooglePlayAppStoreにアプリを公開しているhalzo appdevです。

 

作成したアプリはこちら↓ 全てFlutterで開発したアプリです。

 

前提とする環境

本記事の前提とする環境は、以下になります。

 

  • PC: MacBook Pro
  • OS: Big Sur 11.6.5
  • Flutter: Channel stable 2.10.4
  • Android Studio: version 4.2.2

 

1.Firebaseプロジェクトの作成

Flutterのプロジェクトを作成した後、Firebaseのアカウントにログインし、Firebase上のプロジェクトとアプリ設定(Android、iOS、Web等)を行います。

 

具体的には、旧来の設定方法を説明した下記記事

 

 

の中にある

 

  • 1−1.Flutterプロジェクトの作成(Android Studioでの作成例)
  • 1−2.Firebaseプロジェクトの作成
  • 2−1.Firebase上でAndroidアプリの登録
  • 3−1.Firebase上でiOSアプリの登録
  • 3−2.設定ファイル(.plistファイル)の設置 ※省略可だが、やった方が良い(後述)

 

の5項目の内容を実行します。

 

【注意点】

上記記事の中で、Androidアプリ用の設定として説明している

 

  • 2−2.設定ファイル(.jsonファイル)の設置
  • 2−3.「android/build.gradle」に設定用コードを追記
  • 2−4.「android/app/build.gradle」に設定用コードを追記

 

については、以降で説明する新しいFirebase設定手法により、不要となりました。

 

一方、iOSアプリ用の設定である

 

  • 3−2.設定ファイル(.plistファイル)の設置

 

も不要にはできるのですが、残念ながらGoogleサインインを使う場合は、省略できません。

 

Firebase Authenticationで、Googleサインインを実装するケースは多いと思われるので、上記説明でも「.plistファイルの設置」を必要とする前提で記載しました。

 

2.Firebase CLIのインストール

以降は、基本的に、下記Flutter用のFirebase公式サイト「FlutterFire」)の説明に沿って進めます。

 

 

※↓(ご参考)日本語版のサイト 元々上記は、「FlutterFire」という英語サイトでしたが、2022/5/8に下記URLにリダイレクトされるようになり、日本語で読めるようになったようです。 (その後、上記URLは、下記URLにはリダイレクトされなくなったようです。)

 

 https://firebase.google.com/docs/flutter/setup?platform=android

 

初めに、コマンドラインでFirebaseにアクセスするための「Firebase CLI」というツールをインストールします。

 

インストールの方法は、下記公式ページに説明があります。

 

❏方法1:自動インストールスクリプトによる方法

 

❏方法2:npm(Node Package Manager)による方法

 

主に、上記2通りの方法がありますが、自分の場合は、「自動インストールスクリプト」でインストールしたので、そちらについて記載します。

 

ターミナルから、公式サイトに書かれている以下のコマンドを入力します。

 

curl -sL https://firebase.tools | bash

 

 

インストールしたら、ターミナルから

 

firebase login

 

Firebaseへのログインを試します。

 

Allow Firebase to collect CLI usage and error reporting information?

 

と聞かれるので、「Yes」か「No」を入力すると、Webページが開いて、Googleアカウントのログイン画面になります。

 

Firebaseに使っているGoogleアカウントを選択し、「許可」を押します。

 

   

Webページとターミナルに、Firebaseログイン成功と表示されます。

 

 

以降の対応のため、ログインしたままにしておきます。

 

※なお、以下のように入力すれば、ログアウトできます。以降のFirebase初期設定がすべて終われば、ログアウトして問題ありません。

 

firebase logout

 

3.dart pub global activate flutterfire_cli を実行する

ターミナルから以下のコマンドを実行します。

 

dart pub global activate flutterfire_cli

 

【注意点①】

ここがやや難所だったのですが、自分の場合、実行したところ、以下のメッセージが出ました。

 

Built flutterfire_cli:flutterfire.
Installed executable flutterfire.
Warning: Pub installs executables into $HOME/.pub-cache/bin, which is not on your path.
You can fix that by adding this to your shell's config file (.bashrc, .bash_profile, etc.):
  export PATH="$PATH":"$HOME/.pub-cache/bin"
Activated flutterfire_cli 0.2.1+1.

 

以降の「flutterfire_cli」のコマンドを使えるようにするため、パスを通す必要があるとのこと。

 

当初、あくまで「Warning」であり、「flutterfire_cli」はアクティベートされた、と表示されていたので、気にせず次のコマンド「flutterfire configure」を打ったところ

 

zsh: command not found: fluttefire

 

となってしまい、進めませんでした。

 

そのため、上記Warningが出た場合は、Flutterの初期設定時と同様のやり方(下記公式サイト参照)で、パスを通す設定をします。

 

 

具体的には、使用しているターミナルが「zsh」であれば、「.zshrc」ファイルに、「bash」であれば、「.bash_profile」または「.bashrc」ファイルに、

 

export PATH="$PATH":"$HOME/.pub-cache/bin"

 

の1文を追記します(「.pub-cache/bin」フォルダの中に、「flutterfire」のコマンドを実行するファイルがあるためです)。

 

 

※Macの場合、「.zshrc」ファイル等の設定ファイルは、ユーザー名のフォルダ直下にありますが、隠しファイルになっているので、Finderで、「command + shift + . (ピリオド)」を押して表示させます。

 

【注意点②】

上記パス設定が終わったら、念のためターミナルを再起動します(Android Studio内のターミナルを使用している場合は、Android Studioを再起動)。

 

環境にもよるかもしれませんが、自分の場合、再起動しないと設定変更が反映されませんでした(ここも地味にハマりました)。

 

※再起動せず次のコマンド「flutterfire configure」を実行したところ、引き続き「command not found」となり、もう一度「dart pub global activate flutterfire_cli」を実行したら、再びパス未設定のWarningが出ました。

 

4.flutterfire configure を実行する

ターミナルで「flutterfire configure」を実行すると、下記画面のように、Firebase上のプロジェクトの一覧が表示されるので、手順「1.」で作成したプロジェクトを選択します。

 

 

【注意】

「flutterfire configure」は、「cd」コマンドで、該当のFlutterプロジェクトのフォルダに移動した上で実行してください。

 

ターミナルのルートディレクトリで実行すると、Flutterプロジェクトが見つからないので、

 

FlutterAppRequiredException: The current directory does not appear to be a Flutter application project.

 

というエラーが出てしまいます。

 

次に、対象となるプラットフォームを選択します。下図は、Android、iOS、MacOS、Webを選択した例です。

 

 

iOSの「Bundle Identifier」を聞かれた場合は、Xcode上で確認し、入力します。

 

ただ、手順「1.」の「Firebase上でiOSアプリの登録」で「Bundle Identifier」をFirebaseに登録済であれば、聞かれません(自分の場合は登録していたので、聞かれませんでした)。

 

下図のように、2つの「build.gradle」に設定を追記してよいか?と確認が出るので、「Yes」を入力します。

 

 

以上で、基本的な設定は終わりです(但し、この後、Firebase Authenticationで、SHA-1の登録を行う場合は、後述する対応が必要になります)。

 

なお、この時点では、後述する「firebase_options.dart」ファイルにエラーが生じていると思いますが、後で行う「firebase_core」パッケージのインポートにより解消するので、問題ありません。

 

旧来の方法のように、設定ファイルのダウンロード配置や、「build.gradle」に手動でコードを貼り付ける手間がなくなるので、新しい方法を一度体験しておけば、以降は楽になる気がします。

 

5.flutterfire configure で何が起こったか

旧来の方法は、全て手動対応なので、Flutterプロジェクトのファイルに何が生じたか、把握しやすかったのですが、新しい方法はコマンドで実行されるため、その点が分かりづらいです。

 

確認したところ、コマンド実行により、以下のファイルが生成もしくは一部加筆されていました。

 

① lib/firebase_options.dart ※新規生成

 Firebaseの設定情報が書かれたメインの設定ファイルです。

 

② android/app/google-services.json ※新規生成

 旧来の方法では、手動で配置していたAndroid用の設定ファイルです。

 

③ ios/firebase_app_id_file.json ※新規生成

 旧来の方法では発生しなかったiOS用の設定ファイルです。

 

④ android/build.gradle ※一部追記

下図のように、追記箇所がわかる形で設定が追記されています。

 

 

⑤ android/app/build.gradle ※一部追記

こちらも下図のように、追記箇所がわかる形で設定が追記されています。

 

 

6.パッケージの導入と初期化コードの実装

6−1.パッケージの導入とインポート

Firebaseの初期設定のために、「firebase_core」パッケージのインポートが必要になります。

 

ターミナルから「flutter pub add firebase_core」を実行すると、「pubspec.yaml」ファイルに、最新版のパッケージがインポートされます。

 

次に、main関数を定義するdartファイル内(「main.dart」内)の冒頭に、以下2つのimport文を記載します。

 

import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';

 

6−2.main関数への初期化コードの実装

続いて、main関数に「async」を付けて非同期処理化し、下記のFirebase初期化コードを記載します。

 

// asyncを付けてmain関数を非同期処理化
void main() async {

  // main関数を非同期処理するときに必ず必要になるコード
  WidgetsFlutterBinding.ensureInitialized();

  // Firebase初期化コード
  await Firebase.initializeApp(
    options: DefaultFirebaseOptions.currentPlatform,
  );

  runApp(MyApp());
}

 

main関数を非同期処理化するときには、必ず必要となる「WidgetsFlutterBinding.ensureInitialized();」の一文も忘れずに記載します(この記載がないとエラーになります)。

 

6−3.Firebase Authenticationの設定について

Googleサインインの機能などを導入できる「Firebase Authentication」の設定方法については、旧来の方法から変更点はありませんので、下記記事の「5.Firebase Authenticationの設定手順(Googleサインインの場合)」をご参照ください。

 

 

※但し、「.json」の再配置作業については、次項をご参照ください。

 

7.旧来の方法で必要だったSHA-1設定後の「.json」の再配置について

新しい設定方法で最も疑問だったのは、旧来の方法では、Firebase Authentication(Googleサインイン)の設定時や、Google Playへのリリース時に対応が必要だった

 

SHA-1設定後の「google-services.json」の再配置

 

はどうするのか?という点です。

 

具体的には、旧来の設定方法について説明した下記記事

 

 

における

 

  • 5−2−2.設定ファイル(.jsonファイル)の再設置 ※Googleサインイン設定時の対応
  • 6−1−2.設定ファイル(.jsonファイル)の再々設置 ※Google Play公開時の対応

 

の対応を、新設定方法ではどうすれば良いのか?という話です。

 

この点は、Flutter用のFirebase公式サイトや、ネット上で調べても情報が見つかりませんでした。

 

自分なりに確認した結論は、

 

手順「4.」の「flutterfire configure」のコマンドを再実行する

 

でした。

 

再実行すると、下図のように「firebase_options.dart」を上書きして良いか?と確認されるので、「Yes」を入力します。

 

 

これにより、以下2つのファイルが更新されます。

 

① lib/firebase_options.dart

② android/app/google-services.json

 

コマンド再実行の前後を比較すると、「①firebase_options.dart」の「ios」のセクションに、「androidClientId:」の行が追加されていました。

 

また、「②google-services.json」は、旧来の方法で手動再配置をしていたときと同様に、「"oauth_client":」のセクションに、「"certificate_hash"」としてSHA-1の情報が追加されていました。

 

「②google-services.json」が、旧来の方法と同様に更新されていることを踏まえると、「flutterfire configure」を再実行することで問題なさそうです。

 

この後、実際にGoogleサインインの実装を行ったところ、問題なく動作することを確認できました。

 

なお、2022/5/8に、FlutterFireのURLからリダイレクトされるようになった(その後、リダイレクトされなくなりました)下記の日本語解説ページには、下記の説明が書かれているため、プラットフォームを追加したり、Firebaseのサービスを追加利用したりする場合は、改めて「flutterfire configure」のコマンドを実行する必要があるようです。

 

(出典)https://firebase.google.com/docs/flutter/setup?platform=android

 

8.Android、iOSのバージョン指定の修正

上記方法で設定したFlutterプロジェクトをビルドする際は、公式のガイドにも書かれているとおり、

 

  • Androidは「minSdkVersion」を19以上
  • iOSは「Podfile」の「platform」バージョンを10.0以上

  

にしておく必要があります(これをしないとエラーになります)。

 

8−1.Androidの「minSdkVersion」の修正

Flutter2.8以降は、「android/app/build.gradle」で指定される「SdkVersion」が、数値ベタ書きではなく、「flutter.minSdkVersion」のようにファイル参照方式に変更されており、一見すると簡単に修正できません。

 

参照元のファイルは、下記にあります。

 

/Users/ユーザー名/flutter/packages/flutter_tools/gradle/flutter.gradle
※Macの場合です

 

強引にテキストファイルで開いて修正することは可能ですが、今後も継続的に修正が発生した場合を考えると面倒です。。

 

そのため、下記のとおり、「android/app/build.gradle」のバージョン数値参照部分をコメントアウトし、数値をベタ書きで修正するのが良いかと思います(自分の場合はこれで問題なく動作しました)。

 

    defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId "・・・・" 

//        minSdkVersion flutter.minSdkVersion     // このバージョン数値参照部分をコメントアウト
        minSdkVersion 19  // 修正後のバージョン数値を直接ベタ書き

        targetSdkVersion flutter.targetSdkVersion
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
    }

 

8−2.iOSの「platform」バージョンの修正

「Podfile」の冒頭部分、2行目のコメントアウト記号「#」を取り、バージョンを下図のとおり「10.0」以上の値に修正します。

 

 


以上、Flutter2.8以降を対象とした、Firebaseプロジェクトの初期設定方法の説明となります。

 

最後までお読みいただき、ありがとうございました。

 

個人アプリ開発で役立ったもの

おすすめの学習教材

超初心者向けでオススメな元Udemyの講座/

 

 \キャンペーン時を狙えば安価で網羅的な内容が学べる(日本語訳あり)/

 

\Gitの基礎について無料で学べる/

 

おすすめの学習書籍

実用的image_pickerに関してかなり助けられた/

 

Dartの基礎文法を素早くインプットできる/


Dart入門 - Dartの要点をつかむためのクイックツアー

コメント

タイトルとURLをコピーしました