有货iOS数据非侵入式自动采集探索实践

随着有货APP的不断迭代开发,数据和业务部门对于客户端用户行为数据的需求越来越多;为了更好的监控APP使用的状况,客户端团队对于APP自身的运行的数据需求也愈发迫切。迫切地需要一套客户端数据采集的工具,自动、全量采集用户行为数据,满足各个部门对于数据的需求。

\\

有货APP团队为此开发一套数据采集的SDK,主要的功能如下:

\\
  1. 页面访问流。用户在使用APP期间浏览了哪些页面。\\t
  2. 浏览数据曝光。用户在某个页面上浏览了哪些商品。\\t
  3. 业务数据自动采集。用户在使用APP期间点击了哪些位置,触发了哪些操作。\\t
  4. 性能数据自动采集。用户使用APP期间,页面加载时长是多少,图片加载时长多少,网络请求时长多少等。\

此外,所有的数据采集要自动化,无侵入,即不需要人工埋点,集成SDK即可使用,不改动或尽量少改动原有代码。

\\

基于以上需求,AOP是技术方案的最佳选择,而iOS上实现AOP则需要依靠Objective-C中runtime的黑魔法--Method Swizzle实现。漫漫的踩坑填坑的旅程由此开端,接下来我们一一品尝实现思路和方法吧。

\\

页面访问流

\\

用户访问页面统计需要解决的问题有两个:

\\
  1. 统计事件切入点,即何时统计。\\t
  2. 统计数据字段,即统计哪些数据。\

整体流程如下图:

\\

有货iOS数据非侵入式自动采集探索实践_第1张图片

\\

统计事件切入点

\\

用户访问页面统计的一般思路是在View Controller生命周期方法:

\\
  • viewDidAppear上报页面进入事件。\\t
  • viewDidDisappear上报页面退出事件,\

即可得出用户访问页面路径,两个事件时间戳之差即为用户在页面停留的时间。

\\

通常我们APP中的View Controller都会继承自某个基类,我们在基类的对应方法中进行统计即可,然而对于没有从基类继承的View Controller就无能为力了。

\\

借助于AOP,我们可以更优雅的完成这项工作:在UIViewController的load方法里swizzle viewDidAppear和viewDidDisappear方法,原有代码无需改动。

\\

统计数据字段

\\

根据数据需求,设置了如下的统计字段:

\\
  • PAGE_ID,当前页面的标识。\\t
  • SOURCE_ID,当前页面的前一个页面的标识。\\t
  • TYPE_ID,当前页面一些关键信息,如商品id,品牌id等。\\t
  • TIMESTAMP,当前事件生成的时间戳。\

页面进入和退出的事件,均上报上述的数据结构。

\\

其中还有几个问题是需要考虑的:

\\

1.PAGE_ID和SOURCE_ID如何定义

\\

因为需要统一iOS和Android的PAGE_ID,

你可能感兴趣的:(有货iOS数据非侵入式自动采集探索实践)