金小俊 孙艳霞 赵化 陈勇
摘要:数据支撑业务的发展,驱动决策的落地。建立完整的数据采集、上报和分析平台非常必要。数据埋点作为一种最常用的用户行为统计方式,能够快速、准确地采集用户使用习惯以及App功能的反馈。埋点的本质为追踪用户操作或功能行为的发生,而用户的操作则会触发App功能的变化,这些变化最终会体现数据和状态的变化。由此,该文提出了一种基于数据和状态的移动应用可视化埋点方法,通过可视化界面设置埋点对应的数据和状态,继而在数据和状态发生变化时记录相应埋点。结果表明,该文提出的埋点方法灵活高效、可扩展性更强,具有较高实际应用价值。
关键词:数据埋点;数据采集;数据和状态;移动应用;可视化
中图分类号:TP311.56 文献标识码:A
文章编号:1009-3044(2022)10-0019-02
在发展日新月异的移动互联网时代,数据扮演着极其重要的角色。数据支撑业务的发展,驱动决策的落地。建立完整的数据采集、上报和分析平台非常必要,而其中数据采集的全面,精准和效率尤其重要[1]。埋点作为一种最简单最直接的用户行为统计方式,能够全面精确地采集用户的使用习惯以及各功能点的迭代反馈等,有了这些数据才能更好地驱动产品的决策设计和新业务场景的规划[2]。
传统埋点方式包括代码埋点、全埋点和可视化埋点。代码埋点需要在代码中手动置入相关埋点代码,缺点为造成埋点逻辑和业务代码强耦合,且需要发布版本才能使埋点生效[3]。全埋点不区分埋点逻辑,需要后期使用大数据技术在获取的信息中尋找相应埋点值,查询成本和维护成本较高。可视化埋点通过可视化界面配置埋点信息,其埋点维护友善,但仅能设置用户界面相关的埋点[4]。另外,由于iOS和Android系统界面元素不同,需要针对不同应用系统分别进行埋点配置,增加了使用成本[5]。为解决现有埋点技术存在的不足,本文提出了一种基于数据和状态的可视化埋点方法。
1 数据埋点方案
埋点的本质是追踪用户的操作或功能行为的发生。用户的操作会触发App功能的变化,这些变化最终会体现在数据和状态的变化。比如点击某个按钮,会导致页面发生变化,或者触发某个网络请求后返回新的数据值。而页面的变化其实也是数据的变化(导航栈或页面层级栈的内容发生了变化) 。简而言之,用户的所有操作导致App行为的变化都可以用某个值(或者某些值的组合) 的变化来表示,因此埋点操作可以转换为监控这些数据,当某个(些) 数据值发生变化时记录相应的埋点。基于数据和状态的埋点方案总体思想为:
(1) 总能将用户的操作或功能行为的发生用某个(些) 数据值的变化来表示;
(2) 埋点的发生由数据和状态的变化来驱动;
(3) 埋点的记录即是在简单的指定状态下数据值的匹配过程。
进一步将数据和状态与可视化埋点方案结合。一方面,对于埋点只需将数据和状态进行配置和管理,而无须识别页面内的各控件,也无须对控件做唯一标识。另一方面,多平台自然统一(埋点对应的数据名称是相同的,只是在各平台代码中绑定的变量名不同) 。埋点方案流程如图1所示。
2 数据与状态
2.1 数据
数据分为数据名称,数据变量和数据值。数据名称是指在埋点配置可视化界面中提供的供运营人员配置埋点的数据名,比如订单状态。数据变量是指各平台代码中对应的变量名,比如iOS中订单状态对应的变量名为self.orderType, Android中订单状态对应的变量名为this.orderType。数据值指程序实际运行中该变量对应的值,比如订单状态为已预订的时候订单状态的数据值为1,订单状态为行程中的时候订单状态对应的数据值为2。数据名称、数据变量和数据值在埋点配置界面进行绑定。如此,埋点配置流程即为,选择订单状态,当订单状态为已预订时记录埋点值order_reserved,当订单状态为行程中时记录埋点值order_ongoing。App端接收到埋点配置表后,对相应的数据变量进行匹配,当变量值为1时记录埋点值order_reserved,当变量值为2时记录埋点值order_ongoing。数据绑定和配置如图2所示。
2.2 状态
App端在对数据变量值进行匹配时需要一个触发时机,即什么时候去检查数据的变量值。传统的可视化埋点是在用户点击了埋点控件后在事件响应方法中记录埋点值,也就是触发的时机是控件事件发生时。由此,本文引入状态的概念,在状态发生变化的时候检查数据的变化。状态包含以下几类:
(1) 发生用户操作事件时(hook点击事件、手势事件等)
hook各类控件的各类事件响应方法,比如按钮的点击事件或者视图的手势事件等。这些事件的响应方法被触发即代表用户进行了某种类型的操作,当该状态发生时对变量值进行检测和埋点处理。
(2) UI发生变化时,比如导航栈中的控制器发生了增减
监控系统导航栈,当导航栈的内容发生变化时,对其内的数据进行匹配检查。具体示例:假设需要在用户进入订单详情页时记录埋点值,则App端在导航栈发生变化及页面发生跳转的时候检测当前页面是否订单详情页,若是,则记录埋点值。
(3) 当前页面或Window上的视图层发生了变化
监控当前页面或者Window图层的变化,比如用户删除订单时会弹出弹窗,让用户确认是否删除,并记录埋点值user_delete_order,同时需要判断用户是个人用户还是企业用户。相应埋点配置流程为:在[视图交互]-[弹窗]状态时,当[弹框页面]为[删除订单]时,且[用户类型]为[个人用户]时,记录埋点值individual_user_delete_order。
(4) 页面内指定的某个函数(方法) 执行前或执行后
在此情况下,状态为某个函数的执行。hook指定函数,当函数执行时即为状态发生,此时检查数据的变化进行匹配并记录埋点。比如,当用户请求行程预估价格时,记录埋点值request_estimate_price,请求预估价格失败时记录埋点值request_estimate_price_failed。相应埋点配置流程为:在[方法执行]-[请求行程预估价格]-[开始]状态时,记录埋点值request_estimate_price,在[方法执行]-[请求行程预估价格]-[结束]状态时,当[返回值]为[false]时,记录埋点值request_estimate_price_failed。如此,埋点的配置过程也是一个语义化的描述过程。状态绑定和配置如图3所示。
3 埋点实施
埋点实施包含两部分:埋点配置系统和移动应用埋点SDK(简称埋点SDK) 。
3.1 埋点配置系统
以页面(iOS为UIViewController, Android为Activity) 为单位进行埋点配置,页面以类名作为唯一标识。若存在该页面的设计图,则直接将设计图导入埋点配置系统,若没有相应的设计图,则在App端进行截屏并将该页面截图上传。页面导入成功后,由开发人员将数据名称,数据变量和数据值进行绑定。绑定后生成数据列表,供运营人员配置埋点时使用。
状态配置为指定在何种情况下(触发条件) 进行埋点值的匹配和记录。配置系统默认提供3种类型的可选状态,分别为[控件交互][页面交互]和[视图交互]。除此之外,还提供自定义的[方法执行]状态。[控件交互]包括[点击事件、长按手势、拖动手势、滑动手势、缩放手势],表示用户对App进行交互的状态。[页面交互]状态主要用来记录PV埋点,包括[页面进入,页面退出],在配置系统可直接配置[页面进入]和[页面退出]分别对应的埋点值。[视图交互]状态包括[普通视图,弹窗]两种,[普通视图]为当前页面上添加或展现的视图,[弹窗]则为Window上添加或展现的视图。在设置视图交互状态时还需指定视图的名称,视图的名称以视图的类名来标识,如果是非自定义的视图(比如系统默认弹窗视图) ,则不同的弹窗其类名是相同的,这种情况下视图标识符取类名加弹窗上的标题文本(若类名相同标题亦相同则认为是同一个视图) 。[方法执行]状态用来表示某种操作的进行,以页面中的指定方法开始执行和结束执行为依据。其默认提供[开始]和[结束]两个子状态,对应到埋点SDK端即hook的时候,在原方法执行前注入埋点代码和原方法执行后注入埋点代码。
3.2 埋点SDK
将下发的埋点配置表中的变量在状态条件滿足时进行匹配(即读取运行时的数据值和表中的值进行匹配) 。运行时读取值的方法:iOS端采用KVC的方式,Android采用反射的方式。对于状态的监控分别为对控件交互状态、页面交互状态、视图交互状态、方法执行状态进行监控。
控件交互状态通过hook控件的响应事件来进行监控。对于点击事件,hook系统的点击事件方法(iOS hook UIControl的sendAction:to:forEvent:方法,Android hook onClick方法) ,当该方法执行时表示点击事件发生,此时读取埋点配置表中该状态下的数据列表,对数据值(或数据值组合) 进行匹配,根据匹配结果记录埋点值。手势事件的监控同理。
页面交互状态通过对系统的导航栈进行监控,若导航栈内的页面发生变化,即代表页面发生了跳转(页面交互) ,根据导航栈内页面是增加还是减少来判断是页面进入或是页面退出。
视图交互状态则对当前视图或Window视图的所有子视图列表进行监控,若列表发生增减,即代表视图发生了变化,根据发生变化的视图标识符来进行埋点匹配。
方法执行状态的监控通过读取系统下发的埋点配置表中指定的状态方法名对所有指定的方法进行hook操作,hook时根据子状态是[开始]还是[结束]来判断hook的操作是在原方法执行前生效还是执行后生效。另外,hook方法时同时获取方法的入参和出参(返回值) ,供埋点的子状态下数据匹配时使用。
4 结束语
本研究提出了一种基于数据和状态的可视化埋点方法。在移动应用中总能将用户的操作或功能行为的发生用某个(些) 数据值的变化来表示,因而,埋点的发生可由数据和状态的变化来驱动。基于此思想,埋点的记录即是简单的指定状态下数据值的匹配过程。通过进一步将数据和状态与可视化埋点方案结合,则对于埋点只需对数据和状态进行配置和管理,而无须识别页面内的各控件,也无须对控件做唯一标识。应用表明,本文提出的埋点方法灵活高效、可扩展性更强,具有较高实际价值。
参考文献:
[1] 赵强,彭玮.新闻App用户行为分析的实现[J].中国传媒科技,2019(3):39-43.
[2] 李旭,翟颖琳.基于数据分析平台的App交互设计测试评估研究[J].包装工程,2018,39(2):143-148.
[3] 廖爱红,罗铭涛.埋点管理系统分析与设计[J].办公自动化,2020,25(16):33-35.
[4] 蔡榆榕.运用埋点技术实现高校应用服务平台过程监控[J].中国管理信息化,2021,24(15):187-190.
[5] 吴荣灿,罗嘉龙,郑伙群,等.基于大数据技术的用户行为分析平台的设计与实现[J].电脑知识与技术,2021,17(12):40-42.
【通联编辑:代影】
收稿日期:2021-09-22
基金项目:国家自然科学基金项目(32072498)
作者简介:金小俊(1987—),男,工程师,硕士,主要从事软件工程及人工智能技术研究;孙艳霞(1988—),女,工程师,硕士,主要从事机器人及工程机械研究;赵化(1988—),男,助理工程师,学士,主要从事软件架构与设计研究;通信作者:陈勇(1965—),男,教授,博士生导师,博士,主要从事机电一体化研究。