Hatena::ブログ(Diary)

鳥さんの独り言 RSSフィード Twitter

2012年05月20日

[]Google AnalyticsJavaScriptファイルのローディング時間を計測する

やっほぉ、鳥さんとかそんな感じのものだ。

今回はGoogle Analyticsで外部のJavaScriptのローディングタイムをトラッキングする方法を説明するよっ
Google Analyticsの「_trackTiming」ってやつを使うんだ〜。

導入手順

user-timing.js - analytics-api-samples - Google Analytics Sample Code - Google Project Hostingを元にして、ちょっとしたスクリプトを組んでみた。

Tracking JavaScript file loading time with Google Analytics ― Gist

まず、上記のJavaScriptファイルをDLする。

エディタで開いて、_loadJsAryにこんな感じでロードするJavaScriptとその説明の配列をセットする。非同期でOK!の場合は、最後にtrueって入れると良いよん。

var _loadJsAry = [
['js/ga.js', 'Load Google Analytics Component', true]
, ['js/jquery-min.js', 'Load jQuery']
, ['js/jquery-ui-min.js', 'Load jQuery UI']
];

必要に応じて、デバッグかどうかをセットする。(デバッグの場合はサンプルレート100%、GA標準の場合は1%)
グローバル変数( ̄▽ ̄;

var debug = true;

IE8以下で動かない

ちなみに、IE8以下だと、どーーーにもウマく動かん(´・ω・`)

試した方法は、以下のとおり。

  • DOMでスクリプトタグの直前や直後にロード(GA標準) → なんか要素自体が追加されない
  • DOMでbodyタグの最後にロード → 要素自体は追加されるけど、ロード順が同期にしてもグチャグチャ
  • scriptタグをbodyタグの最後に追加 → なんか追加されない
  • Ajaxでロードしてeval → グローバル変数にした奴が機能しない( ̄▽ ̄; (どうやらスコープがeval内で完結するっぽい、セキュリティ考えれば確かにね)←Gistのコードはこの状態

参考

でわでわっ

2012年05月12日

[][]Google AnalyticsでiOS(iPhone/iPad)アプリのバージョンをトラッキングする、ほか

はぁい、鳥さんだよ。

本題をトラッキング方法にしようと思ったけど、ちょっと変更w

Google AnalyticsでiOSアプリをトラッキングする方法

まずはGoogle AnalyticsでiOSアプリをトラッキングする方法を紹介するよっ

Google Analyticsで取れるログはふつーのウェブサイトのトラッキングと同じで、以下のトラッキングが可能だよ。

  • ページビューのトラッキング
  • イベントのトラッキング
  • ECのトラッキング
  • カスタム変数のトラッキング

と書いてみたものの、もう去年だし、わりと記事が出回ってたので、この辺は記事紹介に留めるのである。

Google Analyticsでの設定から、iOS SDKでのアプリへの設定まできちんと解説してる記事:
10分でわかるGoogle Analytics SDK for iOS - murapongの日記

ちなみに、今は「ウェブサイト以外」という設定ができてるので、アプリの場合はそれを使うといいよっ
あと、iOSアプリは一旦データを貯めこんで一定期間ごとにポイっと投げるので、リアルタイム解析でも、ふつーのウェブサイトよりかは反映がちっと遅めだよっ

また、Google Analyticsの時計を使うのではなく、iOSデバイスの時計を使うので、時間はデバイスごとにわりとブレるよん。(誤差が出る)

便利マクロが載ってるSlideShare:
iPhoneアプリのアクセス解析Google Analytics SDK for iOSについて - ninjinkunの日記
ちょっと誤記があるので、そのままでは使えにゃい。
クラスはページとして、メソッドはイベントとしてトラッキングされるマクロだよん。

初期化マクロはこちら:
iPhoneアプリの使用状況をGoogle Analytics for iOSで解析する | へびにっき

簡単に説明すると、以下の手順。

  1. Google Analyticsでアプリ用のアカウント作る
  2. Google AnalyticsでGA SDKをダウンロードする
  3. Xcodeで作ってるプロジェクトに、GA SDKを追加
  4. アプリに「CFNetwork.framework」と「libsqlite3.0.dylib」 を追加
  5. 「<プロジェクト名>-Prefix.pch」 で 「GANTracker.h」 をインクルードして、 各種マクロをペタペタ貼る
  6. アプリの「didFinishLaunchingWithOptions」で「GA_INIT_TRACKER」する
  7. 途中でマクロを使って便利に計測
  8. アプリの最後「dealloc」で「GANTracker sharedTracker] stopTracker];」する

ちなみに、同梱されているlibGoogleAnalytics_NoThumb.aは、現時点では"_OBJC_CLASS_$_GANAdHitIdGenerator"が無いってリンカーでエラーメッセージが出るので使えないよ〜。

Google AnalyticsでiOSのバージョンをトラッキングする方法

で、ここからやっと本題。

現時点では、GoogleAnalyticsはiPadかiPhoneかだけをトレースして、そのバージョンまでは判別してくんないわけで。Google アナリティクスでiOSのバージョンを確認する方法 | MOL の結果とかここギコ!: Google Analytics SDK for iOSでUserAgentの変更の方法で勝手にUAを変更して確認する限りでは、そもそもiOS類のバージョン自体をまだトラッキングしてくんないらしい。

てわけで、iOSのバージョンは手動でカスタム変数を使ってトラッキングする。その方法は以下のとおりだね。

UIDevice *cd = [UIDevice currentDevice];
NSError *error;
if (!GANTracker sharedTracker] setCustomVariableAtIndex:1 name:cd.model value:cd.systemVersion withError:&error]) {
NSLog(@"%@",error.helpAnchor);
}

ちなみに、流行(?)のマクロにすると、こんな感じ〜。

#define GA_TRACK_VER { UIDevice *cd = [UIDevice currentDevice]; NSError *error; if (!GANTracker sharedTracker] setCustomVariableAtIndex:1 name:cd.model value:cd.systemVersion withError:&error]) { NSLog(@"%@",error.helpAnchor); }  };

GA_TRACK_INITの後にGA_TRACK_VERをセットしとくと、バージョン情報が取れるようになるよっ つまり、手順のNo.6のすぐ後だね〜。

あ、この場合はカスタム変数の1番に記録するよ。
他の番号のカスタム変数を使用したい場合は、「setCustomVariableAtIndex:1」の番号を1からその番号に変更してね〜。
ちなみに、フリー版のGoogle Analyticsだと、現時点で使えるカスタム変数の数は5つまでだよ〜。

参考

でわでわ。

2012年04月30日

[][]Google Analyticsでダウンロード(PDFとかZIPファイルとか)をトラッキングする(たぶん)正しい方法

やぁ鳥さんだよ。

Google Analyticsを埋め込めないファイルのトラッキング方法を説明するよっ
PDFとかAVI、ZIPファイルのダウンロードとかのトラッキングね。

まず、非同期トラッキング用の配列が無ければ作る。

var _gaq = _gaq || [];

今度は外部ファイルをクリックした時の関数を定義する。

function recordObjectLink(link) {
try {
var linkedURL = link.href.replace('http://’ + document.domain, '');
linkedURL = linkedURL.replace('https://’ + document.domain, '');
_gaq.push(['_trackPageview', linkedURL]);
var cl = '';
if (link.target && link.target !== '_self') {
switch (link.target) {
case '_parent':
cl = 'parent.document.location = "' + linkedURL + '"';
break;
case '_top':
cl = 'top.document.location = "' + linkedURL + '"';
break;
default:
cl ='var w = window.open("' + linkedURL + '", "' + link.target + '");if(!w){document.location = "' + linkedURL + '"}';
break;
}
} else {
cl = 'document.location = "' + linkedURL + '"';
}
setTimeout(cl, 100);
} catch (err) {}

return false;
}

ミソは、以下のとおり。

  • Google Analyticsはどうも_gaqに対するトリガーを仕掛けているのではなく、タイマーで定期的にクロールしているらしく、_gaqに突っ込んだ非同期イベントが、ページ遷移が早すぎるとトラックされないことがある。なので、ごく短い時間遅延させ、確実にトラッキングされるようにする
  • その影響で、setTimeoutで呼び出す式に、aでtarget指定されてた時の挙動をJavaScriptに引き継がないといけない。(HTMLと完全に一緒にするのは無理)
  • このトラッキング方法だと、ふつーにhrefに付いてるURLを渡してもドメイン名がいちいちくっ付いて来るので、それを引っぺがす。

で、最後にトラッキングしたいリンクにイベントを仕掛ける。

<a href="〜" onclick="return recordObjectLink(this);" target="_blank">

つまり、このJavaScript(要編集)を読み込んで、リンクにonclickを仕掛けておけば、トラッキングされるよっ

ページ内の特定のリンクに一気にイベントを仕掛けるなら、こんな方法もあるね。
以下は<div id="targetDiv">〜</div>にあるa要素すべてにトラッキングを仕掛ける場合だよ(jQuery利用の場合)

<script type="text/javascript">
$(function(){
$("#targetDiv").delegate('a', 'click', function (e) {
return recordObjectLink($(this)[0]);
});
});
</script>

参考

でわでわ。