고급 구성 - Android SDK

이 문서에서는 Android v3용 Google 애널리틱스 SDK의 고급 구성 기능 중 일부를 개략적으로 설명합니다.

개요

Android용 Google 애널리틱스 SDK에서는 데이터를 설정하고 Google 애널리틱스로 전송하는 Tracker 클래스와 구현의 전역 구성 값에 대한 인터페이스 역할을 하는 GoogleAnalytics 싱글톤을 제공합니다.

초기화

데이터를 측정하려면 먼저 Context 및 Google 애널리틱스 속성 ID를 제공하여 GoogleAnalytics 싱글톤을 통해 하나 이상의 추적기를 초기화해야 합니다.

// Initialize a tracker using a Google Analytics property ID.
GoogleAnalytics.getInstance(this).getTracker("UA-XXXX-Y")

이제 이 추적기를 사용하여 데이터를 설정하고 Google 애널리틱스로 전송할 수 있습니다.

데이터 설정 및 보내기

추적기에서 매개변수-값 쌍의 맵을 설정하고 setsend 메서드를 통해 전송하여 Google 애널리틱스로 데이터를 전송합니다.

/*
 * Send a screen view to Google Analytics by setting a map of parameter
 * values on the tracker and calling send.
 */
Tracker tracker = GoogleAnalytics.getInstance(this).getTracker("UA-XXXX-Y");

HashMap<String, String> hitParameters = new HashMap<String, String>();
hitParameters.put(Fields.HIT_TYPE, "appview");
hitParameters.put(Fields.SCREEN_NAME, "Home Screen");

tracker.send(hitParameters);

MapBuilder 클래스는 조회 빌드 프로세스를 단순화하며 대부분의 사용 사례에 권장됩니다. 여기서는 더 적은 코드 줄로 동일한 화면 조회수를 전송할 수 있습니다.

// Sending the same screen view hit using MapBuilder.createAppView()
tracker.send(MapBuilder
  .createAppView()
  .set(Fields.SCREEN_NAME, "Home Screen")
  .build()
);

측정 프로토콜 앰퍼샌드 구문

값이 Builder에 값을 설정하여 단일 조회에 설정되거나, 측정 프로토콜 앰퍼샌드 구문을 사용하여 추적기 객체 자체에서 값을 설정하는 방법으로 모든 후속 조회에서 값을 설정할 수도 있습니다.

// Setting the content description field on a single hit using ampersand syntax.
tracker.send(MapBuilder
  .createAppView()
  .set(Fields.SCREEN_NAME, "Home Screen")
  .build()
);

사용 가능한 측정 프로토콜 매개변수의 전체 목록은 측정 프로토콜 매개변수 참조를 참고하세요.

다중 조회에 값 적용

추적기에 직접 설정된 값은 다음 예와 같이 유지되고 여러 조회에 적용됩니다.

// Set screen name on the tracker to be sent with all hits.
tracker.set(Fields.SCREEN_NAME, "Home Screen");

// Send a screen view for "Home Screen"
tracker.send(MapBuilder
    .createAppView()
    .build()
);

// This event will also be sent with &cd=Home%20Screen.
tracker.send(MapBuilder
    .createEvent("UX", "touch", "menuButton", null)
    .build()
);

// Clear the screen name field when we're done.
tracker.set(Fields.SCREEN_NAME, null);

여러 조회에서 유지하려는 값만 추적기에서 직접 설정해야 합니다. 후속 화면 조회수 및 이벤트 조회에 동일한 값이 적용될 수 있으므로 추적기의 화면 이름을 설정하는 것이 합리적입니다. 하지만 추적기에서 조회 유형과 같은 필드를 설정하는 것은 조회가 발생할 때마다 변경될 수 있으므로 권장하지 않습니다.

여러 트래커 사용

단일 구현에서 여러 추적기를 사용할 수 있으며, 이는 여러 속성에 데이터를 전송하는 데 유용할 수 있습니다.

Tracker t1 = GoogleAnalytics.getInstance(this).getTracker("UA-XXXX-1");

