Google アナリティクスとの統合

Google アナリティクス プラットフォームでは、多様なデバイスと環境で、企業とユーザーのやり取りを測定できます。このプラットフォームは、こうしたユーザーのやり取りを収集、保存、処理、レポートするためのすべてのコンピューティング リソースを備えています。

アナリティクス コレクションは、クライアント側とサーバー側の両方で行うことができます。Google アナリティクスには、Google アナリティクスにデータを送信するための使いやすい API と SDK があります。それらに加えて、Google では、ユーザーが独自の App Engine アプリケーションで使用して、Google アナリティクスにサーバー側アナリティクスを簡単に送信できるコードも開発しています。

クライアント側アナリティクス コレクション

コレクション API と SDK を使って、ユーザーがコンテンツやマーケティング活動とどのようにやり取りをしているかを測定できます。実装すると、Google アナリティクス内または Reporting API を通じて、ユーザーのやり取りのデータを表示できます。クライアント側アナリティクス コレクションの詳細については、クライアントのタイプに基づいて、次のリンクを選択してください。

  • ウェブ トラッキング(analytics.js) - ウェブサイトやウェブ アプリケーションとユーザーのやり取りを測定します。
  • Android - Android アプリケーションとユーザーのやり取りを測定します。
  • iOS - iOS アプリケーションとユーザーのやり取りを測定します。
  • Measurement Protocol - この低レベル プロトコルと、任意の環境内のユーザーのやり取りを測定します。

App Engine サーバー側アナリティクス コレクション

App Engine にはアプリケーションのイベントのロギングのメカニズムがすでに用意されていますが、Google アナリティクスで特定のサーバー側イベントを追跡することに利点がある場合があります。次のような利点があります。

  • 履歴データの分析 - App Engine を使用して、ログファイルの最大日数やサイズを構成できます。その日数が経過すると、それらのログファイルにアクセスできなくなります。Google アナリティクスでイベントをトラッキングすることで、過去のイベントを表示できる期間が大幅に長くなります。
  • 重要なイベントのトラッキング - ログファイルは、アプリケーションのさまざまなコンポーネントがそれらに書き込むことによって、冗長になる場合があります。イベント トラッキングを使用することで、モニタリングの関心のある重要なイベントだけに特定し、追加のメタデータとともにそれらをトラックできます。
  • 強力なユーザー インターフェース - Google アナリティクスで提供される高機能なユーザー インターフェースを利用して、これらのサーバー側イベントを表示、レポート、エクスポートします。

これは、下記のサンプル ソースコードを App Engine アプリケーションに組み込むことによって、簡単に実現できます。この方法の詳細については、Google アナリティクス デベロッパー ガイドでイベントのトラッキングをご覧ください。

サンプル ソースコード

Java

package com.google.appengine.analytics.tracking;

import com.google.appengine.api.urlfetch.HTTPHeader;
import com.google.appengine.api.urlfetch.HTTPMethod;
import com.google.appengine.api.urlfetch.HTTPRequest;
import com.google.appengine.api.urlfetch.HTTPResponse;
import com.google.appengine.api.urlfetch.URLFetchService;
import com.google.appengine.api.urlfetch.URLFetchServiceFactory;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.LinkedHashMap;
import java.util.Map;

public class GoogleAnalyticsTracking {

  private static final URL GA_URL_ENDPOINT = getGoogleAnalyticsEndpoint();
  private static final HTTPHeader CONTENT_TYPE_HEADER =
      new HTTPHeader("Content-Type", "application/x-www-form-urlencoded");

  private final String gaTrackingId;  // Tracking ID / Web property / Property ID
  private String gaClientId = "555";  // Anonymous Client ID.
  // Used to override the existing factory with perhaps a mock one for testing.
  private URLFetchService urlFetchService = URLFetchServiceFactory.getURLFetchService();

