ACCESS Advent Calendar 2020 15日目の記事になります。
はじめに
Firebase向けGoogle Analytics (Google Analytics for Firebase)はモバイル、Webアプリ向けのログ解析サービスです。
以前はFirebase Analyticsという名前でした。
本記事ではモバイル(iOS / Android)向けのログ収集について取り上げます。
どのようなことが分析できるか
- どの画面がどれぐらい表示されるか (表示時間、割合)
- ある画面操作をユーザー属性別に統計を取る
- ある機能がどの程度利用されているか (操作回数、使用時間)
- ある画面にたどり着くルートのうちどちらが多いか
仕組み
iOSはCocoapods、AndroidはGradleでライブラリが提供されています。
ライブラリを使ってユーザーの属性やイベントと呼ばれるユーザー操作などのログを送信するように実装します。
詳しくはFirebaseのドキュメントに記載されています。
Firebase Console
収集したデータを閲覧するサービスです。
どのような画面かはデモプロジェクトをみると雰囲気が分かります。 (Googleアカウントが必要)
iOS, Androidのアプリの両方を同じプロジェクトで管理することができます。
イベント
ユーザーの操作などをイベントという形で記録できます。
例えばscreen_view
は画面が移り変わったときに記録されます。これはライブラリを導入しただけで収集されるイベントの1つです。
cf. 自動的に収集されるイベント
これはユーザーが表示した全ての画面が記録されるので、アプリの中でどの画面が最も多く表示されているかというのも分かります。
デモプロジェクトのscreen_viewを見るとユーザーエンゲージメント
の枠に画面の名前が表示されています。
iOSならViewController、AndroidならActivityがデフォルトで収集されます。
エンゲージメント率が高いと多く表示されているということになります。
カスタムイベント
任意のタイミングでイベントを送信するには次のように書きます。(Android・Kotlinの場合)
import com.google.firebase.analytics.FirebaseAnalytics
FirebaseAnalytics.getInstance(context).logEvent("tweet") {
param("text_length", length)
param("images", count)
}
paramというのはカスタムパラメータで、key-value形式で設定できます。
ただしパラメータの数は25個まで、key nameは40文字以内、英数字+アンダースコア_
のみという制約があるので注意が必要です。
- FirebaseAnalytics#logEvent (Android)
- Analytics#logEvent (iOS)
ユーザープロパティ
イベントにはそのアプリのユーザー情報が紐付いて送信されています。
こちらも自動的に収集されるプロパティがあります。例えば年齢、性別、居住地域といったユーザーに関する情報や端末名、OSバージョンといった端末の情報があります。
cf. 事前定義されたユーザー ディメンション
独自のプロパティを設定する
プロパティもkey-value形式で設定できます。
ただこちらは予めConsoleでキーを設定しておく必要があります。
import com.google.firebase.analytics.FirebaseAnalytics
FirebaseAnalytics.getInstance(context).setUserProperty("email", "hoge@example.com")
cf. ユーザープロパティの設定と登録
ユーザープロパティはイベントのフィルターとして利用できます。
cf. レポート設定
実際の活用例
方針としてクライアント側でしか収集できないようなことをハンドリングした方がよいです。
サーバー側で解析できるようなAPIのリクエスト数やエラーを解析したい場合、Analyticsは向いていないかもしれません。
またアプリのクラッシュや例外を解析するにはFirebase Crashlyticsというサービスがあるので、こちらも合わせて導入しておくと便利です。
どちらの導線が多く利用されているか調べる
例えばユーザーをブロックする機能があり、その操作をするには2つの導線があるとします。
そのどちらが多く利用されているかを調べるにはこのように
// ユーザープロフィールから
firebaseAnalytics.logEvent("block_user") {
param("from", "profile_view")
}
// ツイートから
firebaseAnalytics.logEvent("block_user") {
param("from", "tweet")
}
別の画面で同じイベントを送信するようにし、カスタムパラメータでどちらの導線から実行されたかを与えておきます。
そしてこのfrom
というパラメータをConsoleで分析できるようにするために、カスタムディメンションを設定しておきます。
用途は異なりますがデモプロジェクトだと、level_completeイベントのlevel_name[post_score]
が似たような結果になると思います。
状態を持つ画面を区別する
例えばTweetActivity
というActivityが2つの状態を持っているとします。
デフォルトではActivityの名前が画面の名前として収集されるので、状態を判別できません。
その場合、このように手動で画面の名前を設定することで区別することができます。
// ツイート投稿画面
firebaseAnalytics.logEvent(FirebaseAnalytics.Event.SCREEN_VIEW) {
param(FirebaseAnalytics.Param.SCREEN_NAME, "PostTweetView")
param(FirebaseAnalytics.Param.SCREEN_CLASS, "TweetActivity")
}
// ツイート編集画面
firebaseAnalytics.logEvent(FirebaseAnalytics.Event.SCREEN_VIEW) {
param(FirebaseAnalytics.Param.SCREEN_NAME, "EditTweetView")
param(FirebaseAnalytics.Param.SCREEN_CLASS, "TweetActivity")
}
cf. 画面表示の追跡
Consoleだとscreen_viewイベントのユーザーエンゲージメント
→ スクリーン名
から確認できます。
利用時間を集計する
例えば通話時間を集計したい場合、通話を始めてから切るまでの時間をタイマーかなにかで測定しておいて、それをイベントのカスタムパラメータに設定しておけば集計することができます。
デモプロジェクトだとpost_scoreイベントのscore
パラメータが該当します。
数値の単位はConsole側のカスタム指標設定で設定できます。
おわりに
Firebase向けGoogle Analyticsを導入すると、機能の追加や変更をするにあたって正確なデータを元に検討することができます。
途中でイベントやユーザープロパティを実装してもそれ以前のデータは収集できないので、初期段階で実装しておくことをおすすめします。
ライブラリを入れるだけでも価値があるので、是非使ってみてください。