@usercentrics/react-native-sdk 2.30.0 → 2.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/android/build.gradle.kts +1 -1
  2. package/android/src/androidTest/java/com/usercentrics/reactnative/RNUsercentricsModuleTest.kt +2 -0
  3. package/android/src/main/java/com/usercentrics/reactnative/RNUsercentricsModule.kt +38 -6
  4. package/android/src/main/java/com/usercentrics/reactnative/RNUsercentricsModuleSpec.kt +9 -0
  5. package/android/src/main/java/com/usercentrics/reactnative/api/UsercentricsProxy.kt +14 -4
  6. package/android/src/main/java/com/usercentrics/reactnative/extensions/BannerSettingsExtensions.kt +2 -1
  7. package/android/src/main/java/com/usercentrics/reactnative/extensions/UserOptionsExtensions.kt +4 -0
  8. package/ios/Extensions/UsercentricsOptions+Dict.swift +4 -0
  9. package/ios/Manager/UsercentricsManager.swift +23 -1
  10. package/ios/RNUsercentricsModule.mm +9 -0
  11. package/ios/RNUsercentricsModule.swift +32 -2
  12. package/ios/RNUsercentricsModuleSpec.h +10 -0
  13. package/lib/NativeUsercentrics.d.ts +3 -0
  14. package/lib/NativeUsercentrics.js.map +1 -1
  15. package/lib/Usercentrics.d.ts +5 -0
  16. package/lib/Usercentrics.js +29 -0
  17. package/lib/Usercentrics.js.map +1 -1
  18. package/lib/fabric/NativeUsercentricsModule.d.ts +3 -0
  19. package/lib/fabric/NativeUsercentricsModule.js.map +1 -1
  20. package/lib/models/BannerSettings.d.ts +6 -1
  21. package/lib/models/BannerSettings.js +2 -1
  22. package/lib/models/BannerSettings.js.map +1 -1
  23. package/lib/models/UsercentricsOptions.d.ts +16 -1
  24. package/lib/models/UsercentricsOptions.js +2 -1
  25. package/lib/models/UsercentricsOptions.js.map +1 -1
  26. package/package.json +2 -2
  27. package/src/NativeUsercentrics.ts +5 -0
  28. package/src/Usercentrics.tsx +34 -0
  29. package/src/__tests__/index.test.ts +37 -0
  30. package/src/fabric/NativeUsercentricsModule.ts +5 -0
  31. package/src/models/BannerSettings.tsx +8 -1
  32. package/src/models/UsercentricsOptions.tsx +17 -0
@@ -1,4 +1,4 @@
1
- val usercentricsVersion = "2.30.0"
1
+ val usercentricsVersion = "2.32.0"
2
2
  val reactNativeVersion = "+"
3
3
 
4
4
  fun BooleanProperty(name: String): Boolean {
@@ -42,6 +42,7 @@ class RNUsercentricsModuleTest {
42
42
  putString("version", "1.2.3")
43
43
  putInt("networkMode", 1)
44
44
  putInt("initTimeoutMillis", 10000)
45
+ putString("controllerId", "a".repeat(64))
45
46
  }
46
47
 
47
48
  private val bannerSettingsMap = mapOf(
@@ -128,6 +129,7 @@ class RNUsercentricsModuleTest {
128
129
  assertEquals("1.2.3", usercentricsProxy.initializeOptionsArgument?.version)
129
130
  assertEquals(NetworkMode.EU, usercentricsProxy.initializeOptionsArgument?.networkMode)
130
131
  assertEquals(10000L, usercentricsProxy.initializeOptionsArgument?.initTimeoutMillis)
132
+ assertEquals("a".repeat(64), usercentricsProxy.initializeOptionsArgument?.controllerId)
131
133
  }
132
134
 
133
135
  @Test
@@ -1,7 +1,6 @@
1
1
  package com.usercentrics.reactnative
2
2
 
3
3
  import com.facebook.react.bridge.*
4
- import com.facebook.react.modules.core.DeviceEventManagerModule
5
4
  import com.usercentrics.sdk.UsercentricsDisposableEvent
6
5
  import com.usercentrics.sdk.UsercentricsEvent
7
6
  import com.usercentrics.reactnative.api.UsercentricsProxy
@@ -44,7 +43,13 @@ internal class RNUsercentricsModule(
44
43
  val bannerSettings = options?.bannerSettingsFromMap(context)
45
44
 
46
45
  val activity = reactContextProvider.activity()!!
47
- usercentricsProxy.showFirstLayer(activity, bannerSettings, promise)
46
+ usercentricsProxy.showFirstLayer(
47
+ activity,
48
+ bannerSettings,
49
+ onLoginClicked = { url -> emitEvent(ON_LOGIN_CLICKED_EVENT, url) },
50
+ onSubscribeClicked = { url -> emitEvent(ON_SUBSCRIBE_CLICKED_EVENT, url) },
51
+ promise,
52
+ )
48
53
  } catch (e: Exception) {
49
54
  promise.reject(e)
50
55
  }
@@ -254,6 +259,33 @@ internal class RNUsercentricsModule(
254
259
  })
255
260
  }
256
261
 
262
+ @ReactMethod
263
+ override fun notifyLoginSuccess(promise: Promise) {
264
+ usercentricsProxy.instance.notifyLoginSuccess({
265
+ promise.resolve(null)
266
+ }, {
267
+ promise.reject(it)
268
+ })
269
+ }
270
+
271
+ @ReactMethod
272
+ override fun notifySubscribeSuccess(promise: Promise) {
273
+ usercentricsProxy.instance.notifySubscribeSuccess({
274
+ promise.resolve(null)
275
+ }, {
276
+ promise.reject(it)
277
+ })
278
+ }
279
+
280
+ @ReactMethod
281
+ override fun notifySubscriptionLapsed(promise: Promise) {
282
+ usercentricsProxy.instance.notifySubscriptionLapsed({
283
+ promise.resolve(null)
284
+ }, {
285
+ promise.reject(it)
286
+ })
287
+ }
288
+
257
289
  @ReactMethod
