转载请注明出处:http://blog.youkuaiyun.com/ym4189/article/details/76927064
一.概述
piwik应该是我接触的第一个统计埋点sdk了.piwik功能和其他主流统计sdk差不多,这里就不多说了。
感觉android使用piwik的也不多,这里就只做下简单的使用了。好了,看代码吧!
二.实现
1.导入sdk代码
piwik的jar没找到,我是直接把核心代码拷到项目中了
2.自定义Application继承PiwikApplication
首先继承PiwikApplication实现相关方法
public class DemoApp extends PiwikApplication {
@Override
public String getTrackerUrl() {
//服务器地址
return "http://demo.piwik.org/";
}
@Override
public Integer getSiteId() {
return 9;
}
@Override
public void onCreate() {
super.onCreate();
initPiwik();
}
这里实现了getTrackerUrl()配置服务器地址,就是数据上传地址。
getSiteId()返回配置Piwik检测项ID,可用作区分生产和测试。
private void initPiwik() {
// Print debug output when working on an app.
1). Timber.plant(new Timber.DebugTree());
// When working on an app we don't want to skew tracking results.
2). getPiwik().setDryRun(false);
// If you want to set a specific userID other than the random UUID token, do it NOW to ensure all future actions use that token.
// Changing it later will track new events as belonging to a different user.
// String userEmail = ....preferences....getString
3). getTracker().setUserId("");
// Track this app install, this will only trigger once per app version.
// i.e. "http://com.piwik.demo:1/185DECB5CFE28FDB2F45887022D668B4"
4). TrackHelper.track().download().identifier(DownloadTracker.Extra.APK_CHECKSUM).with(getTracker());
// Alternative:
// i.e. "http://com.piwik.demo:1/com.android.vending"
// getTracker().download();
}
代码中标号的代码原文有英文注释,这里做下解释:
1)配置调试信息,在控制台输出日志
2)防止测试数据混淆正式数据
3)为用户设置唯一ID,方便追踪单个用户数据
4)统计APP下载量
3.在activity中调用
/*
* Android SDK for Piwik
*
* @link https://github.com/piwik/piwik-android-sdk
* @license https://github.com/piwik/piwik-sdk-android/blob/master/LICENSE BSD-3 Clause
*/
package com.example.piwikdemo;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import butterknife.OnClick;
import java.util.Arrays;
import java.util.List;
import org.piwik.sdk.PiwikApplication;
import org.piwik.sdk.TrackHelper;
import org.piwik.sdk.Tracker;
import org.piwik.sdk.ecommerce.EcommerceItems;
public class MainActivity extends ActionBarActivity {
int cartItems = 0;
private EcommerceItems items;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_demo);
// ButterKnife.bind(this);
items = new EcommerceItems();
TrackHelper.track().screen("P_main").title("主界面").with(getTracker());
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
}
@Override
protected void onStart() {
super.onStart();
}
private Tracker getTracker() {
return ((PiwikApplication) getApplication()).getTracker();
}
@OnClick(R.id.trackMainScreenViewButton)
void onTrackMainScreenClicked(View view) {
/**
* .screen(String path) 跟踪一个screenview .title(String title)
* 标题行动被跟踪,可以使用斜杠/设置一个或多个类别的行动。
*/
TrackHelper.track().screen(this).title("Main screen").with(getTracker());
}
public void onButtonClick(View view) {
switch (view.getId()) {
case R.id.btntest:
// 跟踪事件
TrackHelper.track().event("事件分类", "事件动作").name("事件名字").value(10f).with(getTracker());
Intent intent = new Intent(this, TestActivity.class);
startActivity(intent);
break;
case R.id.btntest1:
// 跟踪内容板块
TrackHelper.track().impression("play").piece("music").target("gameover").with(getTracker());
Intent intent1 = new Intent(this, TestActivity.class);
startActivity(intent1);
break;
case R.id.trackCustomVarsButton:
// 跟踪activity
TrackHelper.track().screen(this).title("登录").variable(1, "输入手机号耗时", "50s")
// .variable(2, "second", "long value")
.with(getTracker());
break;
case R.id.raiseExceptionButton:
// 跟踪异常
TrackHelper.track().exception(new Exception("OnPurposeException")).description("Crash button").fatal(false)
.with(getTracker());
break;
case R.id.trackGoalButton:
float revenue;
try {
revenue = Integer.valueOf(((EditText) findViewById(R.id.goalTextEditView)).getText().toString());
} catch (Exception e) {
TrackHelper.track().exception(e).description("wrong revenue").with(getTracker());
revenue = 0;
}
/*
* 如果你想手动触发转换或跟踪一些用户交互trackGoal简单调用方法 .goal(int idGoal)
* 跟踪请求将触发转换的目标网站用这个ID被跟踪 .revenue(Float revenue)
* 生成一个货币价值由这一目标收入的转换。
*/
TrackHelper.track().goal(66).revenue(revenue).with(getTracker());
break;
default:
break;
}
}
@OnClick(R.id.addEcommerceItemButton)
void onAddEcommerceItemClicked(View view) {
/**
* Piwik提供电子商务分析,让你衡量物品添加到购物车,并学习有关废弃的车和采购订单的详细指标
*/
List<String> skus = Arrays.asList("00001", "00002", "00003", "00004");
List<String> names = Arrays.asList("Silly Putty", "Fishing Rod", "Rubber Boots", "Cool Ranch Doritos");
List<String> categories = Arrays.asList("Toys & Games", "Hunting & Fishing", "Footwear", "Grocery");
List<Integer> prices = Arrays.asList(449, 3495, 2450, 250);
int index = cartItems % 4;
int quantity = (cartItems / 4) + 1;
items.addItem(new EcommerceItems.Item(skus.get(index)).name(names.get(index)).category(categories.get(index))
.price(prices.get(index)).quantity(quantity));
cartItems++;
}
@OnClick(R.id.trackEcommerceCartUpdateButton)
void onTrackEcommerceCartUpdateClicked(View view) {
/*
* Tracks a shopping cart. 跟踪一个购物车。 .cartUpdate(int grandTotal) 物品总数
* .items(EcommerceItems items) 购物车中的物品
*/
TrackHelper.track().cartUpdate(8600).items(items).with(getTracker());
}
@OnClick(R.id.completeEcommerceOrderButton)
void onCompleteEcommerceOrderClicked(View view) {
/*
* .order(String orderId, int grandTotal) 订单ID 物品总数 subTotal(Integer
* subTotal) 小计 tax(Integer subTotal) 税 shipping(Integer subTotal) 配送费
* discount(Integer subTotal) 订单折扣
*/
TrackHelper.track().order(String.valueOf(10000 * Math.random()), 10000).subTotal(1000).tax(2000).shipping(3000)
.discount(500).items(items).with(getTracker());
}
}
piwik的基本使用已经在代码中了。我自己也只使用了几个基本的功能,其他复杂功能暂时没有用到,具体用法就以后再加了。