小程序可视化实时自动埋点设计
旺道朋友圈广告 -> 最新发布

作者:banniyang, 腾讯IEG开发工程师

原文地址:https://mp.weixin.qq.com/s?__biz=MTEwNTM0ODI0MQ==&mid=2653452704&idx=1&sn=96edccafae25d1ef6938035aae04a4d3

| 导 语 小程序上线新版本的时候需要经过微信审核,如果有紧急需求要添加埋点并即时生效,那就来不及了。

1、为什么要做?

先看下之前的埋点流程,如图所示。产品提出埋点需求,开发人员在mp平台配置埋点事件,然后进行代码埋点,再测试埋点,没问题之后再提审。

小程序从 提审到审核 通过大概需要 半天到两天 的时间。通过之后还需要半天的线网验证,线网有问题之后又得重新走一遍发版流程。整个埋点流程比较长。

小程序可视化实时自动埋点设计

有一次在比赛前一天晚上彩排的时候,产品临时需要加个埋点需求,因为当时已经晚上10点多了,小程序没人审核,所以只能等到第二天早上找领导走内部紧急审核通道,比较尴尬。

这个时候如果有一个 实时的埋点系统 就可以完美解决了。

细心的同学还会发现,整个埋点流程开发还是需要费神费力的,这种重复性的工作也是比较繁琐的,而且对于技术能力的提升也没有多少帮助。

所以埋点系统的另外一个要求就是

不需要开发介入 ,产品或者运营人员就可以单独完成埋点。

2、怎么做

2.1、避免重复造轮子

在做之前,先了解下公司内外已有的埋点方案,避免重复造轮子。如图所示,目前公司外有growingio和神策两款产品,小程序官方也提供了埋点方案。

小程序可视化实时自动埋点设计

  1. growingio是全埋点,数据全,但是由于是全埋点,后期还需要开发介入清理数据,不满足埋点系统的要求;
  2. 神策和MP需要代码埋点,不能实时生效。
    因此,现有的埋点方案都不能够完全满足我们的要求,需要独立开发一个系统。

2.2、埋点方案设计

框架图如下,小程序的sdk分成两种模式,埋点模式和采集模式,

  1. 埋点模式是产品操作的,供产品新增埋点事件。
  2. 采集模式就是采集用户的点击操作,在小程序启动的时候,从后台拉取产品需要的埋点事件,用户点击动作命中埋点事件之后自动进行上报。

在web端,产品可以查看埋点数据

小程序可视化实时自动埋点设计

这一篇阐述的是小程序SDK的实现,下面做具体介绍

3、埋点系统具体实现

3.1 埋点整体流程

具体流程如图所示,通过配置 确定是埋点模式还是采集模式

,假如是采集模式,需要获取埋点事件,判断是否有要统计的埋点事件。

接下来就是重点,用户点击之后,首先需要确定响应者,然后是唯一标识这个点击动作,最后是拦截这个交互事件,上报统计事件。简单的说就是

  1. 寻找响应者
  2. 唯一标识
  3. 拦截交互事件其中比较难的一个点是寻找响应者,因为小程序是双线程,视图层和逻辑层是分开的,跟H5不太一样,H5是可以获取完整的dom节点信息。但是在小程序中可以获取到的信息很少下面重点介绍下这几个流程

3.2 寻找响应者

1)业界方案介绍 业界方案主要有两种,分别是工程化注入和冒泡采集。

  • 工程化注入就是给所有标签注入点击事件,这种相当于全埋点,数据比较全。
    但是缺点也很明显,给所有标签加上点击事件会让项目显得比较重,而且假如原来的标签有点击事件,就更不好处理了。
  • 冒泡采集就是在wxml代码的最外层添加一个view,然后绑定catchtap事件。这种就比较轻量级,无需注入大量代码。但是依赖于冒泡事件,假如原来的业务代码阻止了冒泡,那就获取不了,可靠性比较差。
小程序可视化实时自动埋点设计

