はじめに
たまたま業務でGTMを触っていたのと枠が空いていたので参加させてもらいました。
Google Analytics Advent Calendar 2015 の11日目です。
Google Tag Manager で何ができるか
- 簡易データ配信
- 色の値や文言等の(カジュアルに変更したい)テキストデータを外部制御できる
- A/Bテスト
- APIでも制御できるけど、永続化やオフライン対応まで考えると面倒だなーという値(に使うといいかも)
- Google Analytics (Universal Analytics) へのプロキシ(のような動作)
- TrackingIdを外部(GTMのWebコンソール)から切り替えたり、複数設定できたり(このイベントはTrackingId_Aへ、みたいな)
※ 1.に関しては使ったことありません
いずれも、コンテナと呼ばれるバイナリファイルを各端末と同期することにより実現されています。
- GTMのWebコンソールから最新のコンテナ(設定ファイルみたいなもの)を公開
- 各アプリが最新のコンテナを取得
- ネットワーク環境ない状態で初回起動したらapk内に配置されているデフォルトのコンテナが使用される(リモート、ローカルどっちを優先するかとかは設定可能)
- コンテナ内の値を使ったりして好きなことをやる
何が嬉しいか
- コンテナの同期をGTMに任せられるのでオフライン時のことを(あまり)考えなくていい
- 些細な送信パラメータ修正での再リリースが不要になる
- JS版はそうかもしれない(使ったことない)
- Android版はそうでもない気がした(実際に使ってみて)
導入
https://developers.google.com/tag-manager/android/v4/
↑に従ってやれば大体OK
- Google Play Service SDKを使えとしか書いてないけど依存するのは以下
compile 'com.google.android.gms:play-services-analytics:[version]'
Google Analyticsの計測処理をGTMで行う
初期化処理についてはドキュメントに詳しく書かれている為割愛
スクリーンの送信
- Google Analytics SDK v4
void sendScreen(String screenName) {
Tracker tracker = /* trackerの取得 */;
tracker.setScreenName(screenName);
tracker.send(new HitBuilders.AppViewBuilder().build());
}
- Google Tag Manager SDK v4
void sendScreen(Context context, String screenName) {
TagManager tagManager = TagManager.getInstance(context);
DataLayer dataLayer = tagManager.getDataLayer();
// "openScreen", "screenName" はGTMのWebコンソールで
// 設定するパラメータと合っていればOKで別に何でもいい
dataLayer.pushEvent("openScreen", DataLayer.mapOf("screenName", screenName));
以下をGTMのWebコンソールから設定
変数の設定
項目 | 設定値 |
---|---|
変数のタイプ | データレイヤーの変数 |
デフォルト値 | 偽 |
データレイヤーの変数名 | screenName |
トリガーの設定
項目 | 設定値 |
---|---|
トリガーのタイプ | カスタム |
フィルタ | Event 等しい openScreen |
タグの設定
項目 | 設定値 |
---|---|
タグタイプ | ユニバーサル アナリティクス |
トリガー | [↑で設定したトリガー] |
設定するフィールド1 フィールド名 | screenName |
設定するフィールド1 値 | [↑で設定した変数] |
トラッキングタイプ | アプリビュー |
トラッキングID | [自分のトラッキングID] |
ハマリどころ
- コンテナのバージョンアップのタイミングが12時間おき
- 公開後すぐに動作確認したい場合は一度アプリのデータ消さないとダメ
- プレビュー(公開前に動作確認できる機能です)では動作してて公開後動作しないとか言われたら多分このパターン
AndroidにおけるGTM,GAの理想的な運用
- 計測する可能性のあるポイントで(もれなく)DataLayerにpushしておく
- 送信パラメータをマーケティング側と共有する
- 担当者がWebコンソールから必要なやつだけフィルタするなりなんなりして計測する
のが計測処理追加(とか削除)のためだけの再ビルドが発生しないので良い気がします。
※ もっといい方法があったら教えて欲しいです
現実
- Webコンソールの設定が非エンジニアには難しいかもしれない
- 想定していなかったイベントを取得したいと言い出される(=結局修正・リリース必要)
とかで結局開発者が原因の調査や修正しないといけなくなったり。
個人的な感想
- コンテナの恩恵を最大限受けたいなら導入した方が良い
- Google Analyticsの計測しかやってないならわざわざ移行する必要ない