FlutterアプリにFirebaseAnalyticsを追加する
目的
FA導入済みだとネイティブ実装ではCrashlyticsのログとして起動画面の履歴が出てくるので原因分析が捗る。Flutterアプリでも同じような情報を見れるようにしたい
もちろん将来的には活用してログ分析につなげたい
このプラグインを追加
Read.meの中のリンクが切れてる
You must also configure firebase analytics for each platform project: Android and iOS (see the example folder or https://codelabs.developers.google.com/codelabs/flutter-firebase/#6 for step by step details).
プラットフォームごとの設定だから、codelabのこれの事と予想
良いシングルトンクラスが思いつかなかったのでqiitaの記事を参考にした
アプリケーションサービスとして定義
class AnalyticsApplicationService {
static final FirebaseAnalytics firebaseAnalytics = FirebaseAnalytics();
static final FirebaseAnalyticsObserver observer =
FirebaseAnalyticsObserver(analytics: firebaseAnalytics);
}
多分、FirebaseAnalyticsのインスタンスは何個作っても大丈夫なようにFirebaseのライブラリ側がうまいことやっているはず
内部実装を見た感じだとそんな雰囲気がある
class FirebaseAnalytics {
final _platformInstance = FirebaseAnalyticsPlatform.instance;
abstract class FirebaseAnalyticsPlatform {
static FirebaseAnalyticsPlatform get instance => _instance;
static FirebaseAnalyticsPlatform _instance = MethodChannelFirebaseAnalytics();
class MethodChannelFirebaseAnalytics extends FirebaseAnalyticsPlatform {
static const MethodChannel _channel =
MethodChannel('plugins.flutter.io/firebase_analytics');
FirebaseのDebugViewで接続確認
cd android/
adb shell setprop debug.firebase.analytics.app <パッケージ名>
<パッケージ名>はandroidのManifestにあるものを記載
zsh: command not found: adb
対応方法
export PATH=$PATH:/Users/<ユーザ名>/Library/Android/sdk/platform-tools
adb shell setprop debug.firebase.analytics.app <パッケージ名>
ドキュメントだとMaterialAppにobserverを登録する方法が紹介されている
MaterialApp(
home: MyAppHome(),
navigatorObservers: [
FirebaseAnalyticsObserver(analytics: analytics),
],
);
この方法で自動で計測してくれるのは、Navigatorを呼び出すまでの画面っぽい
自動で取得してくれる screen_view
などを全画面で計測したい場合は、Navigatorのobserversに登録する必要がある
NavigatorObserverはNavigatorごとに指定する必要がある。1つのobserverのインスタンスは1つのNavigatorしか監視できない。
NavigatorをNestしている場合に自動でログ取得する仕組みが存在しない
仮に複数インスタンス生成してNavigatorごとに設定すると、previous_screenがインスタンスごとにバラバラなので運用上厳しい
シングルトンのインスタンスをMainのNavigatorに設定し、それ以外のNavigatorで起動している画面は個別にサービスのMethodを呼び出す方式が現実的?