基于日志服务的GrowthHacking(1):数据埋点和采集(APP、Web、邮件、短信、二维码埋点技术)
数据质量决定运营分析的质量
在上文中,我们介绍了GrowthHacking的整体架构,其中数据采集是整个数据分析的基础,只有有了数据,才能进行有价值的分析;只有高质量的数据,才能驱动高质量的运营分析.可以说,数据质量决定了运营质量。
在实际生产中,我们常常面临数据采集的痛点:
- 数据分散在各处,有服务器日志,有前端日志,有APP日志。
- 各种端的日志,采集方式迥异,要投入大量研发资源,才能覆盖所有的平台。
- 收集、处理、清洗、标注数据,需要投入巨大的精力,80%的精力浪费在了这些前置步骤上。
- 不同端的数据格式千奇百怪,缺乏一种统一的数据规范。
从分析需求推演数据源
通常,我们要分析拉新的的转化率,产品的留存率,以及用户推荐和最终付费相关的所有指标,每种类型的指标对应的渠道如下图所示。

以拉新为例, 通常我们可选择的渠道有社交媒体(微信、微博), 线上推送(邮件、短信),内容营销(博客、微信公众号),广告(广告联盟),线下推广(二维码)。每一种渠道的表现如何,需要用数据证明。每一种渠道的数据采集方式各不相同。接下来将逐个介绍。
埋点规范
杂乱无章的数据,价值等于0!如果各个渠道的数据各不相同,那么我们在分析时,就有很大一部分精力浪费在整理数据上。为了保证数据的质量,我们需要制定出一份埋点的协议,保证在采集数据时,能够采集到完整的信息。

在日志采集中,一般包含两部分信息:事件和属性。下文以Web埋点为例,详细介绍web埋点包含的内容。
Web埋点
web埋点可用于在博客前端追踪用户的访问情况。
Web埋点规范
属性信息:
设备信息:
- DeviceId:设备标识。 在首次加载js时,在cookie中添加唯一id。
- 屏幕长宽
- 设备类别。
用户信息:
- uid:用户id,用户唯一标识。
- session id:会话id,一次会话定义为连续的操作。
- 首次登陆时间。
- 会话开始时间。
软件信息:
- 语言
- os
- user agent
- 网站title
- 网站host
- 网站网址
Web埋点技术:
日志服务提供了Web Tracking技术,可以直接在网页上嵌入一个一个透明图片,当网页发生曝光时,会自动发送日志到日志服务。
埋点样例:

Web Tracking 本质上是一个http GET请求,不仅可以用来采集曝光时间,还可以用来采集一些事件信息。通过在前端嵌入js sdk的方式,通过js采集用户的行为动作,并且通过js sdk发送到日志服务。
嵌入js sdk的样例:
<script type="text/javascript" src="loghub-tracking.js" async></script>
采集事件样例:
var logger = new window.Tracker('${host}','${project}','${logstore}');
logger.push('customer', 'zhangsan');
logger.push('product', 'iphone 6s');
logger.push('price', 5500);
logger.logger(); //发送日志
logger.push('customer', 'lisi');
logger.push('product', 'ipod');
logger.push('price', 3000);
logger.logger();
iOS埋点
开发者可在iOS应用中,嵌入日志服务的iOS SDK,自由灵活的采集所需要的事件日志, SDK分为Swift和Objective-C版本。
Android埋点
Android SDK 类似于iOS SDK ,可以嵌入Android APP中,采集事件信息。
小程序埋点
在小程序中,可以参考Web的采集方式,嵌入js sdk,通过js事件采集内容,并且通过js sdk把数据发送到日志服务。
<script type="text/javascript" src="loghub-tracking.js" async></script>
邮件打开率和转化率埋点
邮件打开率
参考web tracking技术,在邮件的html内容中,添加一个img标签,该img标签是一个1X1的空白图片,用户看不到该图片。当邮件被打开时,会自动发送一条日志到日志服务:
<img src="https://yunlei-statics.cn-hangzhou.log.aliyuncs.com/logstores/blog-tracking/track_ua.gif?APIVersion=0.6.0&title=${邮件标题}&src=yunqi&author=${author})">
当日志采集到日志服务端后,可以参考本系列的分析文章,进行分析。
邮件转化率
运营同学可能在邮件中嵌入了一些链接,邀请用户注册、登录、访问某个功能。为了追踪用户是否打开了这个链接,我们需要在web tracking上封装一层。把真实的链接B封装起来,先跳转到A,在A记录下日志后,再跳转到真实地址B。

