日志

Google Analytics Advanced Configuration - Google Analytics 高级配置

 来源    2013-09-09    0  

      该文档提供了Android SDK v3的部分元素的高级配置说明。

Overview - 概述

      Android Google Analytics SDK提供了Tracker类,应用可以用它给Google Analytics设置和发送数据,GoogleAnalytics的单例为你实现的全局配置值提供了接口。

Initialization - 初始化

      在开始检测数据之前,你必须通过GoogleAnalytics单例实现至少一个跟踪,你需要提供的参数有Context和Google Analytics的属性ID。

      // 使用Google Analytics的属性ID来初始化一个跟踪

      GoogleAnalytics.getInstance(this).getTracker("UA-XXXX-Y")

      现在,这个tracker可以给Google Analytics设置和发送数据了。

Setting and Sending Data - 设置和发送数据

      通过tracker的set方法把发送给Google Analytics的数据设置为键-值对的形式,然后通过send方法把数据发送给Google Analytics。

/*

 * 在tracker上设置map的参数值,并通过调用send方法把屏幕上的视图发送给Google Analytics

 */

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类简化了构建页面元素点击的进程,在大多数用户安全中,这种方式是推荐的。你可以使用它来发送同样的屏幕视图,但是使用的代码更少:

        

// 使用MapBuilder.createAppView()方法来发送同样的屏幕视图的点击事件

tracker.(MapBuilder

  .createAppView()

  .set(Fields.SCREEN_NAME, "Home Screen")

  .build()

);

Applying Values to Multiple Hits - 给多个屏幕的页面元素应用值

      直接设置在tracker上的值将会保持住,并将其应用给多个点击事件,例如:

// 在tracker上设置的屏幕名称,将在发送所有的点击事件时都被应用

tracker.set(Fields.SCREEN_NAME, "Home Screen");

 

// 为"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()

);

 

// 清理我们曾经设置过的屏幕名称字段

tracker.set(Fields.SCREEN_NAME, null);

      仅仅当你想在多个页面元素上保持某个值时,你才需要把它直接设置在tracker上。在tracker上设置屏幕名称是有意义的,因为同样的值可以被应用给随后发生的子视图和点击事件上。但是,不建议在tracker上设置类似于点击类型的字段,因为它极有可能在每次点击时改变。

Using Multiple Tracker - 使用多个Tracker

      在同一个单个的实例里,可以使用多个tracker,这样的做法在把数据发送给多个属性时很有用。

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

 


// tracker可以被命名。默认地,名称为要被设置的属性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());

 

//给 UA-XXXX-1发送屏幕视图

t1.send(MapBuilder

   .createAppView()

   .build()

);

 

// 给UA-XXXX-2发送屏幕视图

t2.send(MapBuilder

   .createAppView()

   .build()

);

      像动态屏幕检测和未捕获的异常检测一样,自动检测元素将不仅仅使用一个tracker给Google Analytics发送数据。如果你使用了这些元素并想使用其它tracker发送数据时,你需要手动的做这些。

Using the Default Tracker - 使用默认的Tracker

      Google Analytics包含默认的tracker。被第一个初始化的tracker就会成为默认的tracker,但是它可以被重写。

// Tracker t1成为默认的tracker,因为它是首先被实例化的

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

Tracker t2 = GoogleAnalytics.getInstance(this).getTracker("UA-XXXX-2");

 

 

//返回tracker t1.

Tracker defaultTracker = GoogleAnalytics.getInstance(this).getDefaultTracker();

 

// 点击事件发送给UA-XXXX-1.

defaultTracker.send(MapBuilder

    .createAppView()

    .set(Fields.SCREEN_NAME, "Home Screen")

    .build()

);

 

// 重写默认的tracker.

GoogleAnalytics.getInstance(this).setDefaultTracker(t2);

 

// 现在该调用会返回tracker t2.

defaultTracker = GoogleAnalytics.getInstance(this).getDefaultTracker();

 

// 点击事件发送给UA-XXXX-2.

defaultTracker.send(MapBuilder

    .createAppView()

    .set(Fields.SCREEN_NAME, getClass().toString())

    .build()

);

Sampling - 抽样

      你可以启动客户端抽样来限制发送给Google Analytics点击事件的数量。如果你的应用有大量的用户或者给Google Analytics发送了大量的数据,启动抽样可以确保不间断的汇报。

      例如,通过EasyTracker和XML启动客户端50%的抽样率:

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

      以编辑的方式给tracker启用客户端的采样率:

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

      为了防止汇报矛盾,你应用的每个视图都应该以相同的抽样进行数据的收集。如果你应用的不同版本使用不同的抽样频率,在你单个应用的不同版本里,为给不同应用版本范围保存各自的数据,你需要配置视图(profile)。

