2013年7月14日日曜日

Google Analytics SDK v2を使ったスマホアプリのトラッキング


Google Analytics SDK を使ったスマホアプリのトラッキングはv1でのお話でしたが、v2になっていろいろ変わったので、変更点を追いかけていきましょう。













































































概要

v1からv2への変更を大きくまとめると次の3点となります。
  • アプリ用のGAアカウントが必須
  • ページの代わりにスクリーンに
  • インターフェイスの全体的な改定
まず、アプリ用のGAアカウントが必須になりました。
GAアカウントを作成する際に[トラッキングの対象]で[ウェブサイト]ではなく[アプリ]を選択して作成したGAアカウントを使う必要があります。
※こちらでは、試してはいませんがレポートプロファイルにも新しいプロファイルを作る際にもトラッキングの選択があり、こちらで[アプリ]を選択すれば既存のGAアカウントのままでいいかもしれません。
第二に、v1ではWebサイトと同じくURLベースのページという概念に基づいたトラッキングとなっていましたが、アプリ用のGAアカウントとなったことに伴い、ページではなくスクリーンに基づいたトラッキングとなりました。
そしてスクリーンベースとなったことで以前のように各画面にURL風のパスを割り当ててパスを指定しなくともユーザーフレンドリーな画面名を指定できるようになりました。ただ、GAの画面上で確認する時の都合を考えるとv1の時と同じようにスクリーン名としてURL風のパスを指定するスタイルをそのまま維持したほうが利便性は高いかもしれません。
そして、基本的な設計は大きく変わっていないもののインターフェイスは全体的に改定されており、v1からv2にアップデートする際には関連する箇所のほぼ全てを手直しする必要があります。
それではAndroidアプリとiPhoneアプリでの具体的な変更点を追いかけ直していきましょう。

Androidアプリ

[Downloads - Android SDK - Google Analytics ― Google Developers]
https://developers.google.com/analytics/devguides/collection/android/resources
  1. まずはバージョン2.0のAndroid版Google Analytics SDKを上のリンク先からダウンロードし直し、
  2. その中に含まれるlibGoogleAnalyticsV2.jarファイルをプロジェクトのlibsディレクトリ(無ければ作成)へ配置し、
  3. プロジェクトの[プロパティ]の[Javaのビルド・パス]から[Jar追加...]でlibsディレクトリに配置したlibGoogleAnalyticsV2.jarファイルを追加します。
  4. v1のlibGoogleAnalytics.jarはもう要らないので削除してください。

AndroidManifest.xmlの更新

AndroidManifest.xmlで次のパーミッションを要求していない場合、書き足してください。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
またv1でインストールリファラ(キャンペーン情報)を取得するように指定していた場合は次のように書き換えてください。
<!-- Used for install referrer tracking -->
<receiver android:name="com.google.android.apps.analytics.AnalyticsReceiver" android:exported="true">
  <intent-filter>
    <action android:name="com.android.vending.INSTALL_REFERRER" />
  </intent-filter>
</receiver>
<!-- Used for install referral measurement-->
<service android:name="com.google.analytics.tracking.android.CampaignTrackingService"/>
<receiver android:name="com.google.analytics.tracking.android.CampaignTrackingReceiver" android:exported="true">
  <intent-filter>
    <action android:name="com.android.vending.INSTALL_REFERRER" />
  </intent-filter>
</receiver>

EasyTracker

Android向けのv2で新たにEasyTrackerというものが導入されていますが、今回はこの機能については触れません。

analytics.xmlの用意

次のような内容のanalytics.xmlをres/valuesディレクトリに用意し、ga_trackingIdの値としてGAアカウントのIDを必ず指定してください。
<?xml version="1.0" encoding="utf-8" ?>