这两种方案都是从视图层出发,或多或少需要入侵业务代码,各有缺陷,不满足我们的需求。

2)思路转换 上面的方案是从视图层出发,因为小程序的双线程模型,这里我从另外一个角度出发,从逻辑层下手。

原理是这样的:在渲染层触发的点击事件都会传递到逻辑层,所以可以从逻辑层入手,对逻辑层的每个函数提供hook方法,在hook中捕获到用户的点击事件。

小程序可视化实时自动埋点设计

3)具体实现

  • 目标分析:获取用户的 点击行为 ,从 wxml=>js ,也就是从渲染层转向逻辑层。小程序的逻辑层涉及到两个系统对象
    • 页面对象
    • 自定义组件
      因此,只要重构这两个系统对象即可,具体做法如下:
  • 在小程序启动的时候, 重构Page()和Component()这两个系统对象 ,遍历对象里面的所有属性,如果属性类型是函数,则进一步判断是否在忽略名单,像监听页面滚动的函数这种是不需要添加hook的,最后才是给函数添加hook
小程序可视化实时自动埋点设计

不过在小程序启动的时候去给页面的函数添加hook还不完整,因为有些函数是在运行时添加的,像这种该 怎么添加hook呢

  • 给运行时的func添加hook
    这块我想到了几种方案
  • 给Page对象设置proxy,监控set方法
  • 在所有hook中监控Page属性的数量
  • Page添加生命周期函数,onLoad执行完之后给新生成的func添加hook

第一种和第二种都存在多次触发的情况,影响性能。只有第三种是一劳永逸的,只需要执行一次就可以了。

3.3 唯一标识

唯一标识就是确定用户点击动作的唯一性,传统的标识大部分是通过视图栈方案,也叫特征值标识。在小程序中,就是通过标签的id来标识,id就是标签的特征值。

1)视图栈方案

如图所示,当用户点击某个标签时,可以获取到两个id,一个是targetId,另一个是currentTargetId,其中

  • Target,触发事件的源组件,
  • currentTarget,事件绑定的当前组件。

这种方案,唯一标识就是通过这 两个id进行组合 得到

使用这种方案 可靠性比较差 ,因为在写业务代码的时候,可能没有给标签添加id,这样取到的id就是空字符串,使得标识并不唯一

小程序可视化实时自动埋点设计

2)变量名+新特征值

前面说过,用户点击某一个标签,都会对应到逻辑层的某个函数,所以这里把 函数名 作为新的 特征值 。为了确保唯一性,再加上当前 页面路径

,防止其他页面有相同的函数名。

这种方案的优势很明显,就是不依赖于id, 可靠性有保证

小程序可视化实时自动埋点设计

不过细想一下,还是有一些情况需要考虑:

  • custom components如何获取pagePath因为组件的层级比页面层级低,从组件对象是没法获取页面信息的。但是由于是 可视化埋点 ,所以组件所在的页面肯定在页面栈的最上面,因此,可以通过 页面栈 获取当前的 页面对象 ,然后再获取页面路径
  • 对于list点击事件,如何区分?

如图,每个tab的点击情况是需要区分统计的,而对于下面列表中的奖励领取,一般是不需要区分的。不需要区分的按照原方案即可。
对于需要区分统计的,因为tab不同时,所触发的函数参数肯定也不同,所以
唯一标识需要带上函数的参数。

小程序可视化实时自动埋点设计

  • 如何统计一个事件在所有页面的情况

对于全局范围的统计,因为要统计所有页面的情况,所以需要将页面路径和函数名称分开存放,其中函数名作为埋点事件的唯一标识,页面路径作为子标识。

3.4 拦截交互事件

1)事件模型分析

小程序的事件模型如下,用户点击某个view时,会从外到内进行捕获,事件冒泡的响应顺序相反,是从内到外进行冒泡。可以看到,用户点击一次可能会触发多个事件,所以重点是要 防止多次上报统计事件

小程序可视化实时自动埋点设计

