VEXO /Documentation
Get Started

App Store & Play Compliance

Vexo collects product analytics and records session replays, so both Apple and Google expect your app to declare that data collection — and Apple additionally expects a consent flow for session recording. This page lists exactly what the SDK collects and what to answer on each store's forms.

What Vexo collects

Everything below is collected for analytics only. It is linked to the device record (and to your own user identifier if you set one), and it is not used for cross-app tracking or advertising:

  • Product interaction — screen visits, taps, scrolling, typing start/end, orientation changes, session replays
  • Device ID — a random per-install identifier generated by the SDK
  • User ID — only if your app calls identifyDevice() with your own identifier (an email, user id or hash); if you never call it, no user ID is collected
  • Crash, performance and other diagnostic data — errors and network request stats

Apple privacy nutrition labels

In App Store Connect → your app → App Privacy, answer yes to "Do you or your third-party partners collect any data from this app?" and declare the following data types for Vexo:

  • Product Interaction — purpose: Analytics
  • Device ID — purpose: Analytics
  • User ID — purpose: Analytics; only needed if your app calls identifyDevice()
  • Crash Data, Performance Data, Other Diagnostic Data — purpose: Analytics

For each of these, answer linked to the user's identity: yes and used for tracking: no. Vexo does not track users across other companies' apps and does not share data for advertising, so the SDK itself does not require an App Tracking Transparency prompt.

Required-reason APIs

Since 1.8.0 the pod ships its own privacy manifest (PrivacyInfo.xcprivacy) declaring the required-reason APIs the SDK uses: UserDefaults (reason CA92.1, to persist the device ID) and file timestamps (reason C617.1, used by its internal storage). Xcode aggregates it into your app's privacy report automatically — you don't need to declare these APIs on Vexo's behalf in your own manifest.

App Review 2.5.14: session replay needs consent

Session replay is a recording of user activity, and App Review Guideline 2.5.14 requires apps that record user activity to obtain explicit user consent and show a clear visual indication that recording is taking place. The SDK gives you the switches; the consent UI is yours to build.

Gate initialization on consent — nothing is recorded or sent before vexo() runs:

import { vexo, enableTracking, disableTracking } from 'vexo-analytics';

if (userHasConsented) {
  vexo('YOUR_API_KEY');
}

Runtime opt-outdisableTracking() stops event collection and session recording (including a recording already in progress), and the choice is persisted across launches. enableTracking() turns it back on; recording resumes with the next session.

Visual indication — the SDK does not render a recording indicator, so show your own persistent indicator while tracking is enabled.

Masking — captured screenshots are blurred by default (the blur setting in your dashboard, on by default). There is currently no API to mask or exclude an individual view, so keep blurring on for any screen that can show sensitive content.

Google Play Data safety form

In Play Console → App content → Data safety, declare the same collection mapped to Play's categories:

  • App interactions (App activity) — collected
  • Device or other IDs — collected
  • User IDs (Personal info) — collected only if your app calls identifyDevice()
  • Crash logs and Diagnostics (App info and performance) — collected

For each: data is collected (not shared with third parties) and encrypted in transit. Users can request deletion of their data by emailing Vexo support. If you gate vexo() behind consent as shown above, you can declare the collection as optional rather than required.

Android 16 KB page sizes

Google Play requires apps to support devices with 16 KB memory pages. The SDK's native dependencies are 16 KB-aligned (enforced in the SDK's CI), so vexo-analytics will not block your app from meeting this requirement.

Previous
Integration
Next
Features Overview