ADOBE AIR で google analytics イベントトラッキング

ADOBE AIR 1.5 でつくるデスクトップアプリにて
google analyticsを使ってイベントをトラッキングしてみます。

HTMLLoader を使って実装は簡単です。

まず、準備として、
google analyticsの設定を Webと同じ流れで設定しておきます。

google analyticsコードを貼り付けたHTMLを作って
WEBにアップします。
たとえばURLはこんな感じ。

http://example.com/tracking.html

そして、このURLをHTMLLoaderで開き、
Actionscriptで、このページのJavascriptを叩けばOK。

読み込んだHTMLのJavascriptへのアクセスは

HTMLLoader_instance.window;

で行える。

google analyticsが導入されたページには
イベントトラッキング用Javascriptメソッド、

pageTracker._trackEvent

があるので、これを叩きます。

HTMLLoader_instance.window.pageTracker._trackEvent(“カテゴリー”,”アクション”,”ラベル”,”値”);

こんな感じ。
ラベルと値は任意です。
カテゴリーだけの指定だとトラッキングが登録されませんでした。

以下、HTMLLoader クラスを拡張した TrackerHTMLLoader クラスです。

[as]
package
{

import flash.events.*;
import flash.net.URLRequest;
import flash.html.HTMLLoader;

/*
* Adobe AIR の HTMLLoader を用いて google analyticsの イベントトラッキングをやるクラス
* code by quq.jp ※このコードの著作権は放棄しています。
*
* ※googleanalyticspage に google analytics (ga.js) が導入されたページのURLを設定します。
*
* —
*
* var oTrackerHTMLLoader:TrackerHTMLLoader = new TrackerHTMLLoader()
* oTrackerHTMLLoader.addEventListener(TrackerHTMLLoader.EVENT_INITDONE,onTrackerHTMLLoaderInitDone);
* oTrackerHTMLLoader.initialize();
*
* function onTrackerHTMLLoaderInitDone(e:Event){
* (e.target as TrackerHTMLLoader).doTrack(“カテゴリー”,”アクション”,”ラベル”,”値”);
* }
*/
public class TrackerHTMLLoader extends HTMLLoader
{

static public var EVENT_INITDONE:String = “onInitDone”;
static public var googleanalyticspage:String = “http://example.com/tracking.html”;

private var pageloaded:Boolean = false;

public function TrackerHTMLLoader() {
super();
}

public function initialize() {
this.addEventListener(Event.COMPLETE, onLoadDone);
var oURLRequest:URLRequest = new URLRequest(googleanalyticspage);
this.load(oURLRequest);
}

private function onLoadDone(e:Event) {
pageloaded = true;
e.target.removeEventListener(e.type, arguments.callee);
this.dispatchEvent(new Event(EVENT_INITDONE));
}

public function doTrack(param0:String, param1:String, param2:String = null , param3:String = null ) {
if (!pageloaded) return;
if (!param2) {
this.window.pageTracker._trackEvent(param0, param1);
}else if (!param3) {
this.window.pageTracker._trackEvent(param0, param1, param2);
}else {
this.window.pageTracker._trackEvent(param0, param1, param2, param3);
}
}

}

}
[/as]