目次
概要
今回のブログポストではFlutterで開発されたアプリが強制終了された時、これを感知するためFirebaseのCrashlyticsを設定する方法について紹介します。
ブログシリーズ
このブログはシリーズで作成されております。次のリンクを使って他のブログポストは下記のリンクで確認できます。
- [Flutter] Firebase Core
 - [Flutter] Firebase Analytics
 - [Flutter] Firebase Crashlytics
 
Firebaseプロジェクト生成や設定
FlutterでFirebaseを使うためにはFirebaseプロジェクトを生成して、firebase_coreパッケージをインストールする必要があります。下記のリンクで詳しい内容を確認してください。
Firebaseプロジェクト設定
次はグーグルのファイアベース(Google Firebase)でプロジェクトにCrashlyticsを設定する必要があります。FirebaseのConsoleを移動した後、左メニューでCrashlyticsを選択します。

上にあるAdd SDKボタンを押してSDKを追加します。また、上のCrashlyticsタイトルの横にあるプロジェクトを選択してiOS/アンドロイドを変更して、Add SDKを押してiOSとアンドロイド、両方SDKを追加します。
firebase_crashlyticsインストール
FlutterプロジェクトでFirebase Crashlyticsを使うためにはfirebase_crashlyticsパッケージをインストールする必要があります。次のコマンドを実行してfirebase_crashlyticsパッケージをインストールします。
flutter pub add firebase_crashlytics
そして、次のコマンドを実行してFirebase Crashlyticsの設定をします。
flutterfire configure
firebase_crashlyticsの使い方
Flutterで次のようにfirebase_crashlyticsを使うと、アプリが強制終了された時、Firebase Crashlyticsにこれを報告することができます。
import 'dart:async';
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
var firebaseCrashlytics = FirebaseCrashlytics.instance;
Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  FlutterError.onError = firebaseCrashlytics.recordFlutterFatalError;
  await runZonedGuarded(
    () {
      runApp(const MyApp());
    },
    (error, stack) => firebaseCrashlytics.recordError(
      error,
      stack,
      fatal: true,
    ),
  );
}
Flutterでエラーが発生する時、エラーをハンドリングする関数であるonErrorにFirebaseCrashlyticsの関数を設定しました。
runZonedGuardedを使って、アプリが実行中強制終了された時エラーが記録されるようにしました。
強制終了テスト
次のコードを使うとアプリを強制終了させることができます。
FirebaseCrashlytics.instance.crash();
このコードをボタンや画面の移動などのイベントに連結して、アプリを強制終了させます。アプリが強制終了されたら、またアプリを実行してFirebase Crashlyticsに報告するようにします。
アプリの強制終了テストは端末で実行しなければならないし、強制終了後、Firebase Crashlyticsに報告できるように必ずアプリを再起動しなければならないです。
このように強制終了をしてFirebase Crashlyticsに報告をしたら、FirebaseのCrashlytics画面が次のように変更されたことが確認できます。

また、Crashlyticsのエラーメッセージを選択すると次のようにThis is a test crash caused by calling .crash() in Dartと言うテストメッセージを確認することができます。

アンドロイドのmultiDexEnabled
firebase_crashlyticsをインストールしてFlutterプロジェクトをアンドロイドで実行した時、Debug Consoleに次のようなエラーが発生しました。
Note: .pub-cache/hosted/pub.dartlang.org/firebase_core-1.0.4/android/src/main/java/io/flutter/plugins/firebase/core/FlutterFirebaseCorePlugin.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: .pub-cache/hosted/pub.dartlang.org/flutter_tts-3.0.0/android/src/main/java/com/tundralabs/fluttertts/FlutterTtsPlugin.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: .pub-cache/hosted/pub.dartlang.org/firebase_crashlytics-2.0.1/android/src/main/java/io/flutter/plugins/firebase/crashlytics/FlutterFirebaseCrashlyticsPlugin.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: .pub-cache/hosted/pub.dartlang.org/firebase_analytics-8.0.1/android/src/main/java/io/flutter/plugins/firebaseanalytics/FirebaseAnalyticsPlugin.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: .pub-cache/hosted/pub.dartlang.org/firebase_analytics-8.0.1/android/src/main/java/io/flutter/plugins/firebaseanalytics/FirebaseAnalyticsPlugin.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
これを解決するためにはmultiDexEnabledをアクティブにする必要があります。android/app/build.gradleファイルを開いて下記のように修正します。
defaultConfig {
    ...
    minSdkVersion 21
    targetSdkVersion 30
    versionCode flutterVersionCode.toInteger()
    versionName flutterVersionName
    multiDexEnabled true // <<<<<<<<<< Add this
}
テストコード
main.dartファイルをテストするコードのエラーを修正するため、次のようにtest/main_test.dartファイルを修正します。
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
...
@GenerateMocks([FirebaseAnalytics, FirebaseCrashlytics])
void main() {
  ...
  final firebaseCrashlyticsMock = MockFirebaseCrashlytics();
  app.firebaseCrashlytics = firebaseCrashlyticsMock;
  setUp(() {
    ...
  });
  ...
}
完了
これでFLutterでFirebase Crashlyticsを使うためFlutterプロジェクトにfirebase_crashlyticsを設定する方法についてみてみました。これからFirebase Crashlyticsを使って開発したアプリの強制終了を分析してみてください。
 私のブログが役に立ちましたか?下にコメントを残してください。それは私にとって大きな大きな力になります! 
アプリ広報
Dekuが開発したアプリを使ってみてください。Dekuが開発したアプリはFlutterで開発されています。興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。






