Automatic app events
What the iOS and Android SDKs send on their own, what you send yourself, and what is not tracked
Sent automatically#
Both SDKs send these events with no code beyond setup. They use the same names on iOS and Android, so one query covers both platforms.
| Event | When it is sent | Properties |
|---|---|---|
app_installed |
The first launch after the app is installed | none beyond the context below |
app_opened |
A cold start, and each return to the foreground | from_background: true when the app came back from the background |
app_updated |
The first launch of a new app version | previous_version, previous_build |
app_backgrounded |
The app goes to the background. Queued events are uploaded at this point. | none beyond the context below |
session_started |
The first event of each session. A session ends after 30 minutes without activity. | none beyond the context below |
deep_link_opened |
A link opens the app | url, referring_application |
Added to every event#
Every event, automatic or your own, carries:
| Field | What it holds |
|---|---|
context.app |
App name, version and build |
context.device, context.os, context.screen, context.network |
Device model, operating system, screen size and connection type |
context.session.id |
The current session |
context.traits |
The customer’s traits from the last identify, until reset |
context.consent |
Consent categories, when you have set them |
context.clientIds, context.campaign |
Ad click IDs and UTM values from the link that opened the app, for the rest of the session |
context.library |
The SDK name and version |
Custom events#
Send any event your app needs with track. Use snake_case names, and the GA4 ecommerce names where one fits, such as view_item, add_to_cart or begin_checkout.
Sfere.shared.track("wishlist_shared", properties: ["item_id": "sku_221", "channel": "whatsapp"])
Sfere.shared.screen("Product", properties: ["item_id": "sku_221"])Sfere.shared.track("wishlist_shared", mapOf("item_id" to "sku_221", "channel" to "whatsapp"))
Sfere.shared.screen("Product", mapOf("item_id" to "sku_221"))Properties can be strings, numbers, booleans, lists and nested objects. Every distinct property name becomes a column in your warehouse, so keep names consistent across platforms.
Not tracked#
| Event | Status |
|---|---|
| App uninstalled | Not tracked. Detecting uninstalls needs push notifications, which the SDKs do not handle. |
| Push notification sent, delivered, opened or dismissed | Not tracked. The SDKs do not register for push notifications. |
| Session ended | No separate event. Each event carries context.session.id, so session length can be worked out in the warehouse. |
| Screen views | Not automatic. Call screen when a screen appears. |