@usercentrics/react-native-sdk 2.24.4 → 2.25.1
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-legacy.gradle +1 -1
- package/android/build.gradle.kts +7 -1
- package/android/src/androidTest/java/com/usercentrics/reactnative/mock/GetCMPDataMock.kt +16 -12
- package/android/src/main/java/com/usercentrics/reactnative/RNUsercentricsModule.kt +20 -20
- package/android/src/main/java/com/usercentrics/reactnative/RNUsercentricsModuleSpec.kt +10 -10
- package/android/src/main/java/com/usercentrics/reactnative/extensions/ConsentDisclosureSerializer.kt +12 -1
- package/ios/Extensions/UsercentricsCMPData+Dict.swift +4 -1
- package/ios/RNUsercentricsModule+TurboModule.mm +34 -0
- package/ios/RNUsercentricsModule.mm +12 -12
- package/ios/RNUsercentricsModule.swift +39 -29
- package/ios/RNUsercentricsModuleSpec.h +12 -12
- package/lib/models/ConsentDisclosureObject.d.ts +7 -1
- package/lib/models/ConsentDisclosureObject.js +8 -1
- package/lib/models/ConsentDisclosureObject.js.map +1 -1
- package/package.json +12 -2
- package/react-native-usercentrics.podspec +6 -12
- package/src/__tests__/mocks.ts +2 -1
- package/src/models/ConsentDisclosureObject.tsx +13 -1
package/android/build.gradle.kts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
val usercentricsVersion = "2.
|
|
1
|
+
val usercentricsVersion = "2.25.1"
|
|
2
2
|
val reactNativeVersion = "+"
|
|
3
3
|
|
|
4
4
|
fun BooleanProperty(name: String): Boolean {
|
|
@@ -11,6 +11,7 @@ val isHermesEnabled = BooleanProperty("hermesEnabled")
|
|
|
11
11
|
plugins {
|
|
12
12
|
id("com.android.library")
|
|
13
13
|
id("kotlin-android")
|
|
14
|
+
id("org.jetbrains.kotlinx.kover") version "0.9.1"
|
|
14
15
|
}
|
|
15
16
|
|
|
16
17
|
if (isNewArchitectureEnabled) {
|
|
@@ -37,6 +38,11 @@ android {
|
|
|
37
38
|
|
|
38
39
|
}
|
|
39
40
|
|
|
41
|
+
buildTypes {
|
|
42
|
+
getByName("debug") {
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
40
46
|
compileOptions {
|
|
41
47
|
sourceCompatibility = JavaVersion.VERSION_17
|
|
42
48
|
targetCompatibility = JavaVersion.VERSION_17
|
|
@@ -88,7 +88,8 @@ internal object GetCMPDataMock {
|
|
|
88
88
|
domain = "domain",
|
|
89
89
|
description = "description",
|
|
90
90
|
)
|
|
91
|
-
)
|
|
91
|
+
),
|
|
92
|
+
sdks = listOf()
|
|
92
93
|
),
|
|
93
94
|
isHidden = false,
|
|
94
95
|
)
|
|
@@ -628,17 +629,20 @@ internal object GetCMPDataMock {
|
|
|
628
629
|
"isDeactivated" to false,
|
|
629
630
|
"disableLegalBasis" to false,
|
|
630
631
|
"technologyUsed" to listOf("Cookies", "Pixel Tags"),
|
|
631
|
-
"deviceStorage" to
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
632
|
+
"deviceStorage" to mapOf(
|
|
633
|
+
"disclosures" to listOf(
|
|
634
|
+
mapOf(
|
|
635
|
+
"identifier" to "identifier",
|
|
636
|
+
"type" to 2,
|
|
637
|
+
"name" to "name",
|
|
638
|
+
"maxAgeSeconds" to 123123L,
|
|
639
|
+
"cookieRefresh" to true,
|
|
640
|
+
"purposes" to listOf(1, 2, 3),
|
|
641
|
+
"domain" to "domain",
|
|
642
|
+
"description" to "description",
|
|
643
|
+
)
|
|
644
|
+
),
|
|
645
|
+
"sdks" to emptyList<Map<String, Any>>()
|
|
642
646
|
),
|
|
643
647
|
"isHidden" to false,
|
|
644
648
|
)
|
|
@@ -95,8 +95,8 @@ internal class RNUsercentricsModule(
|
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
@ReactMethod
|
|
98
|
-
override fun setCMPId(id:
|
|
99
|
-
usercentricsProxy.instance.setCMPId(id)
|
|
98
|
+
override fun setCMPId(id: Double) {
|
|
99
|
+
usercentricsProxy.instance.setCMPId(id.toInt())
|
|
100
100
|
}
|
|
101
101
|
|
|
102
102
|
@ReactMethod
|
|
@@ -131,37 +131,37 @@ internal class RNUsercentricsModule(
|
|
|
131
131
|
}
|
|
132
132
|
|
|
133
133
|
@ReactMethod
|
|
134
|
-
override fun acceptAllForTCF(fromLayer:
|
|
134
|
+
override fun acceptAllForTCF(fromLayer: Double, consentType: Double, promise: Promise) {
|
|
135
135
|
promise.resolve(
|
|
136
136
|
usercentricsProxy.instance.acceptAllForTCF(
|
|
137
|
-
TCFDecisionUILayer.values()[fromLayer], UsercentricsConsentType.values()[consentType]
|
|
137
|
+
TCFDecisionUILayer.values()[fromLayer.toInt()], UsercentricsConsentType.values()[consentType.toInt()]
|
|
138
138
|
).toWritableArray()
|
|
139
139
|
)
|
|
140
140
|
}
|
|
141
141
|
|
|
142
142
|
@ReactMethod
|
|
143
|
-
override fun acceptAll(consentType:
|
|
143
|
+
override fun acceptAll(consentType: Double, promise: Promise) {
|
|
144
144
|
promise.resolve(
|
|
145
145
|
usercentricsProxy.instance.acceptAll(
|
|
146
|
-
UsercentricsConsentType.values()[consentType]
|
|
146
|
+
UsercentricsConsentType.values()[consentType.toInt()]
|
|
147
147
|
).toWritableArray()
|
|
148
148
|
)
|
|
149
149
|
}
|
|
150
150
|
|
|
151
151
|
@ReactMethod
|
|
152
|
-
override fun denyAllForTCF(fromLayer:
|
|
152
|
+
override fun denyAllForTCF(fromLayer: Double, consentType: Double, unsavedPurposeLIDecisions: ReadableArray, promise: Promise) {
|
|
153
153
|
promise.resolve(
|
|
154
154
|
usercentricsProxy.instance.denyAllForTCF(
|
|
155
|
-
TCFDecisionUILayer.values()[fromLayer], UsercentricsConsentType.values()[consentType], unsavedPurposeLIDecisions.deserializePurposeLIDecisionsMap()
|
|
155
|
+
TCFDecisionUILayer.values()[fromLayer.toInt()], UsercentricsConsentType.values()[consentType.toInt()], unsavedPurposeLIDecisions.deserializePurposeLIDecisionsMap()
|
|
156
156
|
).toWritableArray()
|
|
157
157
|
)
|
|
158
158
|
}
|
|
159
159
|
|
|
160
160
|
@ReactMethod
|
|
161
|
-
override fun denyAll(consentType:
|
|
161
|
+
override fun denyAll(consentType: Double, promise: Promise) {
|
|
162
162
|
promise.resolve(
|
|
163
163
|
usercentricsProxy.instance.denyAll(
|
|
164
|
-
UsercentricsConsentType.values()[consentType]
|
|
164
|
+
UsercentricsConsentType.values()[consentType.toInt()]
|
|
165
165
|
).toWritableArray()
|
|
166
166
|
)
|
|
167
167
|
}
|
|
@@ -169,42 +169,42 @@ internal class RNUsercentricsModule(
|
|
|
169
169
|
@ReactMethod
|
|
170
170
|
override fun saveDecisionsForTCF(
|
|
171
171
|
tcfDecisions: ReadableMap,
|
|
172
|
-
fromLayer:
|
|
172
|
+
fromLayer: Double,
|
|
173
173
|
saveDecisions: ReadableArray,
|
|
174
|
-
consentType:
|
|
174
|
+
consentType: Double,
|
|
175
175
|
promise: Promise
|
|
176
176
|
) {
|
|
177
177
|
promise.resolve(
|
|
178
178
|
usercentricsProxy.instance.saveDecisionsForTCF(
|
|
179
179
|
tcfDecisions.deserializeTCFUserDecisions(),
|
|
180
|
-
TCFDecisionUILayer.values()[fromLayer],
|
|
180
|
+
TCFDecisionUILayer.values()[fromLayer.toInt()],
|
|
181
181
|
saveDecisions.deserializeUserDecision(),
|
|
182
|
-
UsercentricsConsentType.values()[consentType]
|
|
182
|
+
UsercentricsConsentType.values()[consentType.toInt()]
|
|
183
183
|
).toWritableArray()
|
|
184
184
|
)
|
|
185
185
|
}
|
|
186
186
|
|
|
187
187
|
@ReactMethod
|
|
188
|
-
override fun saveDecisions(decisions: ReadableArray, consentType:
|
|
188
|
+
override fun saveDecisions(decisions: ReadableArray, consentType: Double, promise: Promise) {
|
|
189
189
|
promise.resolve(
|
|
190
190
|
usercentricsProxy.instance.saveDecisions(
|
|
191
|
-
decisions.deserializeUserDecision(), UsercentricsConsentType.values()[consentType]
|
|
191
|
+
decisions.deserializeUserDecision(), UsercentricsConsentType.values()[consentType.toInt()]
|
|
192
192
|
).toWritableArray()
|
|
193
193
|
)
|
|
194
194
|
}
|
|
195
195
|
|
|
196
196
|
@ReactMethod
|
|
197
|
-
override fun saveOptOutForCCPA(isOptedOut: Boolean, consentType:
|
|
197
|
+
override fun saveOptOutForCCPA(isOptedOut: Boolean, consentType: Double, promise: Promise) {
|
|
198
198
|
promise.resolve(
|
|
199
199
|
usercentricsProxy.instance.saveOptOutForCCPA(
|
|
200
|
-
isOptedOut, UsercentricsConsentType.values()[consentType]
|
|
200
|
+
isOptedOut, UsercentricsConsentType.values()[consentType.toInt()]
|
|
201
201
|
).toWritableArray()
|
|
202
202
|
)
|
|
203
203
|
}
|
|
204
204
|
|
|
205
205
|
@ReactMethod
|
|
206
|
-
override fun track(event:
|
|
207
|
-
usercentricsProxy.instance.track(UsercentricsAnalyticsEventType.values()[event])
|
|
206
|
+
override fun track(event: Double) {
|
|
207
|
+
usercentricsProxy.instance.track(UsercentricsAnalyticsEventType.values()[event.toInt()])
|
|
208
208
|
}
|
|
209
209
|
|
|
210
210
|
@ReactMethod
|
|
@@ -55,7 +55,7 @@ abstract class RNUsercentricsModuleSpec internal constructor(context: ReactAppli
|
|
|
55
55
|
abstract fun getABTestingVariant(promise: Promise)
|
|
56
56
|
|
|
57
57
|
@ReactMethod
|
|
58
|
-
abstract fun setCMPId(id:
|
|
58
|
+
abstract fun setCMPId(id: Double)
|
|
59
59
|
|
|
60
60
|
@ReactMethod
|
|
61
61
|
abstract fun setABTestingVariant(variant: String)
|
|
@@ -64,34 +64,34 @@ abstract class RNUsercentricsModuleSpec internal constructor(context: ReactAppli
|
|
|
64
64
|
abstract fun changeLanguage(language: String, promise: Promise)
|
|
65
65
|
|
|
66
66
|
@ReactMethod
|
|
67
|
-
abstract fun acceptAll(consentType:
|
|
67
|
+
abstract fun acceptAll(consentType: Double, promise: Promise)
|
|
68
68
|
|
|
69
69
|
@ReactMethod
|
|
70
|
-
abstract fun acceptAllForTCF(fromLayer:
|
|
70
|
+
abstract fun acceptAllForTCF(fromLayer: Double, consentType: Double, promise: Promise)
|
|
71
71
|
|
|
72
72
|
@ReactMethod
|
|
73
|
-
abstract fun denyAll(consentType:
|
|
73
|
+
abstract fun denyAll(consentType: Double, promise: Promise)
|
|
74
74
|
|
|
75
75
|
@ReactMethod
|
|
76
|
-
abstract fun denyAllForTCF(fromLayer:
|
|
76
|
+
abstract fun denyAllForTCF(fromLayer: Double, consentType: Double, unsavedPurposeLIDecisions: ReadableArray, promise: Promise)
|
|
77
77
|
|
|
78
78
|
@ReactMethod
|
|
79
|
-
abstract fun saveDecisions(decisions: ReadableArray, consentType:
|
|
79
|
+
abstract fun saveDecisions(decisions: ReadableArray, consentType: Double, promise: Promise)
|
|
80
80
|
|
|
81
81
|
@ReactMethod
|
|
82
82
|
abstract fun saveDecisionsForTCF(
|
|
83
83
|
tcfDecisions: ReadableMap,
|
|
84
|
-
fromLayer:
|
|
84
|
+
fromLayer: Double,
|
|
85
85
|
saveDecisions: ReadableArray,
|
|
86
|
-
consentType:
|
|
86
|
+
consentType: Double,
|
|
87
87
|
promise: Promise
|
|
88
88
|
)
|
|
89
89
|
|
|
90
90
|
@ReactMethod
|
|
91
|
-
abstract fun saveOptOutForCCPA(isOptedOut: Boolean, consentType:
|
|
91
|
+
abstract fun saveOptOutForCCPA(isOptedOut: Boolean, consentType: Double, promise: Promise)
|
|
92
92
|
|
|
93
93
|
@ReactMethod
|
|
94
|
-
abstract fun track(event:
|
|
94
|
+
abstract fun track(event: Double)
|
|
95
95
|
|
|
96
96
|
companion object {
|
|
97
97
|
const val NAME = "RNUsercentricsModule"
|
package/android/src/main/java/com/usercentrics/reactnative/extensions/ConsentDisclosureSerializer.kt
CHANGED
|
@@ -2,12 +2,23 @@ package com.usercentrics.reactnative.extensions
|
|
|
2
2
|
|
|
3
3
|
import com.usercentrics.sdk.v2.settings.data.ConsentDisclosure
|
|
4
4
|
import com.usercentrics.sdk.v2.settings.data.ConsentDisclosureObject
|
|
5
|
+
import com.usercentrics.sdk.v2.settings.data.ConsentDisclosureSDK
|
|
5
6
|
|
|
6
7
|
internal fun ConsentDisclosureObject?.serialize(): Any? {
|
|
7
8
|
if (this == null) {
|
|
8
9
|
return null
|
|
9
10
|
}
|
|
10
|
-
return
|
|
11
|
+
return mapOf(
|
|
12
|
+
"disclosures" to disclosures.map { it.serialize() },
|
|
13
|
+
"sdks" to sdks.map { it.serialize() }
|
|
14
|
+
)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
private fun ConsentDisclosureSDK.serialize(): Map<String, Any> {
|
|
18
|
+
return mapOf(
|
|
19
|
+
"name" to name,
|
|
20
|
+
"use" to use
|
|
21
|
+
)
|
|
11
22
|
}
|
|
12
23
|
|
|
13
24
|
internal fun ConsentDisclosure.serialize(): Any {
|
|
@@ -364,7 +364,10 @@ extension UsercentricsService {
|
|
|
364
364
|
|
|
365
365
|
extension ConsentDisclosureObject {
|
|
366
366
|
func toDictionary() -> Any {
|
|
367
|
-
return
|
|
367
|
+
return [
|
|
368
|
+
"disclosures": self.disclosures.map { $0.toDictionary() },
|
|
369
|
+
"sdks": self.sdks.map { ["name": $0.name, "use": $0.use] }
|
|
370
|
+
]
|
|
368
371
|
}
|
|
369
372
|
}
|
|
370
373
|
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
//
|
|
2
|
+
// RNUsercentricsModule+TurboModule.mm
|
|
3
|
+
// getTurboModule: implementation for RN 0.78+ (New Architecture).
|
|
4
|
+
// RCTTurboModule protocol requires C++ return type (shared_ptr<TurboModule>), hence Obj-C++.
|
|
5
|
+
//
|
|
6
|
+
|
|
7
|
+
#import <React/RCTBridgeModule.h>
|
|
8
|
+
|
|
9
|
+
#if RCT_NEW_ARCH_ENABLED
|
|
10
|
+
|
|
11
|
+
#import <ReactCommon/RCTTurboModule.h>
|
|
12
|
+
|
|
13
|
+
// Header generated by the app's codegen (ReactCodegen pod; path may vary by RN version)
|
|
14
|
+
#if __has_include(<ReactCodegen/RNUsercentricsModule/RNUsercentricsModule.h>)
|
|
15
|
+
#import <ReactCodegen/RNUsercentricsModule/RNUsercentricsModule.h>
|
|
16
|
+
#else
|
|
17
|
+
#import "RNUsercentricsModule/RNUsercentricsModule.h"
|
|
18
|
+
#endif
|
|
19
|
+
|
|
20
|
+
// RNUsercentricsModule is defined in Swift (RNUsercentricsModule.swift).
|
|
21
|
+
// Minimal declaration so the compiler accepts the category; the real implementation is in Swift.
|
|
22
|
+
@interface RNUsercentricsModule : NSObject
|
|
23
|
+
@end
|
|
24
|
+
|
|
25
|
+
@implementation RNUsercentricsModule (TurboModule)
|
|
26
|
+
|
|
27
|
+
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
|
|
28
|
+
(const facebook::react::ObjCTurboModule::InitParams &)params {
|
|
29
|
+
return std::make_shared<facebook::react::NativeUsercentricsModuleSpecJSI>(params);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
@end
|
|
33
|
+
|
|
34
|
+
#endif // RCT_NEW_ARCH_ENABLED
|
|
@@ -60,47 +60,47 @@ RCT_EXTERN_METHOD(changeLanguage:(NSString *)language
|
|
|
60
60
|
resolve:(RCTPromiseResolveBlock)resolve
|
|
61
61
|
reject:(RCTPromiseRejectBlock)reject)
|
|
62
62
|
|
|
63
|
-
RCT_EXTERN_METHOD(acceptAllForTCF:(
|
|
64
|
-
consentType:(
|
|
63
|
+
RCT_EXTERN_METHOD(acceptAllForTCF:(double)fromLayer
|
|
64
|
+
consentType:(double)consentType
|
|
65
65
|
resolve:(RCTPromiseResolveBlock)resolve
|
|
66
66
|
reject:(RCTPromiseRejectBlock)reject)
|
|
67
67
|
|
|
68
|
-
RCT_EXTERN_METHOD(acceptAll:(
|
|
68
|
+
RCT_EXTERN_METHOD(acceptAll:(double)consentType
|
|
69
69
|
resolve:(RCTPromiseResolveBlock)resolve
|
|
70
70
|
reject:(RCTPromiseRejectBlock)reject)
|
|
71
71
|
|
|
72
|
-
RCT_EXTERN_METHOD(denyAllForTCF:(
|
|
73
|
-
consentType:(
|
|
72
|
+
RCT_EXTERN_METHOD(denyAllForTCF:(double)fromLayer
|
|
73
|
+
consentType:(double)consentType
|
|
74
74
|
unsavedPurposeLIDecisions:(NSArray)unsavedPurposeLIDecisions
|
|
75
75
|
resolve:(RCTPromiseResolveBlock)resolve
|
|
76
76
|
reject:(RCTPromiseRejectBlock)reject)
|
|
77
77
|
|
|
78
|
-
RCT_EXTERN_METHOD(denyAll:(
|
|
78
|
+
RCT_EXTERN_METHOD(denyAll:(double)consentType
|
|
79
79
|
resolve:(RCTPromiseResolveBlock)resolve
|
|
80
80
|
reject:(RCTPromiseRejectBlock)reject)
|
|
81
81
|
|
|
82
82
|
RCT_EXTERN_METHOD(saveDecisionsForTCF:(NSDictionary *)tcfDecisions
|
|
83
|
-
fromLayer:(
|
|
83
|
+
fromLayer:(double)fromLayer
|
|
84
84
|
serviceDecisions:(NSArray)serviceDecisions
|
|
85
|
-
consentType:(
|
|
85
|
+
consentType:(double)consentType
|
|
86
86
|
resolve:(RCTPromiseResolveBlock)resolve
|
|
87
87
|
reject:(RCTPromiseRejectBlock)reject)
|
|
88
88
|
|
|
89
89
|
RCT_EXTERN_METHOD(saveDecisions:(NSArray)serviceDecisions
|
|
90
|
-
consentType:(
|
|
90
|
+
consentType:(double)consentType
|
|
91
91
|
resolve:(RCTPromiseResolveBlock)resolve
|
|
92
92
|
reject:(RCTPromiseRejectBlock)reject)
|
|
93
93
|
|
|
94
94
|
RCT_EXTERN_METHOD(saveOptOutForCCPA:(BOOL *)isOptedOut
|
|
95
|
-
consentType:(
|
|
95
|
+
consentType:(double)consentType
|
|
96
96
|
resolve:(RCTPromiseResolveBlock)resolve
|
|
97
97
|
reject:(RCTPromiseRejectBlock)reject)
|
|
98
98
|
|
|
99
|
-
RCT_EXTERN_METHOD(setCMPId:(
|
|
99
|
+
RCT_EXTERN_METHOD(setCMPId:(double)id)
|
|
100
100
|
|
|
101
101
|
RCT_EXTERN_METHOD(setABTestingVariant:(NSString *)variant)
|
|
102
102
|
|
|
103
|
-
RCT_EXTERN_METHOD(track:(
|
|
103
|
+
RCT_EXTERN_METHOD(track:(double)event)
|
|
104
104
|
|
|
105
105
|
RCT_EXTERN_METHOD(clearUserSession:(RCTPromiseResolveBlock)resolve
|
|
106
106
|
reject:(RCTPromiseRejectBlock)reject)
|
|
@@ -5,12 +5,14 @@ import UIKit
|
|
|
5
5
|
import React
|
|
6
6
|
|
|
7
7
|
#if RCT_NEW_ARCH_ENABLED
|
|
8
|
-
#if canImport(
|
|
8
|
+
#if canImport(ReactCodegen)
|
|
9
|
+
// RN ≥ 0.79: getTurboModule: implemented in RNUsercentricsModule+TurboModule.mm (do not import ReactCodegen in Swift — C++ module)
|
|
10
|
+
#elseif canImport(React_Codegen)
|
|
11
|
+
// RN 0.78
|
|
12
|
+
import React_Codegen
|
|
13
|
+
#elseif canImport(RNUsercentricsModuleSpec)
|
|
9
14
|
// RN ≤ 0.77
|
|
10
15
|
import RNUsercentricsModuleSpec
|
|
11
|
-
#else
|
|
12
|
-
// RN ≥ 0.78
|
|
13
|
-
import React_Codegen
|
|
14
16
|
#endif
|
|
15
17
|
#endif
|
|
16
18
|
|
|
@@ -81,7 +83,7 @@ class RNUsercentricsModule: NSObject {
|
|
|
81
83
|
}
|
|
82
84
|
}
|
|
83
85
|
|
|
84
|
-
@objc func setCMPId(_ id:
|
|
86
|
+
@objc func setCMPId(_ id: Double) -> Void {
|
|
85
87
|
usercentricsManager.setCMPId(id: Int32(id))
|
|
86
88
|
}
|
|
87
89
|
|
|
@@ -139,24 +141,24 @@ class RNUsercentricsModule: NSObject {
|
|
|
139
141
|
}
|
|
140
142
|
}
|
|
141
143
|
|
|
142
|
-
@objc func acceptAllForTCF(_ fromLayer:
|
|
143
|
-
consentType:
|
|
144
|
+
@objc func acceptAllForTCF(_ fromLayer: Double,
|
|
145
|
+
consentType: Double,
|
|
144
146
|
resolve: @escaping RCTPromiseResolveBlock,
|
|
145
147
|
reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
146
|
-
let services = usercentricsManager.acceptAllForTCF(fromLayer: TCFDecisionUILayer.initialize(from: fromLayer),
|
|
147
|
-
consentType: UsercentricsConsentType.initialize(from: consentType))
|
|
148
|
+
let services = usercentricsManager.acceptAllForTCF(fromLayer: TCFDecisionUILayer.initialize(from: Int(fromLayer)),
|
|
149
|
+
consentType: UsercentricsConsentType.initialize(from: Int(consentType)))
|
|
148
150
|
resolve(services.toListOfDictionary())
|
|
149
151
|
}
|
|
150
152
|
|
|
151
|
-
@objc func acceptAll(_ consentType:
|
|
153
|
+
@objc func acceptAll(_ consentType: Double,
|
|
152
154
|
resolve: @escaping RCTPromiseResolveBlock,
|
|
153
155
|
reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
154
|
-
let services = usercentricsManager.acceptAll(consentType: UsercentricsConsentType.initialize(from: consentType))
|
|
156
|
+
let services = usercentricsManager.acceptAll(consentType: UsercentricsConsentType.initialize(from: Int(consentType)))
|
|
155
157
|
resolve(services.toListOfDictionary())
|
|
156
158
|
}
|
|
157
159
|
|
|
158
|
-
@objc func denyAllForTCF(_ fromLayer:
|
|
159
|
-
consentType:
|
|
160
|
+
@objc func denyAllForTCF(_ fromLayer: Double,
|
|
161
|
+
consentType: Double,
|
|
160
162
|
unsavedPurposeLIDecisions: [NSDictionary],
|
|
161
163
|
resolve: @escaping RCTPromiseResolveBlock,
|
|
162
164
|
reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
@@ -170,51 +172,51 @@ class RNUsercentricsModule: NSObject {
|
|
|
170
172
|
}
|
|
171
173
|
}
|
|
172
174
|
}
|
|
173
|
-
let services = usercentricsManager.denyAllForTCF(fromLayer: .initialize(from: fromLayer), consentType: .initialize(from: consentType), unsavedPurposeLIDecisions: decisions)
|
|
175
|
+
let services = usercentricsManager.denyAllForTCF(fromLayer: .initialize(from: Int(fromLayer)), consentType: .initialize(from: Int(consentType)), unsavedPurposeLIDecisions: decisions)
|
|
174
176
|
resolve(services.toListOfDictionary())
|
|
175
177
|
}
|
|
176
178
|
|
|
177
|
-
@objc func denyAll(_ consentType:
|
|
179
|
+
@objc func denyAll(_ consentType: Double,
|
|
178
180
|
resolve: @escaping RCTPromiseResolveBlock,
|
|
179
181
|
reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
180
|
-
let services = usercentricsManager.denyAll(consentType: .initialize(from: consentType))
|
|
182
|
+
let services = usercentricsManager.denyAll(consentType: .initialize(from: Int(consentType)))
|
|
181
183
|
resolve(services.toListOfDictionary())
|
|
182
184
|
}
|
|
183
185
|
|
|
184
186
|
@objc func saveDecisionsForTCF(_ tcfDecisions: NSDictionary,
|
|
185
|
-
fromLayer:
|
|
187
|
+
fromLayer: Double,
|
|
186
188
|
serviceDecisions: [NSDictionary],
|
|
187
|
-
consentType:
|
|
189
|
+
consentType: Double,
|
|
188
190
|
resolve: @escaping RCTPromiseResolveBlock,
|
|
189
191
|
reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
190
192
|
|
|
191
193
|
let services = usercentricsManager.saveDecisionsForTCF(
|
|
192
194
|
tcfDecisions: TCFUserDecisions(from: tcfDecisions),
|
|
193
|
-
fromLayer: .initialize(from: fromLayer),
|
|
195
|
+
fromLayer: .initialize(from: Int(fromLayer)),
|
|
194
196
|
serviceDecisions: serviceDecisions.compactMap { UserDecision(from: $0) },
|
|
195
|
-
consentType: .initialize(from: consentType))
|
|
197
|
+
consentType: .initialize(from: Int(consentType)))
|
|
196
198
|
resolve(services.toListOfDictionary())
|
|
197
199
|
|
|
198
200
|
}
|
|
199
201
|
|
|
200
202
|
@objc func saveDecisions(_ decisions: [NSDictionary],
|
|
201
|
-
consentType:
|
|
203
|
+
consentType: Double,
|
|
202
204
|
resolve: @escaping RCTPromiseResolveBlock,
|
|
203
205
|
reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
204
|
-
let services = usercentricsManager.saveDecisions(decisions: decisions.compactMap { UserDecision.init(from: $0) }, consentType: .initialize(from: consentType))
|
|
206
|
+
let services = usercentricsManager.saveDecisions(decisions: decisions.compactMap { UserDecision.init(from: $0) }, consentType: .initialize(from: Int(consentType)))
|
|
205
207
|
resolve(services.toListOfDictionary())
|
|
206
208
|
}
|
|
207
209
|
|
|
208
210
|
@objc func saveOptOutForCCPA(_ isOptedOut: Bool,
|
|
209
|
-
consentType:
|
|
211
|
+
consentType: Double,
|
|
210
212
|
resolve: @escaping RCTPromiseResolveBlock,
|
|
211
213
|
reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
212
|
-
let services = usercentricsManager.saveOptOutForCCPA(isOptedOut: isOptedOut, consentType: .initialize(from: consentType))
|
|
214
|
+
let services = usercentricsManager.saveOptOutForCCPA(isOptedOut: isOptedOut, consentType: .initialize(from: Int(consentType)))
|
|
213
215
|
resolve(services.toListOfDictionary())
|
|
214
216
|
}
|
|
215
217
|
|
|
216
|
-
@objc func track(_ event:
|
|
217
|
-
guard let usercentricsAnalyticsEventType = UsercentricsAnalyticsEventType.initialize(from: event) else { return }
|
|
218
|
+
@objc func track(_ event: Double) -> Void {
|
|
219
|
+
guard let usercentricsAnalyticsEventType = UsercentricsAnalyticsEventType.initialize(from: Int(event)) else { return }
|
|
218
220
|
usercentricsManager.track(event: usercentricsAnalyticsEventType)
|
|
219
221
|
}
|
|
220
222
|
|
|
@@ -229,13 +231,21 @@ class RNUsercentricsModule: NSObject {
|
|
|
229
231
|
|
|
230
232
|
// MARK: - RCTBridgeModule & TurboModule Conformance
|
|
231
233
|
#if RCT_NEW_ARCH_ENABLED
|
|
234
|
+
#if canImport(React_Codegen)
|
|
235
|
+
// RN 0.78: codegen-generated protocol
|
|
236
|
+
extension RNUsercentricsModule: NativeUsercentricsModuleSpec {
|
|
237
|
+
func getTurboModule(jsInvoker: RCTJSInvoker) -> Any {
|
|
238
|
+
return self
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
#elseif canImport(RNUsercentricsModuleSpec)
|
|
242
|
+
// RN ≤ 0.77
|
|
232
243
|
extension RNUsercentricsModule: NativeUsercentricsSpec {
|
|
233
244
|
func getTurboModule(jsInvoker: RCTJSInvoker) -> Any {
|
|
234
245
|
return self
|
|
235
246
|
}
|
|
236
247
|
}
|
|
248
|
+
#endif
|
|
237
249
|
#else
|
|
238
|
-
extension RNUsercentricsModule: RCTBridgeModule {
|
|
239
|
-
|
|
240
|
-
}
|
|
250
|
+
extension RNUsercentricsModule: RCTBridgeModule {}
|
|
241
251
|
#endif
|
|
@@ -52,51 +52,51 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
52
52
|
reject:(RCTPromiseRejectBlock)reject;
|
|
53
53
|
|
|
54
54
|
// Configuration Setters
|
|
55
|
-
- (void)setCMPId:(
|
|
55
|
+
- (void)setCMPId:(double)cmpId;
|
|
56
56
|
- (void)setABTestingVariant:(NSString *)variant;
|
|
57
57
|
- (void)changeLanguage:(NSString *)language
|
|
58
58
|
resolve:(RCTPromiseResolveBlock)resolve
|
|
59
59
|
reject:(RCTPromiseRejectBlock)reject;
|
|
60
60
|
|
|
61
61
|
// Consent Actions
|
|
62
|
-
- (void)acceptAll:(
|
|
62
|
+
- (void)acceptAll:(double)consentType
|
|
63
63
|
resolve:(RCTPromiseResolveBlock)resolve
|
|
64
64
|
reject:(RCTPromiseRejectBlock)reject;
|
|
65
65
|
|
|
66
|
-
- (void)acceptAllForTCF:(
|
|
67
|
-
consentType:(
|
|
66
|
+
- (void)acceptAllForTCF:(double)fromLayer
|
|
67
|
+
consentType:(double)consentType
|
|
68
68
|
resolve:(RCTPromiseResolveBlock)resolve
|
|
69
69
|
reject:(RCTPromiseRejectBlock)reject;
|
|
70
70
|
|
|
71
|
-
- (void)denyAll:(
|
|
71
|
+
- (void)denyAll:(double)consentType
|
|
72
72
|
resolve:(RCTPromiseResolveBlock)resolve
|
|
73
73
|
reject:(RCTPromiseRejectBlock)reject;
|
|
74
74
|
|
|
75
|
-
- (void)denyAllForTCF:(
|
|
76
|
-
consentType:(
|
|
75
|
+
- (void)denyAllForTCF:(double)fromLayer
|
|
76
|
+
consentType:(double)consentType
|
|
77
77
|
unsavedPurposeLIDecisions:(NSArray<NSDictionary *> *)unsavedPurposeLIDecisions
|
|
78
78
|
resolve:(RCTPromiseResolveBlock)resolve
|
|
79
79
|
reject:(RCTPromiseRejectBlock)reject;
|
|
80
80
|
|
|
81
81
|
- (void)saveDecisions:(NSArray<NSDictionary *> *)decisions
|
|
82
|
-
consentType:(
|
|
82
|
+
consentType:(double)consentType
|
|
83
83
|
resolve:(RCTPromiseResolveBlock)resolve
|
|
84
84
|
reject:(RCTPromiseRejectBlock)reject;
|
|
85
85
|
|
|
86
86
|
- (void)saveDecisionsForTCF:(NSDictionary *)tcfDecisions
|
|
87
|
-
fromLayer:(
|
|
87
|
+
fromLayer:(double)fromLayer
|
|
88
88
|
saveDecisions:(NSArray<NSDictionary *> *)saveDecisions
|
|
89
|
-
consentType:(
|
|
89
|
+
consentType:(double)consentType
|
|
90
90
|
resolve:(RCTPromiseResolveBlock)resolve
|
|
91
91
|
reject:(RCTPromiseRejectBlock)reject;
|
|
92
92
|
|
|
93
93
|
- (void)saveOptOutForCCPA:(BOOL)isOptedOut
|
|
94
|
-
consentType:(
|
|
94
|
+
consentType:(double)consentType
|
|
95
95
|
resolve:(RCTPromiseResolveBlock)resolve
|
|
96
96
|
reject:(RCTPromiseRejectBlock)reject;
|
|
97
97
|
|
|
98
98
|
// Analytics
|
|
99
|
-
- (void)track:(
|
|
99
|
+
- (void)track:(double)event;
|
|
100
100
|
|
|
101
101
|
@end
|
|
102
102
|
|
|
@@ -1,6 +1,12 @@
|
|
|
1
|
+
export declare class ConsentDisclosureSDK {
|
|
2
|
+
name: string;
|
|
3
|
+
use: string;
|
|
4
|
+
constructor(name: string, use: string);
|
|
5
|
+
}
|
|
1
6
|
export declare class ConsentDisclosureObject {
|
|
2
7
|
disclosures: [ConsentDisclosure];
|
|
3
|
-
|
|
8
|
+
sdks: ConsentDisclosureSDK[];
|
|
9
|
+
constructor(disclosures: [ConsentDisclosure], sdks?: ConsentDisclosureSDK[]);
|
|
4
10
|
}
|
|
5
11
|
export declare class ConsentDisclosure {
|
|
6
12
|
identifier?: string;
|
|
@@ -1,6 +1,13 @@
|
|
|
1
|
+
export class ConsentDisclosureSDK {
|
|
2
|
+
constructor(name, use) {
|
|
3
|
+
this.name = name;
|
|
4
|
+
this.use = use;
|
|
5
|
+
}
|
|
6
|
+
}
|
|
1
7
|
export class ConsentDisclosureObject {
|
|
2
|
-
constructor(disclosures) {
|
|
8
|
+
constructor(disclosures, sdks) {
|
|
3
9
|
this.disclosures = disclosures;
|
|
10
|
+
this.sdks = sdks !== null && sdks !== void 0 ? sdks : [];
|
|
4
11
|
}
|
|
5
12
|
}
|
|
6
13
|
export class ConsentDisclosure {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConsentDisclosureObject.js","sourceRoot":"","sources":["../../src/models/ConsentDisclosureObject.tsx"],"names":[],"mappings":"AAAA,MAAM,OAAO,uBAAuB;
|
|
1
|
+
{"version":3,"file":"ConsentDisclosureObject.js","sourceRoot":"","sources":["../../src/models/ConsentDisclosureObject.tsx"],"names":[],"mappings":"AAAA,MAAM,OAAO,oBAAoB;IAI7B,YAAY,IAAY,EAAE,GAAW;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;IAClB,CAAC;CACJ;AAED,MAAM,OAAO,uBAAuB;IAKhC,YAAY,WAAgC,EAAE,IAA6B;QACvE,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,CAAA;IAC1B,CAAC;CACJ;AAED,MAAM,OAAO,iBAAiB;IAW1B,YACI,aAAsB,EACtB,QAAkB,EAClB,UAAmB,EACnB,IAA4B,EAC5B,IAAa,EACb,aAAsB,EACtB,MAAe,EACf,WAAoB;QAEpB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;QAClC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;QAClC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;IAClC,CAAC;CACJ;AAED,MAAM,CAAN,IAAY,qBAKX;AALD,WAAY,qBAAqB;IAE7B,qEAAU,CAAA;IACV,+DAAO,CAAA;IACP,+DAAO,CAAA;AACX,CAAC,EALW,qBAAqB,KAArB,qBAAqB,QAKhC"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@usercentrics/react-native-sdk",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.25.1",
|
|
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.25.1",
|
|
11
11
|
"license": "SEE LICENSE IN LICENSE",
|
|
12
12
|
"files": [
|
|
13
13
|
"android",
|
|
@@ -78,6 +78,16 @@
|
|
|
78
78
|
"jsx",
|
|
79
79
|
"json",
|
|
80
80
|
"node"
|
|
81
|
+
],
|
|
82
|
+
"collectCoverage": true,
|
|
83
|
+
"collectCoverageFrom": [
|
|
84
|
+
"src/**/*.{ts,tsx}",
|
|
85
|
+
"!src/**/*.d.ts"
|
|
86
|
+
],
|
|
87
|
+
"coverageDirectory": "coverage",
|
|
88
|
+
"coverageReporters": [
|
|
89
|
+
"text",
|
|
90
|
+
"lcov"
|
|
81
91
|
]
|
|
82
92
|
},
|
|
83
93
|
"directories": {
|
|
@@ -12,7 +12,6 @@ Pod::Spec.new do |s|
|
|
|
12
12
|
s.homepage = package['homepage']
|
|
13
13
|
s.platform = :ios, "11.0"
|
|
14
14
|
|
|
15
|
-
# Use apenas o path local para desenvolvimento
|
|
16
15
|
s.source = { :path => '.' }
|
|
17
16
|
|
|
18
17
|
s.source_files = 'ios/**/*.{h,m,mm,swift}'
|
|
@@ -21,9 +20,12 @@ Pod::Spec.new do |s|
|
|
|
21
20
|
s.dependency 'React-NativeModulesApple'
|
|
22
21
|
s.dependency 'UsercentricsUI', "#{package['iosPackageVersion']}"
|
|
23
22
|
|
|
24
|
-
#
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
# Required for TurboModules RN 0.78+: injects codegen dependencies (ReactCodegen, etc.)
|
|
24
|
+
if defined?(install_modules_dependencies)
|
|
25
|
+
install_modules_dependencies(s)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# C++ configuration (compatible with Expo prebuild and New Architecture)
|
|
27
29
|
base_cpp_flags = {
|
|
28
30
|
'CLANG_CXX_LANGUAGE_STANDARD' => 'c++20',
|
|
29
31
|
'CLANG_CXX_LIBRARY' => 'libc++',
|
|
@@ -50,14 +52,6 @@ Pod::Spec.new do |s|
|
|
|
50
52
|
'$(PODS_ROOT)/Headers/Public/ReactCommon'
|
|
51
53
|
]
|
|
52
54
|
|
|
53
|
-
# Add new architecture paths if available (will be resolved at build time)
|
|
54
|
-
header_search_paths += [
|
|
55
|
-
'$(PODS_ROOT)/Headers/Public/React-Fabric',
|
|
56
|
-
'$(PODS_ROOT)/Headers/Public/React-Codegen',
|
|
57
|
-
'$(PODS_CONFIGURATION_BUILD_DIR)/React-Codegen/React_Codegen.framework/Headers',
|
|
58
|
-
'$(PODS_CONFIGURATION_BUILD_DIR)/React-Fabric/React_Fabric.framework/Headers'
|
|
59
|
-
]
|
|
60
|
-
|
|
61
55
|
base_cpp_flags['HEADER_SEARCH_PATHS'] = header_search_paths.map { |path| "\"#{path}\"" }.join(' ')
|
|
62
56
|
|
|
63
57
|
# Preprocessor definitions - inherit RCT_NEW_ARCH_ENABLED from parent project
|
package/src/__tests__/mocks.ts
CHANGED
|
@@ -1,9 +1,21 @@
|
|
|
1
|
+
export class ConsentDisclosureSDK {
|
|
2
|
+
name: string
|
|
3
|
+
use: string
|
|
4
|
+
|
|
5
|
+
constructor(name: string, use: string) {
|
|
6
|
+
this.name = name
|
|
7
|
+
this.use = use
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
1
11
|
export class ConsentDisclosureObject {
|
|
2
12
|
|
|
3
13
|
disclosures: [ConsentDisclosure]
|
|
14
|
+
sdks: ConsentDisclosureSDK[]
|
|
4
15
|
|
|
5
|
-
constructor(disclosures: [ConsentDisclosure]) {
|
|
16
|
+
constructor(disclosures: [ConsentDisclosure], sdks?: ConsentDisclosureSDK[]) {
|
|
6
17
|
this.disclosures = disclosures
|
|
18
|
+
this.sdks = sdks ?? []
|
|
7
19
|
}
|
|
8
20
|
}
|
|
9
21
|
|