今開発中のPlayer!というiOSアプリでABテストを行うために、各種サービスを検討したり自前で何とかしようか迷いつつ、Google Analyticsを利用することにしました。
iOSアプリで、Google AnalyticsのABテスト機能を使う その1 - Qiita の続きです。
Google Tag Managerの設定
ABテスト用の変数を作成
Tag Managerのcontainer作成直後は変数が空なので、ABテスト用の変数を作りましょう。
こんな感じで条件など設定します。
この例だと、'cut'がtrueの時はある画面をスキップさせる試みです。
2通りになっていますが、複数パターンを一気に試せます。
(後述の通り、バンディットアルゴリズムで効率良く)
無事に一覧に現れました( ´・‿・`)
Puslish
Publishという、変更をコミットするような操作を行います。
また、アプリに配置するために、Containerファイルをダウンロードしましょう。
GTM-XXXXXX_v1
のようなファイル名のバイナリファイルですが、GTM-XXXXXX
のようにリネームしておきましょう。
クライアント実装
ざっくりこんなイメージです。
-
GTM-XXXXXX
という設定ファイルのようなものをローカルに持って取り急ぎそれを参照 - 起動直後に最新の設定ファイルをダウンロード
- 設定ファイルは、TAGContainerのインスタンスとして読み取って、その値を元にクライアントの挙動を変える
import
これらをimportしましょう。
#import <TAGManager.h>
#import <TAGContainer.h>
#import <TAGContainerOpener.h>
GTM-XXXXXXをプロジェクトに追加
所望のものをファイルTargetに設定すればパスはどこでもOKです。
AppDelegateで諸々記述
必要なところのみ貼ります。
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, TAGContainerOpenerNotifier {
private lazy var tagManager = TAGManager()
private var tagContainer: TAGContainer?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
TAGContainerOpener.openContainerWithId("GTM-XXXXXX", tagManager: tagManager, openType: kTAGOpenTypePreferFresh, timeout: nil, notifier: self)
return true
}
// MARK: - TAGContainerOpenerNotifier
func containerAvailable(container: TAGContainer!) {
// 試したらこの時点でメインスレッドで返ってきたけど、ドキュメント通りに一応
dispatch_async(dispatch_get_main_queue()) {
self.tagContainer = container
// こんな感じで値が取れる
let value = container.stringForKey("ex")
return
}
}
}
これで無事にABテスト環境が整いました。
Google Analyticsの「行動」の「ウェブテスト」に、項目が現れるはずです。
Tag Manager周りは他にも色々機能があり、けっこう奥が深いです。
気づいた点など
- どの設定が適用されるかは、再起動などしても固定
- インストールし直すと変わる
- Variationsに設定できる値は後から編集出来ない
- 変更したい場合、作り直し
いまいちな点
テストの指標が4つから選べますが、例外・クラッシュはABテストで測ることってあまり無いはずなので、実質、スクリーンビューとセッション時間の2択です(´・ω・`)
本当は継続率を測りたかったのですが、スクリーンビュー数でも大体似てくるかなと妥協しました(´・ω・`)
余談: 本当は「ABテスト」ではなく「多腕バンディットテスト」
分かりやすさのために「ABテスト」と表現していますが、「多腕バンディットテスト」という表現が正確なようです。
多腕バンディット テスト - アナリティクス ヘルプに詳しく書いてあって面白いです( ´・‿・`)
ざっくりいうと、テスト対象の分布を最適に配分調整して、効率を高めていくというものです。
また、パフォーマンスが良い方に傾斜配分していってくれるので、テストでUXが下がっちゃうユーザーも減ります。
自前実装だとけっこう大変だと思うので、そこのあたり面倒見てくれて助かります。
オプションで等配分にしたりも出来ます。
このあたりの記事も有名かと思います。