2017-08-08 18:34:11 ym4189 阅读数 796

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

2017-05-10 13:44:46 jtbshan 阅读数 1366

piwik埋点笔记

PHP WAMP 环境搭建资料

http://www.cnblogs.com/luminji/p/5140235.html

PHP LAMP 环境搭建资料

http://www.cnblogs.com/suger/p/3832093.html

GeoIP安装

参考官方资料及以下内容
https://sjolzy.cn/GeoIP-PHP-version-use.html
需要 epel源
yum install php-pear 里面包含了 pecl

Piwik抓取数据的方式

1匿名登录后,如果再登录,则访问记录合并为一次访问。
2如果用户id改变,则算新的用户访问记录
3piwik的访问记录记录上一个页面的访问时长
4如果为外站记录,则不会记录上个页面链接

Piwik 停用浏览器归档处理机制后用服务器定时归档代替

埋点数据定时归档

如访问量过大,则会导致piwik报表超时。需要关闭浏览器归档模式,改为服务器定时归档
参考:http://blog.csdn.net/terry_water/article/details/38927737
http://blog.csdn.net/china_bobo/article/details/42915969
https://piwik.org/docs/setup-auto-archiving/

crontab -e

0 * * * * /usr/bin/php /var/www/html/piwik/console core:archive –url=http://...:8088/piwik/ > /var/www/html/piwik/piwiklog/piwik-archive.log

执行以下命令可手动归档数据
su root -c “/usr/bin/php /var/www/html/piwik/console core:archive –url=http://...:8088/piwik/”

2017-11-13 10:58:36 quanqxj 阅读数 1020

Piwik是一个PHP和MySQL的开放源代码的Web统计软件. 它给你一些关于你的网站的实用统计报告,比如网页浏览人数, 访问最多的页面, 搜索引擎关键词等等。

单页应用是指在浏览器中运行的应用,它们在使用期间不会重新加载页面,单页应用可以做到一举两得:桌面应用的即时性和网站的可移植性和可访问性。

下面我们就使用piwik来统计单页面:

首先配置所需环境及工具

1.在archlinux中安装piwik:

yaourt -S piwik

2.安装apache和数据库mariadb以及php:

yaourt -S apache
yaourt -S mariadb
yaourt -S php php-apache

通过yaourt -Ss 名称 查看安装与否:
这里写图片描述
这里写图片描述
这里写图片描述

安装完成之后,
1.根据 Apache HTTP Server中的配置步骤进行配置相关信息,打开 配置信息详细步骤
2.创建Apache配置文件:/etc/httpd/conf/extra/piwik.conf
内容为:

Alias /phpmyadmin "/usr/share/webapps/piwik"
<Directory "/usr/share/webapps/piwik">
    DirectoryIndex index.php
    AllowOverride All
    Options FollowSymlinks
    Require all granted
</Directory>

然后在/etc/httpd/conf/httpd.conf中加入以下代码:

Include conf/extra/piwik.conf

修改完之后,启动httpd服务和数据库

sudo systemctl restart httpd
sudo systemctl restart mariadb.service

网址栏输入网址:本地IP/piwik / 就可以使用啦

然后可以通过如下路径中获取你的piwik跟踪代码:
Settings -> Websites -> View Tracking Code
为了跟踪你的网站数据,需要将如下的Piwik跟踪代码添加至每个网页上,以下是以单页面为例:

<script type="text/javascript">
    (function(history){
    var pushState = history.pushState;
    history.pushState = function(state) {
        if (typeof history.onpushstate == "function") {
            history.onpushstate({state: state});
        }
        // ... whatever else you want to do
        // maybe call onhashchange e.handler
        return pushState.apply(history, arguments);
    };
})(window.history);
      var _paq = _paq || []
      /* tracker methods like "setCustomDimension" should be called before "trackPageView" */
      _paq.push(['trackPageView']);
      _paq.push(['enableLinkTracking']);
      // _paq.push(['trackEvent', 'el-menu-item', 'Click'])

      (function() {
        //安装Piwik软件的网站服务器具备其URL地址,如下两行指定了其URL地址:
        var u="//192.168.12.117/piwik/";
        _paq.push(['setTrackerUrl', u+'piwik.php']);
        //在你的Piwik账户中创建的每一个网站都有一个唯一的siteID,如下代码指定了其siteID =6  
        _paq.push(['setSiteId', '6']);
          var g = document.createElement('script')
          var s = document.getElementsByTagName('script')[0]
          g.type = 'text/javascript'
          g.async = true
          g.defer = true
          g.src = u + 'piwik.js'
          s.parentNode.insertBefore(g, s)

  window.onpopstate = history.onpushstate = function(event) {
        console.log("popholdurl-------")
        //追踪一个新页面
        _paq.push(['setCustomUrl', '/' + window.location.hash.substr(1)])
        _paq.push(['setDocumentTitle', document.domain + "/" + document.title])
        //以下一行代码将一次浏览传输到Piwik:
        _paq.push(['trackPageView'])
  }

      })()
    </script>

备注:
代码中用到window.history 即对象包含浏览器的历史。

HTML5 新增的历史记录 API 可以实现无刷新更改地址栏链接,配合 AJAX 可以做到无刷新跳转。

简单来说:假设当前页面为renfei.org/,那么执行下面的 JavaScript 语句:

window.history.pushState(null, null, "/profile/");

之后,地址栏的地址就会变成renfei.org/profile/,但同时浏览器不会刷新页面,甚至不会检测目标页面是否存在。

2015-02-24 00:08:06 zzq1992126 阅读数 1778

要在piwik中显示员工编号,在页面中设置变量,取session中的员工编号,在要统计的页面中添加类似的代码,取session中的信息,代码如下:

(网站是否存储相关信息请咨询网站管理员,piwik只能取出管理员已经处理好的信息)

……
<?
php global $user; 
?>
<input type="hidden" id="SEmployeeNO" name="SEmployeeNO" value="<?php echo $user->name;?>">
……

在作者的站点中,员工ID作为全局变量存放在$user中

添加好页面变量后,在piwik统计脚本中添加对应的变量,使piwik可以读取到页面中的变量,对站点的统计代码修改如下:

<!-- Piwik -->
<script type="text/javascript">
	<span style="color:#ff0000;">var employee_no_val = jQuery("input[id='SEmployeeNO']").val();;	</span>
	var _paq = _paq || [];
	// you can set up to 5 custom variables for each visitor
	<span style="color:#ff0000;">_paq.push(["setCustomVariable", 1, "ID", employee_no_val, "visit"]);</span>
	_paq.push(['setDocumentTitle', document.domain + "/" + document.title]);
……
</script>
……
<!-- End Piwik Code -->

红色部分为添加的代码,Piwik最多支持添加五个自定义变量,超过五个变量可以将变量编为一组显示

添加后显示效果:

Piwik实践

阅读数 2696

piwik 网站统计工具

博文 来自: china_bobo

docker piwik

阅读数 231

没有更多推荐了,返回首页