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 ダッシュボードにアクセスします。

次のステップ