この記事は、【 Flutter Advent Calendar 2021 】のカレンダー2の14日目の記事です。
FlutterのFirebaseAnalyticsでScreenViewイベントにカスタムパラメータを渡す方法を解説します。
まずはNavigationの際に自動的にScreenViewをトラッキングしてくれるための実装を行います。
MaterialApp
のnavigatorObservers
にFirebaseAnalyticsObserver
をセットします。
static FirebaseAnalytics analytics = FirebaseAnalytics.instance;
static FirebaseAnalyticsObserver observer =
FirebaseAnalyticsObserver(analytics: analytics);
Widget build(BuildContext context) {
return MaterialApp(
title: 'SampleApp',
navigatorObservers: [observer],
home: HomePage(),
);
}
この場合、画面遷移する際に以下のようにRouteSettings
のname
を設定することで、自動的にFirebaseAnalyticsのsetCurrentScreen
が呼ばれるようになります。
Navigator.of(context).push(
MaterialPageRoute(
builder: (_) => ProfilePage(),
settings: RouteSettings(name: 'profile_page'),
),
);
内部では、ライブラリのこの部分が呼ばれています。
自分たちのチームではAnalyticsのデータをBigQueryに溜めて、後で様々な形で出力できるようにしているのですが、この方法ではScreenViewにカスタムパラメータを渡すことができません。
ログイン時に取得した情報を、画面遷移の際に一緒に渡したかったので、FlutterFireのFirebaseAnalyticsのobserver部分を少し改造しました。
FlutterFireのリポジトリをForkして、
flutterfire/packages/firebase_analytics/firebase_analytics/lib/src/observer.dart
を以下のように修正します。
setCurrentScreen
にはパラメータを付与できないので、screen_view_event
というイベントを独自で追加しました。
Map<String, Object?> parameters = {}; // 追加
void setParameters(Map<String, Object?> value) => parameters = value; // 追加
void _sendScreenView(PageRoute<dynamic> route) {
final String? screenName = nameExtractor(route.settings);
if (screenName != null) {
parameters..addAll({'screen_name': screenName}); // 追加
analytics.logEvent(name: 'screen_view_event', parameters: parameters); // 追加
analytics.setCurrentScreen(screenName: screenName).catchError(
(Object error) {
final _onError = this._onError;
if (_onError == null) {
debugPrint('$FirebaseAnalyticsObserver: $error');
} else {
_onError(error as PlatformException);
}
},
test: (Object error) => error is PlatformException,
);
}
}
ブランチをfirebase_analytics_9_0_3
としてコミット&プッシュします。
pubspec.yaml
を以下のように設定します。
firebase_analytics:
git:
url: https://github.com/{user_name}/flutterfire.git
ref: firebase_analytics_9_0_3
path: packages/firebase_analytics/firebase_analytics
ログイン時に以下のような形でカスタムパラメータを設定しておくと、以降の画面遷移の度にこれらのパラメータも付与された状態で自動的にトラッキングされます。
analyticsObserver.setParameters({'key': value});
FirebaseAnalyticsのScreenViewでカスタムパラメータを渡す方法を解説しました。
同時に、パッケージのカスタマイズも説明していますので、その辺りも参考になった人がいたら嬉しいです。
可茂IT塾ではFlutterでのアプリ開発の仕事を絶賛募集中ですので、Flutterエンジニアをお探しの際はぜひお声がけください!
可茂IT塾ではFlutter/Reactのインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。
Read More可茂IT塾ではFlutter/Reactのインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。
Read More