@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.
- package/android/build.gradle.kts +1 -1
- package/android/src/androidTest/java/com/usercentrics/reactnative/RNUsercentricsModuleTest.kt +2 -0
- package/android/src/main/java/com/usercentrics/reactnative/RNUsercentricsModule.kt +38 -6
- package/android/src/main/java/com/usercentrics/reactnative/RNUsercentricsModuleSpec.kt +9 -0
- package/android/src/main/java/com/usercentrics/reactnative/api/UsercentricsProxy.kt +14 -4
- package/android/src/main/java/com/usercentrics/reactnative/extensions/BannerSettingsExtensions.kt +2 -1
- package/android/src/main/java/com/usercentrics/reactnative/extensions/UserOptionsExtensions.kt +4 -0
- package/ios/Extensions/UsercentricsOptions+Dict.swift +4 -0
- package/ios/Manager/UsercentricsManager.swift +23 -1
- package/ios/RNUsercentricsModule.mm +9 -0
- package/ios/RNUsercentricsModule.swift +32 -2
- package/ios/RNUsercentricsModuleSpec.h +10 -0
- package/lib/NativeUsercentrics.d.ts +3 -0
- package/lib/NativeUsercentrics.js.map +1 -1
- package/lib/Usercentrics.d.ts +5 -0
- package/lib/Usercentrics.js +29 -0
- package/lib/Usercentrics.js.map +1 -1
- package/lib/fabric/NativeUsercentricsModule.d.ts +3 -0
- package/lib/fabric/NativeUsercentricsModule.js.map +1 -1
- package/lib/models/BannerSettings.d.ts +6 -1
- package/lib/models/BannerSettings.js +2 -1
- package/lib/models/BannerSettings.js.map +1 -1
- package/lib/models/UsercentricsOptions.d.ts +16 -1
- package/lib/models/UsercentricsOptions.js +2 -1
- package/lib/models/UsercentricsOptions.js.map +1 -1
- package/package.json +2 -2
- package/src/NativeUsercentrics.ts +5 -0
- package/src/Usercentrics.tsx +34 -0
- package/src/__tests__/index.test.ts +37 -0
- package/src/fabric/NativeUsercentricsModule.ts +5 -0
- package/src/models/BannerSettings.tsx +8 -1
- package/src/models/UsercentricsOptions.tsx +17 -0
package/android/build.gradle.kts
CHANGED
package/android/src/androidTest/java/com/usercentrics/reactnative/RNUsercentricsModuleTest.kt
CHANGED
|
@@ -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(
|
|
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:
|
|
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(
|
|
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(
|
package/android/src/main/java/com/usercentrics/reactnative/extensions/BannerSettingsExtensions.kt
CHANGED
|
@@ -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
|
|
package/android/src/main/java/com/usercentrics/reactnative/extensions/UserOptionsExtensions.kt
CHANGED
|
@@ -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(
|
|
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)
|
|
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;
|
|
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"}
|
package/lib/Usercentrics.d.ts
CHANGED
|
@@ -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
|
};
|
package/lib/Usercentrics.js
CHANGED
|
@@ -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
|
package/lib/Usercentrics.js.map
CHANGED
|
@@ -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;
|
|
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
|
-
|
|
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;
|
|
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;
|
|
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.
|
|
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.
|
|
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>;
|
package/src/Usercentrics.tsx
CHANGED
|
@@ -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
|
}
|