例如一下案例:
- 在邮件中,我们需要跳转到https://promotion.aliyun.com/ntms/act/logdoclist.html。
- 把上述链接url encode编码:https%3a%2f%2fpromotion.aliyun.com%2fntms%2fact%2flogdoclist.html。
- 通过中间服务器跳转,把上述编码的url,作为redirect参数传递:
http://47.96.36.117/go.php?redirect=https%3a%2f%2fpromotion.aliyun.com%2fntms%2fact%2flogdoclist.html - 在中间服务器上,调用web tracking,记录日志到日志服务,同时返回302跳转到真实的链接。
通过以上方式记录的跳转日志,可以分析营销邮件的转化率。
短信营销埋点
短信营销类似于邮件营销,在短信中,嵌入链接,追踪链接的打开率。短信相比于邮件特殊的地方在于,短信有字数限制,因此需要在短信中使用短域名,那么整体架构变成了这样:

在这个方案中,真实的链接经过三次跳转,第一次跳转到短域名服务器,第二次跳转到中间服务器,在中间服务器上记录日志,第三次跳转到真实的目标地址。
二维码扫描率追踪
二维码是线下营销的利器,通过扫描二维码可以快速转化。二维码本质上是一串文字的编码,通常是一个url,因此我们可以采用类似邮件追踪的办法,把真实的url进行编码,经过中间服务器的跳转,记录下来二维码的扫描次数。

中间链接http://47.96.36.117/go.php?redirect=https%3a%2f%2fpromotion.aliyun.com%2fntms%2fact%2flogdoclist.html生成的二维码:

真实链接生成的二维码:

