Auto-Tracked Events
The SDK automatically tracks the events listed below. You do not need to call track() for any of them. Tracking them manually will result in duplicate data.
These events can be used as:
- Experiment conversion goals in the Console
- Webhook triggers for server-side integrations
- In-app message and survey triggers
- Analytics filters in dashboards and exports
Core Events
| Event | Trigger | Key Properties |
|---|
session_start | New session begins | session_id |
session_end | 30 minutes of inactivity or app enters background | session_id, duration_ms |
app_open | App enters foreground | — |
app_close | App enters background | — |
A new session starts when the app comes to the foreground after 30 minutes of inactivity. The session_id is included in all events for the duration of the session.
Onboarding Events
| Event | Trigger | Key Properties |
|---|
onboarding_flow_started | An onboarding flow begins | flow_id |
onboarding_step_viewed | A step is displayed to the user | flow_id, step_id, step_index |
onboarding_step_completed | User completes a step (e.g., answers a question) | flow_id, step_id, step_index |
onboarding_step_skipped | User skips a step | flow_id, step_id, step_index |
onboarding_flow_completed | User completes the entire flow | flow_id, total_steps |
onboarding_flow_dismissed | User dismisses the flow before completing | flow_id, step_index |
Paywall Events
| Event | Trigger | Key Properties |
|---|
paywall_presented | A paywall is displayed | paywall_id, placement |
paywall_action | User interacts with a paywall element | paywall_id, action |
paywall_dismissed | Paywall is closed | paywall_id, dismiss_reason |
Billing Events
| Event | Trigger | Key Properties |
|---|
purchase_started | A purchase flow begins | product_id |
purchase_completed | A purchase completes successfully | product_id, transaction_id |
purchase_failed | A purchase fails with an error | product_id, error |
purchase_canceled | User cancels the purchase dialog | product_id |
restore_started | A restore operation begins | — |
restore_completed | A restore operation completes | restored_count |
Push Notification Events
| Event | Trigger | Key Properties |
|---|
push_token_registered | Device token is registered with AppDNA | — |
push_permission_granted | User grants push notification permission | — |
push_permission_denied | User denies push notification permission | — |
push_delivered | A push notification is delivered to the device | push_id |
push_tapped | User taps on a push notification | push_id, action |
Experiment Events
| Event | Trigger | Key Properties |
|---|
experiment_exposure | First getVariant() call per session per experiment | experiment_id, variant |
Exposure is tracked once per session per experiment. Calling getVariant() multiple times in the same session does not create duplicate exposure events.
In-App Message Events
| Event | Trigger | Key Properties |
|---|
message_presented | An in-app message is displayed | message_id, message_type |
message_action | User taps an action in the message | message_id, action |
message_dismissed | Message is closed | message_id |
Survey Events
| Event | Trigger | Key Properties |
|---|
survey_presented | A survey is displayed | survey_id, survey_type |
survey_response_submitted | User submits a survey response | survey_id, question_type |
survey_dismissed | Survey is closed without completing | survey_id |
Deep Link Events
| Event | Trigger | Key Properties |
|---|
deep_link_received | A deep link is opened | url, source |
deferred_deep_link_resolved | A deferred deep link is resolved on first launch | url, referrer |
Server-Driven Screen Events
| Event | Trigger | Key Properties |
|---|
screen_presented | A server-driven screen is displayed | screen_id, presentation |
screen_dismissed | A server-driven screen is closed | screen_id, dismiss_reason |
screen_action | User taps a CTA or interactive element in a screen | screen_id, section_id, action_type |
screen_section_viewed | A section scrolls into the viewport | screen_id, section_id, section_type |
screen_section_action | User interacts with a specific section | screen_id, section_id, action |
flow_started | A multi-screen flow begins | flow_id, total_screens |
flow_completed | A multi-screen flow finishes | flow_id, screens_viewed |
flow_abandoned | A flow is dismissed before completion | flow_id, screen_index, screens_viewed |
flow_screen_transition | User navigates between screens in a flow | flow_id, from_screen_id, to_screen_id |
slot_registered | A screen slot first renders in the app | slot_id |
slot_rendered | A slot displays content from a screen config | slot_id, screen_id |
slot_empty | A slot renders with no assigned content | slot_id |
interception_triggered | A navigation interception fires and injects a screen | screen_id, source_screen |
interception_dismissed | An intercepted screen is dismissed | screen_id, dismiss_reason |
Web Entitlement Events
| Event | Trigger | Key Properties |
|---|
web_entitlement_activated | Web subscription becomes active | plan_name, status |
web_entitlement_expired | Web subscription expires or is canceled | plan_name, status |