<resources>
  <!--Replace placeholder ID with your tracking ID-->
  <string name="ga_trackingId">UA-XXXX-Y</string>

  <!--Enable automatic activity tracking-->
  <bool name="ga_autoActivityTracking">true</bool>

  <!--Enable automatic exception tracking-->
  <bool name="ga_reportUncaughtExceptions">true</bool>
</resources>

コードの修正

基本的な設計はv1からほぼ代わっていない為、v2への対応は次のような書き換えを行っていけば対応できます。
import com.google.android.apps.analytics.GoogleAnalyticsTracker;
import com.google.analytics.tracking.android.*;
 
GoogleAnalyticsTracker tracker = GoogleAnalyticsTracker.getInstance();
tracker.startNewSession("UA-YOUR-ACCOUNT-HERE", this);
Context mCtx = this;
GoogleAnalytics myInstance = GoogleAnalytics.getInstance(mCtx.getApplicationContext());
Tracker tracker = myInstance.getTracker("UA-YOUR-ACCOUNT-HERE");
tracker.setStartSession(true);
 
tracker.trackPageView("/top/");
tracker.trackView("/top/");
 
tracker.trackPageView
(
    "Menu",
    "Click",
    "Play",
    0,
);
tracker.trackEvent
(
    "Menu",
    "Click",
    "Play",
    (long)0,
);
 
tracker.stopSession();
削除

iPhoneアプリ

[Downloads - iOS SDK - Google Analytics ― Google Developers]
https://developers.google.com/analytics/devguides/collection/ios/resources
  1. まずはバージョン2.0のiOS版Google Analytics SDKを上のリンク先からダウンロードし直し、
  2. その中に含まれるlibGoogleAnalytics.aでv1のファイルを上書きして、
  3. GAI.hを始めとするヘッダファイル群をプロジェクトのLibraryディレクトリへ追加します。
  4. Google Analytics SDK for iOSはCoreData.frameworkとSystemConfiguration.frameworkに依存していますのでこれらもリンクされるように設定します。
  5. v1のGANTracker.hはもう要らないので削除してください。

コードの修正

基本的な設計はv1からほぼ代わっていない為、v2への対応は次のような書き換えを行っていけば対応できます。
#import "GANTracker.h"
#import "GAI.h"
 
static const NSInteger kGANDispatchPeriodSec = 10;

- (void)applicationDidFinishLaunching:(UIApplication *)application {
  // **************************************************************************
  // PLEASE REPLACE WITH YOUR ACCOUNT DETAILS.
  // **************************************************************************
  [[GANTracker sharedTracker] startTrackerWithAccountID:@"UA-0000000-1"
                                        dispatchPeriod:kGANDispatchPeriodSec
                                              delegate:nil];
// Initialize Google Analytics with a 120-second dispatch interval. There is a
// tradeoff between battery usage and timely dispatch.
[GAI sharedInstance].dispatchInterval = 120;
[GAI sharedInstance].trackUncaughtExceptions = YES;
id tracker = [[GAI sharedInstance] trackerWithTrackingId:@"UA-0000000-1"];
 
NSError *error;
//  画面遷移のトラッキング
if (![[GANTracker sharedTracker] trackPageview:@"/top/"
                               withError:&error]) {
    // Handle error here
}
[tracker sendView:@"/top/"];
 
NSError *error;
//  操作のトラッキング
if (![[GANTracker sharedTracker] trackEvent:@"Menu"
                                   action:@"Click"
                                    label:@"Play"
                                    value:0
                               withError:&error]) {
    // Handle error here
}
[tracker sendEventWithCategory:@"Menu" withAction:@"Click"  withLabel:@"Play" withValue:0];
 
[[GANTracker sharedTracker] setReferrer:@"utm_campaign=test_campaign&utm_source=test_source&utm_medium=test_medium&utm_term=test_term&utm_content=test_content" withError:&error];
[tracker setCampaignUrl:@"utm_campaign=test_campaign&utm_source=test_source&utm_medium=test_medium&utm_term=test_term&utm_content=test_content"];