【Flutter】環境別Firebaseプロジェクト
環境別に作成した別々のFirebaseプロジェクトにFlutterアプリを関連づける。公式サイトの手順では一つのFirebaseプロジェクトにしか関連づけできないが、複数のプロジェクトに紐づけてみる。
なお、こちらで作成したように、開発・STG・本番の3つの環境があることを前提とする。
手順
1. Firebaseプロジェクト作成
開発・STG・本番のそれぞれのプロジェクトを作成しておく。
2. Firebase CLIインストール
FirebaseとFlutterのそれぞれのプロジェクトを紐づけてくれるツールFlutterFireが使えるようにFirebase CLIをインストールし、FlutterFireを有効化する(実行済みであれば不要)
4. Firebaseプロジェクトを追加
Flutterプロジェクトのルートディレクトリでconfigureコマンドを実行し、Firebaseプロジェクトとの関連付けを行う。実行後に以下のファイルが生成もしくは更新される。
android/build.gradle(更新)
android/app/build.gradle(更新)
lib/firebase_options.dart(生成)
android/app/google-services.json(生成)
ios/firebase_app_id_file.json(生成)
生成されるファイルはFirebaseプロジェクトごとに別にするため、環境ごとにコマンドを叩いて生成されたファイルをリネームしていく。具体的には、次のA〜Cの手順を環境ごとに繰り返していく(コードは開発環境用なので随時読み替える)
A. configureコマンド実行
firebase_options.dartを環境別に生成するようにパラメータを指定する。
$ flutterfire configure \
--project FirebaseプロジェクトID(開発) \
--out lib/path/to/firebase_options_dev.dart \
--android-app-id AndroidのアプリケーションID(開発) \
--ios-bundle-id iOSのバンドルID(開発)
実行後、Firebaseプロジェクトのコンソール画面で関連付けされていることを確認する。
ここから、生成されたファイルを環境ごとに移動やリネームする。
B. Androidの構成ファイルを移動
android/app/google-services.jsonを開発環境に移動する。
$ mv android/app/google-services.json android/app/src/debug/
C. iOSの設定ファイルをリネーム
ios/firebase_app_id_file.jsonをリネームする。
mv ios/firebase_app_id_file.json ios/firebase_app_id_file_dev.json
5. iOSビルドスクリプトの追加
firebase_app_id_file.jsonはpod installの際にファイル名で参照されるもののらしい。ビルド時に環境別のファイル置き換わるよう、リネームするスクリプトをBuild Phasesに追加する。
# 以前に生成されたFirebase設定ファイルを削除
rm -rf "${SRCROOT}/firebase_app_id_file.json"
# Firebase設定ファイルをコピーして生成
if [ "${CONFIGURATION}" = "Debug" ]; then
cp "${SRCROOT}/firebase_app_id_file_dev.json" "${SRCROOT}/firebase_app_id_file.json"
elif [ "${CONFIGURATION}" = "Profile" ]; then
cp "${SRCROOT}/firebase_app_id_file_stg.json" "${SRCROOT}/firebase_app_id_file.json"
else
cp "${SRCROOT}/firebase_app_id_file_prd.json" "${SRCROOT}/firebase_app_id_file.json"
fi
6. パッケージインストール
疎通確認のため、Firebase Analyticsだけ入れてみる。
dependencies:
firebase_core: ^1.21.1
firebase_analytics: ^9.3.3
7. Firebase初期化の実装
FlutterのコードにFirebase初期化の実装をする。ビルド環境に応じてfirebase_options.dartを切り替えるようにしている。
import 'package:flutter/foundation.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:プロジェクト/path/to/firebase_options_dev.dart' as develop;
import 'package:プロジェクト/path/to/firebase_options_stg.dart' as staging;
import 'package:プロジェクト/path/to/firebase_options_prd.dart' as product;
...
void main() async {
// Firebase初期化
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
options: kReleaseMode ?
product.DefaultFirebaseOptions.currentPlatform:
kProfileMode ?
staging.DefaultFirebaseOptions.currentPlatform:
develop.DefaultFirebaseOptions.currentPlatform,
);
...
8. 動作確認
それぞれの環境でビルドしてアプリ起動、それぞれのFirebaseプロジェクトコンソールのDashboardでアクセスを確認できれば疎通OK。
この記事が気に入ったらサポートをしてみませんか?