2013年10月28日 星期一

Android使用Google Analytics v2介绍2

http://www.karanter.com/chim/2012/394

1.说明
之前写过一篇关于1.x与2.x版本之前的差异对比,如果之前没有用过1.x版本可跳过。链接:Google Analytics SDK for Android v2使用介绍1
在使用之前需要一个ID,用来接受你的应用数据。地址:https://www.google.com/analytics/web/

2.使用方法
2.1 首先需要如下权限,用来上传数据:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
2.2 在Activity的onstart和onStop中分别添加如下代码:
 @Override
public void onStart() {
super.onStart();
... // The rest of your onStart() code.
EasyTracker.getInstance().activityStart(this); // Add this method.
}
@Override
public void onStop() {
super.onStop();
… // The rest of your onStop() code.
EasyTracker.getInstance().activityStop(this); // Add this method.
}

2.3 在res/values目录下创建analytics.xml文件并加入类似下面的代码,EasyTracker提供了多个配置参数,可以按自己的需求来添加,所有参数地址为:analytics.xml parameters reference
<?xml version="1.0" encoding="utf-8" ?>

<resources xmlns:tools="https://schemas.android.com/tools"
tools:ignore="TypographyDashes">
  <!--Replace placeholder ID with your tracking ID-->
  <string name="ga_trackingId">UA-XXXX-Y</string>

  <!--Enable Activity tracking-->
  <bool name="ga_autoActivityTracking">true</bool>

  <!--Enable automatic exception tracking-->
  <bool name="ga_reportUncaughtExceptions">true</bool>
</resources>
3 追踪方法详解
3.1Dispatching 统计数据的发送
//1.隔一段时间自动发送
//1.1EasyTracker 添加<bool name="ga_autoActivityTracking">true</bool> 不设置默认为30
//1.2代码中设置 GAServiceManager.getInstance().setDispatchPeriod(60);
//2.手动发送: GAServiceManager.getInstance().dispatch();
3.2 获取Tracker实例
3.2.1.使用GoogleAnalytics获得Tracker的实例
GoogleAnalytics myInstance = GoogleAnalytics.getInstance(context);
//下面方法有两种情况
//1。如果实例中没有传入TrakerId的Tracker,下面方法会创建一个
//2。如果已经有对应TrakerId的Tracker,下面会取出改实例
Tracker tracker =
myInstance.getTracker("UA-36603750-2");//参数为申请到的TrakerId
3.2.2.使用EasyTracker获得Tracker的实例
EasyTracker.getInstance().setContext(context); // 在使用EasyTracker时候要小心,如果之前没有设置context下面代码会出异常
EasyTracker.getTracker(); // 确保analytics已经设置了ID
3.2.3.获取Default Tracker
GoogleAnalytics myInstance = GoogleAnalytics.getInstance(context);
Tracker tracker = myInstance.getDefaultTracker();
//设置Default Tracker
Tracker newDefaultTracker = myInstance.getTracker("trackingId");
myInstance.setDefaultTracker(newDefaultTracker);
End Default
3.2.4.说明:如果非EasyTracker实例,不使用EasyTracker时
//1.如果要设置debug模式
myInstance.setDebug(true);
//2.如果想在程序里面某一段时间内停用或开启所有的事件最终可以使用下面代码来设置
myInstance.setAppOptOut(true);//or false
//下面代码是来处理,设置之后的回调
myInstance.requestAppOptOut(new AppOptOutCallback() {
@Override
public void reportAppOptOut(boolean optOut) {
if(optOut){

}
}
});
//3.如果要设置AppVersion,设置其他的属性,类似下面
tracker.setAppVersion("your app version string");
//End 说明
}
3.3 事件追踪
//category 事件类别, action 时间动作, label 事件标签, value 事件价值
mTracker.trackEvent(category, action, label, value); // 通过任意的tracker来追踪
3.4 界面追踪
/**
* Screen 1.使用EasyTracker 1.1可以再analytics.xml设置<bool name="ga_autoActivityTracking">true</bool>来自动追踪
* 1.2或者使用EasyTracker.getInstance().activityStart/activityStop来追踪。
* 保证数据的完整性使用1.2更好 2.手动追踪 在onStart中使用如下方法,一般用来追踪Fragment与其他非Activity界面
*/

mTracker..trackView(screenName);
3.5 社交
/**
* 追踪程序中社交相关操作
* @param network
* 社交网络的名称例如Google+
* @param action
* 操作,例如分享,转发
* @param target
* 可选参数,目标网址
*/