// Trackers may be named. By default, name is set to the property ID.
Tracker t2 = GoogleAnalytics.getInstance(this).getTracker("altTracker", "UA-XXXX-2";

t1.set(Fields.SCREEN_NAME, "Home Screen");
t2.set(Fields.SCREEN_NAME, getClass().toString());

// Send screen view to UA-XXXX-1.
t1.send(MapBuilder
   .createAppView()
   .build()
);

// Send screen view to UA-XXXX-2.
t2.send(MapBuilder
   .createAppView()
   .build()
);

자동 화면 및 포착되지 않은 예외 측정과 같은 자동 측정 기능은 하나의 추적기만 사용하여 Google 애널리틱스로 데이터를 전송합니다. 이러한 기능을 사용 중이고 다른 추적기를 통해 데이터를 전송하려면 수동으로 전송해야 합니다.

기본 추적기 사용

Google 애널리틱스에서는 기본 추적기를 유지합니다. 초기화된 첫 번째 추적기가 기본 추적기가 되지만 재정의될 수 있습니다.

// Tracker t1 becomes the default tracker because it is initialized first.
Tracker t1 = GoogleAnalytics.getInstance(this).getTracker("UA-XXXX-1");
Tracker t2 = GoogleAnalytics.getInstance(this).getTracker("UA-XXXX-2");


// Returns tracker t1.
Tracker defaultTracker = GoogleAnalytics.getInstance(this).getDefaultTracker();

// Hit sent to UA-XXXX-1.
defaultTracker.send(MapBuilder
    .createAppView()
    .set(Fields.SCREEN_NAME, "Home Screen")
    .build()
);

// Override the default tracker.
GoogleAnalytics.getInstance(this).setDefaultTracker(t2);

// Now this call returns tracker t2.
defaultTracker = GoogleAnalytics.getInstance(this).getDefaultTracker();

// Hit sent to UA-XXXX-2.
defaultTracker.send(MapBuilder
    .createAppView()
    .set(Fields.SCREEN_NAME, getClass().toString())
    .build()
);

샘플링

클라이언트 측 샘플링을 사용 설정하면 Google 애널리틱스로 전송되는 조회수를 제한할 수 있습니다. 앱에 사용자가 많거나 Google 애널리틱스로 대량의 데이터를 전송하는 경우 샘플링을 사용 설정하면 보고가 중단되지 않습니다.

예를 들어 EasyTracker 및 XML을 통해 50% 의 속도로 클라이언트 측 샘플링을 사용 설정하려면 analytics.xml 파일에서 다음 매개변수를 사용합니다.

<string name="ga_sampleFrequency">50.0</string>

추적기에 대해 프로그래매틱 방식으로 클라이언트 측 샘플링을 사용 설정하려면 다음 안내를 따르세요.

mTracker.set(Fields.SAMPLE_RATE, 50.0d);

앱 수준 선택 해제

앱 수준 선택 해제 플래그를 사용 설정하여 앱 전체에서 Google 애널리틱스를 사용 중지할 수 있습니다. 이 플래그는 앱을 시작할 때마다 설정해야 하며 기본값은 NO입니다.

앱 수준의 선택 해제 설정을 가져오려면 다음을 사용하세요.

boolean isOptedOut = GoogleAnalytics.getInstance(this).getAppOptOut();

앱 수준의 선택 해제를 설정하려면 다음을 사용하세요.

GoogleAnalytics.getInstance(this).setAppOptOut(true);

일반적인 구현에서 앱은 SharedPreferences의 변경사항을 수신 대기하고 이에 따라 Google 애널리틱스 선택 해제 설정을 업데이트할 수 있습니다.

SharedPreferences userPrefs = PreferenceManager.getDefaultSharedPreferences(this);

userPrefs.registerOnSharedPreferenceChangeListener(new SharedPreferences.OnSharedPreferenceChangeListener () {

  @Override
  public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
      String key) {

    if (key.equals(TRACKING_PREF_KEY)) {
      GoogleAnalytics.getInstance(getApplicationContext()).setAppOptOut(sharedPreferences.getBoolean(key, false));
    } else {
    // Any additional changed preference handling.
    }
  }
});

테스트 및 디버깅

Android용 Google 애널리틱스 SDK는 더 쉽게 테스트하고 디버깅할 수 있는 도구를 제공합니다.

테스트 실행

SDK는 설정된 경우 데이터가 Google 애널리틱스로 전송되지 않도록 하는 dryRun 플래그를 제공합니다. dryRun 플래그는 구현을 테스트하거나 디버깅할 때마다 설정해야 하고 테스트 데이터가 Google 애널리틱스 보고서에 표시되지 않도록 해야 합니다.

테스트 실행 플래그를 설정하려면 다음 안내를 따르세요.

// When dry run is set, hits will not be dispatched, but will still be logged as
// though they were dispatched.
GoogleAnalytics.getInstance(this).setDryRun(true);