App-level Opt Out - 暴露的应用级别选项

      你可以使用暴露出的应用级别的选项,使用它们可以在整个应用里禁用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 {

    // 其它的代码

    }

  }

});

Testing and Debugging - 测试和调试

      Android Google Analytics SDK提供了更简单进行测试和调试的工具。

Dry Run

      SDK提供了dryRun标识,如果设置了它,那么就会阻止任何发送给Google Analytics的数据。在你测试或是调试一个实现时,并不想让这些数据出现在你Google Analytics的汇报里,那你应该设置该标识。

      // When dry run is set, hits will not be dispatched, but will still be logged as

      // though they were dispatched.

      GoogeAnalytics.getInstance(this).setDryRun(true);

Logger

      Logger接口将会从SDK里处理有用的信息,一共有几个级别:error,warning,info,verbose。

      SDK会初始化一个标准的Logger实现,它默认仅仅只会读取打印到console控制台的warning和error类型的信息。这些信息在logcat里是可用的。

      // 把日志的级别设置为verbose

      GoogleAnalytics.getInstance(this).getLogger().setLogLevel(LogLevel.VERBOSE);

      可以使用自定义的Logger的实现:

      // 提供自定义的logger

      GoogleAnalytics.getInstance(this).setLogger(new CustomLogger ());

Complete Example - 完整的例子

      下面的代码展示了初始化Google Analytics实现的必须的代码,并发送了一个屏幕的视图:

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;

 

 

/*

 * 在Application的子类里初始化的Google Analytics的进阶实现。

 * 注意:该例假设只给一个Google Analytics属性ID发送属性。

 */

public class MyApp extends Application {

 

  private static GoogleAnalytics mGa;

  private static Tracker mTracker;

 

  /*

   * Google Analytics配置值.

   */

  // 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";

 

 

  /*

   * 处理基本Google Analytics初始化的方法。   

   * 因为所有的Google Analytics的工作都发生在主线程之外,因此该调用不会阻塞主线程

   */

  private void initializeGa() {

    mGa = GoogleAnalytics.getInstance(this);

    mTracker = mGa.getTracker(GA_PROPERTY_ID);

 

    // 设置调试周期

    GAServiceManager.getInstance().setLocalDispatchPeriod(GA_DISPATCH_PERIOD);

 

    // 设置dryRun标识

    mGa.setDryRun(GA_IS_DRY_RUN);

 

    // 设置Logger级别

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

  }

 

  /*

   * 返回Google Analytics tracker

   */

  public static Tracker getGaTracker() {

    return mTracker;

  }

 

  /*

   * 返回Google Analytics实例

   */

  public static GoogleAnalytics getGaInstance() {

    return mGa;

  }

}

      接着,当第一个屏幕显示给用户时,屏幕视图被检测。

package com.example.app

 

import android.app.Activity

 

/**

 * 当Activity给用户显示时,该activity给Google Analytics发送一个屏幕视图

 */

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

  }

}


 

