Docs
grovs.io Start for free

Privacy & consent

Gate the Grovs Android SDK on user consent, and see what it collects.

A disabled SDK collects nothing. To start a launch disabled, pass your stored consent to configure. Calling setSDK(false) afterwards is too late: configure starts the first round of collection.

Kotlin
val hasConsent = ConsentStore.hasConsent()
 
Grovs.configure(
    this,
    "your-api-key",
    useTestEnvironment = false,
    baseURL = null,
    autoTrackScreenViews = true,
    clipboardDomains = null,
    enabled = hasConsent
)

Toggle it as consent changes:

Kotlin
fun userDidChangeConsent(granted: Boolean) {
    ConsentStore.save(granted)
    Grovs.setSDK(granted)
}

The SDK doesn't persist the flag. Pass your stored value to configure on every launch. Shorter configure overloads reset it to true, so use the full overload and call setSDK only after configure.

With enabled = false, configure starts no requests, reads no clipboard or device identifiers and records no events. The install and first open are recorded once the SDK is enabled and authenticates.

While the SDK is disabled

  • Nothing leaves the device: no authentication, device lookup, events, screen views or purchases.
  • Automatic screen tracking stops. Time spent disabled is excluded from engagement.
  • Backend features are unavailable. Link generation and link details fail with their usual GrovsException.
  • In-app messages don't sync or show, and a message on screen closes.
  • Tapped pushes deliver nothing and report no opens. A tap is handled if you enable the SDK before the app goes to the background. Disabling drops unreported push opens.
  • Outstanding operations and their retries are cancelled. Requests already transmitted may still reach the server.
  • Changes to identifier, attributes, pushToken and screen aliases are held as the latest values.
  • Queued events keep their identity and stay on the device, within the usual retention limits.

Re-enabling authenticates if needed and sends everything held or queued.

Enabling doesn't replay a launch deep link or a link request cancelled while disabled. To resolve a link that opened the app while disabled, forward a later Grovs.onStart(activity) or Grovs.onNewIntent(intent, activity).

What the SDK collects

DataWhenWhy
App version and build, package name, device model, user agent, screen size, time zone, preferred language, WebGL vendor and rendererWhen the SDK authenticates and looks up the deviceMatching installs and opens to link clicks; analytics
The Android ID (Settings.Secure.ANDROID_ID) and the Google Play install referrerSameRecognizing the device across launches; install attribution. The backend-issued device identifier is held in memory only
User identifier, user attributes, push tokenOnly if you set themShowing users in the dashboard; delivering push campaigns and in-app messages
Push campaign opens: campaign ID and sessionWhen the user taps a Grovs pushCampaign reports
In-app message views, clicks, dismissals, answers and commentsWhen a message shows and the user acts on itCampaign reports; frequency caps
Installs, opens, time spent, reactivationsAutomaticallyAttribution and analytics
Custom events and screen viewsWhen you call track / trackScreenView / trackNavigation, and through automatic screen trackingAnalytics
PurchasesWhen you call logInAppPurchase or logCustomPurchaseRevenue analytics
Clipboard contentsRead only on the first launch after install, when fingerprint matching found nothing, your project has recent copy-to-clipboard clicks and the clipboard holds a web URL. Sent only if it's a link on a Grovs host or one of your clipboardDomainsDeterministic install attribution. See clipboard-assisted deferred deep linking

The SDK doesn't read the advertising ID.

Google Play data safety

Your Google Play Data safety form must cover what the SDK collects for you. Typically:

  • Device or other IDs
  • App activity → App interactions
  • Personal info → User IDs, if you set identifier
  • Financial info → Purchase history, if you log purchases
  • App activity → Other user-generated content, if your in-app questions ask for a comment

Anything in attributes or event properties (an email or name, say) is data you collect too and needs its own declaration.

Logs

SDK logs go through android.util.Log with tag Logger, and every message starts with 🔗GROVS. Filter Logcat by message text, not tag. The default level is ERROR. Pass LogLevel.INFO to setDebug while integrating.

Last updated 2026-10-27
Was this page helpful?