  private static URL getGoogleAnalyticsEndpoint() {
    try {
      return new URL("http", "www.google-analytics.com", "/collect");
    } catch (MalformedURLException e) {
      throw new RuntimeException(e);
    }
  }

  public GoogleAnalyticsTracking(String gaTrackingId) throws IOException {
    if (gaTrackingId == null) {
      throw new IllegalArgumentException("Can't set gaTrackingId to a null value.");
    }
    this.gaTrackingId = gaTrackingId;
  }

  public GoogleAnalyticsTracking setGoogleAnalyticsClientId(String gaClientId)
      throws IOException {
    if (gaClientId == null) {
      throw new IllegalArgumentException("Can't set gaClientId to a null value.");
    }
    this.gaClientId = gaClientId;
    return this;
  }

  public GoogleAnalyticsTracking setUrlFetchService(URLFetchService urlFetchService)
      throws IOException {
    if (urlFetchService == null) {
      throw new IllegalArgumentException("Can't set urlFetchService to a null value.");
    }
    this.urlFetchService = urlFetchService;
    return this;
  }

  /**
   * Posts an Event Tracking message to Google Analytics.
   *
   * @param category the required event category
   * @param action the required event action
   * @param label the optional event label
   * @param value the optional value
   * @return true if the call succeeded, otherwise false
   * @exception IOException if the URL could not be posted to
   */
  public int trackEventToGoogleAnalytics(
      String category, String action, String label, String value) throws IOException {
    Map<String, String> map = new LinkedHashMap<>();
    map.put("v", "1");             // Version.
    map.put("tid", gaTrackingId);
    map.put("cid", gaClientId);
    map.put("t", "event");         // Event hit type.
    map.put("ec", encode(category, true));
    map.put("ea", encode(action, true));
    map.put("el", encode(label, false));
    map.put("ev", encode(value, false));

    HTTPRequest request = new HTTPRequest(GA_URL_ENDPOINT, HTTPMethod.POST);
    request.addHeader(CONTENT_TYPE_HEADER);
    request.setPayload(getPostData(map));

    HTTPResponse httpResponse = urlFetchService.fetch(request);
    // Return True if the call was successful.
    return httpResponse.getResponseCode();
  }

  private static byte[] getPostData(Map<String, String> map) {
    StringBuilder sb = new StringBuilder();
    for (Map.Entry<String, String> entry : map.entrySet()) {
      sb.append(entry.getKey());
      sb.append('=');
      sb.append(entry.getValue());
      sb.append('&');
    }
    if (sb.length() > 0) {
      sb.setLength(sb.length() - 1); // Remove the trailing &.
    }
    return sb.toString().getBytes(StandardCharsets.UTF_8);
  }

  private static String encode(String value, boolean required)
      throws UnsupportedEncodingException {
    if (value == null) {
      if (required) {
        throw new IllegalArgumentException("Required parameter not set.");
      }
      return "";
    }
    return URLEncoder.encode(value, StandardCharsets.UTF_8.name());
  }
}

Python

def track_event(category, action, label=None, value=0):
    data = {
        'v': '1',  # API Version.
        'tid': GA_TRACKING_ID,  # Tracking ID / Property ID.
        # Anonymous Client Identifier. Ideally, this should be a UUID that
        # is associated with particular user, device, or browser instance.
        'cid': '555',
        't': 'event',  # Event hit type.
        'ec': category,  # Event category.
        'ea': action,  # Event action.
        'el': label,  # Event label.
        'ev': value,  # Event value, must be an integer
    }

    response = requests.post(
        'http://www.google-analytics.com/collect', data=data)

    # If the request fails, this will raise a RequestException. Depending
    # on your application's needs, this may be a non-error and can be caught
    # by the caller.
    response.raise_for_status()

@app.route('/')
def track_example():
    track_event(
        category='Example',
        action='test action')
    return 'Event tracked.'
このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

PHP 5 の App Engine スタンダード環境