FirebaseOptionsのリソース読み込みエラーを解決する
問題
FlutterアプリでFirebaseを初期化する際、await Firebase.initializeApp()
を呼び出した直後に以下のエラーが発生することがあります。
E/flutter ( 6571): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(java.lang.Exception: Failed to load FirebaseOptions from resource. Check that you have defined values.xml correctly., ...
このエラーは通常、Androidプロジェクトのリソースファイル(values.xml
)からFirebase設定を正しく読み込めない場合に発生します。具体的には:
- Flutter 3.19以降で非推奨になったGradleプラグインの命令的適用から宣言的適用に移行した後に発生
google-services.json
ファイルのみの設定では不十分- iOSとAndroid向けのビルドで問題が発生(Webではない)
解決策
方法1: FlutterFire CLIを使った設定(推奨)
最新のFlutterバージョン(3.19以降)では、Firebase CLIを使用した設定方法が推奨されます。
Firebase CLIをインストール:
bashdart pub global activate flutterfire_cli
プロジェクトを設定:
bashflutterfire configure
このコマンドが
lib/firebase_options.dart
ファイルを生成します。main.dartで初期化:
dartimport 'package:firebase_core/firebase_core.dart'; import 'firebase_options.dart'; // 生成されたファイルをインポート void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, ); runApp(MyApp()); }
TIP
DefaultFirebaseOptions.currentPlatform
は自動的に現在のプラットフォーム(Android/iOS)に合わせた設定を読み込みます
方法2: 既存のfirebase_options.dartファイルを使用
既にfirebase_options.dart
ファイルが存在する場合:
import 'package:your_project/firebase_options.dart';
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform
);
ファイルは通常、lib/
ディレクトリに配置されます。
方法3: FirebaseOptionsを直接指定(例外的ケース)
特定の環境(開発/本番)で異なる設定が必要な場合:
if (Platform.isAndroid) {
FirebaseOptions firebaseOptions;
if (environment == AppEnvironment.development) {
firebaseOptions = const FirebaseOptions(
apiKey: "DEV_API_KEY",
appId: "DEV_APP_ID",
messagingSenderId: "DEV_SENDER_ID",
projectId: "DEV_PROJECT_ID",
);
} else {
firebaseOptions = const FirebaseOptions(
apiKey: "PROD_API_KEY",
appId: "PROD_APP_ID",
messagingSenderId: "PROD_SENDER_ID",
projectId: "PROD_PROJECT_ID",
);
}
await Firebase.initializeApp(options: firebaseOptions);
}
WARNING
各パラメータの値はFirebaseコンソールまたはgoogle-services.json
から適切な値を取得する必要があります
追加の検証ポイント
エラーが解決しない場合は以下の点を確認してください:
1. Androidのパッケージ名一致確認
android/app/build.gradle
のnamespaceとFirebaseコンソールの設定が一致していることを確認:
android {
namespace "com.example.yourapp"
// ...
}
// MainActivity.ktのパッケージ名も一致しているか確認
package com.example.yourapp
2. google-services.jsonの配置場所
ファイルが正しい位置にあるか確認:
/android/app/google-services.json
3. 依存関係のバージョン確認
pubspec.yaml
で最新のfirebase_coreを使用:
dependencies:
firebase_core: ^2.27.1
4. iOS設定の確認(iOSでも問題がある場合)
iOSプロジェクトで:
- Bundle IdentifierがFirebaseコンソールと一致
- GoogleService-Info.plistが正しく追加されている
まとめ
Flutter 3.19以降では、Firebaseの初期化にはgoogle-services.json
の配置だけでなく、以下のいずれかが必要です:
- FlutterFire CLIを使用した設定生成(推奨)
- 生成された
firebase_options.dart
の利用 - 手動での
FirebaseOptions
指定(環境分岐が必要な場合)
上記解決策を適用することで「Failed to load FirebaseOptions from resource
」エラーは解消されます。追加でAndroidパッケージ名の整合性確認もお忘れなく。