Android项目中使用piwik统计埋点,androidpiwik


转载请注明出处:http://blog.csdn.net/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的基本使用已经在代码中了。我自己也只使用了几个基本的功能,其他复杂功能暂时没有用到,具体用法就以后再加了。

相关内容

    暂无相关文章