From 6644b5b3534735cd69810991787c5e8cfc186a7f Mon Sep 17 00:00:00 2001 From: Asad Raza Date: Thu, 20 Aug 2026 11:02:57 +0100 Subject: [PATCH] Release: 2.30.0 --- CHANGELOG.md | 10 ++++++++++ android/build.gradle.kts | 2 +- package-lock.json | 4 ++-- package.json | 4 ++-- sample/ios/Podfile.lock | 18 +++++++++--------- 5 files changed, 24 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e2c97e..8aa6437 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,14 @@ [Release Notes](https://docs.usercentrics.com/cmp_in_app_sdk/latest/about/history/) +### 2.30.0 – Aug 19, 2026 +## Features +* **[Unity — Mediation]** Added support for Unity's End-User Consent Mode API (`EndUserConsent.SetConsentState`), mapping UC consent decisions to Unity Vector's `AnalyticsIntent`/`AdsIntent` signals — unblocks Unity Ads Vector adoption. Also fixed the dead Unity Ads link in the Consent Mediation docs +* **[Android]** Added APIs to capture and restore in-flight 2nd-layer consent state across Activity recreation (e.g. dark-mode toggles, single-activity navigation hosts), so unsaved user selections are no longer lost +* **[Flutter]** Added Swift Package Manager (SPM) support for the iOS plugin, recommended for Xcode 15+, alongside continued CocoaPods compatibility + +## Fixes +* **[Android — Mediation]** Fixed `CrashlyticsMediationSDK` throwing `NoClassDefFoundError` on Firebase BOM 34+ by resolving `FirebaseCrashlytics` via reflection instead of the removed KTX API +* **[Unity/Android]** Fixed a crash during SDK initialization in Unity Development builds on Android (Production builds were unaffected) + ### 2.29.1 – Aug 5, 2026 ## Features * **[Unity]** Added `isExempt` to the Unity `ServiceConsent` model, propagating the statistical exception flag to the Unity bridge diff --git a/android/build.gradle.kts b/android/build.gradle.kts index 6d23d4a..5cae16e 100644 --- a/android/build.gradle.kts +++ b/android/build.gradle.kts @@ -1,4 +1,4 @@ -val usercentricsVersion = "2.29.1" +val usercentricsVersion = "2.30.0" val reactNativeVersion = "+" fun BooleanProperty(name: String): Boolean { diff --git a/package-lock.json b/package-lock.json index 5516ec9..7ac8f20 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@usercentrics/react-native-sdk", - "version": "2.29.1", + "version": "2.30.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@usercentrics/react-native-sdk", - "version": "2.29.1", + "version": "2.30.0", "license": "SEE LICENSE IN LICENSE", "devDependencies": { "@babel/core": "^7.25.10", diff --git a/package.json b/package.json index a34a2b0..555f458 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,13 @@ { "name": "@usercentrics/react-native-sdk", - "version": "2.29.1", + "version": "2.30.0", "description": "Usercentrics SDK", "homepage": "https://usercentrics.com", "main": "lib/index.js", "types": "lib/index.d.ts", "author": "Usercentrics ", "iosPackageName": "react-native-usercentrics", - "iosPackageVersion": "2.29.1", + "iosPackageVersion": "2.30.0", "license": "SEE LICENSE IN LICENSE", "files": [ "android", diff --git a/sample/ios/Podfile.lock b/sample/ios/Podfile.lock index 3bd39a9..4503cae 100644 --- a/sample/ios/Podfile.lock +++ b/sample/ios/Podfile.lock @@ -1924,7 +1924,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - react-native-usercentrics (2.29.1): + - react-native-usercentrics (2.30.0): - boost - DoubleConversion - fast_float @@ -1951,7 +1951,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - SocketRocket - - UsercentricsUI (= 2.29.1) + - UsercentricsUI (= 2.30.0) - Yoga - react-native-webview (13.16.1): - boost @@ -2546,9 +2546,9 @@ PODS: - SocketRocket - Yoga - SocketRocket (0.7.1) - - Usercentrics (2.29.1) - - UsercentricsUI (2.29.1): - - Usercentrics (= 2.29.1) + - Usercentrics (2.30.0) + - UsercentricsUI (2.30.0): + - Usercentrics (= 2.30.0) - Yoga (0.0.0) DEPENDENCIES: @@ -2816,7 +2816,7 @@ SPEC CHECKSUMS: hermes-engine: 35c763d57c9832d0eef764316ca1c4d043581394 nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 - RCT-Folly: 59ec0ac1f2f39672a0c6e6cecdd39383b764646f + RCT-Folly: 846fda9475e61ec7bcbf8a3fe81edfcaeb090669 RCTDeprecation: c0ed3249a97243002615517dff789bf4666cf585 RCTRequired: 58719f5124f9267b5f9649c08bf23d9aea845b23 RCTTypeSafety: 4aefa8328ab1f86da273f08517f1f6b343f6c2cc @@ -2850,7 +2850,7 @@ SPEC CHECKSUMS: React-Mapbuffer: e4a65db5f4df53369f39558c0cf2f480f6d3d6c7 React-microtasksnativemodule: 86334c5c06315e0bccb7b6e6f2c905e92f98b615 react-native-safe-area-context: eda63a662750758c1fdd7e719c9f1026c8d161cb - react-native-usercentrics: 8cd13b2cfe938140f93bc9296ac764a1d5ae4f02 + react-native-usercentrics: 50a5d5954c268060c01e68ada86db0e94b99c534 react-native-webview: 83c663c5bdf1357d3e7c00986260cb888ea0e328 React-NativeModulesApple: 8c7eb6057b00c191a11ad5ced41826ec5a0e4d78 React-oscompat: 93b5535ea7f7dff46aaee4f78309a70979bdde9d @@ -2884,8 +2884,8 @@ SPEC CHECKSUMS: ReactCommon: e9ab32f1d1482d207867b4fdd139361302b9dcc6 RNScreens: e902eba58a27d3ad399a495d578e8aba3ea0f490 SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 - Usercentrics: 1234eaa46bfb50c4645226ed0c617ef34967e890 - UsercentricsUI: f304cc98ade660138a90089b7289cb2e09e58d44 + Usercentrics: 567d5a7fae74bf873d295135c2acce2569997c3d + UsercentricsUI: 2d82365e63124398120d2af121fc6d2e1835aaeb Yoga: 9b30b783a17681321b52ac507a37219d7d795ace PODFILE CHECKSUM: 8d257452e9e69d13384a99ee3cd38b42636521da