埋点的三种方式
1、第三方SDK(又可称前端数据采集)
通过这种 SDK 只能够采集到一些基本的用户行为数据,比如设备的基本信息,用户执行的基本操作等。但是服务端、数据库中的数据并没有采集
客户端 SDK 还有一个问题就是经常觉得统计的不准,和自己的业务数据库数据对不上,出现丢数据的情况。这是前端数据采集的先天缺陷,因为网络异常,或者统计口径不一致,都会导致数据对不上
2、使用业务数据库做统计分析
一般的互联网的产品,后端都是有业务数据库,里面存储了订单、用户注册信息等数据
3、Web 日志进行统计分析
建议:推荐尽量从后端进行埋点,这样就不用多个客户端埋了。当然,如果有行为只在客户端发生,还是要在客户端进行的
可视化埋点:
一是事先在产品上埋一个 SDK,二是通过可视化的方式,生成配置信息,也就是事件名称之类的定义,三是将采集的数据按照配置重命名
例如点击事件——埋点
index.js:
;(function ($) { $("a").click(function () { var good_info = $(this).attr("lang") //获得用户点击的商品信息 var user_time = func_time() //获取用户当前系统时间s var brower_info = JSON.stringify($.support) //获取用户浏览器信息 var ui = window.sessionStorage.getItem("user") var user_info=ui==null ? "10000" : ui //获取用户的密钥信息 $.ajax({ url:"http://localhost:8080/useract", data:{useract:"BROWSER "+user_time+" "+user_info+" "+good_info+" "+brower_info}, type:"POST" }) }) function func_time() { var date = new Date() return date.getFullYear()+"-"+time_format(date.getMonth()+1)+"-"+time_format(date.getDate())+"T" +time_format(date.getHours()) } function time_format(time) { if ((time+"").length<=1){ return "0"+time; }else { return time; } } })(jQuery);
利用随机流读取生成文件:
@RestController public class UserLogCtrl { @RequestMapping("/useract") public void useract(String useract){ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); String fileName = "C:\\Users\\Administrator\\Desktop\\cc\\user_" +sdf.format(new Date())+".log"; File file = new File(fileName); try { if (!file.exists()) file.createNewFile(); RandomAccessFile raf = new RandomAccessFile(file,"rw"); raf.seek(file.length()); raf.writeBytes(useract+"\r\n"); raf.close(); } catch (IOException e) { e.printStackTrace(); } } }