SPRING IN ACTION 第4版笔记-第七章Advanced Spring MVC-001- DispatcherServlet的高级配置(ServletRegistration.Dynamic、WebApplicationInitializer)
日志一. 1.如想在DispatcherServlet在Servlet容器中注册后自定义一些操作,如开启文件上传功能,则可重写通过AbstractAnnotationConfigDispatcherSer ...
android – Google Analytics V4 – 无法识别字符串xml配置名称:ga_trackingId
问答我正在尝试将Google Analytics包含到我的Android项目中.上次我使用它是V2并且运行良好. 现在我对此有疑问 11-10 20:15:35.493 1957-1957/com.xxx ...
1
Google Analytics(分析) – 使用Google Analytics(分析)自定义变量跟踪个人用户
问答我一直在为我公司的支持中心工作,我们需要在登录时跟踪个人用户.如果可能,我们也希望跟踪所访问的页面以及网站上花费的时间. 我可以使用自定义变量跟踪有多少人登录到网站,但我无法跟踪个人用户.以下是我一直 ...
Google Analytics(分析) – Google Analytics(分析)与Flurry Analytics
问答在我的应用程序中: Flurry正在展示超过11,000名新用户. 我也在应用程式中也有Google Analytics(分析),而且显示了8,200个独特访客. 有没有人有这方面的经验,可能会导致我 ...
1
Google Analytics(分析) – 通过Google跟踪代码管理器加载Google Analytics(分析)analytics.js上的SSL
问答我们通过Google跟踪代码管理器加载Google Analytics(分析)(Universal),我找不到任何方法强制它通过SSL加载analytics.js脚本本身;我们通过字段设置forceS ...
Google Analytics(分析) – 使用Google Analytics(分析),使用embed api显示Web应用客户的数据子集
问答我正在开发一个应用程序,其中每个"业务"都有自己的页面(或相当多的页面): 例如. COM /业务/ ABC / 因此,对于系统中登录的业主,我想提供"查看页面分析&qu ...
android – 无法从Google官方网页获取Google Analytics配置文件
问答现在,我想将Analytics添加到我的Android应用程序,然后我阅读the official page. 它说我必须从页面获取配置文件.所以我点击了GET A CONFIGURATION FIL ...
Android:Google Analytics(分析)是Google Play服务的一部分
问答现在Google Analytics将成为Google Play Services 4.3的一部分,我们需要做哪些更改? 我们还需要将GoogleAnalytics jar包含在Android项目中吗 ...
Google Analytics(分析) – 在Google Analytics(分析)属性设置中,默认网址有什么区别
问答我在我的Google Analytics(分析)帐户上设置了新的资源,我必须填写的其中一个字段是默认URL: 我的问题是什么重要?它有什么影响? 我看到GA收集我发送的数据,无论我在那里定义了什么UR ...
2
java – Android – Google Analytics(分析)和Firebase Analytics的Google代码管理器
问答我正在与一个购物应用程序合作,并希望跟踪我的移动应用程序发生的事件.我的目标是使用Firebase Analytics和Google代码管理器跟踪事件,并将相同的事件推送到Google Analyti ...
google-analytics – 在使用跟踪代码管理器部署Google Analytics时运行Google Optimize会导致错误
问答更新: A / B测试工作正常. 重定向测试正在运行但未报告. 我关注了Google的文章How to use Optimize when you deploy Google Analytics wi ...
Google Analytics(分析) – 在Universal Analytics中启用人口统计和兴趣报告
问答我想通过Universal Analytics跟踪代码启用受众特征和兴趣报告. 我的网站生成的跟踪代码如下所示: <script> (function(i,s,o,g,r,a,m){i[' ...
2
适用于iOS的Google iOS DFP和Google Analytics不能协同工作
问答我正在开发一个iOS应用程序,我的客户请求实施DFP和Google Analytics. 实施广告横幅非常简单,但当我添加Google Analytics需要的库时,xcode会显示28个错误. 当我 ...
google-analytics – google tag manager和google analytics有什么区别?
问答我正在阅读有关网络分析,遇到了GTM和GA. 看来,GA是由google提供的一种服务,生成有关网站流量的报告和统计信息.根据我有限的理解,为了生成此报告,我们需要在我们的结束执行一些类型的标记. 它 ...
ios – 将Google Analytics v3和Google Maps 1.4.3添加到我的项目时复制符号
问答我目前正在开发一个使用地图的应用程序.几周前,我将Google Maps SDK v1.4.3添加到了我的项目中. 在入门指导后工作得很好. 今天我需要将Google Analytics添加到我的项目 ...
javascript – Google网站中的Google Analytics自定义变量
问答是否可以在google网站上注册自定义var?我已经尝试了一个星期但仍然无法得到它. 我知道有两种方法可以做到这一点. >异步:这是分析文档推荐的,但它不起作用,因为gSites不允许使用DOM ...
spring-security – 用于Google登录的Spring Security OAuth2 Java配置
问答我正在将工作XML配置迁移到Spring Security OAuth2的Java配置,并使用Google作为OAuth提供程序. 这是我的java配置的外观: @Configuration @Ena ...
使用Android Studio的Google Cloud Endpoints模板时的Proguard配置
问答我们需要存储和检索用户在线使用我们的应用生成的内容.为此,我们决定使用Android Studio集成的Google Cloud Endpoints模板快速创建API(官方用法示例 here). 它在 ...
google-cloud-datastore – Google App Engine本地数据存储路径配置
问答很抱歉问这个问题的第n个排列,但是我受到了阻碍. 我在OS X上运行GAE for python2.5,并且我在重新启动之间丢失了所有数据.根据我对相关SO帖子的理解,每次重启都会擦除本地数据存储文件 ...
google-api – Google翻译API v2 – (403)访问未配置
问答我在使用Google翻译时遇到谷歌控制台API的问题. 当我从本地计算机运行测试时,它运行良好,但是当我尝试在我的远程测试虚拟服务器上运行它时,它返回上面的403. 我在控制台API访问中使用Serv ...