Titanium MobileでGoogle Analyticsを利用する

前回のエントリの中で「Google Analyticsによるアプリ内の動作調査を行ってみました」を書きましたが、そのやり方と、どういう情報が得られるかについてもう少し詳しく書きます。

Titanium-Google-Analytics のセットアップ

計測には、githubで公開されているTitanium-Google-Analyticsを利用します。プロジェクトをcheck outして、Resouces/analytics.jsを自分のプロジェクトの同じディレクトリにコピーします。
次に、app.jsの最初の方で、以下のコードを記述します。

/* analytics */
Titanium.include('analytics.js');
var analytics = new Analytics('UA-XXXXXX-XX');
Titanium.App.addEventListener('analytics_trackPageview', function(e){
    var path = "/app/" + Titanium.Platform.name;
    analytics.trackPageview(path + e.pageUrl);
});
Titanium.App.addEventListener('analytics_trackEvent', function(e){
    analytics.trackEvent(e.category, e.action, e.label, e.value);
});
Titanium.App.Analytics = {
    trackPageview:function(pageUrl){
        Titanium.App.fireEvent('analytics_trackPageview', {pageUrl:pageUrl});
    },
    trackEvent:function(category, action, label, value){
        Titanium.App.fireEvent('analytics_trackEvent', {category:category, action:action, label:label, value:value});
    }
}
analytics.start(10);
/* analytics end */

上記コードの内容を、解説します。

Titanium.include('analytics.js');
var analytics = new Analytics('UA-XXXXXX-XX'); 

analytics.jsをincludeして、計測に利用するAnalyticsのキーを引数にしてanalyticsのインスタンスを生成します。

Titanium.App.addEventListener('analytics_trackPageview', function(e){
    var path = "/app/" + Titanium.Platform.name;
    analytics.trackPageview(path + e.pageUrl);
});
Titanium.App.addEventListener('analytics_trackEvent', function(e){
    analytics.trackEvent(e.category, e.action, e.label, e.value);
});

Titanium.Appはグローバルなオブジェクトなので、このオブジェクトで"analytics_trackPageview"というイベントと"analytics_trackEvent"というイベントの発生をListeningします。
analytics_trackPageviewは、「◯◯一覧の表示」といったページビューのトラッキングに利用します。analytics.trackPageviewのところで、pathとして、"/app/" + Titanium.Platform.name というのを必ず付与するようにしています。カウンティングのアプリがWebサイトのanalyticsのキーと同じものを利用しているため、アプリ内のPageViewトラッキングであることが分かるように"/app/"を先頭につけています。また、iPhoneAndroid両方同じコードからビルドしても、どちらのアプリのアクセスか分かるように、Titanium.Platform.nameを続けて、付与しています。なので、アプリ専用のAnalyticsのキーを発行している場合は、"/app/"やTitanium.Platform.nameは付与しなくても問題ありません。
analytics_trackEventは、「リロードボタンの押下」や「ログインの失敗/成功」といったイベントのトラッキングに利用します。

Titanium.App.Analytics = {
    trackPageview:function(pageUrl){
        Titanium.App.fireEvent('analytics_trackPageview', {pageUrl:pageUrl});
    },
    trackEvent:function(category, action, label, value){
        Titanium.App.fireEvent('analytics_trackEvent', {category:category, action:action, label:label, value:value});
    }
}

続いて、Titanium.App.Analyticsというプロパティを定義してい、そこに2つの関数を定義します。それぞれ、"analytics_trackPageview"と"analytics_trackEvent"というイベントを発火するための関数です。

analytics.start(10); 

最後に、Google Analyticsにデータを送信する間隔を秒単位で定義します。
ここでは10秒ごとにデータを送信するようにしています。その間にtrackingされたpageViewやEventの情報は、1000件まで保持され、まとめて送信されます。

実際にTrackする

上記のセットアップが終われば、あとは簡単で、計測したい箇所に以下のコードを仕込んでいきます。

// page名を変数として渡す
Titanium.App.Analytics.trackPageview('/hogePage');
// カテゴリ名、アクション名、ラベル、値を変数として渡す
Titanium.App.Analytics.trackEvent('Category','mogeAction','hoge',1);

実際に、はてなカウンティングで仕込んでいる部分を例に挙げます。
はてなカウンティングでは、以下のように各ウィンドウのfocusイベントでpageViewを計測するようにしています。

winRecent.addEventListener('focus', function(e){
    Titanium.App.Analytics.trackPageview('/winRecent');
});
winFinish.addEventListener('focus', function(e){
    Titanium.App.Analytics.trackPageview('/winFinish');
});
winHome.addEventListener('focus', function(e){
    Titanium.App.Analytics.trackPageview('/winHome');
});
winFollow.addEventListener('focus', function(e){
    Titanium.App.Analytics.trackPageview('/winFollow');
});
winSetting.addEventListener('focus', function(e){
    Titanium.App.Analytics.trackPageview('/winSetting');
});

カウンティングのアプリでは、必ずwinRecentがアプリケーションの最初に呼ばれるので、このURLのuniquePageViewを見ていると、アプリケーションのダウンロード数が大体把握できるようになっています。
また、各カウントの詳細画面では、

    win.addEventListener('focus', function(e){
        Titanium.App.Analytics.trackPageview('/winCount/' + win.count.id);
    });

このように、カウントのidをpageNameに含ませることで、どのカウントへのアクセスが多いかを見ることができます。
Eventのトラッキングは、例えばログインのところで、ログインボタンが押されたら以下のEventを、

Titanium.App.Analytics.trackEvent('Button','Click','login',1);

また、ログインの成功、失敗でそれぞれ以下のEventをTrackすることで、どれだけのユーザーがログインに成功/失敗しているかが分かるようになっています。

// ログイン成功時に呼ぶ
Titanium.App.Analytics.trackEvent('Login','Success','login',1);
//ログイン失敗時に呼ぶ
Titanium.App.Analytics.trackEvent('Login','Error','login',1);

Google Analyticsでトラッキング情報を見る

トラッキングの情報を見るには、通常のGoogle Analyticsと同じです。
以下は、リリース後1週間のpageViewを表示しているところです。

また、Eventのトラッキング情報は、左のメニューから"Event Tracking"を選択すると見ることができます。

Listというカテゴリ内の、Reloadというアクションが発生した回数が表示されています。
ここからさらにもう1階層下がると、

どのページのリロードボタンが押下されているかが分かるようになっています。
このように、pageViewやeventのトラッキング情報を見ることで、タップして欲しいのにタップされてないボタンはもう少し位置やデザインを変えてみるなど、アプリケーションの今後の改善に役立てることができます。

Google Analytics for Mobile

Titanium ではなく、通常のアプリ開発の場合には、Google Analytics for Mobileで公開されているSDKを利用することで、今回紹介したものと同じ内容のログを取得できます。はてなブックマークiPhoneアプリでは、このSDKを利用していて実装したid:ninjinkun資料を公開しています