39
38

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

iOSアプリで、Google AnalyticsのABテスト機能を使う その2

Last updated at Posted at 2015-06-23

今開発中のPlayer!というiOSアプリでABテストを行うために、各種サービスを検討したり自前で何とかしようか迷いつつ、Google Analyticsを利用することにしました。

iOSアプリで、Google AnalyticsのABテスト機能を使う その1 - Qiita の続きです。

Google Tag Managerの設定

ABテスト用の変数を作成

Tag Managerのcontainer作成直後は変数が空なので、ABテスト用の変数を作りましょう。

Screen Shot 2015-06-23 at 17.01.05.png

こんな感じで条件など設定します。
この例だと、'cut'がtrueの時はある画面をスキップさせる試みです。
2通りになっていますが、複数パターンを一気に試せます。
(後述の通り、バンディットアルゴリズムで効率良く)

Screen Shot 2015-06-23 at 17.06.08.png

無事に一覧に現れました( ´・‿・`)

Screen Shot 2015-06-23 at 17.09.45.png

Puslish

Publishという、変更をコミットするような操作を行います。

Screen Shot 2015-06-23 at 17.15.23.png

また、アプリに配置するために、Containerファイルをダウンロードしましょう。

GTM-XXXXXX_v1 のようなファイル名のバイナリファイルですが、GTM-XXXXXX のようにリネームしておきましょう。

Screen Shot 2015-06-23 at 17.15.55.png

クライアント実装

ざっくりこんなイメージです。

  • 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択です(´・ω・`)
本当は継続率を測りたかったのですが、スクリーンビュー数でも大体似てくるかなと妥協しました(´・ω・`)

Screen Shot 2015-06-23 at 17.02.58.png

余談: 本当は「ABテスト」ではなく「多腕バンディットテスト」

分かりやすさのために「ABテスト」と表現していますが、「多腕バンディットテスト」という表現が正確なようです。

多腕バンディット テスト - アナリティクス ヘルプに詳しく書いてあって面白いです( ´・‿・`)

ざっくりいうと、テスト対象の分布を最適に配分調整して、効率を高めていくというものです。
また、パフォーマンスが良い方に傾斜配分していってくれるので、テストでUXが下がっちゃうユーザーも減ります。
自前実装だとけっこう大変だと思うので、そこのあたり面倒見てくれて助かります。
オプションで等配分にしたりも出来ます。

このあたりの記事も有名かと思います。

39
38
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
38

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?