Event Tracking — 收集和分析用户在移动应用内的行为事件,从点击按钮到完成购买。高质量的事件跟踪是产品分析、A/B测试和个性化的基础。根据Amplitude(2024年)的数据,采用系统性事件跟踪的团队由于数据驱动的方法,产品决策速度提高3倍。没有事件,应用分析就是盲目的。
要点
事件跟踪 — 是收集、存储和分析用户在应用中的离散行为的过程。每个事件由一个名称(event_name)和一组参数(event_params)组成。例如,purchase事件具有参数price、currency、product_id、quantity。
与记录屏幕打开事实的Screen View不同,事件跟踪描述了用户在该屏幕上具体做了什么:点击了“购买”按钮、打开了购物车、应用了促销代码。没有事件,就无法理解用户的动机和行为背景。
每个分析事件包含必填和可选字段。必填:event_name、event_timestamp、user_id(或device_id)。可选:参数、上下文描述。
| 字段 | 必填 | 示例 |
|---|---|---|
| event_name | 是 | “purchase_completed” |
| event_timestamp | 是 | 1719876543000 |
| user_id | 是 | “user_abc123” |
| session_id | 否 | “session_456def” |
| revenue | 否 | 9.99 |
| currency | 否 | “USD” |
revenue参数尤其重要 — 它被传递给MMP平台,用于自动计算ROAS和LTV。
事件根据来源和用途进行分类。这种分类有助于组织数据结构并为不同团队分配访问权限。
分析平台的SDK自动收集基本事件:app_install、app_remove、session_start、screen_view。Firebase Analytics无需一行代码即可生成约20个自动事件。这些事件涵盖基本指标,但不能提供对业务逻辑的理解。
自定义事件 — 是使事件跟踪有价值的东西。它们描述业务行为:add_to_cart、start_subscription、level_complete、share_content、search_performed。自定义事件需要从应用代码中显式发送。
// 向Firebase发送自定义事件
val bundle = Bundle().apply {
putString(AnalyticsParam.ITEM_ID, "prod_789")
putString(AnalyticsParam.ITEM_NAME, "Premium Subscription")
putString(AnalyticsParam.CURRENCY, "USD")
putDouble(AnalyticsParam.PRICE, 29.99)
putString(AnalyticsParam.SOURCE, "onboarding_screen")
}
FirebaseAnalytics.getInstance(this)
.logEvent("subscribe_premium", bundle)
在示例中,subscribe_premium事件包含四个上下文参数。source参数允许我们理解用户是从哪个屏幕进行订阅的 — 新手引导、设置或付费墙。
除了事件之外,事件跟踪还包括用户属性 — 附加到用户的属性:订阅级别、国家、应用版本。用户属性发送一次并应用于会话的所有后续事件。这可以在不向每个事件添加参数的情况下对分析进行分段。
超级属性(Amplitude)或全局属性(Mixpanel) — 附加到会话而非用户的属性。用于A/B测试:variant_id作为超级属性添加到会话中的所有事件,分析人员可以看到用户属于哪个组。
收入事件 — 用于记录交易的独立类别。它们包含金额、货币和购买类型(订阅、一次性购买、恢复)。MMP平台(AppsFlyer、Adjust)需要收入事件来计算ROAS。
根据Branch(2024年)的数据,正确将收入事件传递给MMP的应用获得的数据归因准确性提高25%,并且可以基于LTV而不是CPI优化广告活动。
事件跟踪的设置分三个阶段进行:规划事件模式、集成SDK、验证数据。
创建事件分类法 — 描述每个事件的文档:名称、参数、发送触发器、所有者。电子商务示例:order_completed → 参数:order_id、total_price、items_count、payment_method、shipping_city。
将分析SDK连接到项目。Firebase Analytics、Amplitude、Mixpanel — 每个SDK都需要在Application.onCreate()中进行初始化。Flutter示例:
import 'package:firebase_analytics/firebase_analytics.dart';
class AnalyticsService {
final _analytics = FirebaseAnalytics.instance();
Future<void> logPurchase({
required String productId,
required double price,
required String currency,
}) async {
await _analytics.logEvent(
name: 'purchase_completed',
parameters: {
'product_id': productId,
'price': price,
'currency': currency,
'timestamp': DateTime.now().millisecondsSinceEpoch,
},
);
}
}
AnalyticsService类集中发送所有事件。每个方法对应一个业务行为。这简化了查找发送 — 如果事件未到达,按方法名称在代码中搜索。在项目扩展时,方法数量可能增长到50–100个,但由于按功能分组,结构保持可读性。
Firebase DebugView允许在开发人员设备上实时查看事件。启用模式:adb shell setprop debug.firebase.analytics.app your.package。所有事件将在5秒以内的延迟后在Firebase控制台中显示。
启用DebugView后,打开应用并执行测试场景 — 注册、购买、浏览目录。在控制台中检查:所有事件是否已发送、参数是否正确、是否有重复。Amplitude提供类似的工具 — 适用于iOS和Android的Amplitude Debugger。
通过CI/CD的自动验证 — 下一个质量级别。向管道添加一个脚本,检查模式中的每个事件在测试运行期间是否至少发送了一次。这可以防止部署缺少事件的版本,并节省QA工程师的时间。
事件命名 — 事件跟踪中最被低估的方面。当项目中有超过50个事件时,不正确的命名会使分析变得无用。
使用object_action模式(小写、snake_case):product_added、cart_opened、payment_failed、subscription_cancelled。对象 — 实体,动作 — 过去时动词。它像一个句子一样被阅读:“产品已添加”、“购物车已打开”。
不要使用空格(“Add to Cart”)、CamelCase(“AddToCart”)、点(“add.to.cart”)、连字符(“add-to-cart”)。大多数SDK推荐snake_case。不要使用UI元素名称(“btn_submit_clicked”) — 事件应该是业务性的,而不是技术性的。
对于前缀,添加功能或屏幕名称:onboarding_step_completed、checkout_payment_selected。这允许在报告中按功能过滤事件。
参数分为三种类型:string(值)、number(用于聚合的数字)、boolean(标志)。字符串参数包含分类数据:国家、流量来源、产品名称。数字参数用于指标:价格、数量、持续时间。布尔参数标记状态:is_trial、is_promo_applied。
避免在单个参数中传递对象或数组 — 分析平台无法解析它们。与其在一个字段中使用JSON字符串,不如传递多个平面参数。例如,不要使用items_count_total,而是分别传递items_count和total_price。
事件跟踪平台的选择取决于项目的规模和团队。我们考虑三个不同级别的选项。
Firebase — 初创公司的标准选择。免费限制 — 500个不同的event_name,参数数量不限。与BigQuery集成以进行自定义分析。缺点:分段有限,没有自动的事件会话关联。
Amplitude — 产品分析平台。支持行为队列、漏斗分析、路径探索。允许从真实事件组合创建虚拟事件。通过Segment与50多个工具集成。
Segment — 用于管理事件的中间件。您将事件发送给Segment,它将其分发到300多个工具。在同时使用Firebase、Amplitude、Mixpanel、Braze和Salesforce的企业环境中非常有用。
PostHog — 自带事件跟踪的开源产品分析平台。支持自动事件捕获、会话录制和功能标志。部署在自己的服务器上,这对于涉及GDPR或机密数据的项目至关重要。提供与Python兼容的API用于ETL管道。
对于Flutter项目,建议使用flutterfire_analytics + 通过amplitude_flutter插件使用的Amplitude。对于React Native — react-native-firebase + mixpanel-react-native。
常见问题
最佳范围是每个应用50–150个事件。少于50个 — 数据不足以进行分析,超过150个 — 质量下降(分析人员无法全部跟踪)。对于MVP,20–30个关键事件就足够了。
普通的移动SDK会缓冲事件并每5–30秒分批发送。安全限制 — 每台设备每分钟100个事件。更多 — 在连接不良时存在数据丢失风险。峰值(例如加载关卡)不关键。
是的,现代SDK在没有网络时将事件存储在本地存储中。连接恢复后,它们会以正确的时间戳发送。Firebase存储最多7天的离线事件,Amplitude — 最多30天。
新事件使用新的event_name创建,旧事件保留用于历史数据。在BI层(SQL CASE或仪表板)中创建映射以合并数据。切勿更改现有事件的名称 — 您会破坏历史记录。
是的,事件跟踪是个性化的基础。事件会实时过滤:如果用户发送了product_viewed 3次而未购买,则显示折扣弹窗。Amplitude和Braze支持基于事件的触发器。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。