高级配置

本文档简要介绍了 Android 版 Google Analytics(分析)SDK v4 的一些高级配置功能。

概览

Android 版 Google Analytics(分析)SDK v4 提供了一个 Tracker 类,用于设置并向 Google Analytics(分析)发送数据,并提供了一个 GoogleAnalytics 单例来作为您的实现方案的全局配置值的接口。

初始化

您需要先通过 GoogleAnalytics 单例至少初始化一个跟踪器,然后才能开始衡量数据。在初始化时,您需要提供 Context 对象和个 Google Analytics(分析)媒体资源 ID。有关详情,请参阅 GoogleAnalytics 参考

使用配置文件

您也可以使用配置文件来初始化跟踪器。例如:

package com.google.android.apps.mobileplayground;

import android.app.Application;
import com.google.android.gms.analytics.GoogleAnalytics;
import com.google.android.gms.analytics.Tracker;
import java.util.HashMap;

/**
 * An extension to Application class to provide tracker for analytics purposes. Having the tracker
 * instances here allows all the activities to access the same tracker instances. The trackers can
 * be initialised on startup or when they are required based on performance requirements.
 */
public class AnalyticsSampleApp extends Application {

  // The following line should be changed to include the correct property id.
  private static final String PROPERTY_ID = "UA-XXXXX-Y";

  /**
   * Enum used to identify the tracker that needs to be used for tracking.
   *
   * A single tracker is usually enough for most purposes. In case you do need multiple trackers,
   * storing them all in Application object helps ensure that they are created only once per
   * application instance.
   */
  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();
  }
  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);
  }
}

设置和发送数据

为了向 Google Analytics(分析)发送数据,您需要使用构建工具来设置“参数-值”对,并通过跟踪器的 send 方法来发送这些数据。

下例展示了如何构建应用浏览并调用跟踪器的 send 方法,以此来向 Google Analytics(分析)发送屏幕浏览量:

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

// Set screen name.
t.setScreenName(screenName);

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

Measurement Protocol“&”符号语法

您可以使用 Measurement Protocol“&”符号语法,通过 HitBuilders.ScreenViewBuilder 为单次匹配设置值。要为所有后续匹配设置值,请使用跟踪器对象本身。

// Setting the content description field on a single hit using ampersand syntax.
tracker.send(new HitBuilders.ScreenViewBuilder()
  .set("&cd", "Home Screen")
  .build()
);

如要了解可用 Measurement Protocol 参数的完整列表,请参阅 Measurement Protocol 参数参考

将值应用于多次匹配

直接在跟踪器中设置的值将是持久值,并会应用于多次匹配,如下例所示:

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

// Set screen name.
t.setScreenName(screenName);

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

// This event will also be sent with the most recently set screen name.
// Build and send an Event.
t.send(new HitBuilders.EventBuilder()
    .setCategory(getString(categoryId))
    .setAction(getString(actionId))
    .setLabel(getString(labelId))
    .build());

// Clear the screen name field when we're done.
t.setScreenName(null);

只有在想要使值成为持久值并应用于多次匹配时,您才应当直接在跟踪器中设置值。在跟踪器中设置屏幕名称是一种可取的做法,因为同样的值可以应用于一系列的屏幕浏览和事件匹配。不过,不建议在跟踪器中设置匹配类型等字段,因为此类字段很可能随每次匹配而改变。

使用多个跟踪器

在您的移动应用中,您可以使用多个跟踪器,向不同的媒体资源发送数据。


public class MyApp extends Application {

  public void initTrackers() {
    GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);

    globalTracker = analytics.newTracker(R.xml.global_tracker);
    ecommerceTracker = analytics.newTracker(R.xml.ecommerce_tracker);
  }

  public static Tracker globalTracker;
  public static Tracker ecommerceTracker;

  ...
}

虽然您的移动应用可拥有多个跟踪器,但您只能通过对一个跟踪器调用 enableExceptionReporting() 方法,来使用该跟踪器报告未捕获的异常。

抽样

您可以启用客户端抽样,以限制向 Google Analytics(分析)发送的匹配数量。如果您的应用有大量用户,或因其他原因而向 Google Analytics(分析)发送大量数据,则启用抽样有助于确保报告不发生中断。

例如,要将客户端抽样率设为 50%,请在您的配置文件中使用以下参数:

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

要以程序化方式为某个跟踪器启用客户端抽样,请使用以下代码:

mTracker.setSampleRate(50.0d);

应用级选择停用

您可以启用“应用级选择停用”标志,以便在整个应用内停用 Google Analytics(分析)。请注意,此标志必须在应用每次启动时设置,默认值是 false

要获取应用级选择停用设置,请使用以下代码:

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

要设置应用级选择停用,请使用以下代码:

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

在典型的实现实例中,应用可以监听 SharedPreferences 的变更,并相应地更新 Google Analytics(分析)选择停用设置:

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.
    }
  }
});

删除客户端用户数据

如果您需要为最终用户重置或删除 Google Analytics(分析)客户端数据,则可以删除客户端 ID 文件。

删除 gaClientId 文件会强制生成新的客户端 ID,且所有后续的匹配将使用新的客户端 ID。以前的数据无法与新的客户端 ID 相关联。

要删除 gaClientId 文件,请使用 Context.deleteFile 方法:

context.deleteFile("gaClientId");

对 IP 地址进行匿名处理

启用 IP 地址匿名处理功能可以告知 Google Analytics(分析)对 SDK 发送的 IP 信息进行匿名处理,即在存储前删除 IP 地址的最后一个八位位组。

要启用匿名处理 IP 功能,请在您的配置文件中使用以下参数:

<string name="ga_anonymizeIp">true</string>

要以程序化方式为某个跟踪器启用匿名处理 IP 功能,请使用 setAnonymizeIp 方法:

mTracker.setAnonymizeIp(true)

setAnonymizeIp 方法可以随时调用。

测试和调试

Android 版 Google Analytics(分析)SDK v4 提供了简化测试和调试的工具。

Dry Run

SDK 提供了 dryRun 标志,如果设置了此标志,则不会向 Google Analytics(分析)发送任何数据。在您对实现方案进行测试或调试时,如果不想测试数据出现在您的 Google Analytics(分析)报告中,就应当设置 dryRun 标志。

要设置 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

Google Analytics(分析)将使用 Android Log 系统通过 GAv4 代码将日志记录到 logcat。默认情况下只启用 ERROR、WARN 和 INFO 级别。要启用 DEBUG 级别,请在您的设备或模拟器上运行以下 adb 命令:

adb shell setprop log.tag.GAv4 DEBUG

要只查看 logcat 中的 Google Analytics(分析)消息,请使用以下命令:

adb logcat -v time -s GAv4

有关详情,请参阅 GoogleAnalytics Logger 参考