Both SDKs send into the same data model as the web SDK, so app and web journeys land in the same project and the same funnels. Keep the channels apart with applications.
1. Install
- iOS (Swift)
- Android (Kotlin)
Swift Package Manager, iOS 15 or newer, Swift 6, no third-party dependencies. The package is public on GitHub.
2. What the SDK captures on its own
- System sheets and biometrics. The app’s active-state churn around passkey sheets, Face ID and Touch ID prompts and password fills, while a ceremony runs or a field is focused.
- Autofill and credential manager evidence. On Android the optional autofill observer reports field types and value lengths. Values are never read.
- Device context. OS version, device model, app version, locale, screen size and the device-owner authentication capability, probed without a prompt and throttled to about once a minute.
- Delivery. Events are batched into a durable on-disk outbox that survives process death, sent with retries, flushed once more when the app leaves the foreground and recovered on the next launch.
3. What your screens forward
Your code forwards facts through typed hooks. It never forwards values.
The typed operations carry the exact vocabulary the classifier expects, so prefer them over hand-rolled events. Both SDKs also offer an untyped operation for anything the typed ones do not cover.
- iOS (Swift)
- Android (Kotlin)
4. Keep the mapping in one module
The hooks above are the facts. Where they become Observe events is a design choice, and it is the choice that decides how maintainable the integration stays. Keep it in one adapter module of your app:- Screens report what happened to the adapter: which screen is shown, which control was chosen, the field evidence, the ceremony and request results.
- Only the adapter calls the SDK. It holds the decision names, the spec types, the flow boundaries and the rules from the modeling method.
- Screens carry no tracking state of their own.
5. Consent and runtime controls
Initialize the SDK at app start. Consent decides what is recorded and sent:6. Verify
Run a journey with debug logging on and note the session id fromgetSessionId(). Then check the backend side with the Observe CLI through events-feed, classify and classification-errors, or in the console under Observe → Debugging → Integration with the Process button. See Verify your integration. The Chrome extension does not apply to native apps.
7. Next steps
Model your journeys
The rules the adapter module implements.
Subflows
The operations and their steps.
Applications
Keep web, iOS and Android comparable in one project.
Verify your integration
Confirm events arrive before you ship.