为了防止多次上报,需要寻找当前点击事件的唯一性。

这是小程序的事件对象,可以看到,通过时间戳和标识符可以唯一确定当前的点击事件,

其中时间戳timeStamp是用户打开小程序到点击事件产生的时间戳,标识符identifier是触摸点的标志符。

小程序可视化实时自动埋点设计

2)埋点模式流程

埋点模式是供产品使用的,产品点击页面时,会触发逻辑层的某个函数,前面说到,每个函数都会添加hook.

Hook的执行流程如下,首先会根据事件对象的事件戳和标识符来判断这个事件是否已经上报处理过,如果是就直接结束。

否则就记录下这个事件已经处理过,防止后面重复处理。

然后再判断这个事件类型是否为点击事件,如果是就询问用户是否要执行埋点上报,最后确保埋点类型及名称。

小程序可视化实时自动埋点设计

3)采集模式流程

采集模式是根据埋点事件进行数据上报。可以跟埋点模式一样,

  • 给所有func添加hook,在hook判断是否要上报。这种方案有个弊端,因为埋点事件的数量远比函数的数量要少,大多数函数是没必要进行hook的,给全部函数加上hook会影响页面的性能。
  • 根据埋点事件找到需要上报的func,只给这些func添加hook。很明显,这种方案更佳,下面看看具体实现流程。

小程序启动的时候,同时进行两件事。

  • 给页面添加一个生命周期函数initFuncHook
  • 从后台拉取埋点事件当页面打开的时候,去执行initFuncHook生命周期函数,initFuncHook的流程如下:遍历页面的属性,判断属性是否为fun类型,并且是需要埋点的,如果需要则添加hook,如果不需要就重新遍历对象属性,直到所有属性都遍历为止。

至此,小程序可视化实时埋点的整体思路就介绍完了。

作者:banniyang, 腾讯IEG开发工程师

原文地址:https://mp.weixin.qq.com/s?__biz=MTEwNTM0ODI0MQ==&mid=2653452704&idx=1&sn=96edccafae25d1ef6938035aae04a4d3