258
290
  override fun addListener(eventName: String) {
259
291
  if (eventName != ON_GPP_SECTION_CHANGE_EVENT) return
@@ -282,10 +314,8 @@ internal class RNUsercentricsModule(
282
314
  super.invalidate()
283
315
  }
284
316
 
285
- private fun emitEvent(eventName: String, payload: WritableMap) {
286
- reactApplicationContext
287
- .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
288
- .emit(eventName, payload)
317
+ private fun emitEvent(eventName: String, payload: Any?) {
318
+ reactApplicationContext.emitDeviceEvent(eventName, payload)
289
319
  }
290
320
 
291
321
  private fun readableMapValueToAny(map: ReadableMap): Any? {
@@ -322,5 +352,7 @@ internal class RNUsercentricsModule(
322
352
  companion object {
323
353
  const val NAME = "RNUsercentricsModule"
324
354
  const val ON_GPP_SECTION_CHANGE_EVENT = "onGppSectionChange"
355
+ const val ON_LOGIN_CLICKED_EVENT = "onLoginClicked"
356
+ const val ON_SUBSCRIBE_CLICKED_EVENT = "onSubscribeClicked"
325
357
  }
326
358
  }
@@ -33,6 +33,15 @@ abstract class RNUsercentricsModuleSpec internal constructor(context: ReactAppli
33
33
  @ReactMethod
34
34
  abstract fun clearUserSession(promise: Promise)
35
35
 
36
+ @ReactMethod
37
+ abstract fun notifyLoginSuccess(promise: Promise)
38
+
39
+ @ReactMethod
40
+ abstract fun notifySubscribeSuccess(promise: Promise)
41
+
42
+ @ReactMethod
43
+ abstract fun notifySubscriptionLapsed(promise: Promise)
44
+
36
45
  @ReactMethod
37
46
  abstract fun getConsents(promise: Promise)
38
47
 
@@ -14,7 +14,13 @@ interface UsercentricsProxy {
14
14
  fun initialize(context: Context, options: UsercentricsOptions)
15
15
  fun isReady(onSuccess: (UsercentricsReadyStatus) -> Unit, onFailure: (UsercentricsError) -> Unit)
16
16
 
17
- fun showFirstLayer(activity: Activity, bannerSettings: BannerSettings?, promise: Promise)
17
+ fun showFirstLayer(
18
+ activity: Activity,
19
+ bannerSettings: BannerSettings?,
20
+ onLoginClicked: (String?) -> Unit,
21
+ onSubscribeClicked: (String?) -> Unit,
22
+ promise: Promise,
23
+ )
18
24
  fun showSecondLayer(activity: Activity, bannerSettings: BannerSettings?, promise: Promise)
19
25
  }
20
26
 
@@ -39,11 +45,15 @@ internal class UsercentricsProxyImpl : UsercentricsProxy {
39
45
  override fun showFirstLayer(
40
46
  activity: Activity,
41
47
  bannerSettings: BannerSettings?,
48
+ onLoginClicked: (String?) -> Unit,
49
+ onSubscribeClicked: (String?) -> Unit,
42
50
  promise: Promise,
43
51
  ) {
44
- UsercentricsBanner(activity, bannerSettings).showFirstLayer {
45
- promise.resolve(it?.toWritableMap())
46
- }
52
+ UsercentricsBanner(activity, bannerSettings).showFirstLayer(
53
+ callback = { promise.resolve(it?.toWritableMap()) },
54
+ onLoginClicked = onLoginClicked,
55
+ onSubscribeClicked = onSubscribeClicked,
56
+ )
47
57
  }
48
58
 
49
59
  override fun showSecondLayer(
@@ -176,7 +176,8 @@ internal fun ReadableMap.generalStyleSettingsFromMap(context: Context): GeneralS
176
176
  font = getMap("font")?.bannerFontFromMap(context = context),
177
177
  logo = getMap("logo")?.bannerLogoFromMap(context = context),
178
178
  links = getString("links")?.legalLinksFromEnumString(),
179
- disableSystemBackButton = getBooleanOrNull("disableSystemBackButton")
179
+ disableSystemBackButton = getBooleanOrNull("disableSystemBackButton"),
180
+ windowFullscreen = getBooleanOrNull("windowFullscreen")
180
181
  )
181
182
  }
182
183
 
@@ -56,6 +56,10 @@ internal fun ReadableMap.usercentricsOptionsFromMap(): UsercentricsOptions {
56
56
  options.initTimeoutMillis = it.toLong()
57
57
  }
58
58
 
59
+ getString("controllerId")?.let {
60
+ options.controllerId = it
61
+ }
62
+
59
63
  getMap("bannerCustomization")?.let {
60
64
  options.bannerCustomization = it.bannerInitCustomizationFromMap()
61
65
  }
@@ -41,6 +41,10 @@ public extension UsercentricsOptions {
41
41
  options.initTimeoutMillis = Int64(initTimeoutMillis)
42
42
  }
43
43
 
44
+ if let controllerId = dictionary["controllerId"] as? String {
45
+ options.controllerId = controllerId
46
+ }
47
+
44
48
  if let bannerCustomizationDict = dictionary["bannerCustomization"] as? NSDictionary {
45
49
  options.bannerCustomization = BannerInitCustomization(from: bannerCustomizationDict)
46
50
  }
@@ -9,8 +9,14 @@ public protocol UsercentricsManager {
9
9
  func restoreUserSession(controllerId: String, onSuccess: @escaping ((UsercentricsReadyStatus) -> Void), onFailure: @escaping ((Error) -> Void))
10
10
 
11
11
  func showFirstLayer(bannerSettings: BannerSettings?,
12
+ onLoginClicked: @escaping (String?) -> Void,
13
+ onSubscribeClicked: @escaping (String?) -> Void,
12
14
  dismissViewHandler: @escaping (UsercentricsConsentUserResponse) -> Void)
13
15
 
16
+ func notifyLoginSuccess(onSuccess: @escaping (() -> Void), onError: @escaping ((Error) -> Void))
17
+ func notifySubscribeSuccess(onSuccess: @escaping (() -> Void), onError: @escaping ((Error) -> Void))
18
+ func notifySubscriptionLapsed(onSuccess: @escaping (() -> Void), onError: @escaping ((Error) -> Void))
19
+
14
20
  func showSecondLayer(bannerSettings: BannerSettings?,
15
21
  dismissViewHandler: @escaping (UsercentricsConsentUserResponse) -> Void)
16
22
 
@@ -60,8 +66,24 @@ final class UsercentricsManagerImplementation: UsercentricsManager {
60
66
  }
61
67
 
62
68
  func showFirstLayer(bannerSettings: BannerSettings?,
69
+ onLoginClicked: @escaping (String?) -> Void,
70
+ onSubscribeClicked: @escaping (String?) -> Void,
63
71
  dismissViewHandler: @escaping (UsercentricsConsentUserResponse) -> Void) {
64
- UsercentricsBanner(bannerSettings: bannerSettings).showFirstLayer(completionHandler: dismissViewHandler)
72
+ UsercentricsBanner(bannerSettings: bannerSettings).showFirstLayer(onLoginClicked: onLoginClicked,
73
+ onSubscribeClicked: onSubscribeClicked,
74
+ completionHandler: dismissViewHandler)
75
+ }
76
+
77
+ func notifyLoginSuccess(onSuccess: @escaping (() -> Void), onError: @escaping ((Error) -> Void)) {
78
+ UsercentricsCore.shared.notifyLoginSuccess(onSuccess: onSuccess, onError: onError)
79
+ }
80
+
81
+ func notifySubscribeSuccess(onSuccess: @escaping (() -> Void), onError: @escaping ((Error) -> Void)) {
82
+ UsercentricsCore.shared.notifySubscribeSuccess(onSuccess: onSuccess, onError: onError)
83
+ }
84
+
85
+ func notifySubscriptionLapsed(onSuccess: @escaping (() -> Void), onError: @escaping ((Error) -> Void)) {
86
+ UsercentricsCore.shared.notifySubscriptionLapsed(onSuccess: onSuccess, onError: onError)
65
87
  }
66
88
 
67
89
  func showSecondLayer(bannerSettings: BannerSettings?,
@@ -108,4 +108,13 @@ RCT_EXTERN_METHOD(track:(double)event)
108
108
 
109
109
  RCT_EXTERN_METHOD(clearUserSession:(RCTPromiseResolveBlock)resolve
110
110
  reject:(RCTPromiseRejectBlock)reject)
111
+
112
+ RCT_EXTERN_METHOD(notifyLoginSuccess:(RCTPromiseResolveBlock)resolve
113
+ reject:(RCTPromiseRejectBlock)reject)
114
+
115
+ RCT_EXTERN_METHOD(notifySubscribeSuccess:(RCTPromiseResolveBlock)resolve
116
+ reject:(RCTPromiseRejectBlock)reject)
117
+
118
+ RCT_EXTERN_METHOD(notifySubscriptionLapsed:(RCTPromiseResolveBlock)resolve
119
+ reject:(RCTPromiseRejectBlock)reject)
111
120
  @end
@@ -32,7 +32,7 @@ class RNUsercentricsModule: RCTEventEmitter {
32
32
  }
33
33
 
34
34
  override func supportedEvents() -> [String]! {
35
- return [Self.onGppSectionChangeEvent]
35
+ return [Self.onGppSectionChangeEvent, Self.onLoginClickedEvent, Self.onSubscribeClickedEvent]
36
36
  }
37
37
 
38
38
  override func startObserving() {
@@ -79,7 +79,11 @@ class RNUsercentricsModule: RCTEventEmitter {
79
79
  return
80
80
  }
81
81
 
82
- self.usercentricsManager.showFirstLayer(bannerSettings: BannerSettings(from: dict)) { response in
82
+ self.usercentricsManager.showFirstLayer(bannerSettings: BannerSettings(from: dict), onLoginClicked: { [weak self] url in
83
+ self?.sendEvent(withName: Self.onLoginClickedEvent, body: url)
84
+ }, onSubscribeClicked: { [weak self] url in
85
+ self?.sendEvent(withName: Self.onSubscribeClickedEvent, body: url)
86
+ }) { response in
83
87
  resolve(response.toDictionary())
84
88
  }
85
89
  }
@@ -270,7 +274,33 @@ class RNUsercentricsModule: RCTEventEmitter {
270
274
  }
271
275
  }
272
276
 
277
+ @objc func notifyLoginSuccess(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
278
+ usercentricsManager.notifyLoginSuccess {
279
+ resolve(nil)
280
+ } onError: { error in
281
+ reject("usercentrics_reactNative_notifyLoginSuccess_error", error.localizedDescription, error)
282
+ }
283
+ }
284
+
285
+ @objc func notifySubscribeSuccess(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
286
+ usercentricsManager.notifySubscribeSuccess {
287
+ resolve(nil)
288
+ } onError: { error in
289
+ reject("usercentrics_reactNative_notifySubscribeSuccess_error", error.localizedDescription, error)
290
+ }
291
+ }
292
+
293
+ @objc func notifySubscriptionLapsed(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
294
+ usercentricsManager.notifySubscriptionLapsed {
295
+ resolve(nil)
296
+ } onError: { error in
297
+ reject("usercentrics_reactNative_notifySubscriptionLapsed_error", error.localizedDescription, error)
298
+ }
299
+ }
300
+
273
301
  private static let onGppSectionChangeEvent = "onGppSectionChange"
302
+ private static let onLoginClickedEvent = "onLoginClicked"
303
+ private static let onSubscribeClickedEvent = "onSubscribeClicked"
274
304
  }
275
305
 
276
306
  // MARK: - RCTBridgeModule & TurboModule Conformance
@@ -29,6 +29,16 @@ NS_ASSUME_NONNULL_BEGIN
29
29
  - (void)clearUserSession:(RCTPromiseResolveBlock)resolve
30
30
  reject:(RCTPromiseRejectBlock)reject;
31
31
 
32
+ // Consent or Pay
33
+ - (void)notifyLoginSuccess:(RCTPromiseResolveBlock)resolve
34
+ reject:(RCTPromiseRejectBlock)reject;
35
+
36
+ - (void)notifySubscribeSuccess:(RCTPromiseResolveBlock)resolve
37
+ reject:(RCTPromiseRejectBlock)reject;
38
+
39
+ - (void)notifySubscriptionLapsed:(RCTPromiseResolveBlock)resolve
40
+ reject:(RCTPromiseRejectBlock)reject;
41
+
32
42
  // Data Retrieval
33
43
  - (void)getConsents:(RCTPromiseResolveBlock)resolve
34
44
  reject:(RCTPromiseRejectBlock)reject;
@@ -8,6 +8,9 @@ export interface Spec extends TurboModule {
8
8
  restoreUserSession(controllerId: string): Promise<UsercentricsReadyStatus>;
9
9
  getControllerId(): Promise<string>;
10
10
  clearUserSession(): Promise<UsercentricsReadyStatus>;
11
+ notifyLoginSuccess(): Promise<void>;
12
+ notifySubscribeSuccess(): Promise<void>;
13
+ notifySubscriptionLapsed(): Promise<void>;
11
14
  getConsents(): Promise<Array<UsercentricsServiceConsent>>;
12
15
  getCMPData(): Promise<UsercentricsCMPData>;
13
16
  getAdditionalConsentModeData(): Promise<AdditionalConsentModeData>;
@@ -1 +1 @@
1
- {"version":3,"file":"NativeUsercentrics.js","sourceRoot":"","sources":["../src/NativeUsercentrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAe,MAAM,cAAc,CAAC;AAwE/E,yDAAyD;AACzD,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,GAAG,CAAO,sBAAsB,CAAC,IAAI,aAAa,CAAC,oBAAoB,CAAC;AAEzH,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC1B,MAAM,IAAI,KAAK,CACb,0DAA0D;QAC1D,sDAAsD;QACtD,wCAAwC;QACxC,0DAA0D,CAC3D,CAAC;AACJ,CAAC;AAED,eAAe,oBAA4B,CAAC"}
1
+ {"version":3,"file":"NativeUsercentrics.js","sourceRoot":"","sources":["../src/NativeUsercentrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAe,MAAM,cAAc,CAAC;AA6E/E,yDAAyD;AACzD,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,GAAG,CAAO,sBAAsB,CAAC,IAAI,aAAa,CAAC,oBAAoB,CAAC;AAEzH,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC1B,MAAM,IAAI,KAAK,CACb,0DAA0D;QAC1D,sDAAsD;QACtD,wCAAwC;QACxC,0DAA0D,CAC3D,CAAC;AACJ,CAAC;AAED,eAAe,oBAA4B,CAAC"}
@@ -31,4 +31,9 @@ export declare const Usercentrics: {
31
31
  track: (event: UsercentricsAnalyticsEventType) => Promise<void>;
32
32
  clearUserSession: () => Promise<UsercentricsReadyStatus>;
33
33
  onGppSectionChange: (callback: (payload: GppSectionChangePayload) => void) => EmitterSubscription;
34
+ onLoginClicked: (callback: (url: string | null) => void) => EmitterSubscription;
35
+ onSubscribeClicked: (callback: (url: string | null) => void) => EmitterSubscription;
36
+ notifyLoginSuccess: () => Promise<void>;
37
+ notifySubscribeSuccess: () => Promise<void>;
38
+ notifySubscriptionLapsed: () => Promise<void>;
34
39
  };
@@ -119,5 +119,34 @@ export const Usercentrics = {
119
119
  onGppSectionChange: (callback) => {
120
120
  return eventEmitter.addListener("onGppSectionChange", callback);
121
121
  },
122
+ // Fires when the user taps the Consent-or-Pay 1st-layer subscriber-login link. The banner is not
123
+ // dismissed automatically — call notifyLoginSuccess once the host app confirms login, then dismiss
124
+ // the banner yourself.
125
+ onLoginClicked: (callback) => {
126
+ return eventEmitter.addListener("onLoginClicked", callback);
127
+ },
128
+ // Fires when the user taps the Consent-or-Pay 1st-layer Reject & Subscribe button. The banner is not
129
+ // dismissed automatically — call notifySubscribeSuccess once the host app confirms the subscription,
130
+ // then dismiss the banner yourself.
131
+ onSubscribeClicked: (callback) => {
132
+ return eventEmitter.addListener("onSubscribeClicked", callback);
133
+ },
134
+ // Clears stored TCF consent data after a successful Consent-or-Pay login.
135
+ notifyLoginSuccess: async () => {
136
+ await RNUsercentricsModule.isReady();
137
+ return RNUsercentricsModule.notifyLoginSuccess();
138
+ },
139
+ // Clears stored TCF consent data after a successful Consent-or-Pay subscription.
140
+ notifySubscribeSuccess: async () => {
141
+ await RNUsercentricsModule.isReady();
142
+ return RNUsercentricsModule.notifySubscribeSuccess();
143
+ },
144
+ // Notifies the SDK that a previously active Consent-or-Pay subscription has lapsed,
145
+ // resetting the subscriber flag so the host app can re-surface the banner. Does not
146
+ // alter any existing consent data, which remains accurate.
147
+ notifySubscriptionLapsed: async () => {
148
+ await RNUsercentricsModule.isReady();
149
+ return RNUsercentricsModule.notifySubscriptionLapsed();
150
+ },
122
151
  };
123
152
  //# sourceMappingURL=Usercentrics.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Usercentrics.js","sourceRoot":"","sources":["../src/Usercentrics.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Usercentrics.js","sourceRoot":"","sources":["../src/Usercentrics.tsx"],"names":[],"mappings":"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"}
@@ -7,6 +7,9 @@ export interface Spec extends TurboModule {
7
7
  restoreUserSession(controllerId: string): Promise<Object>;
8
8
  getControllerId(): Promise<string>;
9
9
  clearUserSession(): Promise<Object>;
10
+ notifyLoginSuccess(): Promise<void>;
11
+ notifySubscribeSuccess(): Promise<void>;
12
+ notifySubscriptionLapsed(): Promise<void>;
10
13
  getConsents(): Promise<Array<Object>>;
11
14
  getCMPData(): Promise<Object>;
12
15
  getAdditionalConsentModeData(): Promise<Object>;
@@ -1 +1 @@
1
- {"version":3,"file":"NativeUsercentricsModule.js","sourceRoot":"","sources":["../../src/fabric/NativeUsercentricsModule.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAwDnD,eAAe,mBAAmB,CAAC,GAAG,CAAO,sBAAsB,CAAC,CAAC"}
1
+ {"version":3,"file":"NativeUsercentricsModule.js","sourceRoot":"","sources":["../../src/fabric/NativeUsercentricsModule.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AA6DnD,eAAe,mBAAmB,CAAC,GAAG,CAAO,sBAAsB,CAAC,CAAC"}
@@ -39,7 +39,12 @@ export declare class GeneralStyleSettings {
39
39
  bordersColorHex?: String;
40
40
  toggleStyleSettings?: ToggleStyleSettings;
41
41
  disableSystemBackButton?: Boolean;
42
- constructor(font?: BannerFont, logo?: BannerLogo, links?: LegalLinksSettings, textColorHex?: String, layerBackgroundColorHex?: String, layerBackgroundSecondaryColorHex?: String, linkColorHex?: String, tabColorHex?: String, bordersColorHex?: String, toggleStyleSettings?: ToggleStyleSettings, disableSystemBackButton?: Boolean);
42
+ /**
43
+ * Android-only. Backward-compat workaround for publishers who relied on the legacy
44
+ * fullscreen dialog behavior prior to the edge-to-edge fix. Has no effect on iOS.
45
+ */
46
+ windowFullscreen?: Boolean;
47
+ constructor(font?: BannerFont, logo?: BannerLogo, links?: LegalLinksSettings, textColorHex?: String, layerBackgroundColorHex?: String, layerBackgroundSecondaryColorHex?: String, linkColorHex?: String, tabColorHex?: String, bordersColorHex?: String, toggleStyleSettings?: ToggleStyleSettings, disableSystemBackButton?: Boolean, windowFullscreen?: Boolean);
43
48
  }
44
49
  export declare class BannerSettings {
45
50
  firstLayerStyleSettings?: FirstLayerStyleSettings;
@@ -30,7 +30,7 @@ export class ToggleStyleSettings {
30
30
  }
31
31
  }
32
32
  export class GeneralStyleSettings {
33
- constructor(font, logo, links, textColorHex, layerBackgroundColorHex, layerBackgroundSecondaryColorHex, linkColorHex, tabColorHex, bordersColorHex, toggleStyleSettings, disableSystemBackButton) {
33
+ constructor(font, logo, links, textColorHex, layerBackgroundColorHex, layerBackgroundSecondaryColorHex, linkColorHex, tabColorHex, bordersColorHex, toggleStyleSettings, disableSystemBackButton, windowFullscreen) {
34
34
  this.font = font;
35
35
  this.logo = logo;
36
36
  this.links = links;
@@ -42,6 +42,7 @@ export class GeneralStyleSettings {
42
42
  this.bordersColorHex = bordersColorHex;
43
43
  this.toggleStyleSettings = toggleStyleSettings;
44
44
  this.disableSystemBackButton = disableSystemBackButton;
45
+ this.windowFullscreen = windowFullscreen;
45
46
  }
46
47
  }
47
48
  export class BannerSettings {
@@ -1 +1 @@
1
- {"version":3,"file":"BannerSettings.js","sourceRoot":"","sources":["../../src/models/BannerSettings.tsx"],"names":[],"mappings":"AAGA,MAAM,OAAO,UAAU;IAMnB,YAAY,QAAgB,EAAE,QAAkC,EAAE,OAAgB;QAC9E,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;CACJ;AAED,MAAM,OAAO,UAAU;IAMnB,YAAY,WAAmB,EAAE,QAAgB,EAAE,QAAgB;QAC/D,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;CACJ;AAED,MAAM,CAAN,IAAY,kBAMX;AAND,WAAY,kBAAkB;IAE1B,yDAAmC,CAAA;IACnC,2DAAqC,CAAA;IACrC,mCAAa,CAAA;IACb,uCAAiB,CAAA;AACrB,CAAC,EANW,kBAAkB,KAAlB,kBAAkB,QAM7B;AAED,MAAM,OAAO,mBAAmB;IAS5B,YACI,wBAAiC,EACjC,0BAAmC,EACnC,0BAAmC,EACnC,mBAA4B,EAC5B,qBAA8B,EAC9B,qBAA8B;QAE9B,IAAI,CAAC,wBAAwB,GAAG,wBAAwB,CAAC;QACzD,IAAI,CAAC,0BAA0B,GAAG,0BAA0B,CAAC;QAC7D,IAAI,CAAC,0BAA0B,GAAG,0BAA0B,CAAC;QAC7D,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;QAC/C,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;QACnD,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;IACvD,CAAC;CACJ;AAED,MAAM,OAAO,oBAAoB;IAc7B,YAAY,IAAiB,EACjB,IAAiB,EACjB,KAA0B,EAC1B,YAAqB,EACrB,uBAAgC,EAChC,gCAAyC,EACzC,YAAqB,EACrB,WAAoB,EACpB,eAAwB,EACxB,mBAAyC,EACzC,uBAAiC;QAEzC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;QACvD,IAAI,CAAC,gCAAgC,GAAG,gCAAgC,CAAC;QACzE,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;QAC/C,IAAI,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;IAC3D,CAAC;CACJ;AAED,MAAM,OAAO,cAAc;IAYvB,YAAY,uBAAiD,EAAE,wBAAmD,EAAE,oBAA2C,EAAE,WAAoB,EAAE,iBAA2C;QAC9N,IAAI,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;QACvD,IAAI,CAAC,wBAAwB,GAAG,wBAAwB,CAAC;QACzD,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QACjD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;IAC/C,CAAC;CACJ"}
1
+ {"version":3,"file":"BannerSettings.js","sourceRoot":"","sources":["../../src/models/BannerSettings.tsx"],"names":[],"mappings":"AAGA,MAAM,OAAO,UAAU;IAMnB,YAAY,QAAgB,EAAE,QAAkC,EAAE,OAAgB;QAC9E,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;CACJ;AAED,MAAM,OAAO,UAAU;IAMnB,YAAY,WAAmB,EAAE,QAAgB,EAAE,QAAgB;QAC/D,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;CACJ;AAED,MAAM,CAAN,IAAY,kBAMX;AAND,WAAY,kBAAkB;IAE1B,yDAAmC,CAAA;IACnC,2DAAqC,CAAA;IACrC,mCAAa,CAAA;IACb,uCAAiB,CAAA;AACrB,CAAC,EANW,kBAAkB,KAAlB,kBAAkB,QAM7B;AAED,MAAM,OAAO,mBAAmB;IAS5B,YACI,wBAAiC,EACjC,0BAAmC,EACnC,0BAAmC,EACnC,mBAA4B,EAC5B,qBAA8B,EAC9B,qBAA8B;QAE9B,IAAI,CAAC,wBAAwB,GAAG,wBAAwB,CAAC;QACzD,IAAI,CAAC,0BAA0B,GAAG,0BAA0B,CAAC;QAC7D,IAAI,CAAC,0BAA0B,GAAG,0BAA0B,CAAC;QAC7D,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;QAC/C,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;QACnD,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;IACvD,CAAC;CACJ;AAED,MAAM,OAAO,oBAAoB;IAmB7B,YAAY,IAAiB,EACjB,IAAiB,EACjB,KAA0B,EAC1B,YAAqB,EACrB,uBAAgC,EAChC,gCAAyC,EACzC,YAAqB,EACrB,WAAoB,EACpB,eAAwB,EACxB,mBAAyC,EACzC,uBAAiC,EACjC,gBAA0B;QAElC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;QACvD,IAAI,CAAC,gCAAgC,GAAG,gCAAgC,CAAC;QACzE,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;QAC/C,IAAI,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;QACvD,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC7C,CAAC;CACJ;AAED,MAAM,OAAO,cAAc;IAYvB,YAAY,uBAAiD,EAAE,wBAAmD,EAAE,oBAA2C,EAAE,WAAoB,EAAE,iBAA2C;QAC9N,IAAI,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;QACvD,IAAI,CAAC,wBAAwB,GAAG,wBAAwB,CAAC;QACzD,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QACjD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;IAC/C,CAAC;CACJ"}
@@ -9,12 +9,26 @@ export declare class UsercentricsOptions {
9
9
  networkMode?: NetworkMode;
10
10
  consentMediation?: Boolean;
11
11
  initTimeoutMillis?: number;
12
+ /**
13
+ * Optional controllerId to inject at SDK initialisation.
14
+ *
15
+ * Use this to preserve user identity across login/logout flows that clear local consent
16
+ * storage. Store the controllerId (via `Usercentrics.getControllerId()`) server-side after
17
+ * the first successful init, then pass it here on every subsequent login. The SDK will skip
18
+ * generating a new ID and use this value instead. It is persisted to local storage, so
19
+ * subsequent re-initialisations without this option continue to use it.
20
+ *
21
+ * The value must be a 64-character lowercase hexadecimal string (the format produced
22
+ * internally by the SDK). Invalid values are ignored with a warning log and the SDK falls
23
+ * back to its normal ID resolution (stored → generated).
24
+ */
25
+ controllerId?: string;
12
26
  /**
13
27
  * @deprecated bannerCustomization is deprecated and will be removed in a future release.
14
28
  * Configure banner appearance via the Usercentrics dashboard instead.
15
29
  */
16
30
  bannerCustomization?: BannerInitCustomization;
17
- constructor({ settingsId, ruleSetId, defaultLanguage, loggerLevel, timeoutMillis, version, networkMode, consentMediation, initTimeoutMillis, bannerCustomization }: {
31
+ constructor({ settingsId, ruleSetId, defaultLanguage, loggerLevel, timeoutMillis, version, networkMode, consentMediation, initTimeoutMillis, controllerId, bannerCustomization }: {
18
32
  settingsId?: string;
19
33
  ruleSetId?: string;
20
34
  defaultLanguage?: string;
@@ -24,6 +38,7 @@ export declare class UsercentricsOptions {
24
38
  networkMode?: NetworkMode;
25
39
  consentMediation?: Boolean;
26
40
  initTimeoutMillis?: number;
41
+ controllerId?: string;
27
42
  bannerCustomization?: BannerInitCustomization;
28
43
  });
29
44
  }
@@ -1,5 +1,5 @@
1
1
  export class UsercentricsOptions {
2
- constructor({ settingsId = "", ruleSetId = "", defaultLanguage = undefined, loggerLevel = undefined, timeoutMillis = undefined, version = undefined, networkMode = undefined, consentMediation = undefined, initTimeoutMillis = undefined, bannerCustomization = undefined }) {
2
+ constructor({ settingsId = "", ruleSetId = "", defaultLanguage = undefined, loggerLevel = undefined, timeoutMillis = undefined, version = undefined, networkMode = undefined, consentMediation = undefined, initTimeoutMillis = undefined, controllerId = undefined, bannerCustomization = undefined }) {
3
3
  this.settingsId = settingsId;
4
4
  this.ruleSetId = ruleSetId;
5
5
  this.defaultLanguage = defaultLanguage;
@@ -9,6 +9,7 @@ export class UsercentricsOptions {
9
9
  this.networkMode = networkMode;
10
10
  this.consentMediation = consentMediation;
11
11
  this.initTimeoutMillis = initTimeoutMillis;
12
+ this.controllerId = controllerId;
12
13
  this.bannerCustomization = bannerCustomization;
13
14
  }
14
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"UsercentricsOptions.js","sourceRoot":"","sources":["../../src/models/UsercentricsOptions.tsx"],"names":[],"mappings":"AAEA,MAAM,OAAO,mBAAmB;IAgB5B,YAAY,EACI,UAAU,GAAG,EAAE,EACf,SAAS,GAAG,EAAE,EACd,eAAe,GAAG,SAAS,EAC3B,WAAW,GAAG,SAAS,EACvB,aAAa,GAAG,SAAS,EACzB,OAAO,GAAG,SAAS,EACnB,WAAW,GAAG,SAAS,EACvB,gBAAgB,GAAG,SAAS,EAC5B,iBAAiB,GAAG,SAAS,EAC7B,mBAAmB,GAAG,SAAS,EAY9C;QACG,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;QACtC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;QAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAA;QACxC,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAA;QAC1C,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAA;IAClD,CAAC;CACJ"}
1
+ {"version":3,"file":"UsercentricsOptions.js","sourceRoot":"","sources":["../../src/models/UsercentricsOptions.tsx"],"names":[],"mappings":"AAEA,MAAM,OAAO,mBAAmB;IA8B5B,YAAY,EACI,UAAU,GAAG,EAAE,EACf,SAAS,GAAG,EAAE,EACd,eAAe,GAAG,SAAS,EAC3B,WAAW,GAAG,SAAS,EACvB,aAAa,GAAG,SAAS,EACzB,OAAO,GAAG,SAAS,EACnB,WAAW,GAAG,SAAS,EACvB,gBAAgB,GAAG,SAAS,EAC5B,iBAAiB,GAAG,SAAS,EAC7B,YAAY,GAAG,SAAS,EACxB,mBAAmB,GAAG,SAAS,EAa9C;QACG,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;QACtC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;QAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAA;QACxC,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAA;QAC1C,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;QAChC,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAA;IAClD,CAAC;CACJ"}
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@usercentrics/react-native-sdk",
3
- "version": "2.30.0",
3
+ "version": "2.32.0",
4
4
  "description": "Usercentrics SDK",
5
5
  "homepage": "https://usercentrics.com",
6
6
  "main": "lib/index.js",
7
7
  "types": "lib/index.d.ts",
8
8
  "author": "Usercentrics <developer@usercentrics.com>",
9
9
  "iosPackageName": "react-native-usercentrics",
10
- "iosPackageVersion": "2.30.0",
10
+ "iosPackageVersion": "2.32.0",
11
11
  "license": "SEE LICENSE IN LICENSE",
12
12
  "files": [
13
13
  "android",
@@ -30,6 +30,11 @@ export interface Spec extends TurboModule {
30
30
  getControllerId(): Promise<string>;
31
31
  clearUserSession(): Promise<UsercentricsReadyStatus>;
32
32
 
33
+ // Consent or Pay
34
+ notifyLoginSuccess(): Promise<void>;
35
+ notifySubscribeSuccess(): Promise<void>;
36
+ notifySubscriptionLapsed(): Promise<void>;
37
+
33
38
  // Data Retrieval
34
39
  getConsents(): Promise<Array<UsercentricsServiceConsent>>;
35
40
  getCMPData(): Promise<UsercentricsCMPData>;
@@ -171,4 +171,38 @@ export const Usercentrics = {
171
171
  onGppSectionChange: (callback: (payload: GppSectionChangePayload) => void): EmitterSubscription => {
172
172
  return eventEmitter.addListener("onGppSectionChange", callback);
173
173
  },
174
+
175
+ // Fires when the user taps the Consent-or-Pay 1st-layer subscriber-login link. The banner is not
176
+ // dismissed automatically — call notifyLoginSuccess once the host app confirms login, then dismiss
177
+ // the banner yourself.
178
+ onLoginClicked: (callback: (url: string | null) => void): EmitterSubscription => {
179
+ return eventEmitter.addListener("onLoginClicked", callback);
180
+ },
181
+
182
+ // Fires when the user taps the Consent-or-Pay 1st-layer Reject & Subscribe button. The banner is not
183
+ // dismissed automatically — call notifySubscribeSuccess once the host app confirms the subscription,
184
+ // then dismiss the banner yourself.
185
+ onSubscribeClicked: (callback: (url: string | null) => void): EmitterSubscription => {
186
+ return eventEmitter.addListener("onSubscribeClicked", callback);
187
+ },
188
+
189
+ // Clears stored TCF consent data after a successful Consent-or-Pay login.
190
+ notifyLoginSuccess: async (): Promise<void> => {
191
+ await RNUsercentricsModule.isReady();
192
+ return RNUsercentricsModule.notifyLoginSuccess();
193
+ },
194
+
195
+ // Clears stored TCF consent data after a successful Consent-or-Pay subscription.
196
+ notifySubscribeSuccess: async (): Promise<void> => {
197
+ await RNUsercentricsModule.isReady();
198
+ return RNUsercentricsModule.notifySubscribeSuccess();
199
+ },
200
+
201
+ // Notifies the SDK that a previously active Consent-or-Pay subscription has lapsed,
202
+ // resetting the subscriber flag so the host app can re-surface the banner. Does not
203
+ // alter any existing consent data, which remains accurate.
204
+ notifySubscriptionLapsed: async (): Promise<void> => {
205
+ await RNUsercentricsModule.isReady();
206
+ return RNUsercentricsModule.notifySubscriptionLapsed();
207
+ },
174
208
  }
@@ -65,6 +65,7 @@ jest.mock("react-native", () => {
65
65
  reset: jest.fn(),
66
66
  getDpsMetadata: jest.fn(),
67
67
  clearUserSession: jest.fn(),
68
+ notifySubscriptionLapsed: jest.fn(),
68
69
  addListener: jest.fn(),
69
70
  removeListeners: jest.fn()
70
71
  };
@@ -89,6 +90,21 @@ describe('Test Usercentrics Module', () => {
89
90
  expect(call).toBe(options)
90
91
  })
91
92
 
93
+ test('testConfigureBridgeWithControllerId', () => {
94
+ const controllerId = "a".repeat(64);
95
+ const options = new UsercentricsOptions({
96
+ settingsId: "abc",
97
+ ruleSetId: "qwer",
98
+ controllerId
99
+ });
100
+
101
+ Usercentrics.configure(options);
102
+ const calls = RNUsercentricsModule.configure.mock.calls;
103
+ const call = calls[calls.length - 1][0];
104
+ expect(call).toBe(options);
105
+ expect(call.controllerId).toBe(controllerId);
106
+ })
107
+
92
108
  test('testConfigureBridgeWithBannerCustomization', () => {
93
109
  const bannerCustomization = new BannerInitCustomization({
94
110
  paddingTop: 16,
@@ -618,4 +634,25 @@ describe('Test Usercentrics Module', () => {
618
634
  expect(e).toBe("Failed");
619
635
  }
620
636
  })
637
+
638
+ test('testNotifySubscriptionLapsed', async () => {
639
+ RNUsercentricsModule.notifySubscriptionLapsed.mockImplementationOnce(
640
+ (): Promise<any> => Promise.resolve()
641
+ )
642
+
643
+ await Usercentrics.notifySubscriptionLapsed();
644
+ expect(RNUsercentricsModule.notifySubscriptionLapsed).toHaveBeenCalled();
645
+ })
646
+
647
+ test('testNotifySubscriptionLapsedWithError', async () => {
648
+ RNUsercentricsModule.notifySubscriptionLapsed.mockImplementationOnce(
649
+ (): Promise<any> => Promise.reject("Failed")
650
+ )
651
+
652
+ try {
653
+ await Usercentrics.notifySubscriptionLapsed();
654
+ } catch (e) {
655
+ expect(e).toBe("Failed");
656
+ }
657
+ })
621
658
  })
@@ -15,6 +15,11 @@ export interface Spec extends TurboModule {
15
15
  getControllerId(): Promise<string>;
16
16
  clearUserSession(): Promise<Object>;
17
17
 
18
+ // Consent or Pay
19
+ notifyLoginSuccess(): Promise<void>;
20
+ notifySubscribeSuccess(): Promise<void>;
21
+ notifySubscriptionLapsed(): Promise<void>;
22
+
18
23
  // Data Retrieval
19
24
  getConsents(): Promise<Array<Object>>;
20
25
  getCMPData(): Promise<Object>;
@@ -74,6 +74,11 @@ export class GeneralStyleSettings {
74
74
  bordersColorHex?: String;
75
75
  toggleStyleSettings?: ToggleStyleSettings;
76
76
  disableSystemBackButton?: Boolean;
77
+ /**
78
+ * Android-only. Backward-compat workaround for publishers who relied on the legacy
79
+ * fullscreen dialog behavior prior to the edge-to-edge fix. Has no effect on iOS.
80
+ */
81
+ windowFullscreen?: Boolean;
77
82
 
78
83
  constructor(font?: BannerFont,
79
84
  logo?: BannerLogo,
@@ -85,7 +90,8 @@ export class GeneralStyleSettings {
85
90
  tabColorHex?: String,
86
91
  bordersColorHex?: String,
87
92
  toggleStyleSettings?: ToggleStyleSettings,
88
- disableSystemBackButton?: Boolean
93
+ disableSystemBackButton?: Boolean,
94
+ windowFullscreen?: Boolean
89
95
  ) {
90
96
  this.font = font;
91
97
  this.logo = logo;
@@ -98,6 +104,7 @@ export class GeneralStyleSettings {
98
104
  this.bordersColorHex = bordersColorHex;
99
105
  this.toggleStyleSettings = toggleStyleSettings;
100
106
  this.disableSystemBackButton = disableSystemBackButton;
107
+ this.windowFullscreen = windowFullscreen;
101
108
  }
102
109
  }
103
110
 
@@ -10,6 +10,20 @@ export class UsercentricsOptions {
10
10
  networkMode?: NetworkMode;
11
11
  consentMediation?: Boolean;
12
12
  initTimeoutMillis?: number;
13
+ /**
14
+ * Optional controllerId to inject at SDK initialisation.
15
+ *
16
+ * Use this to preserve user identity across login/logout flows that clear local consent
17
+ * storage. Store the controllerId (via `Usercentrics.getControllerId()`) server-side after
18
+ * the first successful init, then pass it here on every subsequent login. The SDK will skip
19
+ * generating a new ID and use this value instead. It is persisted to local storage, so
20
+ * subsequent re-initialisations without this option continue to use it.
21
+ *
22
+ * The value must be a 64-character lowercase hexadecimal string (the format produced
23
+ * internally by the SDK). Invalid values are ignored with a warning log and the SDK falls
24
+ * back to its normal ID resolution (stored → generated).
25
+ */
26
+ controllerId?: string;
13
27
  /**
14
28
  * @deprecated bannerCustomization is deprecated and will be removed in a future release.
15
29
  * Configure banner appearance via the Usercentrics dashboard instead.
@@ -26,6 +40,7 @@ export class UsercentricsOptions {
26
40
  networkMode = undefined,
27
41
  consentMediation = undefined,
28
42
  initTimeoutMillis = undefined,
43
+ controllerId = undefined,
29
44
  bannerCustomization = undefined
30
45
  }: {
31
46
  settingsId?: string,
@@ -37,6 +52,7 @@ export class UsercentricsOptions {
37
52
  networkMode?: NetworkMode,
38
53
  consentMediation?: Boolean,
39
54
  initTimeoutMillis?: number,
55
+ controllerId?: string,
40
56
  bannerCustomization?: BannerInitCustomization
41
57
  }) {
42
58
  this.settingsId = settingsId;
@@ -48,6 +64,7 @@ export class UsercentricsOptions {
48
64
  this.networkMode = networkMode
49
65
  this.consentMediation = consentMediation
50
66
  this.initTimeoutMillis = initTimeoutMillis
67
+ this.controllerId = controllerId
51
68
  this.bannerCustomization = bannerCustomization
52
69
  }
53
70
  }