一直以来,SAGITEAM 的小游戏矩阵使用的是自建的分析系统。我们使用 ZeroMQ 把数据传递给一个后端程序,作为 CSV 存储下来。需要分析的时候,将这些数据作为 pandas 格式载入,在 zeppelin 中进行多维度分析,最后进行图表化呈现。

zeppelin 对服务器要求颇高,不稳定(v0.8.2),在大量计算的情况下,内置 Python 进程会经常崩掉,内存释放有问题,32G 内存常常吃紧。但对于我们上百万 DAU 的小盘子来说,还是够用的。

Terrible Zeppelin

考虑到海外再部署一套这样的统计系统的复杂性和稳定性,我们希望使用更成熟的商业解决方案,所以选择了 Firebase

本文面向游戏开发者和游戏数据分析师,试图解释使用 Firebase 来实现游戏的统计分析的一般流程。对于数据分析师和程序员需要重点阅读的段落,本文中进行了特别标注。但无论程序员还是分析师,我都建议能够通读本文和本文提到的所有文档。

Firebase 的文档比较复杂(Firebase文档入口),如果你也使用 Unity 开发游戏并希望使用 Firebase,那么阅读本文可能会帮你节省一些时间。

1. 流程

除了 Firebase,这套流程还需要 BigQueryData Studio。下面这张图能让你更容易理解每个产品之间的分工:

Firebase+BigQuery+Data Studio

2. Firebase

2.1 Firebase 是什么

Firebase 是一套工具集。它把一大坨生产力工具整合在一起,方便开发者使用和选择,同时支持 iOS/Android/Unity/C++/Web 平台和环境。

Firebase All

在我们的游戏中,使用了 Analytics、Predictions 和 A/B Testing(如上图中红框所示)。在本文中,只会包含 Analytics 的内容。

2.2 事件和属性

Firebase 中的数据来自于 Firebase SDK 的自动搜集,以及程序员在游戏中使用 SDK 提供的 logEvent 方法主动上报。

面向分析师

Firebase 中记录的数据,包括“事件”和“用户属性”,官方文档 中的描述为:

  • 事件:您的应用中发生了什么,例如用户操作、系统事件或错误。
  • 用户属性:您为了描述自己的细分用户群而定义的属性,例如语言首选项或地理位置。

面向全体

Firebase 会自动记录下面这些事件: 自动收集的事件

Firebase 还定义了所有应用都支持的常规事件:事件:所有应用,这类事件在 Firebase 中不会自动记录,程序员需要根据游戏中定义的行为,使用指定名称主动上报它们。

Firebase 还针对游戏的特点指定了一些专用事件:事件:游戏,这类事件在 Firebase 中不会自动记录,程序员需要根据游戏中定义的行为,使用这些名称主动为上报它们。

除了上面指定名称的事件之外,Firebase 还提供了最多 500 个自定义事件名称,这对于大多数游戏来说都够用。需要注意的是,需要仔细规划这些事件名称,不要浪费它们。因为使用过的名称是 不能删除 的:收集和配置限制

2.3 接入

面向分析师

快速阅读文档 Google Analytics(分析)

面向程序员

请仔细阅读文档: 将 Firebase 添加到您的 Unity 项目

在这里可以找到范例:https://firebase.google.com/docs/samples

注意:接入 SDK 之前,要先创建对应的 Firebase 项目并拿到配置参数。

2.4 在 Firebase 中查看报告

登录 Firebase Console,点击 Dashboard 菜单,在这里查看各种可视化数据,并可以根据用户属性进行各种组合分析。

Firebase Dashboard

如果希望查看自定义的事件,点击 Events 菜单,在这里查看上报的各种自定义事件。

Firebase Events

自定义事件是以表格形式呈现的。如果希望将其可视化,或者综合其他的数据一起进行分析,在 Firebase Console 中是无法做到的,此时我们需要 BigQuery

3. BigQuery

BigQuery 是一个数据库产品,支持使用标准 SQL 语句查询。我们将 Firebase 中收集的原始数据导出到 BigQuery 中,就可以使用 SQL 的强大语法来进行自定义查询了。

上图底部,红色箭头指向 “在 BigQuery 中查看您的原始事件” 链接,点击它就可以将 Firebase 数据导出到 BigQuery。

如果这个链接没有出现,可能需要预先 将 Firebase 与 BigQuery 相关联

面向程序员

为了方便演示,我们导入一些公共数据到 BigQuery 中。选择 “资源-添加数据-浏览公共数据集”,搜索 NCAA Basketball 数据将其加入 BigQuery 用于测试。

BigQuery NCAA

BigQuery Basketball

ncaa_basketball.mbb_historical_teams_games 这个表保存了 NCAA 联赛从 1996-97 赛季到现在的每支队伍的比分数据。每场比赛包含两条记录,每条记录代表一支球队。

上图中的 SQL 语句查询出赛季、球队名称、球队比分,对手比分等字段,并使用赛季进行排序。

查询的结果以表格的形式呈现。

要将查询到的数据可视化展示,我们需要 Data Studio

4. Data Studio

上图中,红色箭头指向 “使用 Data Studio” 链接,点击它可以在 Data Studio 中对查询结果进行可视化。

DataStudio Basketball

面向分析师

在 DataStudio 界面中,可以对数据进行多种维度的比较和分析,也有多种图表和关联可供选择。

分析师需要提前制定好数据分析需求,要求程序员按最大数据集的在 BigQuery 中进行查询,才能保证 Data Studio 中有更灵活的维度。

5. FAQ

5.1 Firebase 和 Analysis

对于没有使用过 Google Analytics 的新用户,可以忽略这一节。

熟悉 Google 产品的同学可能知道,Google 在 Firebase 推出之前,就推出了 Google Analytics 这款产品。那么刚才介绍的 Google Analytics 和 Firebase 是什么关系呢?

根据资料,我认为 Google 希望将 Analytics 这个产品整合成为 Firebase 的一部分。但由于 Analytics 产品的用户众多,这个工作量相当大。Google 或许选择了两个产品后端融合,但前端分离的折衷办法。

对于没有 Google Analytics 历史的产品,直接接入 Firebase 中的 Analytics 即可。Firebase Console 中显示的数据与 Google Analytics 前端中显示的数据是完全相同的。

如果对这个观点感兴趣,可以仔细阅读:

5.2 在服务器端使用 logEvent

一个很容易想到的需求,是能否在 server 端使用 logEvent 记录数据到 Firebase?

对于游戏来说,许多需要分析的数据是由服务器产生的,或者在服务器中可以更安全,更准确的获取到这些数据。

但 Firebase 不是为了这个场景设计的。因为其 SDK 在记录数据的时候,还搜集了大量设备数据和用户数据(例如用户年龄、设备型号、登录状态),这些数据与其他数据是相关联的,在 server 端不易或难以完整得到这些数据。

有一个简单的替代方案。

我们使用 BigQuery 来分析数据,可利用 BigQuery API 从 server 端上报数据到 BigQuery 中,与 Firebase 的导出数据实现关联查询。

5.3 费用

面向程序员

BigQuery 是一个付费的数据库产品,每一次查询都要付费。

有一些技巧用来控制费用。

例如避免使用 SELECT * FROM ... 查看数据可用性,改为使用免费的 ”预览“ 功能。或者 ”在运行之前估算查询费用“ 都是很好的方法。

下面的文档请程序员务必认真阅读。

全文完