Logger

Logger 인터페이스는 error, warning, info, verbose의 상세 수준까지 SDK의 유용한 메시지를 처리하도록 제공됩니다.

SDK는 표준 Logger 구현을 초기화하며 기본적으로 콘솔에 경고 또는 오류 메시지만 로깅합니다. 이 메시지는 logcat에서 확인할 수 있습니다. Logger의 상세 출력을 설정하려면 다음 안내를 따르세요.

// Set the log level to verbose.
GoogleAnalytics.getInstance(this).getLogger()
    .setLogLevel(LogLevel.VERBOSE);

Logger의 맞춤 구현을 사용할 수도 있습니다.

// Provide a custom logger.
GoogleAnalytics.getInstance(this).setLogger(new CustomLogger ());

전체 예

아래 예는 Google 애널리틱스 구현을 초기화하고 단일 화면 조회수를 전송하는 데 필요한 코드를 보여줍니다.

package com.example.app;

import com.google.analytics.tracking.android.GAServiceManager;
import com.google.analytics.tracking.android.GoogleAnalytics;
import com.google.analytics.tracking.android.Tracker;

import android.app.Application;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;


/*
 * An advanced Google Analytics implementation may be initialized
 * in a subclass of Application. Note that this example assumes data
 * only needs to be sent to a single Google Analytics property ID.
 */
public class MyApp extends Application {

  private static GoogleAnalytics mGa;
  private static Tracker mTracker;

  /*
   * Google Analytics configuration values.
   */
  // Placeholder property ID.
  private static final String GA_PROPERTY_ID = "UA-XXXX-Y";

  // Dispatch period in seconds.
  private static final int GA_DISPATCH_PERIOD = 30;

  // Prevent hits from being sent to reports, i.e. during testing.
  private static final boolean GA_IS_DRY_RUN = false;

  // GA Logger verbosity.
  private static final LogLevel GA_LOG_VERBOSITY = LogLevel.INFO;

  // Key used to store a user's tracking preferences in SharedPreferences.
  private static final String TRACKING_PREF_KEY = "trackingPreference";


  /*
   * Method to handle basic Google Analytics initialization. This call will not
   * block as all Google Analytics work occurs off the main thread.
   */
  private void initializeGa() {
    mGa = GoogleAnalytics.getInstance(this);
    mTracker = mGa.getTracker(GA_PROPERTY_ID);

    // Set dispatch period.
    GAServiceManager.getInstance().setLocalDispatchPeriod(GA_DISPATCH_PERIOD);

    // Set dryRun flag.
    mGa.setDryRun(GA_IS_DRY_RUN);

    // Set Logger verbosity.
    mGa.getLogger().setLogLevel(GA_LOG_VERBOSITY);

    // Set the opt out flag when user updates a tracking preference.
    SharedPreferences userPrefs = PreferenceManager.getDefaultSharedPreferences(this);
    userPrefs.registerOnSharedPreferenceChangeListener(new SharedPreferences.OnSharedPreferenceChangeListener () {
      @Override
      public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
          String key) {
        if (key.equals(TRACKING_PREF_KEY)) {
          GoogleAnalytics.getInstance(getApplicationContext()).setAppOptOut(sharedPreferences.getBoolean(key, false));
        }
      }
    });
  }

  @Override
  public void onCreate() {
    super.onCreate();
    initializeGa();
  }

  /*
   * Returns the Google Analytics tracker.
   */
  public static Tracker getGaTracker() {
    return mTracker;
  }

  /*
   * Returns the Google Analytics instance.
   */
  public static GoogleAnalytics getGaInstance() {
    return mGa;
  }
}

다음으로 화면 조회수는 첫 번째 화면이 사용자에게 표시될 때 측정됩니다.

package com.example.app

import android.app.Activity

/**
 * A simple Activity that sends a screen view to Google Analytics
 * when it is displayed to the user.
 */
public class HomeScreen extends Activity {

  private static final String SCREEN_LABEL = "Home Screen";

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Fields set on a tracker persist for all hits, until they are
    // overridden or cleared by assignment to null.
    MyApp.getGaTracker().set(Fields.SCREEN_NAME, SCREEN_LABEL);
  }

  @Override
  public void onStart() {
    super.onStart();

    // Send a screen view when the Activity is displayed to the user.
    MyApp.getGaTracker().send(MapBuilder
        .createAppView.build());
  }
}