Skip to content

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を使用した設定方法が推奨されます。

  1. Firebase CLIをインストール:

    bash
    dart pub global activate flutterfire_cli
  2. プロジェクトを設定:

    bash
    flutterfire configure

    このコマンドがlib/firebase_options.dartファイルを生成します。

  3. main.dartで初期化:

    dart
    import '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ファイルが存在する場合:

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

await Firebase.initializeApp(
  options: DefaultFirebaseOptions.currentPlatform
);

ファイルは通常、lib/ディレクトリに配置されます。

方法3: FirebaseOptionsを直接指定(例外的ケース)

特定の環境(開発/本番)で異なる設定が必要な場合:

dart
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コンソールの設定が一致していることを確認:

gradle
android {
    namespace "com.example.yourapp"
    // ...
}
kotlin
// MainActivity.ktのパッケージ名も一致しているか確認
package com.example.yourapp

2. google-services.jsonの配置場所

ファイルが正しい位置にあるか確認:

/android/app/google-services.json

3. 依存関係のバージョン確認

pubspec.yamlで最新のfirebase_coreを使用:

yaml
dependencies:
  firebase_core: ^2.27.1

4. iOS設定の確認(iOSでも問題がある場合)

iOSプロジェクトで:

  • Bundle IdentifierがFirebaseコンソールと一致
  • GoogleService-Info.plistが正しく追加されている

まとめ

Flutter 3.19以降では、Firebaseの初期化にはgoogle-services.jsonの配置だけでなく、以下のいずれかが必要です:

  1. FlutterFire CLIを使用した設定生成(推奨)
  2. 生成されたfirebase_options.dartの利用
  3. 手動でのFirebaseOptions指定(環境分岐が必要な場合)

上記解決策を適用することで「Failed to load FirebaseOptions from resource」エラーは解消されます。追加でAndroidパッケージ名の整合性確認もお忘れなく。