相信业务团队对这样的场景不会太陌生:

  1. 打点需求:每新上一个功能,数据产品便会同步加上打点需求,当数据打点上线后一段时间,数据产品/业务产品便会针对数据的转化率分析和对业务需求的调整;
  2. 打点正确性验证:当某一天数据转化率大幅度变化不符合预期,数据产品/业务产品便会和开发确认打点的位置是否出现纰漏; 线上问题排查:
  3. 接到上报一个线上问题,然而开发们却无法重现该case,此时需要有线上对应该case的数据才能进一步分析问题,倘若没有数据,那这个问题很可能将变成一桩“悬案”,便会遭受多合作方的质疑和对于业务稳定性的安全感大大降低。

由此数据是很重要的,我们接下来从数据采集的重要性、数据的划分、采集方式以及在微信小程序中的埋点方案几个方面来一起详细聊一下数据采集。

一、数据采集的重要性

本篇我们重点讨论数据采集,暂不详细论证数据的作用,先归纳总结一下数据对于性能优化、业务增长和线上问题排查的重要作用,这也是我们为什么需要埋点的原因。

数据对于线上问题排查的作用:

  1. 用户行为数据还原“现场”,帮助分析和定位问题,提高问题定位效率
  2. 对于问题分析提供有力证据

数据对于性能优化的作用:

  1. 帮助发现和监控在线业务的关键成功指标
  2. 帮助发现最需要优化环境及其优先顺序
  3. 帮助发现所面临的挑战的信息和改进决策
  4. 帮助提供对应用测试和优化更好的分析

数据对于业务增长的作用:

  1. 帮助衡量市场营销效果
  2. 帮助发现激活转化效果的策略
  3. 帮助发现用户留存和用户活跃分析
  4. 帮助产品营收变现分析

二、采集数据划分梳理

从第一大点,我们总结了数据的重要性,不同的业务项目对于数据重要性的侧重点会有不同,那数据采集到底要采集哪些数据呢?

首先闭环数据包括:

  1. 用户行为
  2. 用户信息、CRM(客户关系)
  3. 交易数据、服务端日志数据

以上三项数据,才算是一个完整数据流闭环,当然不同的业务场景中数据还可以再更细划分,大体的关键点基本不超出这三项。对于前端的数据收集来讲,闭环数据中前两项主要由客户端上报数据,而第三点主要由服务端记录数据,客户端辅助,因为交易请求真正到达服务端完成处理才算是完成交易的一个闭环。用户行为数据又包括——时间(when)、地点(where)、人物(who)、交互(how)、交互内容(what)五个要素,和新闻五要素有点类似;用户信息有的业务涉及到用户敏感信息和隐私等需要授权,所以用户信息由业务场景定夺具体维度,最基本的数据需求是能唯一标识用户;CRM、交易数据和用户信息类似,具体所需数据细节由业务场景定夺,CRM基本数据需求是登陆信息、会员相关信息,交易数据包括——交易时间、交易对象、交易内容、交易金额、交易状态。

三、数据上报方式

聊完数据,下一步便是需要知道如何获取到我们真正所需要的数据。数据上报方式大体上可以归为三类:

第一类是代码埋点,即在需要埋点的节点调用接口直接上传埋点数据,友盟、百度统计等第三方数据统计服务商大都采用这种方案;

第二类是可视化埋点,即通过可视化工具配置采集节点,在前端自动解析配置并上报埋点数据,从而实现所谓的“无痕埋点”, 代表方案是已经开源的Mixpanel;

第三类是“无埋点”,它并不是真正的不需要埋点,而是前端自动采集全部事件并上报埋点数据,在后端数据计算时过滤出有用数据,代表方案是国内的GrowingIO。

重点讨论无埋点,可视化埋点其实可以算是无埋点的一个衍生故可视化埋点在此不讨论,主要对比代码埋点与无埋点。

3.1代码埋点或Capture模式的埋点缺点

对于数据产品来说:

1、依赖人的经验和直觉判断。

业务相关的埋点位置需要数据产品或者业务产品主观判断,技术相关的埋点则需要技术人员主观判断。

2、沟通成本高

数据产品确定所需要的数据,需要提出需求与开发沟通,且数据人员对技术不是特别熟悉,还需与开发人员明确相关信息否能上报的可行性。

3、存在数据清洗成本

随着业务更迭变化,之前主观判断所需的数据会存在更改变化,此时对之前打点的数据就需要手动清洗,且清洗的工作量占比并不小。

对于开发来说:

1、开发人员精力消耗

埋点对于业务团队来说,常常被相关开发人员所诟病。开发技术人员不能只关注技术,还需分散精力做埋点这样高度重复且机械性的任务。

2、埋点相关代码侵入性强,对系统设计和代码可维护性造成负面影响

