Track Events
Send behavioral events from web and mobile with consistent naming, properties, and batching behaviour.
Introduction
Events describe what users do. Profiles describe who they are. Use track / logEvent for behaviour; use profilePush / login traits for attributes.
Web — track()
Batched (up to 100 or every 5s) via sendBeacon with fetch fallback. Queued until guest_id exists.
- Auto: $init, app_installed, app_opened, $pageview, app_closed
- System props: $os, $browser, $url, $platform, $lib_version, $session_id, …
- Sessions expire after 30 minutes inactivity
growise.track('Product Viewed', {
product_id: 'SKU-12345',
category: 'Footwear',
price: 2499,
})Android — logEvent / track
SQLite cache; flush ~every 5 events and on background.
- Auto: app_install, App First Open, App Updated, app_open, notification_received, App Crashed
GrowWise.logEvent(
"product_viewed",
mapOf(
"item_id" to "sku_1001",
"category" to "Electronics",
"price" to 199.99
)
)Flutter — logEvent
await GrowWise.logEvent('app_opened');
await GrowWise.logEvent('product_viewed', {
'item_id': 'prod_headphone_2026',
'price': 199.99,
});MaterialApp(
navigatorObservers: [GrowWiseNavigatorObserver()],
// ...
);Naming conventions
- Past-tense, human-readable: Product Viewed, Purchase Completed
- Stable property keys: product_id, amount, currency
- Avoid PII in event properties when a profile trait is enough