上述两个二维码的目标地址是一致的,但第一个二维码给我们机会,能够记录下来用户扫码的记录,无疑可以帮助我们判断运营活动的效果。
总结
本文介绍了常见的渠道的埋点技术,每一种渠道的数据分析,请关注本系列文章。
本文作者:云雷
本文为云栖社区原创内容,未经允许不得转载。
基于日志服务的GrowthHacking(1):数据埋点和采集(APP、Web、邮件、短信、二维码埋点技术)的更多相关文章
- java springboot activemq 邮件短信微服务,解决国际化服务的国内外兼容性问题,含各服务商调研情况
java springboot activemq 邮件短信微服务,解决国际化服务的国内外兼容性问题,含各服务商调研情况 邮件短信微服务 spring boot 微服务 接收json格式参数 验证参数合 ...
- 基于java生成二维码
二维码 二维码的概念 ...
- 基于Web和二维码的文件传输服务
在工作中难免需要对外提供一些我们抓取的log或者操作视频之类的资料,但由于工作环境日渐规范和严格,公司的网络环境和客户的网络环境是被独立开来的.这样做的好处不必多说,但同时也给我们工作带来的诸多不便. ...
- 常量,字段,构造方法 调试 ms 源代码 一个C#二维码图片识别的Demo 近期ASP.NET问题汇总及对应的解决办法 c# chart控件柱状图,改变柱子宽度 使用C#创建Windows服务 C#服务端判断客户端socket是否已断开的方法 线程 线程池 Task .NET 单元测试的利剑——模拟框架Moq
常量,字段,构造方法 常量 1.什么是常量 常量是值从不变化的符号,在编译之前值就必须确定.编译后,常量值会保存到程序集元数据中.所以,常量必须是编译器识别的基元类型的常量,如:Boolean ...
- 基于SignalR的消息推送与二维码描登录实现
1 概要说明 使用微信扫描登录相信大家都不会陌生吧,二维码与手机结合产生了不同应用场景,基于二维码的应用更是比较广泛.为了满足ios.android客户端与web短信平台的结合,特开发了基于Singl ...
- ASP.NET实现二维码 ASP.Net上传文件 SQL基础语法 C# 动态创建数据库三(MySQL) Net Core 实现谷歌翻译ApI 免费版 C#发布和调试WebService ajax调用WebService实现数据库操作 C# 实体类转json数据过滤掉字段为null的字段
ASP.NET实现二维码 using System;using System.Collections.Generic;using System.Drawing;using System.Linq;us ...
- 一次使用Python连接数据库生成二维码并安装为windows服务的工作任务
最近有一个需求,在现有生产系统上的人员库中增加一个此人员关键信息的二维码,支持文字版和跳转版两种方式,与报表工具关联,可打印.以windows服务方式,定时检查,只要发现某人员没有此二维码信息,就生成 ...
- 在云平台上基于Go语言+Google图表API提供二维码生成应用
二维码能够说已经深深的融入了我们的生活其中.到处可见它的身影:但通常我们都是去扫二维码, 曾经我们分享给朋友一个网址直接把Url发过去,如今我们能够把自己的信息生成二维码再分享给他人. 这里就分享一下 ...
- 基于Metronic的Bootstrap开发框架经验总结(14)--条码和二维码的生成及打印处理
在很多项目里面,对条形码和二维码的生成和打印也是一种很常见的操作,在Web项目里面,我们可以利用JS生成条形码和二维码的组件有很多.本文引入两个比较广泛使用的JS组件,用来处理条形码和二维码的生成处理 ...
随机推荐
- tortoisegit如何删除远程分支
图片来自:https://zhidao.baidu.com/question/134542616148384045.html
- bzoj 1029 [JSOI2007]建筑抢修——贪心(伪dp)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1029 当然要按结束时间排序,然后按顺序修或跳过.就是那种“……不会使答案不优”的证明. 想了 ...
- nginx的四个基本功能
Nginx能做什么 1.反向代理2.负载均衡3.HTTP服务器(包含动静分离)4.正向代理 以上就是做网站小编了解到的Nginx在不依赖第三方模块能处理的事情,下面详细说明每种功能怎么做 1.反向代理 ...
- Java中的String,StringBuffer和StringBuilder
在了解这个问题的时候查了不少资料,最有帮助的是这个博文:http://swiftlet.net/archives/1694,看了一段时间,咀嚼了一段时间,写一个经过自己消化的博文,希望能帮到大家. 首 ...
- PHP把图片保存到数据库,将图片本身保存在数据库,而非保存路径
备注 百度开发者的云代码空间为了保证高可用,不允许用户将图片保存到代码空间中,使用CDN或者对象存储不仅收费而且使用比较复杂,于是考虑能否将img存储在数据库中,虽然很多人说会造成性能问题,权当一试 ...
- 解决pycharm新建工程项目都需要重新安装库问题
在新建一个工程项目后,发现之前安装的库均不在了.想要使用的情况下还得重新安装.这样也太不智能了,一定会有解决的办法.查找相关文档后,发现在新建工程项目的时候需要进行选择是否使用以前的环境. 选择已存在 ...
- C# 如何比较版本号大小
最近遇到了一个数据迁移的问题,因为配置文件的结构发生变化,所以要把低版本的用户数据保存下来,存到最新版本中去. 这里就有一个比较版本号大小的问题了,网上乱七八糟算法一堆,大致意思就是用分割字符串的方法 ...
- Matlab 稀疏矩阵函数
eye 单位矩阵zeros 全零矩阵ones 全1矩阵rand 均匀分布随机阵genmarkov 生成随机Markov矩阵linspace 线性等分向量logspace 对数等分向量logm 矩阵对数 ...
- Web渗透三字经
网络上曾流传一段Web渗透三字经,如下: 用搜索 找注入 没注入 就旁注 没旁注 用0day 没0day 扫目录 找后台 爆账户 传小马 放大马 拿权限 挂页面 放暗链 清数据 清日志 留后门 然后我 ...
- IntelliJ IDEA 下的SVN使用(傻瓜式教学)(转)
第一步:下载svn的客户端,通俗一点来说就是小乌龟啦!去电脑管理的软件管理里面可以直接下载,方便迅速 下载之后直接安装就好了,但是要注意这里的这个文件也要安装上,默认是不安装的,如果不安装,svn中的 ...