几周前我自己实现了一个简单的客户端埋点功能。这里只是简单的记录,也是简单的分享~

埋点是什么东西?

埋点就是忠实的记录你按下的每一个按钮的数据,比如点击的时间点,点击的按钮信息,然后保存起来。在某个时间点,批量的回传给后端做日志分析。
这个是业内普遍都有的一个基础功能,举个例子。微信小程序后台上就可以看到你各个模块的点击率,还有次日留存那些数据。

有什么用的?

  • 协助设计者优化应用

用户的行为习惯可以在这些按钮上反应出来。
比如确定哪个模块的功能是高频功能,可以用来判断功能好不好,两个类似的功能应该保留哪一个。之类的。

  • 量化广告价值

比如统计PV/UV,确定活动效果。
比如云音乐启动屏加了一个广告,多少人会点进去,广告的效果如何,给广告方的数据多少。按点击量计费的时候,这个价值就可以衡量出来的。

  • 反黑产

比如某一个渠道进来的用户,点击某个功能的概率是100%。用户全部没有流失,而且每天准点点某几个功能。大概率是黑产在用号。这时候这些用户价值就可以简单的判断出来的。

  • 融资数据要求

常见的需求常见是融资方对次日留存有要求。一般的标准是次日留存要达到30%才可以。低于这个值,一般是养不活的。
融资方一般会签合同,比如什么时候达到多少用户量,次日留存多少,才算合格,不合格的话,就撤资了。。。

整体设计

其实重点在数据处理那一块。比如算PV/UV,比如把数据整理成图标,整理成excel表,比如描绘出用户曲线,比如有许许多多的用户指标,都需要服务端同学的开发。重点在数据处理和呈现上。这块我确实不太熟悉,先跳过吧。
客户端部分主要是,收集数据->本地缓存->有空批量上传

客户端设计

好吧,我不打算放代码,这里会有点干。。。

有几个步骤:

  1. 是否需要登陆,先登陆之后,确定用户信息,把用户信息/token保存下。
  2. 开一条异步线程,有日志需求,往线程中post数据。
  3. post的数据按日志缓存起来,可以用文件缓存,也可以存在数据库中(数据库也是文件缓存)。我这里的设计比较简单,只是存文件。但是文件加密了。
  4. 用AlarmManager 定时。在某个时间点在service中集中处理上传请求。
  5. 一个接口调用多次是可以的。(接口是https)。我这次也是这样做的。通过wireshark抓包可以看到,多次完整调用httpurlconnect,只有一次握手。握手在5分钟后才自行断开。

玩~