Firebase Crashlytics を使ってみる

このクイックスタートでは、Firebase コンソールで包括的なクラッシュ レポートを表示できるよう、Crashlytics Flutter プラグインを使用してアプリに Firebase Crashlytics を設定する方法について説明します。

Crashlytics の設定には、コマンドライン ツールと IDE の両方を使用します。設定を完了するには、強制的にテスト例外をスローして、最初のクラッシュ レポートを Firebase に送信する必要があります。

始める前に

  1. まだ行っていない場合は、Flutter プロジェクトで Firebase の構成と初期化を行います。

  2. 推奨: クラッシュに遭遇していないユーザー数の表示、パンくずリストのログ、ベロシティ アラートなどの機能を利用するには、Firebase プロジェクトで Google アナリティクスを有効にする必要があります。

    Crashlytics でサポートされているすべての Android および Apple プラットフォーム(watchOS を除く)で、Google アナリティクスのこれらの機能を利用できます。

    Firebase プロジェクトで Google アナリティクスが有効になっていることを確認します。 [] > [プロジェクト設定] > [統合] タブに移動し、Google アナリティクスの画面上の指示に沿って操作してください。

ステップ 1: Flutter プロジェクトに Crashlytics を追加する

  1. Flutter プロジェクトのルートから、次のコマンドを実行して Crashlytics Flutter プラグインをインストールします。

    flutter pub add firebase_crashlytics
    
  2. Flutter プロジェクトのルート ディレクトリから、次のコマンドを実行します。

    flutterfire configure
    

    このコマンドを実行すると、Flutter アプリの Firebase 構成が最新の状態になります。さらに、Android の場合は、必要な Crashlytics Gradle プラグインがアプリに追加されます。

  3. 完了したら、Flutter プロジェクトを再ビルドします。

    flutter run
    
  4. (省略可)Flutter プロジェクトが --split-debug-info フラグ(および必要に応じて --obfuscateフラグ)を使用している場合は、Firebase CLI(v.11.9.0 以降)を使用して Android シンボルをアップロードする必要があります。

    Flutter プロジェクトのルート ディレクトリから、次のコマンドを実行します。

    firebase crashlytics:symbols:upload --app=APP_ID PATH/TO/symbols

    PATH/TO/symbols ディレクトリは、アプリケーションのビルド時に --split-debug-info フラグに渡すディレクトリと同じものです。

ステップ 2: クラッシュ ハンドラを構成する

FlutterError.onErrorFirebaseCrashlytics.instance.recordFlutterFatalError でオーバーライドすると、Flutter フレームワーク内でスローされたすべてのエラーを自動的にキャッチできます。

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  await Firebase.initializeApp();

  // Pass all uncaught "fatal" errors from the framework to Crashlytics
  FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterFatalError;

  runApp(MyApp());
}

Flutter フレームワークで処理されない非同期エラーをキャッチするには、PlatformDispatcher.instance.onError を使用します。

Future<void> main() async {
    WidgetsFlutterBinding.ensureInitialized();
    await Firebase.initializeApp();
    FlutterError.onError = (errorDetails) {
      FirebaseCrashlytics.instance.recordFlutterFatalError(errorDetails);
    };
    // Pass all uncaught asynchronous errors that aren't handled by the Flutter framework to Crashlytics
    PlatformDispatcher.instance.onError = (error, stack) {
      FirebaseCrashlytics.instance.recordError(error, stack, fatal: true);
      return true;
    };
    runApp(MyApp());

}

他のタイプのエラーの処理方法の例については、クラッシュ レポートをカスタマイズするをご覧ください。

ステップ 3: 強制的にテスト クラッシュを発生させて設定を完了する

Crashlytics の設定を完了し、Firebase コンソールの Crashlytics ダッシュボードで最初のデータを確認します。そのためには、強制的にテスト例外をスローさせる必要があります。

  1. テスト例外を強制的にスローするためのコードをアプリに追加します。

    FirebaseCrashlytics.instance.recordError(error, stack, fatal: true) を呼び出すエラーハンドラを最上位の Zone に追加している場合は、次のコードを使用してアプリにボタンを追加します。このボタンを押すと、テスト例外がスローされます。

    TextButton(
        onPressed: () => throw Exception(),
        child: const Text("Throw Test Exception"),
    ),
    
  2. アプリをビルドして実行します。

  3. アプリの最初のレポートを送信するために、テスト例外を強制的にスローします。

    1. テスト用のデバイスまたはエミュレータからアプリを開きます。

    2. アプリで、上述のコードを使用して追加したテスト例外のボタンを押します。

  4. Firebase コンソールの Crashlytics ダッシュボードに移動して、テスト クラッシュを確認します。

    コンソールを更新し、5 分経過してもテスト クラッシュが表示されない場合は、デバッグ ロギングを有効にして、アプリがクラッシュ レポートを送信しているかどうかを確認してください。


これで完了です。Crashlytics がアプリのクラッシュをモニタリングするようになりました。Android では、致命的でないエラーや ANR がモニタリングされます。すべてのレポートと統計情報を参照して調査するには、Crashlytics ダッシュボードにアクセスします。

次のステップ