目次
概要
今回のブログポストではFlutterで開発されたアプリが強制終了された時、これを感知するためFirebase
のCrashlytics
を設定する方法について紹介します。
Firebase
のCrashlytics
を使うため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
アンドロイドGradle修正
FlutterプロジェクトのアンドロイドでCrashlyticsを使うためにはGradle
ファイルを修正する必要があります。まず、android/app/build.gradle
ファイルを開いてファイルの下を次のように修正します。
...
android {
...
}
dependencies {
...
}
apply plugin: 'com.google.firebase.crashlytics' // <<<<<<<<<<<<< Add this
その後、android/build.gradle
ファイルを開いて下記のように修正します。
buildscript {
...
dependencies {
...
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.3.14'
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.2' // <<<<<<<<<<<<<<<< Add this
}
}
これでFlutterプロジェクトのアンドロイドでCrashlyticsを使う準備ができました。
firebase_crashlyticsの使い方
Flutterで次のようにfirebase_crashlytics
を使うと、アプリが強制終了された時、Firebase Crashlyticsにこれを報告することができます。
import 'dart:async';
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterFatalError;
runZonedGuarded(
() {
runApp(const MyApp());
},
(error, stack) => FirebaseCrashlytics.instance.recordError(
error,
stack,
fatal: true,
),
);
}
Flutter
でエラーが発生する時、エラーをハンドリングする関数であるonError
にFirebaseCrashlytics
の関数を設定しました。
runZonedCuarded
を使って、アプリが実行中強制終了された時エラーが記録されるようにしました。
強制終了テスト
次のコードを使うとアプリを強制終了させることができます。
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
}
完了
これでFLutterでFirebase Crashlyticsを使うためFlutterプロジェクトにfirebase_crashlytics
を設定する方法についてみてみました。これからFirebase Crashlyticsを使って開発したアプリの強制終了を分析してみてください。
私のブログが役に立ちましたか?下にコメントを残してください。それは私にとって大きな大きな力になります!
アプリ広報
Deku
が開発したアプリを使ってみてください。Deku
が開発したアプリはFlutterで開発されています。興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。