Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,12 @@
[Release Notes](https://docs.usercentrics.com/cmp_in_app_sdk/latest/about/history/)
### 2.24.4 – Jan 27, 2026
## Improvement
* Added a new feature allowing admins to show or hide the "Manage Settings" button
* Added TCF Storage Disclosures and detailed storage information views for CTV.
* Updated logic to ensure unsaved Legitimate Interest settings are correctly captured even after a user clicks "Deny All.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Missing closing quotation mark.

The sentence has an unclosed quotation mark around "Deny All".

📝 Proposed fix
-* Updated logic to ensure unsaved Legitimate Interest settings are correctly captured even after a user clicks "Deny All.
+* Updated logic to ensure unsaved Legitimate Interest settings are correctly captured even after a user clicks "Deny All."
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
* Updated logic to ensure unsaved Legitimate Interest settings are correctly captured even after a user clicks "Deny All.
* Updated logic to ensure unsaved Legitimate Interest settings are correctly captured even after a user clicks "Deny All."
🤖 Prompt for AI Agents
In `@CHANGELOG.md` at line 6, In the CHANGELOG entry line that reads '* Updated
logic to ensure unsaved Legitimate Interest settings are correctly captured even
after a user clicks "Deny All.' add the missing closing quotation mark after
Deny All so it reads "Deny All", and verify punctuation/spacing remains correct
(ensure the sentence ends with a period outside the closing quote).

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[NITPICK] Typo / punctuation: the line reads ...after a user clicks "Deny All. — the closing quotation mark is missing. Fix to: * Updated logic to ensure unsaved Legitimate Interest settings are correctly captured even after a user clicks "Deny All".

* Updated logic to ensure unsaved Legitimate Interest settings are correctly captured even after a user clicks "Deny All".

* Added status text for Legitimate Interest (LI) toggles on Android TV and AppleTV to clearly show if they are enabled/disabled
* UI improvements and fixes

### 2.24.3 – Dec 18, 2025
## Improvement
* Updated CTV first layer CMP to fully align with TCF requirements by displaying purposes and stacks based on the Admin UI configuration, matching web and mobile behavior.
Expand Down
2 changes: 1 addition & 1 deletion android/build-legacy.gradle
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
def usercentrics_version = "2.24.3"
def usercentrics_version = "2.24.4"
version usercentrics_version

buildscript {
Expand Down
2 changes: 1 addition & 1 deletion android/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
val usercentricsVersion = "2.24.3"
val usercentricsVersion = "2.24.4"
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[VALIDATION] You updated usercentricsVersion to "2.24.4". Before publishing, validate that the native dependency com.usercentrics.sdk:usercentrics-ui:2.24.4 is available in your artifact repository (or that the intended publishing pipeline will publish it). Run a full Android CI build to verify dependency resolution and that both legacy and new gradle configs resolve the new version correctly.

val reactNativeVersion = "+"

fun BooleanProperty(name: String): Boolean {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,17 +20,17 @@ internal class FakePromise : Promise {
lock.countDown()
}

override fun reject(code: String, message: String?) {
override fun reject(code: String?, message: String?) {
rejectThrowable = RuntimeException("$code: $message")
lock.countDown()
}

override fun reject(code: String, throwable: Throwable?) {
override fun reject(code: String?, throwable: Throwable?) {
rejectThrowable = throwable ?: RuntimeException(code)
lock.countDown()
}

override fun reject(code: String, message: String?, throwable: Throwable?) {
override fun reject(code: String?, message: String?, throwable: Throwable?) {
rejectThrowable = throwable ?: RuntimeException("$code: $message")
lock.countDown()
}
Expand All @@ -45,17 +45,17 @@ internal class FakePromise : Promise {
lock.countDown()
}

override fun reject(code: String, userInfo: WritableMap) {
override fun reject(code: String?, userInfo: WritableMap) {
rejectThrowable = RuntimeException("$code: $userInfo")
lock.countDown()
}

override fun reject(code: String, throwable: Throwable?, userInfo: WritableMap) {
override fun reject(code: String?, throwable: Throwable?, userInfo: WritableMap) {
rejectThrowable = throwable
lock.countDown()
}

override fun reject(code: String, message: String?, userInfo: WritableMap) {
override fun reject(code: String?, message: String?, userInfo: WritableMap) {
rejectThrowable = RuntimeException("$code: $message")
lock.countDown()
}
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
{
"name": "@usercentrics/react-native-sdk",
"version": "2.24.3",
"version": "2.24.4",
"description": "Usercentrics SDK",
"homepage": "https://usercentrics.com",
"main": "lib/index.js",
"types": "lib/index.d.ts",
"author": "Usercentrics <developer@usercentrics.com>",
"iosPackageName": "react-native-usercentrics",
"iosPackageVersion": "2.24.3",
"iosPackageVersion": "2.24.4",
"license": "SEE LICENSE IN LICENSE",
"files": [
"android",
Expand Down
10 changes: 5 additions & 5 deletions sample/ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -1750,10 +1750,10 @@ PODS:
- SocketRocket
- react-native-safe-area-context (5.6.1):
- React-Core
- react-native-usercentrics (2.24.3):
- react-native-usercentrics (2.24.4):
- React-Core
- React-NativeModulesApple
- UsercentricsUI (= 2.24.3)
- UsercentricsUI (= 2.24.4)
- react-native-webview (13.16.0):
- boost
- DoubleConversion
Expand Down Expand Up @@ -2317,9 +2317,9 @@ PODS:
- SocketRocket
- Yoga
- SocketRocket (0.7.1)
- Usercentrics (2.24.3)
- UsercentricsUI (2.24.3):
- Usercentrics (= 2.24.3)
- Usercentrics (2.24.4)
- UsercentricsUI (2.24.4):
- Usercentrics (= 2.24.4)
- Yoga (0.0.0)

DEPENDENCIES:
Expand Down
4 changes: 3 additions & 1 deletion sample/ios/sampleTests/Mock/CMPData+Mock.swift
Original file line number Diff line number Diff line change
Expand Up @@ -317,6 +317,7 @@ extension TCF2Settings {
dataSharedOutsideEUText: "dataSharedOutsideEUText",
vendorIdsOutsideEUList: [1,2,3],
firstLayerHideButtonDeny: true,
hideButtonManageSettings: false,
secondLayerHideButtonDeny: true,
publisherCountryCode: "publisherCountryCode",
purposeOneTreatment: true,
Expand Down Expand Up @@ -353,7 +354,8 @@ extension UsercentricsCustomization {
overlayOpacity: 123,
font: .mock(),
color: .mock(),
logoAltTag: "logoAltTag")
logoAltTag: "logoAltTag",
buttonAlignment: "center")
}
}

Expand Down