大部分的业务相关数据点都需要手动埋点完成,埋点代码不得不与业务代码强耦合在一起。即使业界已有无埋点sdk,数据产品关注的业务特殊点也逃离不了手动埋点。

在业务不断变化下对数据的需求变更,埋点相关代码也需要跟着变化。进一步增加开发和代码维护成本。

3、易错、漏

由于人工打点存在主观意识差异,打点位置的准确度难控,且易漏数据

4、存在打点流程成本

当数据漏采或错采时,又要经历一遍开发流程和上线流程,效率低下。

3.2无埋点优势

与手动埋点相比较,无埋点优势便不用多解释。

  1. 提高效率
  2. 数据更全面,按需提取
  3. 减少代码侵入

四、微信小程序无埋点sdk方案

4.1 无埋点数据需求

  1. 小程序的初始化执行情况上报
  2. 接口请求上报
  3. 错误上报
  4. 用户行为上报

由于小程序不同于web服务,不存在js /css资源加载一说,所以更关注的是小程序初始化状态和执行情况的记录和捕获上报情况,图中资源完整性检查对应初始化完成性检查。线上小程序中的请求域名都必须是https协议的,故dns劫持概率大大降低甚至不大可能发生,且从客户端监控DNS劫持可行性较低(存在悖论),暂不考虑DNS劫持捕获情况。

4.2 针对微信小程序开发无埋点sdk的难点及重点

  • 无法直接拦截/监听请求

微信请求统一通过微信API完成 ,请求模块已被微信方封装,且小程序的运行环境不是 浏览器对象,不像web应用那样重写封装很自如。

  • 三种运行环境的监控兼容性保证
  • Android 上,js运行环境是 X5 内核
  • iOS 上,js 运行环境是 JavaScriptCore
  • 开发工具上, j s运行环境是nwjs(chrome内核)
  • 用户行为无法直接监听
  • 强拓展性 需要适用于多种架构设计场景(小程序)下使用
  • sdk需轻量每个小程序的包存在2M的限制,并且小程序并不支持在代码中引入npm包,故sdk本身会占用2M的大小限制。虽然小程序有分包的内测,但该功能未完全放开,再者作为一个sdk体积过大也是不合理的。
  • 数据收集量大,尽量减少性能损耗
  • 不影响业务(基本需求)

4.3 微信小程序无埋点sdk设计

数据层设计:

数据流走向设计:

采集方式设计:

接入方式:

在小程序初始化代码之前引入sdk npm包代码,小程序打包代码时将sdk代码引入到项目中初始化后即可自动打点收集数据。初始化例子如下:

import Prajna from './lib/prajna-wxapp-sdk.js';Prajna.init({channel: 'channel',
env: config.IS_PRODUCION ? 'product': 'beta',
project: 'yourProjectName',
methodConfg: {}   // 业务特殊关注的方法执行和自定义打点名称
})

无埋点结合埋点:

小程序的无埋点方式,可以获取到大量的数据基本可以做到用户使用场景的高度还原。SDK打点的粒度是到某个方法的执行,对于业务特殊关注点的粒度小于SDK粒度时无法单纯靠SDK无埋点完全解决,可采用无埋点和埋点相结合,故我们的小程序无埋点SDK也提供手动埋点的API接口,完善数据的完整程度,进而解决更多的问题(回顾参照数据重要性提到的作用)。

五、小程序无埋点SDK中遇到的问题

除了解决了前文提到的针对微信小程序开发无埋点sdk的难点及重点所面临的问题外,还遇到了一些新的问题。

SDK本身会对业务性能造成一定成都影响,数据暂存放在了小程序的localstorage中,多次较频繁的存/取小程序的localstorage在业务方本身较耗费性能的情况下会暴露出操作卡顿问题。减少localstorage的存/取操作,只在页面关闭时未上传的数据才存入localstorage全量无埋点的数据量庞大,灰度上线时遇到过服务器过载导致服务器可用性下降的问题。

后续对于数据上报的量有所控制,只自动上报关键节点数据,其他业务关注节点可通过接入初始化时针对性配置再上报,避免上报过多冗余数据。此外对于上报数据结构的设计也需要尤为注意,结构目标是要清晰、简洁、便于数据检索(区分)。

初期原本想针对灰度上线做一个SDK使用与否的“开关”,避免小程序回滚流程。由于“开关”依赖server接口控制,而请求是异步的,意味着初始化过程以及小程序启动都必须等到控制开关的接口返回才可进行,否则“开关”就相当于失效的。 考虑到SDK不能影响到业务性能,丢弃“开关”,在SDK内部做好try、catch,避免对业务可用性造成影响。

有了无埋点上报获得数据,后续便可以利用数据来解决很多问题。对于数据的利用请期待下节——数据的应用篇。

