Skip to content

Privacy

The SDK is built to send as little as possible. This page states exactly what leaves the device and what is stored locally, so you can complete your own privacy disclosures.

What the SDK sends

The only data the SDK reports about the user or device is the install lifecycle, and only when you call reportInstall(...). There is no automatic reporting in the shipped client; if you never call reportInstall(...), the SDK never sends a lifecycle report.

The report body is just the state. A successful report carries only that:

{
  "state": "installing"
}

state is one of downloading, installing, installed, or failed. The error_message key is only present when you pass one on a failed report, and it then contains exactly the string you provide:

{
  "state": "failed",
  "error_message": "user cancelled"
}

Beyond that, the SDK makes the requests it needs to do its job (enrollment, checking for updates, reading metadata, downloading the release). None of those carry advertising or device identifiers.

What the SDK does not collect

  • No IDFA (advertising identifier).
  • No device identifiers.
  • No account information or other PII.

Where the token lives

The per-install update token is stored in the Keychain on Apple platforms. It is marked to persist after first unlock on that device only, and it is not synced to iCloud and not included in device backups. See Tokens and errors for the storage details.

Apple privacy manifest

Apple expects third-party SDKs to declare their data use in a privacy manifest, and to declare any required-reason APIs they call. When you ship an app that embeds this SDK, account for the SDK's behaviour in your app's overall privacy disclosures: the install-lifecycle reports described above are the data collection to consider, and there is no advertising or tracking data flow to declare.

You control when data is sent

Because lifecycle reporting is opt-in per call, you decide exactly when (and whether) the SDK reports anything. If your privacy posture requires it, you can integrate the update check and install without calling reportInstall(...) at all.

Next