Google Analytics SDK v4 for Android を実装する

気がついたら v4.

Google_Analytics_SDK_v4_for_Android_-_Getting_Started_-_Google_アナリティクス_—_Google_Developers

実装してみる, と.

Google Analytics SDK v4 for Android - Getting Started - Google アナリティクス — Google Developers

読んで, さらっと, 箇条書き

・libs以下のjar不要. 「Google Play Service SDK」に含まれている
・Application 拡張クラスにTrackerメソッドを配置
・AndroidManifest.xml に Applicationクラス名記述
・設定はXMLファイルに記述

実際, やってみるといろいろあったのでメモ.

1. AndroidManifest.xml

インターネット接続系の2つ.

...
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
...

アプリケーションクラス(後述)

...
<Application … android:name=".AnalyticsSampleApp">
...

 

2. Applicationクラスを拡張してトラッカーメソッドを

SDK内サンプルをほとんどそのまま流用する.

public class AnalyticsSampleApp extends Application {

  // The following line should be changed to include the correct property id.
  // XMLファイルの中にもあるのはマルチなGLOBAL/ECOMMERCE用
  private static final String PROPERTY_ID = "UA-xxxxxxx-x";

  public static int GENERAL_TRACKER = 0;

  public enum TrackerName {
    APP_TRACKER,       // Tracker used only in this app.
    GLOBAL_TRACKER,    // Tracker used by all the apps from a company. eg: roll-up tracking.
    ECOMMERCE_TRACKER, // Tracker used by all ecommerce transactions from a company.
  }

  HashMap<TrackerName, Tracker> mTrackers = new HashMap<TrackerName, Tracker>();

  public AnalyticsSampleApp() {
    super();
  }

  // スコープを public に変更
  public synchronized Tracker getTracker(TrackerName trackerId) {
    if (!mTrackers.containsKey(trackerId)) {
      GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);
      Tracker t = (trackerId == TrackerName.APP_TRACKER) ? analytics.newTracker(PROPERTY_ID)
          : (trackerId == TrackerName.GLOBAL_TRACKER) ? analytics.newTracker(R.xml.global_tracker)
          : analytics.newTracker(R.xml.ecommerce_tracker);
      mTrackers.put(trackerId, t);
    }
    return mTrackers.get(trackerId);
  }
}

extras/google/google_play_services/ の下のほうにある.

...
$ pwd
/Applications/Android Studio.app/sdk/extras/google/google_play_services/samples/analytics
$ tree
.
├── AndroidManifest.xml
├── proguard.flags
├── res
│   ├── drawable
│   │   └── icon.png
│   ├── layout
│   │   ├── ecommerce.xml
│   │   ├── event.xml
│   │   ├── exception.xml
│   │   ├── screenview.xml
│   │   ├── social.xml
│   │   └── timing.xml
│   ├── values
│   │   └── strings.xml
│   └── xml
│       ├── ecommerce_tracker.xml
│       └── global_tracker.xml
└── src
    └── com
        └── google
            └── android
                └── gms
                    └── analytics
                        └── samples
                            └── mobileplayground
                                ├── AnalyticsSampleApp.java (*)
                                ├── AppviewFragment.java
                                ├── EcommerceFragment.java
                                ├── EventFragment.java
                                ├── ExceptionFragment.java
                                ├── MobilePlayground.java
                                ├── SocialFragment.java
                                └── TimingFragment.java

13 directories, 20 files

ところが,

com.google.android.gms.analytics.* がない

といわれたので play-services のバージョンをあげたら行けた以下.

build.gradle の dependencies

compile 'com.google.android.gms:play-services:4.0.30'
↓ 今日現在, 4.0.32 には含まれてる
compile 'com.google.android.gms:play-services:+'

3. 設定のXML

なくてもよい.
FragmentにScreenNameをつけたり,
トラッキングIDについてもここにも設定がある.
(マルチID向け)

4. 送信

スクリーンネーム別でトラッキングするには以下.

...
// Get tracker.
Tracker t = ((AnalyticsSampleApp)getActivity().getApplication())
    .getTracker(TrackerName.APP_TRACKER);

// Set screen name.
// Where path is a String representing the screen name.
// これは設定のXMLがない APP_TRACKER のみで使用している.
t.setScreenName(path);

// Send a screen view.
t.send(new HitBuilders.AppViewBuilder().build());
...

階層なイベントなスタイルでトラッキングするには以下.

@Override
public void onClick(View v) {
  // Get tracker.
  Tracker t = ((AnalyticsSampleApp) getActivity().getApplication()).getTracker(
        TrackerName.APP_TRACKER);
  // Build and send an Event.
  t.send(new HitBuilders.EventBuilder()
        .setCategory(getString(categoryId))
        .setAction(getString(actionId))
        .setLabel(getString(labelId))
        .build());
      }

公式ドキュメントを改めて読むとほとんどそのまま書いているそのままなのだがw

リリースビルド時, なんかあるのかもサンブル内 proguard.flags.

-keep public class com.google.android.gms.analytics.** {
    public *;
}

# AppCompat
-keep class android.support.v7.app.** { *; }
-keep class android.support.v4.app.** { *; }
-keep interface android.support.v4.app.** { *; }

きをつけておこう.


関連ワード:  AndroidAndroidStudioGradleライブラリ開発