Closed6
Flutter における Firebase Crashlytics の学習

目的
- 公式ドキュメントに基づいた、Firebase Crashlytics の設定を個人のサンプルアプリに設定する
- その挙動は Android エンジニアとして長年の経験から見て、納得のいくものかを確認する。

Flutter アプリに Firebase を追加する
- Firebase CLI だけでなく、FlutterFire CLI も必要
- マルチパッケージの場合
flutterfire configure
はアプリケーションのパッケージに対して行う。
動作確認のため Analytics を追加する
画面遷移イベント送信
FirebaseAnalytics.instance.logScreenView(
screenName: "home",
);
プルリク

強制的にクラッシュさせる
参考 強制的にテスト クラッシュを発生させて設定を完了する
Android と違い、わざと例外を投げただけではクラッシュ - アプリが画面から消えたりしない。先の処理が実行されないだけ。
SwitchListTile(
title: Text(l.homeFavoritesOnly),
value: uiModel.favoritesOnly,
onChanged: (value) {
throw Exception();
eventHandler.onFavoritesOnlyChanged(value);
},
),
Widget を作るところでクラッシュさせても同様
()
class DetailScreen extends HookConsumerWidget {
final int _landmarkId;
const DetailScreen(this._landmarkId, {super.key});
Widget build(BuildContext context, WidgetRef ref) {
throw Exception();
return Scaffold( /* 略 */);
}

Firebase Crashlytics を使ってみる
公式ドキュメント通りの設定でクラッシュレポートを送信できた。
Flutter フレームワークで処理されない非同期エラーをキャッチするには、PlatformDispatcher.instance.onError を使用します。
こちらは別スレッドで例外を発生させると使用することができる。
Future.delayed(Duration(seconds: 1), () {
throw Exception('Async error example');
});
プルリク

非重大なエラーの送り方
FirebaseCrashlytics.instance.recordFlutterError(
FlutterErrorDetails(
exception:
Exception("Firebase Crashlytics Non Fatal")));

公式ドキュメントに載っている実装そのまま使うべきか
実装内容の要約
すべてのスレッドにおいて、キャッチしていない例外が発生しても、アプリは引き続き使えるが、クラッシュとして記録される。
結論
そのまま使うで良い。クラッシュの先には進めないため、ユーザのやりたいことが実現できていない可能性が高い。例えばメッセージ送信ボタンを押したあとの処理でキャッチしていない例外が発生したとしたら、相手にメッセージを送れていない。このことを非重大と呼んではいけないと思う。
このスクラップは2025/01/26にクローズされました