Changelog
4.3.12
June 26, 2026
Summary
Adds a public jurisdiction getter so you can read the visitor's effective jurisdiction as a single composite value, matching the web SDK's Osano.cm.jurisdiction.
Features
- New
getJurisdiction()getter — Returns the visitor's jurisdiction as a lowercase composite of country and region (for example,usorus-ca), built from the same resolved country asgetCountryCode()plus the stored region. This mirrors the format returned by the web and React Native SDKs.
Why it matters: You can now read the jurisdiction in one call and in a consistent format across platforms, instead of separately combininggetCountryCode()andgetRegion()yourself.
4.3.11
June 18, 2026
Summary
The consent banner now shows the correct layout variant, region, and country for the property (customer/configuration) you're viewing after switching between properties, instead of occasionally carrying over the previous property's values. It also corrects itself if the banner is shown before its configuration has finished loading.
Fixes
-
Banner variant, region, and country are scoped per property — The server-derived banner variant (which layout and buttons are shown), region, and country are now stored separately for each property rather than in a single shared slot. Switching to another property no longer displays the previous property's variant or region/country-specific behavior.
Why it matters: Each of your properties shows its own correct consent experience — the right banner layout and region-specific controls (such as the US "Do Not Sell or Share My Personal Information" opt-out) — instead of inheriting another property's. -
Banner settles on the correct layout once its configuration loads — When the banner is shown immediately, before its configuration has finished downloading, its layout variant now updates to the property's configured variant as soon as the configuration arrives — consistent with how the IAB sections and the US opt-out toggle already behave.
Why it matters: Users see the consent experience configured for that property even when the banner appears right away on launch, rather than a default or previous-property layout.
4.3.10
June 16, 2026
Summary
Improves consent banner translation load times when switching between properties. Translations shared across all properties are now cached and reused, so switching to another property only loads that property's own translations instead of re-downloading everything — making the banner appear faster and ensuring it shows the correct per-property text. Also fixes alignment of the "Do Not Sell or Share My Personal Information" toggle.
Improvements
- Faster translation loading when switching properties — Translations shared across all properties are now cached by language and reused, so switching to another property (customer/configuration) only loads that property's specific translations rather than re-downloading the shared set each time. The consent banner appears faster on subsequent properties and shows the correct wording for each.
Why it matters: Users reach a fully-rendered consent banner more quickly when moving between your properties, with the right translations for the property they're interacting with.
Fixes
- "Do Not Sell or Share My Personal Information" toggle stays aligned — The long opt-out label no longer pushes its toggle off the edge of the banner; the label now wraps and all toggles line up consistently.
Why it matters: The opt-out control is fully visible and usable, especially on narrower screens.
4.3.9
June 15, 2026
Summary
Consent is now recorded separately for each property and signed-in user, so the consent banner behaves correctly per tenant. Consent captured while offline also syncs to the server under the correct identity once the connection returns.
Fixes
-
Consent is now scoped per property and user — Consenting in one property (customer/configuration) no longer suppresses the banner in another, matching the iOS SDK. Each property/user combination keeps its own consent record.
Why it matters: Users are correctly asked for consent in each of your properties instead of a single decision silently applying everywhere. -
Offline consent syncs under the correct identity — Consent captured while the device is offline is now resynced to the server with the correct signed-in user and category selections once the network is available, instead of being attributed to an anonymous record or dropped.
Why it matters: A signed-in user's offline consent choices are recorded accurately server-side, keeping cross-device consent consistent.
4.3.8
May 1, 2026
Summary
Changes how configurations are cached and requested, using server-specific headers to validate the most recent configuration is being used.
Fixes
- New configuration changes were not being reflected until the internal configuration cache expired: Fixed an issue where a configuration file would still be used if it was within the caching duration, even if there was a more recent version available on the server. Why it matters: Users viewing the Consent UI would not see the most recent changes to the configuration until the local copy of the configuration file expired.
4.3.7
April 28, 2026
Summary
Restores configuration loading for accounts whose cookie, iframe, and script rules are delivered in the newer object format, which previously blocked consent initialization and prevented IAB/TCF values from being stored.
Fixes
- Configuration loads regardless of cookie, iframe, and script rule shape — The SDK no longer reads the unused cookie, iframe, and script entries from the configuration payload, so changes to how those entries are returned by the server can never block consent initialization again.
Why it matters: For affected accounts (especially users in GDPR regions), consent could not initialize and TCF signals were never written to storage; with this fix, consent flows and downstream ad-tech integrations work as expected.
4.3.6
April 24, 2026
Summary
Fixes a small display issue where the Terms of Service link in the consent banner was showing up labeled as Privacy Policy.
Fixes
- Terms of Service link now shows the right label — When your app is set up to display a Terms of Service link in the consent banner, it now appears with the correct "Terms of Service" wording (localized for each supported language) instead of defaulting to "Privacy Policy".
Why it matters: Users see the correct link name, so there's no more duplicate or confusing wording in the banner.
4.3.5
February 25, 2026
Summary
Centralizes all translation keys, improves translation reliability for mobile apps. The SDK now uses mobile-specific translations when available, with automatic fallback to web keys.
Improvements
-
Centralized translation keys — All translation keys are now defined with a prefix for mobile-specific strings.
Why it matters: Makes it easier to update, audit, and maintain localizations across your app. -
Smarter translation lookup — The SDK checks for mobile-specific translations first, then falls back to web keys in both customer and global translation maps.
Why it matters: Ensures users always see the most relevant, up-to-date text with less developer effort. -
UI and IAB translation consistency — All UI and IAB-related translation lookups now use the new centralized keys. Policy links and consent screens are easier to localize and maintain.
Why it matters: Reduces the risk of missing or inconsistent translations, and simplifies localization updates.
Action Required
To use mobile custom translations, add or update your strings in your web configuration (Osano dashboard).
4.3.4
January 06, 2026
Summary
Ensures the SDK’s UI layer always reflects the current consent state/configuration by preventing stale manager references when the UI controller is reused.
Fixes
- UI controller now refreshes to the current consent backend when reused — Existing UI instances update to the latest consent manager instead of holding an older one.
Why it matters: prevents outdated texts, settings, or callbacks after re-initialization or navigation; improves runtime reliability.
4.3.3
December 16, 2025
Summary
Improves standards compliance (IAB TCF v2.3), reduces unnecessary network requests by caching config daily, and strengthens privacy by hashing extUsrData. Also removes the previously deprecated programmatic banner timeout.
-
IAB TCF policy alignment - Consent signaling and internal evaluation logic were updated to align with the latest IAB TCF policy expectations.
Why it matters: Maintains compatibility with downstream ad-tech and CMP partners that validate against current policy versions; reduces risk of policy drift in audits and measurement. -
Automatic vendor disclosure updates after consent changes - The SDK now ensures that the set of vendors surfaced for disclosure remains synchronized immediately after any user consent modification.
Why it matters: Provides more accurate vendor transparency for compliance, auditing, and user information, especially where reporting pipelines rely on up-to-date disclosure sets.
Note: Visit IAB Tech Lab - Consent string and vendor list formats v2 to get more information about vendor disclosure
Improvements
- Daily config caching - The SDK reuses a configuration downloaded earlier the same day and refreshes on the next day.
Why it matters: Cuts redundant network calls and improves app startup performance and resilience, while still ensuring a daily refresh for operational accuracy.
Fixes
- Hash
extUsrData- The identifier used for cross-device consent is hashed before it’s included in consent records.
Why it matters: Adds a privacy layer to reduce risk if traffic or logs are inspected.
Deprecations / Removals
- Removed:
ConsentManager.Builder#setTimeoutInSecondsand related accessors
Why it matters: This option was deprecated; timeout must now be configured in the Osano dashboard → Cookie Consent → Your Configuration → Styles → “Timeout Duration (in seconds)”.
Action: Remove any usage in code; no SDK replacement API.
4.3.2
November 24, 2025
Summary
Modernizes the SDK toolchain and networking stack for security, performance, and long-term compatibility.
Improvements
- Kotlin 2.2.0 – Upgraded language/runtime for improved performance and tooling support.
- Networking stack updates – Bumped core dependencies:
- Retrofit 3.0.0 (from 2.11.0)
- OkHttp Logging Interceptor 5.1.0 (from 4.12.0)
Why it matters: Keeps transitive networking components current with the latest security and compatibility updates.
Note: If your app enforces strict dependency resolution, ensure your project is compatible with Retrofit 3.x / OkHttp 5.x to avoid version conflicts.
4.3.1
November 19, 2025
Summary
Adds automatic platform metadata to consent records, updates Material 3 adaptive dependencies for stability/compatibility, and clarifies extUsrData usage. Deprecates the programmatic banner timeout in favor of dashboard configuration.
New Features
- Platform metadata in consent records – Consent stored by the SDK now includes the originating platform (e.g., Android).
Why it matters: Improves downstream reporting and cross-platform attribution. No code changes required.
Deprecations
ConsentManager.Builder#setTimeoutInSeconds– Deprecated. Configure timeout in the Osano dashboard (Styles → Timeout Duration).
Removal planned for 4.3.2.
Improvements
- Material 3 adaptive dependency updates – Aligned adaptive navigation/layout artifacts with the current Material 3 version.
Why it matters: Better stability and compatibility when using Compose Material 3.
Documentation
extUsrDataguidance – Clarified usage for Cross-Device Consent and added a PII warning (only stored when Cross-Device Consent is enabled).
Why it matters: Helps avoid misuse and ensures compliant implementations.
4.3.0
August 21, 2025
Summary
This release introduces consent expiration testing mode, adds new builder properties for ConsentManager, and fixes multiple UI and callback issues for improved stability.
New Features
- Consent expiration testing mode – Enables simulation of consent expiration scenarios.
Why it matters: Helps developers validate flows where consent refresh is required. - Builder property:
setOnConsentResultListener()– Allows attaching a listener to the auto-show dialog.
Why it matters: Simplifies consent result handling without extra setup.
Fixes
- Fixed translation hierarchy issues.
- Corrected IAB legitimate interest defaults.
- Fixed partner count plural string interpolation.
- Updated “Deny/Reject All” to use the new non-essential logic.
- Resolved cases where privacy policy buttons would become non-responsive.
- Addressed inconsistencies in palette mappings.
- Fixed bug where
OnConsentResultListener.onSuccess()was incorrectly called with denied categories (now properly callsonDeny).
Deprecations
- None in this release.
Improvements
- Improved dialog responsiveness and theme consistency.
- Enhanced callback reliability and developer experience.
4.2.0
July 31, 2025
Summary
Introduces support for Google Consent Mode V2.
New Features
- Google Consent Mode V2 support – Integrates with the latest version of Google’s Consent Mode.
Why it matters: Ensures compliance with updated Google Ads and Analytics requirements.
Fixes
- None in this release.
Deprecations
- None in this release.
Improvements
- Internal compatibility updates for Google Consent Mode V2.
4.1.0
June 30, 2025
Summary
Adds support for the Interactive Advertising Bureau’s Transparency and Consent Framework (IAB TCF).
New Features
- IAB TCF support – Implements the IAB Transparency and Consent Framework.
Why it matters: Ensures SDK interoperability with advertising industry standards.
Fixes
- None in this release.
Deprecations
- None in this release.
Improvements
- Streamlined consent string handling.
4.0.3
June 11, 2025
Summary
Introduces a safeguard for unsupported API levels.
Fixes
- Implemented API level check to disable IAB TCF string encoding where unsupported.
4.0.2
June 6, 2025
Summary
Enhances validation and dependency management.
New Features
- Added IAB TCF encoding/decoding dependencies.
Improvements
- Hardened configuration validation checks.
4.0.1
April 28, 2025
Summary
Introduces customization options for the builder.
New Features
- Added color setters to
ConsentManagerbuilder.
4.0.0
April 24, 2025
Summary
Major release with new features, crash fixes, and minimum SDK bump.
New Features
- Builder props:
.setShouldAutoShowDialog()– Automatically shows the dialog after initialization. Defaults tofalse..setDebugMode()– Adds verbose debug logging. Defaults tofalse.
- Added Cross-Device Consent support.
Fixes
- Resolved crash during Android lifecycle events.