Firebase Analyticsのイベントとパラメータをどう設定するべきか？

#〇概要
FirebaseのAnalyticsはユーザーの利用回数やレベルアップ、設定変更などのイベントを簡単に取得、集計してくれる機能です。
ですが、公式の説明をみて作成しても思っていた結果と違ってしまったので、イベントとパラメータをどういう構成にすべきか初心者向けにまとめてみました。
実装方法はざっくりしています。
後、サンプルデータは1日分だけです・・・

#〇実装方法
公式の実装方法はここに書いてあります。
https://firebase.google.com/docs/analytics/android/start?hl=ja
AndroidStudioのTools → Firebase → Analytics
から指示に従うだけでも、簡単にできます。

#〇データ送信例
以下のソースを入れるだけで簡単に送信できます。

```java

private FirebaseAnalytics mFirebaseAnalytics;
・
・
Bundle bundle = new Bundle();
// String型パラメータを設定
bundle.putString("key", "value");
// Int型パラメータを設定
bundle.putInt("key", value);
// イベントを設定
mFirebaseAnalytics.logEvent("original_event", bundle);
```

イベントとそれに付随するパラメータを送るだけです。
パラメータに関しては任意の個数になります。
パラメータを設定しなくても、イベント数、イベントが発生した場所、性別、年齢は自動で取得できます。
Firebaseコンソールに反映されるまで数時間の誤差があるので注意してください。

#〇各値について
###・イベント  
ユーザー操作の出来事の単位です。
FirebaseコンソールのEventsを見るとデフォルトですでにいくつかできていると思います。
[自動収集イベント一覧]https://support.google.com/firebase/answer/6317485
ここにオリジナルのイベントを作成していきます。
最大500まで設定可能なので、細かく分けていいと思います。 

ちなみにイベントは一度作るとコンソールから削除できないようです。データが来ないとデフォルトビューから見えなくなりますが（過去28日分表示のため）、変な名前で作ると恥ずかしいので気を付けましょう。
（作成例）
・[add_payment] ユーザーが支払いをした
・[access_info] ユーザーが特定画面に入った
・[level_up] ユーザーがレベルアップをした

###・パラメータ
イベントには複数のパラメータ名と値を設定できます。
（作成例）
[level_up]レベルアップイベントに対して
　　　- [job]レベルアップをしたキャラの職業
　　　- [level] レベルアップをしたキャラのレベル
イベントはデータを送信すると勝手にFirebaseコンソールのEventsに追加されるのに対して、パラメータは各イベントの横の[・・・]をクリックして、パラメータレポートから追加しなければ反映されません。
またタイプはテキストと数値を選択できるのですが、テキストは10個、数値は40個という制限があります。
数値を選択すると距離や時間という詳細設定もできます。

#〇パラメータをテキストにすべきか数値にすべきか？
テキストにすべきものは分かりやすいです。
ゲームアプリを例にすると
（作成例）
イベント
[create_user]　ユーザーが新規にプレイヤーを作成したときに発生
　　　- パラメータ（テキスト）
　　　- [character]　新規に作成したプレイヤーの職業


このようにテキスト設定すれば、作成された通算のプレイヤーの数とその職業の内訳がわかります。
チェックボックスにチェックを入れると対象データだけのグラフ表示や日ごとの値もマウスオーバーで確認できます。
（注）グラフに表示されるのは日ごとの値で、通算はグラフに表示されません。
![Image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252283/f3b697d6-700d-c5fc-8849-6ce860439be6.png)

次に数値ですが、レベルアップしたときをイベントとして、その時のレベルを数字なので数値で保存した場合の例を見てみます。
（作成例）
イベント
[level_up]　ユーザーがレベルアップしたときに発生
　　　- パラメータ（数値）
　　　- [level]　アップしたレベルの値
![Image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252283/6a8c7915-83c8-f600-3e2f-85672f69a9ea.png)

数値にすると、通算の「平均」(13)と「合計」(62)しかわかりません。
グラフに表示されるのは日ごとの「平均」と「合計」で、マウスオーバーで日ごとの値も見えます。
レベルアップした人の平均値と合計値が分かっても、分布が分からないのでいまいちですね。

結局、下のようにテキストで保存したほうが良いケースが多そうです。
これなら通算でレベルアップしたプレイヤーは5人で13レベルになったのは3件（内2人は同一ユーザー）、10レベルと18レベルは1件とわかりやすいです。


![Image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252283/2297d2f6-d322-5915-5dc0-49afd1ef10f0.png)


じゃあ、数値で保存するのはどんなとき？と考えてみると
特定のページの滞在時間やゲームの得点、カーナビアプリの移動距離など範囲が広い数値を集計する時が想定されます。
平均と合計しかわからないので、使いどころが難しいですが、
1日10万とかアクセス制限があるサイトにつないでいるときは、合計値の伸びがわかってよいかもしれません。

ちなみに距離、秒、通過を試してみましたが、単位がくっつくだけです。
11m とか 3分20秒 とか $10.80などです。

#〇コンバージョンの設定
コンソールに「コンバージョンとしてマーク」というのがありますが、コンバージョンとはアプリの成果の目安になります。
起動回数や、課金回数など、これが増えるとアプリが成功しているというものですね。
チェックするとDashboardに表示されます。

#〇終わりに
こうなるんじゃないかなぁとプライベートアプリで設定してS-inしたところ、思った通りに取れなく、消すこともできずに困りました。:cold_sweat:
基本的なことですが、同一の問題でハマる人が少なくなればと思います。（あと備忘録）

以下、公式サンプル

・イベント: すべてのアプリ
https://support.google.com/firebase/answer/6317498
・イベント: 小売と e コマース
https://support.google.com/firebase/answer/6317499
・イベント: 求人、教育、地域限定セール、不動産
https://support.google.com/firebase/answer/6375140
・イベント: 旅行（ホテル、航空券）
https://support.google.com/firebase/answer/6317508
・イベント: ゲーム
https://support.google.com/firebase/answer/6317494

BigQueryとかの連携はまたいつか・・・