Skip to content

Instantly share code, notes, and snippets.

@yamacraft
Last active June 7, 2021 03:08
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yamacraft/f2ee0dcea410dfa1b7cc91579304c2ba to your computer and use it in GitHub Desktop.
Save yamacraft/f2ee0dcea410dfa1b7cc91579304c2ba to your computer and use it in GitHub Desktop.
Firebase Analyticsの調査メモ

Firebase Analytics調査メモ

Firebase Analyticsの動作をいろいろ調べてわかったことなどをメモしていく。 特に注釈が無いものはAndroid上で動作確認したもの。

言葉の定義

  • デフォルトイベント(デフォルトパラメータ)
    • Firebase Analyticsが用意してくれているイベントやパラメータのこと。 FirebaseAnalytics.Event.*FirebaseAnalytics.Param.* のこと。
  • カスタムイベント(カスタムパラメータ)
    • 独自で指定したイベント名やパラメータ名

バージョンごとの違いについて

Firebase Android SDK Release Notes  |  Firebase

v9.6からRequiresPermissionが指定されている。

public final class FirebaseAnalytics {
    private final zzx anq;

    @RequiresPermission(
        allOf = {"android.permission.INTERNET", "android.permission.ACCESS_NETWORK_STATE", "android.permission.WAKE_LOCK"}
    )
    public static FirebaseAnalytics getInstance(Context var0) {
        return zzx.zzdt(var0).zzbwz();
    }

じゃあv9.6からGoogle Play Serviceなしでも送信できるようになったのか?という話になるけれどログを見るとv9.4から送信自体はされている感じがあるので、単に入力漏れのような気がなくもない。 ログの出方はv9.6からちょっと変わっている。

イベントの送信に関して

パラメータに数値/文字列を送る

パラメータに対して「文字列」を送りたい場合はputString()、「数値」を送りたい場合はputInt()で送る。 デフォルトパラメータであっても、自動変換はしてくれない(調査しきれてないが、きっとそう)。

Bundle bundle = new Bundle();
bundle.putInt("value", 1); // 数値で集計される
mAnalyticsManager.logEvent("num1", bundle);

Bundle bundle = new Bundle();
bundle.putInt("value", "1"); // 文字列で集計される
mAnalyticsManager.logEvent("num2", bundle);

数値か文字列かどうかが現時点で関係するのは、ユーザーリスト作成時の条件付けとコンソール画面のイベント一覧の「値」の部分。

コンソールのイベント一覧の「値」について

  • 送られてきたパラメータの「数値」が合計されたものが表示される
  • 1つのパラメータに対して「数値以外」が1つでも送られると合計値は出てこなくなる
  • パラメータが複数送られると合計値が出てこなくなる。全てのパラメータで送られる値が「数値」でも同様

これに限った話ではないが、デフォルトパラメータであろうとなんだろうとパラメータの内部をコンソールで確認することは不可能(たぶんBigQueryを使えってこと)なのを頭に入れておく。

デフォルトイベント/デフォルトパラメータの価値

ユーザーリストなどを作成する際に、勝手に推奨パラメータとして選択肢が出てくるので管理しやすい。(カスタムパラメータは現在候補でいっさいでてこない)。 組み合わせは決まっているので、イベントとプロパティ - Firebase ヘルプ を参考に設定すること。

むしろ現状は欲しいカスタムイベントに加え、ヘルプで指定されているイベントも可能な限り送るように設定したほうが良さ気。

ユーザープロパティ設定時の注意点

コンソール画面の「ユーザープロパティ」でも同様のものを設定しないと、フィルタ表示等ができない。

ユーザーリストの反映について

設定した条件が「設定した日より前から当てはまるユーザーがいたとしても」、カウントが開始されるのは設定した日以降(のはず)。

パラメータ設定が正しくても集計できないケースがある。恐らく該当ユーザーが10人以下だと集計が開始されない。

Firebase Analyticsへの送信のタイミングを決めたい(あるタイミングまでは送りたくない)

FirebaseAnalytics.setAnalyticsCollectionEnabled(false)でAnalyticsへの送信を止めることができる。

Android Monitorでのログ確認(Logcat)

FAタグで出力されている

# 例
10-04 16:31:20.627 6164-6208/io.github.yamacraft.app.fanfan V/FA: Connecting to remote service
10-04 16:31:20.636 6164-6208/io.github.yamacraft.app.fanfan D/FA: Setting app measurement enabled (FE): true
10-04 16:31:20.636 6164-6208/io.github.yamacraft.app.fanfan V/FA: Setting measurementEnabled: true
10-04 16:31:20.636 6164-6208/io.github.yamacraft.app.fanfan V/FA: Using measurement service
10-04 16:31:20.636 6164-6208/io.github.yamacraft.app.fanfan V/FA: Connection attempt already in progress
10-04 16:31:20.710 6164-6164/io.github.yamacraft.app.fanfan V/FA: onActivityCreated
10-04 16:31:20.788 6164-6208/io.github.yamacraft.app.fanfan D/FA: Setting user property (FE): _id, dab2f0a2-8089-4e2e-a3de-ac3bcf5d5ead
10-04 16:31:20.789 6164-6208/io.github.yamacraft.app.fanfan V/FA: Using measurement service
10-04 16:31:20.789 6164-6208/io.github.yamacraft.app.fanfan V/FA: Connection attempt already in progress
10-04 16:31:20.793 6164-6208/io.github.yamacraft.app.fanfan D/FA: Setting user property (FE): DeviceName, Android-Android SDK built for x86_64
10-04 16:31:20.794 6164-6208/io.github.yamacraft.app.fanfan V/FA: Using measurement service
10-04 16:31:20.794 6164-6208/io.github.yamacraft.app.fanfan V/FA: Connection attempt already in progress
10-04 16:31:20.797 6164-6208/io.github.yamacraft.app.fanfan V/FA: Activity resumed, time: 280902

その他

各パラメータの役割はリファレンス見たほうが良い。

FirebaseAnalytics  |  Firebase

FirebaseAnalytics.setUserId()は、設定してもコンソール画面上で確認できる手段はなかった。もしかしたら同一IDを指定することで、複数端末からの送信を1つのユーザーとして扱わせることができるのかもしれない。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment