Google Analytics Advanced Configuration - Google Analytics 高级配置

      该文档提供了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 () {@Overridepublic 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 () {@Overridepublic void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key) {if (key.equals(TRACKING_PREF_KEY)) {GoogleAnalytics.getInstance(getApplicationContext()).setAppOptOut(sharedPreferences.getBoolean(key, false));}}});}@Overridepublic 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.appimport android.app.Activity/*** 当Activity给用户显示时,该activity给Google Analytics发送一个屏幕视图*/public class HomeScreen extends Activity {private static final String SCREEN_LABEL = "Home Screen";@Overridepublic 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);}@Overridepublic void onStart() {super.onStart();// Send a screen view when the Activity is displayed to the user.
MyApp.getGaTracker().send(MapBuilder.createAppView.build());}}


 

 

转载于:https://www.cnblogs.com/wchhuangya/p/3308927.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/408496.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode 刷500道题,笔试/面试稳吗?谈谈算法的学习

来源公众号&#xff1a;苦逼的码农作者&#xff1a;帅地想要学习算法、应付笔试或者应付面试手撕算法题&#xff0c;相信大部分人都会去刷 Leetcode&#xff0c;有读者问&#xff1f;如果我在 leetcode 坚持刷它个 500 道题&#xff0c;以后笔试/面试稳吗&#xff1f;这里我说下…

hdu4714 Tree2cycle 把树剪成链

题目是问把一棵树通过剪边、加边形成一个环的最小代价。 分成两步&#xff0c;先把树剪成一些链&#xff0c;再把链连接成一个环。 设一棵有n个节点的树&#xff0c;剪掉X条边后&#xff0c;形成L条链。 那么代价为XL。 n-1-XedgeNum(L条链) ① //原本有n-1条边&#xff0c;剪掉…

github标星58500+:常见数据结构与算法的python实现

昨天分享的文章介绍了如何学习数据结构算法&#xff1a;今天介绍一个 github 仓库&#xff0c;用 Python 实现了常见的数据结构与算法。另外&#xff0c;前几天的红包抽奖&#xff0c;今晚就开奖了&#xff0c;还没参与的&#xff0c;赶紧点进来&#xff1a;有人问我数据结构与…

【吐血整理】那些让你起飞的计算机基础知识:学什么,怎么学?

作者&#xff1a;帅地来源公众号&#xff1a;苦逼的码农我公众号里的文章&#xff0c;写的大部分都是与计算机基础知识相关的&#xff0c;这些基础知识&#xff0c;就像我们的内功&#xff0c;如果在未来想要走的更远&#xff0c;这些内功是必须要修炼的。框架千变万化&#xf…

简单ajax库

1 function TuziAjax(reqType,url,fnoK, fnFail)2 {3 var xmlHttp null;4 if (window.XMLHttpRequest) { 5 xmlHttp new XMLHttpRequest();6 }7 else { 8 xmlHttp new ActiveXObject("Microsoft.XMLHTTP");//兼容IE69 } 10 …

数据结构算法入门--一文了解什么是复杂度

图片来自 Pixabay&#xff0c;作者&#xff1a;TeroVesalainen2019 年第 74 篇文章&#xff0c;总第 98 篇文章本文大约 3000 字&#xff0c;阅读大约需要 10 分钟最近会开始更新一个数据结构算法的学习系列&#xff0c;同时不定期更新 leetcode 的刷题。这是第一篇文章&#x…

Java String和Date的转换 Date类型操作

String—>Date String dateString "2012-12-06 "; try {SimpleDateFormat sdf new SimpleDateFormat("yyyy-MM-dd ");Date date sdf.parse(dateString); } catch (ParseException e) {System.out.println(e.getMessage()); } /*** 字符串转换到时间格…

一文了解数组

2019 年第 75 篇文章&#xff0c;总第 99 篇文章”数据结构算法入门系列的第二篇&#xff0c;这次介绍下数组&#xff0c; 数组是一个最基础而且常见的数据结构&#xff0c;几乎每种编程语言都有。上一篇文章&#xff1a;数据结构算法入门--一文了解什么是复杂度今日推荐阅读…

Python3.8 了解的差不多了吧,Python3.9 新特性了解一下!

"Python学习开发"&#xff0c;一个值得加星标的公众号。正文共&#xff1a;4946 字 1 图预计阅读时间&#xff1a;13 分钟作者:陈祥安原文有删改:https://docs.python.org/3.9/whatsnew/3.9.html本文将解释 Python 3.9 中的新特性&#xff0c;而不是 3.8。有关完整的…

React工作(1)---export导出

import React, { Component } from react;class List extends Component {constructor(props) {super(props);}render() {return <div>1111</div>;} }export default List;

首发:适合初学者入门人工智能的路线及资料下载

本文为AI入门提供了一个简易的学习路线&#xff0c;并提供了代码和数据集下载。&#xff08;黄海广&#xff09;一、前言AI以及机器学习入门&#xff0c;初学者遇到的问题非常多&#xff0c;但最大的问题就是&#xff1a;资料太多&#xff01;&#xff01;&#xff01;看不完&a…

动态SQL中变量赋值

在动态SQL语句中进行变量的值绑定比较麻烦&#xff0c;这儿做个记录 declare COUNT int,sql nvarchar(max) set sql select COUNT count(id) from tbl_sys_dict where root_key WT_TYPE execute sp_executesql sql, NCOUNT int output, COUNT output print COUNT 转载于:htt…

数据结构算法入门--链表

2019 年第 76 篇文章&#xff0c;总第 100 篇文章 本文大约 3200 字&#xff0c;阅读大约需要 10 分钟 数据结构算法系列&#xff1a; 数据结构算法入门系列第三篇--链表&#xff0c;链表也是非常常见的数据结构&#xff0c;面试过程中也会经常考到相关的题目。 本文首先介绍链…

react学习(3)----不能在该位置用setstate

this.setState({ pageIndex: 1, pageSize: 10, });

后台命名查询sql查某几个字段传到前台

dwr调用查出数据库字段 传给前台显示 前台只能接受list 后台数据放进list传入前台 name-quary中 <!-- 定义sql 通过单位id 查单位名称 --> <sql-query name"getStationName"> <![CDATA[ select STATION_ID,STATION_NAME from MF_STATION wher…

带你少走弯路:强烈推荐的Keras快速入门资料和翻译(可下载)

上次写了TensorFlow和PyTorch的快速入门资料&#xff0c;受到很多好评&#xff0c;读者强烈建议我再出一个keras的快速入门路线&#xff0c;经过翻译和搜索网上资源&#xff0c;我推荐4份入门资料&#xff0c;希望对大家有所帮助。备注&#xff1a;另外两个入门资料很负责任地说…