Open13

FlutterアプリにFirebaseAnalyticsを追加する

kudokudo

目的

FA導入済みだとネイティブ実装ではCrashlyticsのログとして起動画面の履歴が出てくるので原因分析が捗る。Flutterアプリでも同じような情報を見れるようにしたい
もちろん将来的には活用してログ分析につなげたい

kudokudo

良いシングルトンクラスが思いつかなかったのでqiitaの記事を参考にした
アプリケーションサービスとして定義


class AnalyticsApplicationService {
  static final FirebaseAnalytics firebaseAnalytics = FirebaseAnalytics();
  static final FirebaseAnalyticsObserver observer =
      FirebaseAnalyticsObserver(analytics: firebaseAnalytics);
}
kudokudo

多分、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');
kudokudo

FirebaseのDebugViewで接続確認

cd android/
adb shell setprop debug.firebase.analytics.app <パッケージ名>

<パッケージ名>はandroidのManifestにあるものを記載

zsh: command not found: adb

対応方法
https://qiita.com/donuzium/items/cec53c07c2a69600fd90

export PATH=$PATH:/Users/<ユーザ名>/Library/Android/sdk/platform-tools
adb shell setprop debug.firebase.analytics.app <パッケージ名>
kudokudo

ドキュメントだとMaterialAppにobserverを登録する方法が紹介されている


MaterialApp(
  home: MyAppHome(),
  navigatorObservers: [
    FirebaseAnalyticsObserver(analytics: analytics),
  ],
);

この方法で自動で計測してくれるのは、Navigatorを呼び出すまでの画面っぽい
自動で取得してくれる screen_view などを全画面で計測したい場合は、Navigatorのobserversに登録する必要がある

kudokudo

NavigatorObserverはNavigatorごとに指定する必要がある。1つのobserverのインスタンスは1つのNavigatorしか監視できない。

NavigatorをNestしている場合に自動でログ取得する仕組みが存在しない

仮に複数インスタンス生成してNavigatorごとに設定すると、previous_screenがインスタンスごとにバラバラなので運用上厳しい

kudokudo

シングルトンのインスタンスをMainのNavigatorに設定し、それ以外のNavigatorで起動している画面は個別にサービスのMethodを呼び出す方式が現実的?