At a glance
What is collected
Interaction timing
- Taps: tap duration and whether it was a long press. Taps are not counted while the keyboard is open, so typing is not double-counted.
- Scrolls and swipes: velocity, acceleration, jitter and stop events.
- Typing: timing only: speed, cadence, gaps, burstiness and a backspace count. The characters typed are never read.
- Clipboard: counts of copy, paste and cut actions that your app reports. The clipboard’s contents are never read.
Attention signals
- App switches: foreground and background transitions with their durations. App-switch events do not name other apps.
- Idle gaps: periods without interaction.
- Notifications: delivery, opening and ignore counts. On Android,
notification events include
source_app, the package name of the app that posted the notification. Notification titles and text are never read. - Calls: call counts and whether they were answered or ignored. No phone numbers or contacts.
Session context
Session summaries can include coarse device state such as screen brightness, orientation, whether the device is charging, Do Not Disturb, and whether it is online. The online check reads Android’s connectivity state; it sends nothing.Motion (opt-in)
- Kotlin: with
enableMotionLite, the SDK reads the accelerometer and gyroscope at 50 Hz and classifies motion on the device. - Flutter and Swift: raw 50 Hz accelerometer samples are emitted only when
emitRawMotionSamplesis set.
What is never collected
- Text the user types or reads, and screen content
- Tap, touch or scroll coordinates
- Notification titles or bodies
- Phone numbers, contacts or call audio
- Location, camera, microphone or photos
- Advertising IDs or other persistent device identifiers
- Biometric data
Permissions
Basic interaction capture needs no runtime permission. Notification and call signals use optional permissions.Android
The libraries declare these permissions in their own manifests, which merge into your app:
If you don’t use notification or call signals, remove the entries from your
merged manifest:
iOS
No Info.plist usage descriptions are required.- Calls are observed through CallKit (
CXCallObserver), on by default withenableAttentionSignals. - Notifications come from
UNUserNotificationCentercallbacks that your app forwards, or from the SDK’s opt-in delegate (installNotificationDelegate).
User control
Each signal family has its own switch inBehaviorConfig:
Ask for consent before you call
initialize() or startSession(). The
consentBehavior field is recorded in event payloads but does not itself stop
collection. When behavior events feed into Synheart Core,
the runtime’s Behavior consent gate also applies; see
Consent System.
Regulatory considerations
The SDK is built around data minimization: timing metrics only, processed on the device, with no identifiers. Whether your app meets GDPR, CCPA, COPPA or another regulation depends on how the app as a whole collects, uses and shares data, and how it obtains consent. Consult counsel for your deployment.- App Tracking Transparency (iOS): the SDK does no cross-app tracking and reads no advertising identifier.
- Privacy Sandbox (Android): the SDK does not use advertising IDs or share data with third parties.