Skip to main content
This page describes the privacy properties of the current Behavior SDK releases: Flutter 0.4.1, Kotlin 0.6.0 and Swift 0.5.0. The SDK records when and how someone interacts with your app, never what they see or type. It captures no text, no screen content and no tap coordinates. Everything is processed on the device.

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 emitRawMotionSamples is 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:
The notification listener only runs after the user enables it in system settings.

iOS

No Info.plist usage descriptions are required.
  • Calls are observed through CallKit (CXCallObserver), on by default with enableAttentionSignals.
  • Notifications come from UNUserNotificationCenter callbacks that your app forwards, or from the SDK’s opt-in delegate (installNotificationDelegate).

User control

Each signal family has its own switch in BehaviorConfig: 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.

Privacy notice template

Adapt this to what your app actually enables: