Superdry Memorandom :-p

旧「superdry memorandum :-D」です

Analytics for Android Appsをてきとう翻訳してみたよ

Google Mobile Analytics for Android に関するブログが面白そうだったのでまたもや大雑把翻訳してみたよ。

Mobile Analytics SDK for Androidに対応したことで、Google Analyticsを使ってアプリの使い方や操作などをトラッキングすることが簡単になりました。

事前準備

詳細はココ参照してください。

  • Mobile SDKをからライブラリをダウンロードして、Androidプロジェクトに組み込みます。
    • ダウンロードページからzipをダウンロード
    • GoogleAnalytics.jar というライブラリをプロジェクトの「libs」フォルダにおく
    • AndroidManifest.XMLに以下の2行を追加して
  • Google AnalyticsのプロフィールのページでUA-XXXXXXX-Xてかいてるところをメモしておく。*1

ラッキングする方法

onCreate()の中で、GoogleAnalyticsTrackerオブジェクトのインスタンスを取得し、UAコードを使って初期化します。以下の通り。

GoogleAnalyticsTracker tracker;
protected void onCreate(Bundle savedInstanceState) {
	 …
 	tracker = GoogleAnalyticsTracker.getInstance();
 	tracker.start(“UA-XXXXXXX-X”, this);
 	…
}

サポートしているデータ型について

Google Analyticsに送られるデータは以下の3つのデータ型をSDKはサポートしています。

  • ページビュー
  • イベント
  • カスタム変数
ページビュー

Webのページビューと感覚的に近く、各Activityごと、または同じActivityでのそれぞれのView(例えばTabActivityの中のそれぞれのTabなど)はページビューとしてカウントできる。trackPageView()というメソッドでページビューを検知する。このメソッドは好きなところに配置でき、パラメータ一つだけを、ページビューをカウントしたいURLへ送る。

	tracker.trackPageView("/HomeScreen");

onCreate()メソッドのなかでtrackPageViewをコールすることでアプリのActivity毎にページビューを検知できます。またTabActivityなど同じActivity内の画面遷移は、それぞれの画面が1ページとして検知されます。

イベント

イベントではページビューでは検知できない、こまかいユーザ操作を検知できます。例えば音楽再生アプリで言うところの再生、一時停止、停止などをおした場合などです。

ページビューはパラメータ1つでしたが、イベントでは以下の4つのパラメータが通知されます

  • Category
  • Action
  • Label(オプション)
  • Value(オプション)

例えば音楽再生アプリで再生、一時停止、停止がどのくらいクリックされているかを知りたい場合、これらパラメータの使い方は以下のような感じです。

  playButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
    ...
      tracker.trackEvent(
          "Media Player",  // Category
          "Click",  // Action
          "Play", // Label
          0);       // Value
    }
  });

  pauseButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
    ...
      tracker.trackEvent(
          "Media Player",  // Category
          "Click",  // Action
          "Pause", // Label
          0);       // Value
  });

  stopEventButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
    ...
      tracker.trackEvent(
          "Media Player",  // Category
          "Click",  // Action
          "Stop", // Label
          currentVideo.getPositionInSeconds());       // Value
  });

  myMediaPlayer.setFinishedListener(new FinishedListener() {
    @Override
    public void onFinished(View v) {
    ...
      tracker.trackEvent(
          "Media Player",  // Category
          "Video Finished",  // Action
          "Stop", // Label
          currentVideo.getLengthInSeconds());       // Value
  });

Google Analyticsのサイトではこのデータ取得結果は階層的に表示されています。

カスタム変数

カスタム変数は、Google Analyticsラッキングをより精密にするためにトラッキングコード内にname-value形式で挿入します。ページビューやイベントに伴うメタデータとしてタギングするのに便利です。このメタデータを使うと、Gmailのラベルと同じようにつかえるので、データのセグメント分けと観察が簡単になります。

例えばあるアプリにおいて、ユーザがアプリのフルバージョンを購入したかライト版をでつかってるかによって「Full」か「Lite」で表される「AppType」というnameをもつとします。この場合、「Lite」ユーザだけ観察するためにAnalyticsのwebインタフェースを使えたり、「Full」セグメントとの違った使い方やユーザ数を確認することができます。カスタム変数は途方もなく強力な分析ツールですが、それはまた別トピックで。Androidアプリでそれらを実装する前にいちど通してでドキュメントを読むことをおすすめします。特にスコーピングのセクションは読むべき(大事なことだから2回いいます)。

カスタム変数には4つのパラメータがあります。これら変数はsetCustomVar()メソッドの引数で設定します。

  • Index
  • Name
  • Value
  • Scope(オプション、デフォルトではpage scope)

また設定できるスコープの種類は以下の通り。

  • ビジタースコープ(Visitor scope)…デバイス上でアプリが実行される最初に一度だけ呼ばれる。同じインデックスにカスタム変数を複数作る必要はなく最初の一つに上書きされる。アプリが使用されたバージョンとか、電話の種類とか、アプリがフルバージョンかライトバージョンかなど、これらに関するデータを送信するのに便利。アプリのインストールのライフタイムの間はなにもされない。
  • セッションスコープ(Session scope)…アクティビティの起動時毎回1度呼び出される。異なったカスタム変数が同じインデックスで作成されるまでのアクティビティのライフサイクルの間の全てのページビューとイベントに適用される。
  • ページスコープ(Page scope)…カスタム変数が適用される trackEventまたはtrackPageViewの前に呼ばれ、このメソッドが呼ばれるたびに毎回呼び出される。もしスコープを設定しなければこれがデフォルトになる。

カスタム変数の設定は以下のようにします。

	// Scopes are encoded to integers:  Visitor=1, Session=2, Page=3
	tracker.setCustomVar(1, "Navigation type", "Button click", 3);

選べる送信モード

電池を激しく消耗する可能性があるので、ページビューかカスタム変数の場合、検知の都度サーバへ発信しないようになってます。内部のSQLiteのデータベースに書き込んでまとめてサーバへ送信されます。サーバへの送信タイミングは以下の2つありどちらか一つを選べるようになっています。

  • n秒毎に自動的に送信(automatic)
  • 手動でコードの中に送信メソッドを埋め込み(manually)

tracker.start()メソッドで呼ぶときにどちらか選択されます。

手動送信の場合は以下のように。

	// No time increment sent as a parameter
	tracker.start(“UA-1234-1”, this);
	…
	
	// Call this when you want to send the entire event queue to the server
	tracker.dispatch();

自動送信の場合は送信間隔(秒)のパラメータが一つ追加になります。この場合だとdispatch()は呼ばないこと。

	// Dispatch all queued pagevies/events every 300 seconds (5 minutes)
	tracker.start("UA-YOUR-ACCOUNT-HERE", 300, this);

注意点としては、Google Analyticsは実際のページビューやイベントが発生した時間ではなく、データを受信したタイムスタンプを使用されます。イベントが発生した日と違う日に送られたりなど、潜在的に不正確な分析データとなりがちなので、定期的な通信は注意して扱う必要があります。

コード例

以下にtrackerに送信するための一連のコード例を示します。

GoogleAnalyticsTracker tracker;

protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);

	tracker = GoogleAnalyticsTracker.getInstance();
	tracker.start(“UA-1234-1”, this);

	if(isFirstTimeRunningApplication()) {
 		tracker.setCustomVar(1, “App Type”, “Demo”, 1);
	}
	tracker.trackPageView("/HomeScreen");
	…
}

分析について

ラッキングデータによる分析をするためには、2つ方法があります。まず一つ目は、Google Analyticsには、かなりかっこいいwebインタフェースがすでにあって、有用な情報をみやすくするのに役立ちます。 もし、Analytics初心者で何のデータを見たらいいのか分からないような場合、webインタフェースは、データを探索したり、ユーザを把握する一番いい方法です。もしもっと深く詳細に分析したい場合は、データを分析するための色々なAPIがあるので(JavapythonJavaScriptC#)これらのクライアントライブラリを組みこんでの分析ができます。

Google Analyticsサービス規約

Google Analyticsサービス規約があります。これをよく読んで遵守してください。特に重要なのは個人情報にかかわるところで、Analyticsサーバに身元が分かるような個人情報を送ることができません(例えば、カスタム変数が訪問者の電話番号、名、またはEメールアドレスを含むことができないことなど)。

追記(2010/12/20)

以下のような場合に使うといいよと書いています

  • 分析
    • 有料、無料ユーザの使用率
    • アプリのバージョンごとの使用率
    • プラットフォームバージョンごとの使用率
  • 調査
    • UI調査(ユーザがmenuボタンを使うか長押しを使うかと言った調査)
    • ヘルプ・チュートリアルの検索調査(どの項目がどのくらい参照されるか)
    • アプリについて、Portrait / landscapeのどちらで使われやすいか

*1:もしまだもってない場合はhttp://google.com/analytic のサイトへいってみてサインアップし、プロフィールをセットアップを完了させる。するとあなたのサイトに挿入するJavascriptスニペットが表示されるのでその中のUA-XXXXXXX-Xというところを確認する