AndroidでGoogleTagManagerを使いたい
2015/07/03
Contents
GoogleTagManagerとは
作成したモバイルアプリの設定値とフラグ値をすばやく簡単に変更できます。新しいバイナリをリビルドして実装しなくても、Google タグマネージャの管理画面を使用すれば、モバイルアプリの設定値(タイムアウト、広告の掲載位置、ゲームプレイの動的要素など)を変更したり、フラグ設定の機能を有効化したりできます。
引用通りだけど、GoogleTagManagerを予め仕込んでおけばリリース無しで定数をWEBから好き勝手にイジることができる。
使用例として真っ先に思い浮かぶのはABテスト。
ゲームならキャンペーン期間中にガチャの確率を操作したり、などなど、、応用の場面は多岐にわたる。
これだいぶ便利そうな機能なんだけど、ググっても日本語情報が出てこない。
英語まともに読めないし、困ったのでドキュメントを泣く泣く読みながら導入した過程をメモしておく。
ドキュメントに書いてるとおりにやれば動く。
事前準備
- tagmanagerのアカウント作っておく
- tagmanagerでContainerを作っておく
1.TagManagerをプロジェクトに追加する
GooglePlayServiceを追加すればおk。
AndroidStudioを使っていればdependenciesに下記を追加すれば終わり。
1 |
compile 'com.google.android.gms:play-services:7.0.0' |
それから、TagManagerを使うためにはネットワーク通信が必要なのでマニフェストファイルに下記のパーミッションを追記しておく。
1 2 3 |
<!-- For TagManager SDK --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> |
2. デフォルトで使うコンテナファイルをプロジェクトに追加する
基本的にデフォルトのコンテナを使い続けるわけではない。
あくまで初回起動用。
で、しばらくすると(通常、12時間周期)新しいコンテナと交換される。
もう一つ、デフォルトのコンテナが使われるケースは、新しいコンテナが取得できなかったとき。
アプリ側で指定したコンテナのidが間違っていたりすると
『そんなコンテナないです、代わりにデフォルトのコンテナ使います』
と、なる。
追加の手順は下記の通り。
- TagManagerのWEBコンソールから使いたいバージョンのコンテナを指定してダウンロードする
- プロジェクトルート以下のresフォルダにrawフォルダを作って、そこにコンテナファイルを置く
- コンテナファイルは小文字、数字、アンダースコアのみからなる名前に変えておく
Rename the container binary file if necessary. It consists of only lowercase letters, digits, and underscores.
と、書いてるのでコンテナファイルをgtm_defaultみたいな感じで適当にリネームしておく。
3. TagManagerを初期化する
ドキュメントでは初回起動で表示するスプラッシュ用のActivityでTagManagerを初期化している。
最初に初期化専用のActivityを必ず経由するようなアプリであればこのようなやり方で問題ない。
自分が開発しているアプリではエントリーポイントとなるActivityがTagManagerの初期化以外の処理も行っているため、単純に初期化処理をベタ書きするとコードの見通しが悪くなる。
なので、専用のHelperクラスを用意した。
Activityのライフサイクルに応じて処理を委譲させる感じ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
public class TagManagerHelper { private static final String CONTAINER_ID = "GTM-XXXXXX"; private ActionBarActivity activity; public TagManagerHelper(ActionBarActivity activity) { this.activity = activity; } public void onCreate() { TagManager tagManager = TagManager.getInstance(activity); // tagManager.setVerboseLoggingEnabled(true); for DEBUG PendingResult<ContainerHolder> pendingResult = tagManager.loadContainerPreferFresh(CONTAINER_ID, R.raw.gtm_default); pendingResult.setResultCallback(new ResultCallback<ContainerHolder>() { @Override public void onResult(ContainerHolder containerHolder) { ContainerHolderSingleton.setContainerHolder(containerHolder); if (!containerHolder.getStatus().isSuccess()) { Log.e("hige", "タグマネージャエラー"); return; } } }, 2, TimeUnit.SECONDS); } public void onDestroy() { this.activity = null; } } |
で、使うActivity側でTagManagerのインスタンスを作ってonCreate(),onDestroy()を呼び出せば終わり。
コンテナを使うたびに↑のような初期化を行うのは面倒なので、一度作ったコンテナはシングルトンで管理する。
ContainerHolderSingletonがそれにあたる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public class ContainerHolderSingleton { private static ContainerHolder containerHolder; private ContainerHolderSingleton() { } public static boolean isNull() { return containerHolder == null; } public static ContainerHolder getContainerHolder() { return containerHolder; } public static void setContainerHolder(ContainerHolder c) { containerHolder = c; } } |
これでコンテナを使う準備はできた。
4.変数を読み込む
TagManagerのWEBコンソールで設定した変数をアプリ内で表示したい。
アプリ内で変数を受けて適当に処理できるように仕込んでおけば、変数を変えるだけで文言を変えたり、ゲームのレベルを調整できたりする。
先ほど作ったシングルトンからコンテナを取り出してgetXXXを呼ぶだけ。
1 |
ContainerHolderSingleton.getContainerHolder().getContainer().getString("test") |
こんな感じ。
で、この値をTextViewで表示するなり、レイアウトを動的に選択するためのキーとして使うなりすれば良い。
5.データレイヤーを使う
ちょっと良くわからないので省略。。
6.コンテナをプレビューして問題なければ公開する
プレビュー
コンテナを公開する前に実際に挙動を確認するニーズを叶えるため、プレビューができるようになっている。
ドキュメント通りにやれば特にハマることなくいけると思う。
このプレビューを行う方法がちょっと特殊。
WEBコンソール上で発行された特別なURL経由でアプリを開く必要がある。
で、そのURL経由でプレビューの準備をやってくれるPreviewActivityというActivityをマニフェストファイルに記載する必要がある。
下記の通り。
1 2 3 4 5 6 7 8 9 10 11 12 |
<!-- Add preview activity. --> <activity android:name="com.google.android.gms.tagmanager.PreviewActivity" android:label="@string/app_name" android:noHistory="true"> <!-- optional, removes the previewActivity from the activity stack. --> <intent-filter> <data android:scheme="tagmanager.c.your.application.packagename" /> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE"/> </intent-filter> </activity> |
schemeのyour.application.packagenameの部分は自分のアプリ名(com.hogehuga.awesomeappみたいなヤツ)に変えておくこと。
あとは、WEBコンソールから 編集中のコンテナ一覧 > 使用したいバージョンのアクション > プレビュー を選択する。
で、アプリ名を入力する欄があるのでcom.hogehuga.awesomeapp的なヤツを入力して『開始プレビューリンクを作成』を押せば、テキストリンクとQRコードが表示されるので好きな方からアプリを起動する。
プレビューでの確認が終わったら『終了プレビューリンクを作成』をクリックして、表示されたリンクかQRコードでアプリを起動すればプレビュー前の状態に戻るはず。
公開に関しては前述のアクション > 公開 を選択すればイケる。