mTracker.trackSocial(network, action, target);
3.6 耗时追踪
/**
* 最终耗时,比如加载图片等资源耗时
*
* @param category
* 事件的类别
* @param name
* 事件的名称,可选参数
* @param label
* 事件的标签,可选参数
* @param time
* 事件耗时
*/

mTracker..trackTiming(category, time, name, label);
3.7 来源追踪
// Campain Tracking
1.Google Play Campain : set receiver in mainfest 用来追踪程序从Google Play安装的信息

        <receiver
           android:name="com.google.analytics.tracking.android.AnalyticsReceiver"
           android:exported="true" >
            <intent-filter>
                <action android:name="com.android.vending.INSTALL_REFERRER" />
            </intent-filter>
        </receiver>
2.Genaral Campaing Tracking 追踪其他应用或链接打开应用的数据,来源必须把campaign数据放在intent里面
/**
*
* @param context
* @param campaign
 字符串类似utm_campaign=general_campaign_test& utm_source=general_campaign_intsig&utm_medium=cpc&utm_term=general_campaign_intent_test&utm_content=ad_variation1
*/

mTracker..setCampaign(campaign);

<strong>3 </strong>Referrer Tracking 追踪其他应用或链接打开应用的数据,来源必须把campaign数据放在intent里面
/**
*
* @param context
* @param referrer
* 功能和上面类似,不过参数没有上面严格,任意字符串都可以,不过最好指定,或者只用上面,不然可能会拿到很多无用的数据
*/

mTracker.setReferrer(referrer);
3.8 Crashes and Exceptions 用来追踪程序的异常和崩溃数据,ga2.x增加功能
//1.追踪已经捕获的异常,在catch的里面用myTracker.trackException(e.getMessage, false); 第一个参数是需要提交的异常信息,第二个参数是否是致命错误
//2.追踪程序中未捕获的异常:
// 2.1 如果使用的是EastTracker可以在analytics.xml加上<bool name="ga_reportUncaughtExceptions">true</bool>;该值不设置默认为false
// 2.2 使用ExceptionReporter,使用方法如下:
UncaughtExceptionHandler myHandler = new ExceptionReporter(tracker, //Tracker的实例
GoogleAnalytics.getInstance(context), //GoogleAnalytics实例
Thread.getDefaultUncaughtExceptionHandler()); //uncaught exception handler
Thread.setDefaultUncaughtExceptionHandler(myHandler);
// 结合2.2中如果要获得更多有用的异常等信息,可以通过自定义一个解析类继承ExcaptionParser,并把其实例设置到当前使用的Tracker中去如下:
ExceptionParser parser = new myParser(context);
myTracker.setExceptionParser(parser);
3.9 Ecommerce Track 用来追踪程序里面的交易数据
// 步骤:
// 1.构建交易事务对象
// 2.构建交易条目对象,并添加到交易事务对象中
// 3.调用trackTransaction来提交追踪数据
/**
* 确保在交易完成时候提交这样的数据,不然会造成统计数据不准确,比如有一些未完成的订单混在已支付的订单中
*/

public void onPurchaseCompleted() {
//1 创建交易事务
Transaction myTrans = new Transaction.Builder("0_123456", // (String)
// 交易事务ID,唯一
(long) (2.16 * 1000000)) // (long) 订单总额
.setAffiliation("In-App Store") // (String) 订单来源
.setTotalTaxInMicros((long) (0.17 * 1000000)) // (long) 订单税率
.setShippingCostInMicros(0) // (long) 发运货用去金额
.build();

//2 添加交易条目
myTrans.addItem(new Item.Builder("L_789", // (String) 商品的 SKU
"Level Pack: Space", // (String) 商品名称
(long) (1.99 * 1000000), // (long) 商品价格
(long) 1) // (long)商品数量
.setProductCategory("Game expansions") // (String)商品类别
.build());

//3 提交数据
Tracker myTracker = getTracker();// 获取tracker引用.
myTracker.trackTransaction(myTrans); // 提交交易数据
}
// end Ecommerce Track
3.10 Session用户会话追踪,比如用户切换界面,登入登出等
//1使用EasyTracker自动会话追踪:<integer name="ga_sessionTimeout">30</integer>
//2大多数的时候需要手动追踪,比如用户等登入
myTracker.setStartSession(true);
myTracker.trackEcent("app_flow", "sign_in", "", null);

3.11 另外还有
//Custom Dimensions & Metrics 为下一个事件自定义参数,比如点击事件,screen事件等,自定义参数