Event Tracking คือการรวบรวมและวิเคราะห์เหตุการณ์เกี่ยวกับการกระทำของผู้ใช้ภายในแอปมือถือ ตั้งแต่การคลิกปุ่มไปจนถึงการซื้อสินค้า Event tracking ที่มีคุณภาพเป็นพื้นฐานของการวิเคราะห์ผลิตภัณฑ์ การทดสอบ A/B และการปรับเปลี่ยนเฉพาะบุคคล ตามข้อมูลจาก Amplitude (2024) ทีมที่มี Event Tracking อย่างเป็นระบบจะตัดสินใจเกี่ยวกับผลิตภัณฑ์ได้เร็วกว่าถึง 3 เท่าด้วยแนวทางที่ขับเคลื่อนด้วยข้อมูล หากไม่มีเหตุการณ์ การวิเคราะห์แอปก็จะไร้ประโยชน์
ประเด็นสำคัญ
Event Tracking คือกระบวนการรวบรวม จัดเก็บ และวิเคราะห์การกระทำเฉพาะของผู้ใช้ในแอป แต่ละเหตุการณ์ประกอบด้วยชื่อ (event_name) และชุดพารามิเตอร์ (event_params) ตัวอย่างเช่น เหตุการณ์ purchase มีพารามิเตอร์ price, currency, product_id, quantity
แตกต่างจาก Screen View ที่บันทึกการเปิดหน้าจอ Event Tracking จะอธิบายว่าผู้ใช้กำลังทำอะไรบนหน้าจอนั้นอย่างแท้จริง: กดปุ่ม "ซื้อ", เปิดตะกร้าสินค้า, ใช้รหัสโปรโมชั่น หากไม่มีเหตุการณ์ จะไม่สามารถเข้าใจแรงจูงใจและบริบทของการกระทำของผู้ใช้ได้
แต่ละ Analytics Event ประกอบด้วยฟิลด์ที่จำเป็นและไม่จำเป็น ที่จำเป็น: 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 รายการโดยไม่ต้องเขียนโค้ดแม้แต่บรรทัดเดียว เหตุการณ์เหล่านี้ครอบคลุมเมตริกพื้นฐาน แต่ไม่ให้ความเข้าใจเกี่ยวกับตรรกะทางธุรกิจ
เหตุการณ์กำหนดเอง คือสิ่งที่ทำให้ Event Tracking มีคุณค่า พวกมันอธิบายการกระทำทางธุรกิจ: 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 ช่วยให้เข้าใจว่าผู้ใช้เริ่มสมัครสมาชิกจากหน้าจอใด — การแนะนำ, การตั้งค่า หรือ paywall
นอกจากเหตุการณ์แล้ว Event Tracking ยังรวมถึง User Properties — คุณลักษณะที่ผูกกับผู้ใช้: ระดับการสมัครสมาชิก ประเทศ เวอร์ชันแอป User Property จะถูกส่งครั้งเดียวและนำไปใช้กับเหตุการณ์ที่ตามมาทั้งหมดในเซสชัน ซึ่งช่วยให้สามารถแบ่งส่วนการวิเคราะห์ได้โดยไม่ต้องเพิ่มพารามิเตอร์ให้กับทุกเหตุการณ์
Super Properties (Amplitude) หรือ Global Properties (Mixpanel) เป็นคุณลักษณะที่ผูกกับเซสชัน ไม่ใช่ผู้ใช้ ใช้สำหรับการทดสอบ A/B: variant_id ถูกเพิ่มเป็น Super Property ให้กับเหตุการณ์ทั้งหมดในเซสชัน เพื่อให้นักวิเคราะห์เห็นว่าผู้ใช้อ'yūอยู่ในกลุ่มใด
เหตุการณ์รายได้ เป็นคลาสแยกต่างหากสำหรับบันทึกธุรกรรม ประกอบด้วยจำนวนเงิน สกุลเงิน และประเภทการซื้อ (สมัครสมาชิก, ซื้อครั้งเดียว, กู้คืน) แพลตฟอร์ม MMP (AppsFlyer, Adjust) ต้องการเหตุการณ์รายได้เพื่อคำนวณ ROAS
ตามข้อมูลของ Branch (2024) แอปที่ส่งเหตุการณ์รายได้ไปยัง MMP อย่างถูกต้องจะได้รับข้อมูลการระบุแหล่งที่มาที่แม่นยำขึ้น 25% และสามารถปรับแต่งแคมเปญตาม LTV แทน CPI ได้
การตั้งค่า Event Tracking ดำเนินการในสามขั้นตอน: การวางแผนสคีมาเหตุการณ์, การรวม SDK, การตรวจสอบข้อมูล
สร้าง Event Taxonomy — เอกสารที่อธิบายแต่ละเหตุการณ์: ชื่อ, พารามิเตอร์, ตัวกระตุ้นการส่ง, ผู้รับผิดชอบ ตัวอย่างสำหรับอีคอมเมิร์ซ: order_completed → พารามิเตอร์: order_id, total_price, items_count, payment_method, shipping_city
เชื่อมต่อ Analytics 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 เหตุการณ์ทั้งหมดจะปรากฏในคอนโซล Firebase โดยมีความหน่วงน้อยกว่า 5 วินาที
หลังจากเปิดใช้งาน DebugView ให้เปิดแอปและดำเนินการสถานการณ์ทดสอบ — การลงทะเบียน, การซื้อ, การเรียกดูแค็ตตาล็อก ตรวจสอบในคอนโซล: เหตุการณ์ทั้งหมดถูกส่งหรือไม่, พารามิเตอร์ถูกต้องหรือไม่, มีรายการซ้ำหรือไม่ Amplitude มีเครื่องมือที่คล้ายกัน — Amplitude Debugger สำหรับ iOS และ Android
การตรวจสอบอัตโนมัติผ่าน CI/CD เป็นระดับคุณภาพถัดไป เพิ่มสคริปต์ในไปป์ไลน์ที่ตรวจสอบว่าแต่ละเหตุการณ์ในสคีมาถูกส่งอย่างน้อยหนึ่งครั้งระหว่างการทดสอบ ซึ่งป้องกันการปล่อยเวอร์ชันที่มีเหตุการณ์ขาดหายและประหยัดเวลาของวิศวกร QA
การตั้งชื่อเหตุการณ์ เป็นแง่มุมที่ถูกมองข้ามมากที่สุดของ Event Tracking ชื่อที่ไม่ถูกต้องทำให้การวิเคราะห์ไร้ประโยชน์เมื่อโปรเจกต์มีมากกว่า 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 (ธง) พารามิเตอร์ string มีข้อมูลเชิงหมวดหมู่: ประเทศ, แหล่งที่มาของการเข้าชม, ชื่อสินค้า พารามิเตอร์ number ใช้เป็นเมตริก: ราคา, ปริมาณ, ระยะเวลา พารามิเตอร์ boolean แสดงสถานะ: is_trial, is_promo_applied
หลีกเลี่ยงการส่งออบเจกต์หรืออาร์เรย์ในพารามิเตอร์เดียว — แพลตฟอร์มการวิเคราะห์ไม่สามารถแยกวิเคราะห์ได้ แทนที่จะส่งสตริง JSON ในฟิลด์เดียว ให้ส่งพารามิเตอร์แบบราบหลายตัว ตัวอย่างเช่น แทนที่ items_count_total ให้ส่ง items_count และ total_price แยกกัน
การเลือกแพลตฟอร์ม Event Tracking ขึ้นอยู่กับขนาดของโปรเจกต์และทีม มาดูสามตัวเลือกในระดับที่แตกต่างกัน
Firebase เป็นตัวเลือกมาตรฐานสำหรับสตาร์ทอัพ ขีดจำกัดฟรีคือ event_name แตกต่างกัน 500 รายการ จำนวนพารามิเตอร์ไม่จำกัด การรวมกับ BigQuery สำหรับการวิเคราะห์ที่กำหนดเอง ข้อเสีย: การแบ่งส่วนจำกัด, ไม่มีการเชื่อมโยงเหตุการณ์ในเซสชันอัตโนมัติ
Amplitude เป็นแพลตฟอร์มการวิเคราะห์ผลิตภัณฑ์ รองรับ Behavioural Cohorts, Funnel Analysis, Pathfinder สามารถสร้างเหตุการณ์เสมือนจากการรวมกันของเหตุการณ์จริง ผสานรวมกับเครื่องมือ 50+ รายการผ่าน Segment
Segment เป็นมิดเดิลแวร์สำหรับจัดการเหตุการณ์ คุณส่งเหตุการณ์ไปยัง Segment แล้ว Segment จะกระจายไปยังเครื่องมือ 300+ รายการ มีประโยชน์ในสภาพแวดล้อมองค์กรที่ใช้ Firebase, Amplitude, Mixpanel, Braze และ Salesforce พร้อมกัน
PostHog เป็นแพลตฟอร์มการวิเคราะห์ผลิตภัณฑ์โอเพนซอร์สที่มี Event Tracking ของตัวเอง รองรับการจับเหตุการณ์อัตโนมัติ, การบันทึกเซสชัน และ feature flags ติดตั้งบนเซิร์ฟเวอร์ของตนเอง ซึ่งสำคัญสำหรับโปรเจกต์ที่มี GDPR หรือข้อมูลที่ละเอียดอ่อน มี API ที่เข้ากันได้กับ Python สำหรับไปป์ไลน์ ETL
สำหรับโปรเจกต์ Flutter แนะนำ flutterfire_analytics + Amplitude ผ่านปลั๊กอิน amplitude_flutter สำหรับ 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 หรือแดชบอร์ด) เพื่อรวมข้อมูล อย่าเปลี่ยนชื่อเหตุการณ์ที่มีอยู่ — จะทำลายประวัติ
ใช่ Event Tracking เป็นพื้นฐานของการปรับเปลี่ยนเฉพาะบุคคล เหตุการณ์จะถูกกรองแบบเรียลไทม์: หากผู้ใช้ส่ง product_viewed 3 ครั้งโดยไม่ซื้อ ให้แสดงป็อปอัปส่วนลด Amplitude และ Braze รองรับทริกเกอร์ตามเหตุการณ์
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม