Firebase Analytics + Google Tag Manager + Google Analytics を Androidアプリに導入する

# 背景
Firebase Analytics単体やGoogle Analytics単体の導入は公式などでリファレンスを見ながら行うことが出来るのですが、連携させた方法は情報が断片的にしかなく所々ハマったので、まとめることにしました。
Androidアプリと書いてありますが、ほぼほぼGTMの設定がメインなので、適宜コードを脳内で読み替えて貰えれば、iOSアプリにも適用できるかと思います。
依頼がありAndroidアプリに導入はしてみたものの、Analytics系は初心者なので所々用語の誤用などあるかと思いますがご容赦ください。

# 各サービスの役割

- Firebase Analytics(FA)
    - ログ収集、イベント送信
- Google Tag Manager(GTM)
    - Firebase Analyticsから送られてきたイベントをGoogle Analytics用に変換して渡す
- Google Analytics(GA)
    - ログ解析

という形となります。GTMがFAとGAの橋渡しになるイメージです。


# 設定方法（事前準備）
全部書いてたらキリないので公式ページを参照して設定ください。
1. [Firebase Analytics組み込み](https://firebase.google.com/docs/analytics/android/start/?hl=ja)
2. [Google Tag Manager組み込み](https://developers.google.com/tag-manager/android/v5/)
3. [Google Analytics用のトラッキングIDを取得](https://support.google.com/analytics/answer/2587086?hl=ja)

# 設定方法（各サービス連携）

## GTMに取得したトラッキングIDを設定
1. 左のメニューの「変数」を選択
2. 「ユーザー定義変数」欄の「新規」ボタンをクリック
3. 変数タイプ「Googleアナリティクス設定」を選択し作成したGoogle AnalyticsプロパティのトラッキングIDを埋め込む
<img width="1248" alt="スクリーンショット 2018-06-14 13.00.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/185371/dbc96414-0a94-3a85-3040-56cc73f924c4.png">


## GTMにFirebaseAnalyticsで設定したイベントをトリガーとし、GA用にパラメータを変換するタグを作成
ここが一番詰まるポイント。
下記にスクリーンを取得する方法と、独自に送ったイベントを取得する方法を記載します。
ちなみに、Firebase Analytics側で自動計測してくれるイベントは下記。
[自動的に収集されるイベント - Firebase ヘルプ](https://support.google.com/firebase/answer/6317485?hl=ja&ref_topic=6317484)
[自動的に収集されるユーザー プロパティ - Firebase ヘルプ](https://support.google.com/firebase/answer/6317486?hl=ja&ref_topic=6317484)

## スクリーンビューの反映方法
せっかくなのでFirebaseAnalyticsが自動で計測してくれたスクリーンビューイベントを反映させたいと思います。
Google Analyticsでは`scrennName`というフィールド名でスクリーンの名前が必要とのこと。
参考：[アプリやスクリーンのトラッキング  |  ウェブ向けアナリティクス（analytics.js）  |  Google Developers](https://developers.google.com/analytics/devguides/collection/analyticsjs/screens?hl=ja)

例えば、下記のようなスクリーンビューのログがFAで自動送信される時

``` 
 screen_view(_vs), 
 Bundle[
    {
        firebase_event_origin(_o)=auto,
        firebase_previous_class(_pc)=MainActivity, 
        firebase_previous_id(_pi)=7043883151947828258, 
        firebase_screen_class(_sc)=SubActivity, 
        firebase_screen_id(_si)=7043883151947828257, 
        firebase_screen(_sn)=COUPON
    }
]

```

### 1. スクリーンビューのイベントだけ取得するようGTMのトリガー設定を行う。
左メニューのトリガー -> 「新規」ボタン からトリガーを作成する。
firebase analyticsのスクリーン解析のイベント名は`screen_view`のため、「イベント名が`screen_view`と等しい」という条件でのトリガーを設定する。

<img width="1263" alt="スクリーンショット 2018-06-14 11.20.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/185371/a2553f60-91bf-138f-dde6-a7d29f1820d0.png">

### 2. `firebase_screen_class`の値をGAにおける`screenName`とみなす
左メニューのタグ -> 「新規」ボタン からタグを作成する。
GTMでパラメータの埋め込み設定を行う必要がある。
`firebase_screen_class(_sc)=SubActivity, `の場合、カッコ内の`_sc`がGTM内で使用出来る変数となる。

GTM内で使用するには、値を埋め込む入力欄に`{_sc}`と書けばOK。下記のようにフィールドのオーバーライド設定を行う。
<img width="1134" alt="スクリーンショット 2018-06-14 11.21.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/185371/5ecb2ef6-e018-be6d-e131-98ba333380bb.png">

あとはコンテナを公開してGoogle Analytics上でスクリーンが計測できていればOK

## カスタムイベントの設定方法
例：下記のようなイベントをGoogleAnalyticsに飛ばしたい時。
それぞれ、`ga_category`はGAのカテゴリーとして、`ga_action`はアクションとみなしたいとする。

```java
public void onClickHoge() {
    Bundle bundle = new Bundle();
    bundle.putString("ga_category", "hoge");
    bundle.putString("ga_action", "onClick");
    FirebaseAnalytics.getInstance(context).logEvent("some_event", bundle);
}
```

### 1. Firebase側でカスタムパラメータの設定
下記記事が良くまとまってるので参考にしてください。`3.パラメータ一覧から分析したいデータを追加`まで行えばOKです。
[Firebaseのカスタムパラメータレポートをつかってみた - wootan's diary](https://wootan1102.hatenablog.com/entry/2017/05/31/234843)

### 2. カスタムパラメータを取得する変数を設定
左メニュー -> 変数 -> 「新規」ボタンから値を追加
変数の種類は「イベントパラメータ」を指定し、イベントパラメータキーとしてbundleで入れたキーを指定します。
変数名は今回は`firebase_ga_action`と設定しています。。

<img width="835" alt="スクリーンショット 2018-06-14 12.36.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/185371/c9d62be6-d2f0-e00e-0a13-502c42d9db1b.png">

### 3.　タグの設定
左メニューのタグ -> 「新規」ボタン からタグを作成します。
タグタイプは「ユニバーサルアナリティクス」と設定します。
「イベントトラッキングパラメータ」に対応する変数を埋め込みます。アクションの場合は2.で設定した変数`firebase_ga_action`を`{{firebase_ga_action}}`と指定します。中括弧が2つなのがGTA内で設定した変数。
「Google Analytics設定」欄で事前に設定したトラッキングID変数を指定しないとタグが飛ばないので注意。

<img width="1100" alt="スクリーンショット 2018-06-14 12.40.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/185371/7b407a30-31de-219b-417d-f01f4edd2066.png">

以上を行い、GTMコンテナの更新を行った後、アプリで指定した操作を行ってGoogle　Analytics側に値が飛んでたらOK。

## 参考
- [GTM + Firebase cannot pick up screen name - Google プロダクト フォーラム](https://productforums.google.com/forum/#!topic/tag-manager/Xiide7NL9gE)
- [Getting Started with Firebase Analytics for Apps | LunaMetrics](https://www.lunametrics.com/blog/2016/10/18/firebase-analytics-for-apps/)
- [アプリやスクリーンのトラッキング  |  ウェブ向けアナリティクス（analytics.js）  |  Google Developers](https://developers.google.com/analytics/devguides/collection/analyticsjs/screens?hl=ja)
- [Firebaseのカスタムパラメータレポートをつかってみた - wootan's diary](https://wootan1102.hatenablog.com/entry/2017/05/31/234843)