しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

iPhoneアプリでGoogleタグマネージャーを使ってA/Bテスト

先日Googleタグマネージャーを使ってA/Bテストを実施してみたのでそれを書いてみます。

やったこと

今回はレビュー依頼のポップアップで3種類の文言を出してどれが一番"レビューする"ボタンを押してくれるかを計測しました。
テスト経過の表示は下の通りです。
数字はデバッグ時のものになります。

f:id:llcc:20150817223217p:plain

やり方

GoogleAnalyticsをアプリに導入する

最初にGoogleAnalyticsをアプリに導入します。
アプリに入れる前にGoogleAnalyticsのサイトでタグを取得しておきます。
インストールは下のようにPodfileに記述してpod installすれば完了です。

pod 'GoogleAnalytics'

使い方は下の通りです。
AppDelegateで先ほど取得したタグを元に初期化して、使いたい所でイベントを飛ばします。

// AppDelegateで下のように初期化
GAI.sharedInstance().trackerWithTrackingId("TAG_ID")

// 計測したい箇所で下のようにイベントを飛ばす
var tracker = GAI.sharedInstance().defaultTracker
let dic = GAIDictionaryBuilder.createEventWithCategory(
            "Top", action: "show", label: nil, value: nil).build()!
        tracker.send(dic as [NSObject : AnyObject])

Swiftから使えるようにブリッヂファイルにimportもしておきます。

#import "GAI.h"
#import "GAIDictionaryBuilder.h"

これでGoogleAnalyticsで計測できているかと思います。
"GoogleAnalytics"の"行動"の"イベント"で下のように表示されるようになります。

f:id:llcc:20150817230035p:plain

A/Bテストの設定をする

タグマネージャーの設定をする前にGoogleAnalytics上で目標を作ります。
GoogleAnalyticsのAnalytics設定目標にある新しい目標ボタンから作成します。
目標の名前は適当に入力して、目標のタイプは"イベント"、イベント条件ではアクションに"Review"と入力して保存します。

次にタグマネージャーの設定をします。

https://tagmanager.google.com

最初にタグマネージャーのサイトにアクセスしてコンテナーを作ります。
そしてメニューの"変数"で"新規"ボタンを押下します。

変数作成画面に飛ぶので、"Googleアナリティクスのウェブテスト"を選択します。
そこで下のように好きな種類のパターンを作ってそれぞれに対してJSONをセットします。

f:id:llcc:20150817231025p:plain

最後にタグマネージャーの公開ボタンを押せば設定は完了です。

タグマネージャーのインストール

タグマネージャーもCocoaPodsに対応しているので、下のように書いてpod installすればインストール完了です。

pod 'GoogleTagManager'

それとタグマネージャーのバージョン画面からバイナリのダウンロードをしてそれをプロジェクトに追加しておきます。

f:id:llcc:20150817231339p:plain

タグマネージャーの利用

そこまで終わったら実際にタグマネージャーを使っていきます。
初期化は下のように行います。

#import "TagContainer.h"
#import "TagContainerOpener.h"
#import "TagManager.h"

@interface AppDelegate ()<TAGContainerOpenerNotifier>

@property (nonatomic, strong) TAGManager *tagManager;
@property (nonatomic, strong) TAGContainer *container;

@end
self.tagManager = [TAGManager instance];
[TAGContainerOpener openContainerWithId:@"GTM-XXXX(自分のコンテナのID)"
                             tagManager:self.tagManager
                               openType:kTAGOpenTypePreferFresh
                                timeout:nil
                               notifier:self];

初期化が終わると下のコールバックメソッドが呼び出されるのでそこでタグマネージャーのコンテナをセットします。

- (void)containerAvailable:(TAGContainer *)container {
    // Note that containerAvailable may be called on any thread, so you may need to dispatch back to
    // your main thread.
    dispatch_async(dispatch_get_main_queue(), ^{
        self.container = container;
        
        [self showReviewPopup];
    });
}

コンテナからは下のように値を取得します。
reviewMessageは先ほど設定したパターンのうちのどれかが入っています。
値が取得できない場合は端末上のアプリを一度削除すると取得できるようになる事があります。

[self.container stringForKey:@"reviewMessage"];

最後にレビュー成功時のアクションを送ってあげれば下のように計測されます。

f:id:llcc:20150817223217p:plain

まとめ

タグマネージャーは色々な設定があって慣れるまで大変ですが、一度使えるようになると非常に便利です。
今後はこの機能を使ってアプリ改善をしていきたいと思います。