微信小程序无埋点数据采集方案相关推荐

  1. 神策数据微信小程序 SDK 功能介绍 | 数据采集

    一.前言 神策数据微信小程序 SDK,是一款用于微信小程序端的数据采集埋点 SDK.具体而言,是指开发者将 SDK 集成到开发的微信小程序项目中,通过配置或者在特定时机调用 SDK 提供的接口采集用户 ...

  2. iOS分享微信小程序无反应、失败;iOS多种分享形式(以微信为例:链接+图片+小程序)

    背景 先交代下背景:最近一个需求,根据接口返回数据来控制分享形式,即传入分享类别(比如文章.音频.邀请好友下载应用等).分享平台(比如微信好友.朋友圈等).分享类别所对应的id(比如文章id.音频id ...

  3. 微信小程序推广技巧、营销方案

    微信小程序推广技巧.营销方案 小程序已经成功上线了!那么,小程序线下如何推广?线下门店如何玩转小程序呢? 1.附近的小程序,让商家曝光率更高 小 程序自带"附近的小程序"功能,利用 ...

  4. 【基础问题】微信小程序 - 腾讯云 - 一站式方案 - PHP - wafer 和 wafer2的区别和wafer2的实践

    前言: 项目目前选择了腾讯小程序一站式部署,反而有点懵了,服务器怎么配置呢?好像接口没有,查询后,发现有的Demo有服务器配置有的没有,折腾观察了一会,原来有两个版本wafer.我把关键的地方高亮了, ...

  5. 微信小程序 # 图片预加载方案(防闪烁) 以及 首次引导

    问题背景 第一次进入小程序的时候,需要打开引导操作 点击进入下一个引导操作,一共有一系列引导操作. 引导操作这里是用图片实现的,然后点一下切换一张图片. 问题具体描述 在如上图所示的引导提示操作中,用 ...

  6. Android 微信小程序打不开app方案解决

    之前一直困扰着app跳转小程序之后,小程序中无法唤起APP了,而且的响应信息也没有,终于结合多方案解决这个问题. 1,manifest中一定要这么写 2,WXEntryActivity必须要放指定路径 ...

  7. 微信小程序开发之图片压缩方案

    目录 前言: 问题:现有的压缩方案支付宝小程序不生效 解决方案: uni.createCanvasContext(canvasId, this) 核心代码展示:

  8. 小米6Android无响应,小米手机mui12 android9 App跳转微信小程序无任何响应。求解决...

    清川 2020-08-21 加粗 标红 插入代码 插入链接 插入图片 上传视频 请 登录 后发表内容 关闭 新增或编辑超链接 链接地址 关闭 插入视频 视频链接 2020-08-20 11:39:23 ...

  9. 微信小程序键盘遮挡问题决方案

    从网上搜索到给input 添加cursor-spacing属性可以解决,现在默认其实input框即使没添加这个属性,也不会被遮盖,不过input框下面如果有东西,就会被遮盖,这时候,就需要添加curs ...

最新文章

  1. oracle查询表的索引
  2. 数值分析与算法-喻文健-国科大
  3. 【备忘】visual studio调试状态下显示lua调用栈
  4. Oracle RAC在思科UCS上的应用
  5. python报错怎么看_python中的错误如何查看
  6. 33.JAVA编程思想——JAVA IO File类
  7. 高效代码审查的十个经验
  8. jfinal html页面在多个路径,jfinal不能正确加载html网页,总是报错的解决方法
  9. ORA-12737: Instant Client Light: unsupported server character set CHS16GBK/ZHS16GBK解决方案
  10. play 1.2.4的action执行前后的加载逻辑
  11. 微信小程序接入海康威视萤石云直播
  12. java vm参数设置_Java VM 启动参数详解
  13. 玉渊潭赏樱花有感:从无到有写一个jQuery开源插件
  14. ValueError: Error initializing torch.distributed using tcp:// rendezvous: port number missing
  15. 细说 Java 中的浅克隆与深克隆
  16. win10操作系统的ODBC数据源配置sqlserver数据库
  17. 哪位仁兄在狂顶精华贴?
  18. inventor2五子棋游戏apk_五子棋大师2中文版游戏
  19. 调试iphone上html,如何调试 iPhone Safari 浏览器的CSS兼容问题
  20. linux系统安装hba驱动,Linux系统上iSCSI HBA的安装和配置

热门文章

  1. 【Android音视频开发】【013】SurfaceView生命周期
  2. 类似大众点评 58 美团 等应用的城市选择器 — Edit
  3. SpringCloud与Dubbo的比较
  4. 【华为OD机试】代表团坐车【2023 B卷|200分】
  5. C~K的班级----Hashcode和equals
  6. CockroachDB安装及使用
  7. 2021河南高考成绩查询填写志愿,2021河南省高考能报几个志愿 高考志愿填报数量...
  8. 逻辑优化基础-disjoint support decomposition
  9. controller sout 乱码
  10. 基于android的新闻阅读系统