고급 구성 - Android SDK

이 문서에서는 Android용 Google 애널리틱스 SDK v3의 고급 구성 기능을 간략하게 소개합니다.

개요

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 애널리틱스로 전송할 수 있습니다.

데이터 설정 및 전송

추적기에서 매개변수-값 쌍의 맵을 설정하고 set 메서드와 send 메서드를 통해 전송하여 데이터를 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 플래그를 제공합니다. 구현을 테스트하거나 디버깅할 때 Google 애널리틱스 보고서에 테스트 데이터가 표시되지 않게 하려면 dryRun 플래그를 설정해야 합니다.

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

// 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());
  }
}