Shared SDK Behavior
Fantasma’s iOS, Android, Flutter, and React Native SDKs share one ingest contract and one core runtime model. The platform pages cover install and API shape; this page covers the behavior they have in common.Common Ingest Model
- Events are queued durably before upload rather than sent inline.
- Uploads target
POST /v1/events. - Client apps must use project-scoped
ingestwrite keys. - SDKs upload in JSON batches and treat
202 Acceptedas the success case. - Malformed successful responses are treated as invalid and leave queued rows in place.
Upload Triggers
All shipped SDKs attempt uploads:- every 30 seconds
- when the queue reaches 100 events
- when
flush()is called
Queue And Identity Semantics
- Accepted events are deleted from the durable queue.
- Failed or retryable uploads keep rows in the queue for later replay.
clear()rotates the future install identity without rewriting already queued rows.- Each SDK auto-populates built-in metadata such as timestamp, install id, platform, device, app version, OS version, and locale.
platformis the coarse OS family.deviceis the coarse form factor.- Apple SDKs emit
platform=macos,device=desktopfor native macOS, Mac Catalyst, and iOS-on-Mac desktop-class runs. - Android-class mobile SDKs emit
platform=androidwithdevice=phoneordevice=tablet, and fall back todevice=unknownwhen the runtime cannot classify device form factor.
Blocked And Retryable Destinations
The shared destination model is:401,422, and409 project_pending_deletionblock the current destination- transport failures,
500, and unrelated409responses remain retryable