Skip to content
Docs menu Mobile apps

Automatic app events

What the iOS and Android SDKs send on their own, what you send yourself, and what is not tracked

On this page

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

To turn off the lifecycle events, set trackLifecycleEvents to false. To turn off deep_link_opened, set trackDeepLinks to false. Change the session length with sessionTimeoutMinutes. See the options on the iOS and Android pages.

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.

Swift
Sfere.shared.track("wishlist_shared", properties: ["item_id": "sku_221", "channel": "whatsapp"])
Sfere.shared.screen("Product", properties: ["item_id": "sku_221"])
Kotlin
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.

Purchases#

Use the purchase call for completed orders. It sends a purchase event with transaction_id, currency, value and items, and a deduplication ID so the same order reported by your server is counted once. See the examples on the iOS and Android pages.

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.