Event Tracking là việc thu thập và phân tích các sự kiện về hành động của người dùng trong ứng dụng di động, từ nhấn nút đến thực hiện mua hàng. Event tracking chất lượng cao là nền tảng của phân tích sản phẩm, thử nghiệm A/B và cá nhân hóa. Theo Amplitude (2024), các nhóm có Event Tracking hệ thống đưa ra quyết định sản phẩm nhanh hơn 3 lần nhờ cách tiếp cận dựa trên dữ liệu. Không có sự kiện, phân tích ứng dụng bị mù.
Chính yếu
Event Tracking là quá trình thu thập, lưu trữ và phân tích các hành động riêng lẻ của người dùng trong ứng dụng. Mỗi sự kiện bao gồm tên (event_name) và một tập hợp các tham số (event_params). Ví dụ, sự kiện purchase có các tham số price, currency, product_id, quantity.
Khác với Screen View chỉ ghi nhận việc mở màn hình, Event Tracking mô tả chính xác người dùng đang làm gì trên màn hình đó: đã nhấn nút "Mua", đã mở giỏ hàng, đã áp dụng mã khuyến mãi. Không có sự kiện, không thể hiểu được động cơ và bối cảnh hành động của người dùng.
Mỗi Analytics Event bao gồm các trường bắt buộc và tùy chọn. Bắt buộc: event_name, event_timestamp, user_id (hoặc device_id). Tùy chọn: tham số, mô tả ngữ cảnh.
| Trường | Bắt buộc | Ví dụ |
|---|---|---|
| event_name | Có | "purchase_completed" |
| event_timestamp | Có | 1719876543000 |
| user_id | Có | "user_abc123" |
| session_id | Không | "session_456def" |
| revenue | Không | 9.99 |
| currency | Không | "USD" |
Tham số revenue đặc biệt quan trọng — nó được truyền đến các nền tảng MMP để tự động tính ROAS và LTV.
Sự kiện được phân loại theo nguồn gốc và mục đích. Sự phân chia này giúp tổ chức cấu trúc dữ liệu và thiết lập quyền truy cập cho các nhóm khác nhau.
SDK của các nền tảng phân tích tự động thu thập các sự kiện cơ bản: app_install, app_remove, session_start, screen_view. Firebase Analytics tạo ra khoảng 20 sự kiện tự động mà không cần một dòng mã nào. Các sự kiện này bao phủ các chỉ số cơ bản nhưng không cung cấp hiểu biết về logic kinh doanh.
Sự kiện tùy chỉnh là thứ làm cho Event Tracking trở nên giá trị. Chúng mô tả các hành động kinh doanh: add_to_cart, start_subscription, level_complete, share_content, search_performed. Sự kiện tùy chỉnh yêu cầu gửi rõ ràng từ mã ứng dụng.
// Gửi sự kiện tùy chỉnh đến 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)
Trong ví dụ, sự kiện subscribe_premium chứa bốn tham số ngữ cảnh. Tham số source cho biết người dùng đã đăng ký từ màn hình nào — onboarding, cài đặt hay paywall.
Ngoài sự kiện, Event Tracking bao gồm User Properties — các thuộc tính gắn với người dùng: cấp độ đăng ký, quốc gia, phiên bản ứng dụng. User Property được gửi một lần và áp dụng cho tất cả sự kiện tiếp theo của phiên. Điều này cho phép phân khúc phân tích mà không cần thêm tham số vào mỗi sự kiện.
Super Properties (Amplitude) hay Global Properties (Mixpanel) là các thuộc tính gắn với phiên, không phải người dùng. Được sử dụng cho thử nghiệm A/B: variant_id được thêm làm Super Property vào tất cả sự kiện trong phiên, giúp nhà phân tích biết người dùng thuộc nhóm nào.
Sự kiện doanh thu là một lớp riêng để ghi lại các giao dịch. Chúng bao gồm số tiền, loại tiền tệ và loại mua hàng (đăng ký, mua một lần, khôi phục). Các nền tảng MMP (AppsFlyer, Adjust) yêu cầu sự kiện doanh thu để tính ROAS.
Theo Branch (2024), các ứng dụng truyền sự kiện doanh thu chính xác đến MMP nhận được dữ liệu phân bổ chính xác hơn 25% và có thể tối ưu hóa chiến dịch dựa trên LTV thay vì CPI.
Thiết lập Event Tracking trải qua ba giai đoạn: lập kế hoạch lược đồ sự kiện, tích hợp SDK, xác thực dữ liệu.
Tạo Event Taxonomy — tài liệu mô tả mỗi sự kiện: tên, tham số, trình kích hoạt gửi, chủ sở hữu. Ví dụ cho thương mại điện tử: order_completed → tham số: order_id, total_price, items_count, payment_method, shipping_city.
Kết nối Analytics SDK vào dự án. Firebase Analytics, Amplitude, Mixpanel — mọi SDK đều yêu cầu khởi tạo trong Application.onCreate(). Ví dụ cho 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,
},
);
}
}
Lớp AnalyticsService tập trung hóa việc gửi tất cả sự kiện. Mỗi phương thức tương ứng với một hành động kinh doanh. Điều này đơn giản hóa việc tìm kiếm — nếu sự kiện không đến, bạn tìm theo tên phương thức trong mã. Khi dự án mở rộng, số lượng phương thức có thể lên đến 50–100, nhưng cấu trúc vẫn dễ đọc nhờ phân nhóm theo tính năng.
Firebase DebugView cho phép xem sự kiện theo thời gian thực trên thiết bị nhà phát triển. Kích hoạt chế độ: adb shell setprop debug.firebase.analytics.app your.package. Tất cả sự kiện xuất hiện trong bảng điều khiển Firebase với độ trễ dưới 5 giây.
Sau khi kích hoạt DebugView, mở ứng dụng và thực hiện kịch bản kiểm tra — đăng ký, mua hàng, duyệt danh mục. Kiểm tra trong bảng điều khiển: tất cả sự kiện đã được gửi chưa, tham số đúng chưa, có trùng lặp không. Amplitude cung cấp công cụ tương tự — Amplitude Debugger cho iOS và Android.
Xác thực tự động qua CI/CD là cấp độ chất lượng tiếp theo. Thêm script vào pipeline để kiểm tra mỗi sự kiện trong lược đồ đã được gửi ít nhất một lần trong quá trình chạy thử nghiệm. Điều này ngăn chặn việc phát hành phiên bản thiếu sự kiện và tiết kiệm thời gian cho kỹ sư QA.
Đặt tên sự kiện là khía cạnh bị đánh giá thấp nhất của Event Tracking. Tên sai làm cho phân tích trở nên vô ích khi dự án có hơn 50 sự kiện.
Sử dụng mẫu object_action (chữ thường, snake_case): product_added, cart_opened, payment_failed, subscription_cancelled. Đối tượng là thực thể, hành động là động từ ở quá khứ. Có thể đọc như một câu: "sản phẩm đã được thêm", "giỏ hàng đã mở".
KHÔNG sử dụng khoảng trắng ("Add to Cart"), CamelCase ("AddToCart"), dấu chấm ("add.to.cart"), dấu gạch ngang ("add-to-cart"). Hầu hết SDK khuyến nghị snake_case. KHÔNG sử dụng tên phần tử UI ("btn_submit_clicked") — sự kiện nên mang tính kinh doanh, không phải kỹ thuật.
Thêm tiền tố là tên tính năng hoặc màn hình: onboarding_step_completed, checkout_payment_selected. Điều này cho phép lọc sự kiện theo chức năng trong báo cáo.
Tham số được chia thành ba loại: string (giá trị), number (số để tổng hợp), boolean (cờ). Tham số string chứa dữ liệu phân loại: quốc gia, nguồn lưu lượng, tên sản phẩm. Tham số number dùng làm chỉ số: giá, số lượng, thời lượng. Tham số boolean đánh dấu trạng thái: is_trial, is_promo_applied.
Tránh truyền đối tượng hoặc mảng trong một tham số — các nền tảng phân tích không thể phân tích chúng. Thay vì một chuỗi JSON trong một trường, hãy truyền nhiều tham số phẳng. Ví dụ, thay vì items_count_total, hãy truyền items_count và total_price riêng biệt.
Lựa chọn nền tảng Event Tracking phụ thuộc vào quy mô dự án và đội ngũ. Xem xét ba tùy chọn ở các cấp độ khác nhau.
Firebase là lựa chọn tiêu chuẩn cho startup. Giới hạn miễn phí là 500 event_name khác nhau, số lượng tham số không giới hạn. Tích hợp với BigQuery cho phân tích tùy chỉnh. Nhược điểm: phân khúc hạn chế, không có liên kết tự động sự kiện trong phiên.
Amplitude là nền tảng phân tích sản phẩm. Hỗ trợ Behavioural Cohorts, Funnel Analysis, Pathfinder. Cho phép tạo sự kiện ảo từ kết hợp sự kiện thực. Tích hợp với hơn 50 công cụ qua Segment.
Segment là middleware quản lý sự kiện. Bạn gửi sự kiện đến Segment, Segment phân phối chúng đến hơn 300 công cụ. Hữu ích trong môi trường enterprise nơi Firebase, Amplitude, Mixpanel, Braze và Salesforce được sử dụng đồng thời.
PostHog là nền tảng phân tích sản phẩm mã nguồn mở với Event Tracking riêng. Hỗ trợ tự động thu thập sự kiện, ghi lại phiên và feature flags. Triển khai trên máy chủ riêng, điều quan trọng cho các dự án GDPR hoặc dữ liệu nhạy cảm. Cung cấp API tương thích Python cho pipeline ETL.
Đối với dự án Flutter, khuyến nghị flutterfire_analytics + Amplitude qua plugin amplitude_flutter. Cho React Native — react-native-firebase + mixpanel-react-native.
Câu hỏi thường gặp
Phạm vi tối ưu là 50–150 sự kiện cho mỗi ứng dụng. Dưới 50 — không đủ dữ liệu để phân tích, hơn 150 — chất lượng giảm (nhà phân tích không thể theo dõi hết). Cho MVP, 20–30 sự kiện chính là đủ.
SDK di động trung bình đệm sự kiện và gửi theo lô mỗi 5–30 giây. Giới hạn an toàn là 100 sự kiện mỗi phút trên mỗi thiết bị. Nhiều hơn — rủi ro mất dữ liệu khi kết nối kém. Các đột biến (ví dụ: tải cấp độ) không nghiêm trọng.
Có, SDK hiện đại lưu sự kiện trong bộ nhớ cục bộ khi không có mạng. Khi kết nối được phục hồi, chúng được gửi với dấu thời gian chính xác. Firebase lưu trữ sự kiện ngoại tuyến đến 7 ngày, Amplitude — đến 30 ngày.
Sự kiện mới được tạo với event_name mới, sự kiện cũ giữ lại cho dữ liệu lịch sử. Tạo ánh xạ trong tầng BI (CASE SQL hoặc bảng điều khiển) để kết hợp dữ liệu. Không bao giờ thay đổi tên sự kiện hiện có — sẽ phá hỏng lịch sử.
Có, Event Tracking là nền tảng của cá nhân hóa. Sự kiện được lọc theo thời gian thực: nếu người dùng gửi product_viewed 3 lần mà không mua, hiển thị cửa sổ bật lên giảm giá. Amplitude và Braze hỗ trợ trình kích hoạt dựa trên sự kiện.
Tổng kết
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm