# StReport埋点上报

# 使用场景

有数据上报需求的所有项目, 针对没有特殊需求的项目请在 <head> 标签中加入以下代码用于类似百度的自动埋点上报:

<script src="//zhcdn01.xoyo.com/xassets/lib/st-report-sdk/0.2.x/st-report-sdk.min.js"></script>
<script>
    // 如果 config 不进行设置或者为 undefined, 则当前网页将自动根据内置列表分类进行上报, 可直接使用 window.StReportSdk.autoTrack(); 即可.
    var config = {
      projectIdentifier: 'jx3',
      eventGroup: 'jx3_jiayuan_yuyue_pc_20200417',
      eventTags: ['pc','jiayuan']
    };
    window.StReportSdk.autoTrack(config);
</script>

# 依赖

<script src="//zhcdn01.xoyo.com/xassets/lib/st-report-sdk/x.x.x/st-report-sdk.js"></script>

其中x.x.x是版本号,请询问官网负责对接的同学当前应使用什么版本。

# 使用方法

一般情况下,让西山居运营平台官网组的同学提供一个写有各种埋点实现方法的js文件,直接在引用st-report-sdk.js之后,引入这个统计js文件即可;

<head>
    <script src="//zhcdn01.xoyo.com/xassets/lib/st-report-sdk/0.2.4/st-report-sdk.min.js"></script>
    <script src="./tracker.js" type="text/javascript"></script>
</head>

以下是生成的tracker.js文件的样例,可能会因为版本不同而不同。 特别要注意的是,和官网同学确认这个文件的语法是 es5 还是 es6 的。

//初始化stReport时需要的参数
var config = {
  projectIdentifier: 'jx3',
  eventGroup: 'jx3_jiayuan_yuyue_pc_20200417',
  name: '家园预约专题pc端',
  identify: 'jx3',
  eventTags: ['pc','jiayuan'],
  debug: true,
};

//引入stReport
var stReportSdk = new StReportSdk.getInstance(config);

//创建统计实现对象tracker
var tracker = createTracker(stReportSdk) 

function createTracker(stReportSdk) {

  Number.isInteger =
    Number.isInteger ||
    function(value) {
      return typeof value === 'number' && isFinite(value) && Math.floor(value) === value;
    };

  //检测参数类型,参数类型若不符合,则上报失败
   function checkTypeHOF(type) {
    switch (type) {
        case 'int':
        return Number.isInteger;
        case 'float':
        return value => typeof value === 'number' && !Number.isInteger(value);
        case 'boolean':
        return value => typeof value === 'boolean';
        case 'string':
        return value => typeof value === 'string';
        default:
        setTimeout(() => {
            throw new Error('st-report: invalid value type = ' + type);
        }, 0);
        return null;
    }
  }
  
  return {
    loadPage: function() {
      stReportSdk.report({
        eventName: 'load_page',
        eventDescription: '页面加载(默认上报,页面全部加载完才上报)',
        eventDataValue: {
          td_pl: StReportSdk.getDiffRouteTime()
        },
        types: {
          td_pl: checkTypeHOF('int')
        }
      });
    },
    pageLeave: function() {
      stReportSdk.report({
        eventName: 'page_leave',
        eventDescription: '离开页面(默认上报)',
        eventDataValue: {
          td_pl: StReportSdk.getDiffRouteTime()
        },
        types: {
          td_pl: checkTypeHOF('int')
        }
      });
    },
    loadPageStart: function() {
      stReportSdk.report({
        eventName: 'load_page_start',
        eventDescription: '页面加载(默认上报,进入页面就上报)'
      });
    }

  }
}

具体需要埋点的位置和业务点,也让官网组同学一并提供;一般会是一张图,如 https://static-xsjgw.xoyo.com/data/data/event/77/af/77afe3d6753c785cfadc07b5aff55155?_r=0.3783992622516392&_r=0.1111605430483964

最后,在业务中,调用刚刚创建的 tracker 对象中的各种上报方法实现数据上报即可

   tracker.loadPage();

    //点击上报
    $(".btn").on('click',function(){
        tracker.clickxxxx(arg1, arg2, ...argn)
        //业务代码
    })

# 数据核对

上报完成后,需要判断这个上报是否成功

方法如下: 打开控制台→选中network→选择image类型→过滤器中输入web?

失败的请求则表示上报失败。

最后,让官网同学在埋点后台的对应专题中确认所有上报点都成功后,则数据埋点完成啦~。