From 1b468f5967eac5274e9bfa89dda04eaa2848bf9a Mon Sep 17 00:00:00 2001 From: Superwall Docs Bot Date: Thu, 2 Jul 2026 16:06:38 +0000 Subject: [PATCH 1/2] feat(android): update for 2.7.20 --- content/docs/android/changelog.mdx | 17 +++++++++++++++++ content/docs/android/index.mdx | 2 +- content/docs/android/quickstart/install.mdx | 6 +++--- content/docs/android/sdk-reference/index.mdx | 2 +- 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/content/docs/android/changelog.mdx b/content/docs/android/changelog.mdx index 1b29e05..c116f41 100644 --- a/content/docs/android/changelog.mdx +++ b/content/docs/android/changelog.mdx @@ -3,6 +3,23 @@ title: "Changelog" description: "Release notes for the Superwall Android SDK" --- +## 2.7.20 + +## Enhancements + +- Adds `storeFrontCountryCode` property +- Adds `PaywallOptions.loadingColor` to options enabling you to theme the circular progress bar + +## Fixes +- Fix a bug causing web redemption entitlements to be ignored in restoration tracking logic for users of purchase controller + +## 2.7.19 + +## Enhancements + +- Added `EventTrackingBehavior` enum and `SuperwallOptions.eventTrackingBehavior` property for GDPR-compliant event collection control. Use `ALL` (default) to track everything, `SUPERWALL_ONLY` to suppress user-initiated tracking, trigger fires, and user-attribute updates while keeping internal SDK events, or `NONE` to stop all event collection entirely. The behavior can also be changed at runtime via `Superwall.instance.eventTrackingBehavior`. +- Deprecated `SuperwallOptions.isExternalDataCollectionEnabled`. Setting it to `false` now maps to `SUPERWALL_ONLY`; setting it back to `true` maps to `ALL`. + ## 2.7.18 ## Enhancements diff --git a/content/docs/android/index.mdx b/content/docs/android/index.mdx index 54ecb04..7a52a2a 100644 --- a/content/docs/android/index.mdx +++ b/content/docs/android/index.mdx @@ -127,4 +127,4 @@ If you have feedback on any of our docs, please leave a rating and message at th If you have any issues with the SDK, please [open an issue on GitHub](https://github.com/superwall/superwall-android/issues). - + diff --git a/content/docs/android/quickstart/install.mdx b/content/docs/android/quickstart/install.mdx index fb5cd0d..003142d 100644 --- a/content/docs/android/quickstart/install.mdx +++ b/content/docs/android/quickstart/install.mdx @@ -105,16 +105,16 @@ can find the [latest release here](https://github.com/superwall/Superwall-Androi ```gradle build.gradle -implementation "com.superwall.sdk:superwall-android:2.7.18" +implementation "com.superwall.sdk:superwall-android:2.7.20" ``` ```kotlin build.gradle.kts -implementation("com.superwall.sdk:superwall-android:2.7.18") +implementation("com.superwall.sdk:superwall-android:2.7.20") ``` ```toml libs.version.toml [libraries] -superwall-android = { group = "com.superwall.sdk", name = "superwall-android", version = "2.7.18" } +superwall-android = { group = "com.superwall.sdk", name = "superwall-android", version = "2.7.20" } // And in your build.gradle.kts dependencies { diff --git a/content/docs/android/sdk-reference/index.mdx b/content/docs/android/sdk-reference/index.mdx index eab778e..5f21e63 100644 --- a/content/docs/android/sdk-reference/index.mdx +++ b/content/docs/android/sdk-reference/index.mdx @@ -100,4 +100,4 @@ If you have feedback on any of our docs, please leave a rating and message at th If you have any issues with the SDK, please [open an issue on GitHub](https://github.com/superwall/superwall-android/issues). - + From 20f56c9226ac70c816143ca772a7cf0b829f4343 Mon Sep 17 00:00:00 2001 From: Duncan Crawbuck Date: Thu, 2 Jul 2026 14:58:22 -0700 Subject: [PATCH 2/2] fix(android): document eventTrackingBehavior and loadingColor Android SDK 2.7.19/2.7.20 added SuperwallOptions.eventTrackingBehavior and PaywallOptions.loadingColor, but the reference docs and shared options guide still only documented the deprecated isExternalDataCollectionEnabled path. Addresses bot review comments on PR #237. --- .../android/sdk-reference/PaywallOptions.mdx | 7 ++++++ .../sdk-reference/SuperwallOptions.mdx | 11 +++++++++- .../configuring/using-superwalloptions.mdx | 22 ++++++++++++++++--- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/content/docs/android/sdk-reference/PaywallOptions.mdx b/content/docs/android/sdk-reference/PaywallOptions.mdx index 877df1a..48d38a2 100644 --- a/content/docs/android/sdk-reference/PaywallOptions.mdx +++ b/content/docs/android/sdk-reference/PaywallOptions.mdx @@ -120,6 +120,7 @@ class PaywallOptions { var transactionBackgroundView: TransactionBackgroundView? = TransactionBackgroundView.SPINNER var overrideProductsByName: Map = emptyMap() + var loadingColor: Int? = null // @ColorRes var optimisticLoading: Boolean = false var timeoutAfter: Duration? = null var onBackPressed: ((PaywallInfo?) -> Boolean)? = null @@ -189,6 +190,11 @@ class PaywallOptions { description: "Overrides products on all paywalls using name\u2192identifier mapping (e.g., `\"primary\"` \u2192 `\"com.example.premium_monthly\"`).", required: true, }, + loadingColor: { + type: "Int?", + description: "A `@ColorRes` used to tint the spinner shown while a purchase or restoration is in progress. Only applies to the SDK's built-in loading view; style a custom `PaywallBuilder.purchaseLoadingView` directly instead.", + default: "null", + }, optimisticLoading: { type: "Boolean", description: "Hides shimmer optimistically.", @@ -224,6 +230,7 @@ val paywallOptions = PaywallOptions().apply { "primary" to "com.example.premium_monthly", "tertiary" to "com.example.premium_annual", ) + loadingColor = R.color.brand_purple optimisticLoading = false timeoutAfter = null onBackPressed = { paywallInfo -> diff --git a/content/docs/android/sdk-reference/SuperwallOptions.mdx b/content/docs/android/sdk-reference/SuperwallOptions.mdx index 0d2cf37..5996234 100644 --- a/content/docs/android/sdk-reference/SuperwallOptions.mdx +++ b/content/docs/android/sdk-reference/SuperwallOptions.mdx @@ -105,6 +105,8 @@ class SuperwallOptions { var paywalls: PaywallOptions = PaywallOptions() var shouldObservePurchases: Boolean = false var networkEnvironment: NetworkEnvironment = NetworkEnvironment.Release() + var eventTrackingBehavior: EventTrackingBehavior = EventTrackingBehavior.ALL + @Deprecated("Use eventTrackingBehavior instead.") var isExternalDataCollectionEnabled: Boolean = true var localeIdentifier: String? = null var isGameControllerEnabled: Boolean = false @@ -122,6 +124,8 @@ public class SuperwallOptions { public PaywallOptions paywalls = new PaywallOptions(); public boolean shouldObservePurchases = false; public NetworkEnvironment networkEnvironment = new NetworkEnvironment.Release(); + public EventTrackingBehavior eventTrackingBehavior = EventTrackingBehavior.ALL; + @Deprecated public boolean isExternalDataCollectionEnabled = true; public @Nullable String localeIdentifier = null; public boolean isGameControllerEnabled = false; @@ -152,9 +156,14 @@ public class SuperwallOptions { description: "Overrides the API environment. **Only change if instructed by Superwall.**", required: true, }, + eventTrackingBehavior: { + type: "EventTrackingBehavior", + description: "Controls which SDK events are sent to Superwall. `ALL` tracks everything, `SUPERWALL_ONLY` suppresses user-initiated tracking, trigger fires, and user-attribute updates, and `NONE` stops all event collection. Can also be changed at runtime via `Superwall.instance.eventTrackingBehavior`.", + default: "ALL", + }, isExternalDataCollectionEnabled: { type: "Boolean", - description: "Allows Superwall to send non-paywall analytics events to the backend.", + description: "Deprecated. Use `eventTrackingBehavior` instead. Setting this to `false` maps to `SUPERWALL_ONLY`; setting it back to `true` maps to `ALL`.", default: "true", }, localeIdentifier: { diff --git a/content/shared/configuring/using-superwalloptions.mdx b/content/shared/configuring/using-superwalloptions.mdx index 2a634f7..4ec23c1 100644 --- a/content/shared/configuring/using-superwalloptions.mdx +++ b/content/shared/configuring/using-superwalloptions.mdx @@ -355,11 +355,19 @@ After updating to an SDK and paywall runtime that supports this behavior, re-sav :::android -Android currently uses `isExternalDataCollectionEnabled`. Setting it to `false` suppresses user-initiated tracking, trigger-fire events, and user-attribute updates while keeping internal Superwall event collection enabled. +On Android SDK `2.7.19` and later, use `eventTrackingBehavior`: + +| Behavior | What Superwall sends | +| --- | --- | +| `EventTrackingBehavior.ALL` | All SDK event collection is enabled. This is the default. | +| `EventTrackingBehavior.SUPERWALL_ONLY` | Internal Superwall events continue to be sent, but user-initiated `Superwall.track(...)` calls, trigger-fire events, and user-attribute updates are suppressed. | +| `EventTrackingBehavior.NONE` | No SDK events are sent to Superwall. Paywalls still work because paywall logic runs on device, but dashboard analytics, attribution matching, and audience rules that depend on `acquisition_*` attributes will not receive this event data. | + +Set the initial behavior before calling `configure()`: ```kotlin val options = SuperwallOptions() -options.isExternalDataCollectionEnabled = false +options.eventTrackingBehavior = EventTrackingBehavior.NONE Superwall.configure( this, @@ -370,11 +378,19 @@ Superwall.configure( // Or using the configuration DSL configureSuperwall("MY_API_KEY") { options { - isExternalDataCollectionEnabled = false + eventTrackingBehavior = EventTrackingBehavior.NONE } } ``` +You can also change the behavior at runtime after the SDK is configured. This is useful when a user changes a privacy or consent setting in your app. + +```kotlin +Superwall.instance.eventTrackingBehavior = EventTrackingBehavior.NONE +``` + +`isExternalDataCollectionEnabled` is deprecated on Android SDK `2.7.19` and later. If older code sets it to `false`, the SDK maps that to `SUPERWALL_ONLY`, not `NONE`. Use `NONE` when your app needs to stop SDK event collection entirely. + ::: :::flutter