教育培训机构-如何策划节日招生?
做教育培训,最重要的事情莫过于招生了。面对不同的学员,招生方…于招生。目标不同,活动策划也会不一样。② 活动主题要鲜明不仅主题要鲜明,主题之间要有连续性。就像看连续剧一样,一集接一集,一环扣一环。策划好一系列活动,一个接一个来,从多个角度延续活动的宣传,突出主题,引起关注度。常用的招生方式有:体验课招…-------------想要获得更多运营技巧、doc文案,
教育培训:如何提高满班率和续班率
什么是满班率?就是实际人数除以计划招生人数,这个值就是满班率…员有流失是正常的,但要保证一个概率。在保障老学员续期的基础上,我们也要大胆创新,开设网络课程,拓宽招生区域。实地课程录制后,进一步发行到商弈云课上,通过商弈云课系统转成真实流量,网上有人点击观看,点赞,可以按点播量分佣金。助你在日常的营销推…-----------------------想要获得更多运
培训机构难盈利的问题出在哪里,如何实现盈利?
竞争白热化实地培训班、托管辅导班竞争白热化了,利润越来越稀薄…现没有多少盈利。还有一部分负责人在刚招生时,掌握了不少资金,开始盲目扩张,盲目做课程推广,以期待获得更多生源和收费,从而使培训班陷入了这种恶性循环的陷阱里。其实这些到手的钱,并不是你的利润,而是你未来要支出的钱。如遇到行业快速发展时期,或者…-----想要获得更多运营技巧、doc文件,请“关注”并“转
“差异化”经营是网络培训赚钱的关键所在
“差异化经营”这个词,相信大多数人都耳熟能详,但要做到的却是…。在现有的基础上更新升级或者资源整合就是对现有的产品或者技术,进行升级版本,或者通过一些资源整合,成一个项目。你的技能以前是用来生产或制造产品,现在是把技能升级成知识培训,转换云课堂。直白一点就是可以让老师自行录好课程并上传到学校的商弈云课…在着缺点和不足之处。在创新改革时,要从功能、服务、价格等方面
教育培训行业是如何运作的?
以前读书时,学校附近有个小摊卖鸡蛋灌饼。刚开始的时候只有一家….%,剩下的一对一和多人大班其实市场份额都很小。家长报培训班,是希望孩子能够学到知识。老师通过课上教学和课后辅导来满足孩子的需求,达到成绩提高的目标。我见过上百人的大培训班,为什么一个班这么多人?因为是名师讲课,但人太多坐后面,基本听不到重…是你的核心竞争力。想要得到用户的认同,你就必须做到产品质量好
旺道:实体店怎么做网络营销?
年纪大了,体力不好了,便赚不了什么钱了。所以,一定要在年轻的…写文案都是非常头痛的事情,那么下面我会给大家提供一个解决方案。在互联网营销系统里面有很多细节营销,软文营销就是其中一种,但好多小白头痛写文章,所以可以用这个方法也一样可以植入广告语,或者是图片广告,轮显切换广告,使用 旺道营销系统,也就是每…以帮你吸引海量精准粉丝。有了粉丝,你通过广告、产品、服务就可
旺道:圈里圈外,铁饭碗距离瓷饭碗究竟有多远?
中国人爱混圈子,从线下一直混到线上,各种奇形怪状的圈子勾勒出…不能推则敷衍了事,盼着混到主任科员退休;一种是老黄牛式,踏踏实实、兢兢业业工作,但拙于人际关系,活干得最多,但依旧不见晋升迹象;还有一种是提线木偶式,你扯一下线他动一下,好像脑子和身体是分离的。我突然一拍脑袋,这是提前衰老的迹象啊,工作内容…即使选择留在铁饭碗圈里,也应保有随时离开的思想警惕和进行必要
旺道:微信要双开了,朋友圈推广更好做了
现在手机只能登一个微信,如两个,三个微信的小伙伴们就只能退出…动推广工具、 设置头像点击头像图标,点“+”选择图片,可以上传你的企业,个人头像,产品服务等。旺道微信朋友圈广告免费朋友圈广告-旺道、 设置推广主题点“广告”,再点“+”设置推广的主题(类别),填好中文主题,以及你的网址。教你不花一分钱做朋…简直就是一劳永逸哟。如果你点开发布的文章看不到广告,那就是你
旺道:如何能让网站多个关键词排名百度首页?
最近接了一个单,做婴儿游泳馆加盟的。优化推广范围是全国,但是…泳馆加盟哪家好”、“婴儿游泳加盟多少钱”这类与我息息相关的词。如何能让网站多个关键词排名百度首页?但客户并不认同,客户说这个词指数低,或者说搜的人不多。是,这是一方面原因。但是,指数低有什么关系,你是卖产品还是卖指数。搜的人不多有什么关系,…实现广告效果最大化,来满足大众化的广告需求。对于这样的四两拔
旺道:如何成为网络营销达人?这个技能帮你节省80%的时间
在某次名师讲坛上,听到了一个让人警醒的故事。说有个村子缺水,…准的产品。现在已经不是新鲜事物,好多企业因为百度竞价的高额费用,头疼不已,所以做网站关键词优化排名,成为了企业必选的推广项目。做优化也要做到有成效,不然就是一分钱也是昂贵的。用 旺道智能机器人 就可以持续代替人工去做,它非常聪明,只要你够耐…手,设备先进,你多努力奔跑也于事无补。简单说,要去一个地方,

此文章来源来互联网,如果你有任何版权冲突,可以联络我们,微信号:WANCOME,QQ:1444641。加我们时,请说明来意,我们将优先处理你的问题。




商弈云推  | 一键推  | 随手推  | 圈推广  | 跨圈推
粤ICP备10213132号
旺道商标注册证号:8608864
Copyright © 2016 环企网络信息科技有限公司 版权所有