Firebase Analyticsのユーザープロパティとユーザーリスト


## 関連記事

- [Firebase Analyticsでイベントを送信する - Qiita](http://qiita.com/yamacraft/items/d2fee3d6eec58ec355e2)

## ユーザープロパティ

### 概要／コード上での実装
ユーザープロパティは名前の通り、ユーザーごとに要素を設定することができます（例えば利用プランだとか、スコア等に応じてつけたランクとか）。

コード上で実装するためにはイベントと同様に`FirebaseAnalytics`インスタンス（swiftは`FIRAnalytics`に`setUserProperty()`（swiftは`setUserPropertyString()`）を使って指定します。

```java:Android.java
mFirebaseAnalytics.setUserProperty("favorite_food", mFavoriteFood);
```

```swift:iOS.swift
FIRAnalytics.setUserPropertyString(food, forName: "favorite_food")
```

ユーザープロパティは文字列情報のみ設定可能です。また、 **ユーザープロパティはコードの実装だけでは反映されません。**

コンソール画面にて同名のプロパティを設定する必要があります。（この順番はどちらでもいいのですが、後述する注意点を考えるとコンソール画面から先にやったほうがいいのかも）

### コンソール画面での設定

![スクリーンショット_2016-10-20_15_19_05.png](https://qiita-image-store.s3.amazonaws.com/0/4560/d2d51406-9615-7866-565f-f03c83838841.png "スクリーンショット_2016-10-20_15_19_05.png")

ユーザープロパティの設定ですが、かなり気をつけないといけない点があります

- 設定できるユーザープロパティは最大25個（[参考](https://firebase.google.com/docs/reference/android/com/google/firebase/analytics/FirebaseAnalytics.html#setUserProperty(java.lang.String, java.lang.String))）
- **一度コンソール画面で設定したユーザープロパティは消せない**
- **一度コンソール画面で設定したユーザープロパティの名前は変えられない（説明は変更可能）**
- **なぜかこの画面だけキーボードの反応がおかしく、テキスト入力途中の変換だろうがなんだろうが、エンターキーが押されたタイミングで作成を始めてしまう**

無事に登録が完了し、アプリからもユーザープロパティが送信されるようになるとマイレポートなどに反映されます。

### 使いどころ

ユーザープロパティはレポートのフィルタリングの条件の他に、後述するユーザーリストの条件として利用できます。

![スクリーンショット_2016-10-20_15_37_21.png](https://qiita-image-store.s3.amazonaws.com/0/4560/8969b4d1-c2e5-cdaa-c489-04b76e3742ad.png "スクリーンショット_2016-10-20_15_37_21.png")
これはユーザープロパティ`DeviceName`にメーカー＋デバイス名を送っているユーザープロパティです。

ユーザープロパティはイベントと違い、実際に送られたデータを推奨値にして表示してくれます。（ただ、「推奨値」なので一定数以上は送られてこない可能性があります）
推奨値にない値を指定する場合は、分かりづらいですが推奨値リストの上がテキストボックスになっているので直接入力することになります。

こうしたことから、例えばランキング情報をユーザープロパティとして送りたい場合は順位をそのまま送るのではなく、「TOP100」「101-200」などある程度カテゴリに分けて送る方が良さそうな気がします。

## ユーザーリスト

### 概要

ユーザーリストはコンソール画面上で定義する「一定条件を満たしたユーザー」の設定を指します。「一定条件」にはイベントとユーザープロパティから指定します。

### 設定画面

![スクリーンショット_2016-10-20_16_23_50.png](https://qiita-image-store.s3.amazonaws.com/0/4560/4bffdd43-bea5-bd7f-3ac6-01398548af03.png "スクリーンショット_2016-10-20_16_23_50.png")
例：OSバージョンが7.0.xもしくは6.0.xで`value`パラメータに100が入った`num0`イベントを発生させたユーザー

コンソール画面でイベントのパラメータとその内容を見る術はありませんが、ユーザーリストではパラメータに送信された値まで条件を絞り込むことができます。

なお、[イベントとプロパティ](https://support.google.com/firebase/topic/6317484?hl=ja&ref_topic=6386699)で推奨されているイベント名を選択した場合、そのまま推奨されていたパラメータが入力候補に表示されます。カスタムイベントや推奨されていなかったパラメータ（カスタムパラメータ）を選ぶ場合は、テキストボックスに１文字１文字正確に入力する必要があります。

![スクリーンショット 2016-10-20 16.34.44.png](https://qiita-image-store.s3.amazonaws.com/0/4560/35edad4b-ac44-61bc-023f-7473369ec5e2.png "スクリーンショット 2016-10-20 16.34.44.png")
（カスタムパラメータを指定する場合は「パラメータ名を入力」にパラメータ名を入力）

値の設定は文字列用と数値用がありますので、実際に送っている情報に合わせてください。文字列情報は正規表現が利用可能です。

ユーザーリストはそれ自体がイベントと同様のレポート画面表示も兼ね備えており、一覧でも該当するユーザー数を見ることができます。

![スクリーンショット_2016-10-20_16_47_37.png](https://qiita-image-store.s3.amazonaws.com/0/4560/d8540663-c130-d26c-55e6-d7bef307b915.png "スクリーンショット_2016-10-20_16_47_37.png")
（モザイクにしてる項目が新規で作成したユーザーリスト。値が同じなのは同じ条件にしているからです…）

`All Users`と`Purchasers`はデフォルトで用意されているユーザーリストです。`All Users`は名前の通りで、`Purchasers`はOSごとのネイティブな課金処理を行っているユーザーが条件となっています。

### 注意点

**例え条件に一致するユーザーが設定した日より過去に存在しても、集計が開始されるのは設定日からになります**。また、条件にヒットするユーザーが極端に少ないと（常に10人/日を下回る）集計されないことがあります。と思ったらいつの間にか集計されたりすることもあって、集計が開始されるまでの動作が不安定な印象があります。

もし「確かに存在するはずの条件なのに、いつまで経ってもレポートに反映されない」場合は、もしかしたら条件を絞りすぎているのかもしれません。

### 使いどころ

ユーザーリストもまた、レポート画面でのフィルタリングとして使うことに加え、Firebaseの機能であるRemote Configの対象条件として選択することができます。

ユーザーリストを設定することで、KPIとしてチェックしたいユーザー動向をスムーズに分析したり、直接的にA/Bテストを実施できるといった可能性があるんじゃないでしょうか。

## おわりに

他にもFirebase Analyticsのメソッドはありますが、基本的な使い方は[Firebase Analyticsでイベントを送信する](http://qiita.com/yamacraft/items/d2fee3d6eec58ec355e2)と合わせてこれぐらいかなと思います。

こうしてみるとFirebase Analyticsは「想定したユーザーの動きを分析」という点には優れているものの、「ユーザーの動きを見る（俯瞰視点）」には弱い印象を持ちました。

Googleでは既にGoogle Analyticsでアプリの枠を作ろうとするとFirebase Analyticsの利用を推奨してきますが、俯瞰視点でのユーザー動作を見たい場合はFAとGAの両方を併用していくことになりそうです（Big Queryの使い方次第ではFAのみでも良いんでしょうが……）

## 参考

- コードの引用元
	- [ユーザー プロパティを設定する（Android）  |  Firebase](https://firebase.google.com/docs/analytics/android/properties)
	- [ユーザー プロパティを設定する（iOS）  |  Firebase](https://firebase.google.com/docs/analytics/ios/properties)
- [com.google.firebase.analytics  |  Firebase](https://firebase.google.com/docs/reference/android/com/google/firebase/analytics/package-summary)