@usercentrics/react-native-sdk 2.23.2 → 2.24.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/README.md +5 -5
- package/android/build-legacy.gradle +11 -1
- package/android/build.gradle.kts +44 -14
- package/android/gradle.properties +2 -0
- package/android/settings.gradle.kts +1 -1
- package/android/src/androidTest/java/com/usercentrics/{reactnativemodule → reactnative}/RNUsercentricsModuleTest.kt +5 -5
- package/android/src/androidTest/java/com/usercentrics/reactnative/fake/FakePromise.kt +73 -0
- package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/RNUsercentricsModule.kt +3 -3
- package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/RNUsercentricsModuleSpec.kt +1 -1
- package/android/src/main/java/com/usercentrics/reactnative/RNUsercentricsPackage.kt +51 -0
- package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/ReactContextProvider.kt +1 -1
- package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/ReactContextProviderImpl.kt +1 -1
- package/android/src/main/java/com/usercentrics/reactnative/UCRNFlag.kt +4 -0
- package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/api/UsercentricsProxy.kt +2 -2
- package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/BannerFontExtensions.kt +1 -1
- package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/BannerSettingsExtensions.kt +1 -1
- package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/CCPADataExtensions.kt +1 -1
- package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/ConsentDisclosureSerializer.kt +1 -1
- package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/ReadableMapExtensions.kt +1 -1
- package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/TCFDataExtensions.kt +1 -1
- package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/UserDecisionExtensions.kt +1 -1
- package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/UserOptionsExtensions.kt +1 -1
- package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/UsercentricsCMPDataExtensions.kt +1 -1
- package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/UsercentricsConsentUserResponseExtensions.kt +1 -1
- package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/UsercentricsReadyStatusExtensions.kt +1 -1
- package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/extensions/UsercentricsServiceConsentExtensions.kt +1 -1
- package/android/src/main/jni/CMakeLists.txt +85 -0
- package/android/src/main/jni/RNUsercentricsModule.cpp +21 -0
- package/android/src/main/jni/rn_usercentrics.cpp +22 -0
- package/android/src/test/java/com/usercentrics/reactnative/RNUsercentricsModuleTest.kt +159 -0
- package/android/src/test/java/com/usercentrics/reactnative/fake/FakePromise.kt +73 -0
- package/ios/Extensions/BannerSettings+Dict.swift +1 -0
- package/ios/Extensions/UIColor+Extensions.swift +1 -1
- package/ios/Extensions/UIImage+UsercentricsLogoDict.swift +1 -0
- package/ios/RNUsercentricsModule.swift +1 -0
- package/lib/NativeUsercentrics.d.ts +1 -1
- package/lib/NativeUsercentrics.js +10 -2
- package/lib/NativeUsercentrics.js.map +1 -1
- package/lib/fabric/NativeUsercentricsModule.d.ts +30 -0
- package/lib/fabric/NativeUsercentricsModule.js +3 -0
- package/lib/fabric/NativeUsercentricsModule.js.map +1 -0
- package/package.json +108 -96
- package/react-native.config.js +15 -0
- package/src/NativeUsercentrics.ts +75 -0
- package/src/Usercentrics.tsx +145 -0
- package/src/__tests__/index.test.ts +476 -0
- package/src/__tests__/mocks.ts +402 -0
- package/src/fabric/NativeUsercentricsModule.ts +51 -0
- package/src/index.tsx +2 -0
- package/src/models/AdditionalConsentModeData.tsx +33 -0
- package/src/models/BannerSettings.tsx +117 -0
- package/src/models/CCPAData.tsx +32 -0
- package/src/models/CCPASettings.tsx +49 -0
- package/src/models/ConsentDisclosureObject.tsx +47 -0
- package/src/models/FirstLayerSettings.tsx +185 -0
- package/src/models/GeolocationRuleset.tsx +10 -0
- package/src/models/LegalBasisLocalization.tsx +100 -0
- package/src/models/NetworkMode.tsx +5 -0
- package/src/models/SecondLayerSettings.tsx +12 -0
- package/src/models/TCF2Settings.tsx +209 -0
- package/src/models/TCFData.tsx +297 -0
- package/src/models/TCFDecisionUILayer.tsx +5 -0
- package/src/models/TCFUserDecisions.tsx +73 -0
- package/src/models/UserDecision.tsx +10 -0
- package/src/models/UsercentricsAnalyticsEventType.tsx +15 -0
- package/src/models/UsercentricsCMPData.tsx +38 -0
- package/src/models/UsercentricsCategory.tsx +26 -0
- package/src/models/UsercentricsConsentType.tsx +5 -0
- package/src/models/UsercentricsConsentUserResponse.tsx +14 -0
- package/src/models/UsercentricsLabels.tsx +276 -0
- package/src/models/UsercentricsLocation.tsx +32 -0
- package/src/models/UsercentricsLoggerLevel.tsx +7 -0
- package/src/models/UsercentricsOptions.tsx +45 -0
- package/src/models/UsercentricsReadyStatus.tsx +20 -0
- package/src/models/UsercentricsService.tsx +134 -0
- package/src/models/UsercentricsServiceConsent.tsx +37 -0
- package/src/models/UsercentricsSettings.tsx +177 -0
- package/src/models/UsercentricsUserInteraction.tsx +7 -0
- package/src/models/UsercentricsVariant.tsx +6 -0
- package/src/models/index.tsx +29 -0
- package/android/src/androidTest/java/com/usercentrics/reactnativemodule/fake/FakePromise.kt +0 -67
- package/android/src/main/java/com/usercentrics/reactnativeusercentrics/RNUsercentricsPackage.kt +0 -22
- package/android/src/main/java/com/usercentrics/reactnativeusercentrics/UCRNFlag.kt +0 -4
- /package/android/src/androidTest/java/com/usercentrics/{reactnativemodule → reactnative}/api/FakeUsercentricsProxy.kt +0 -0
- /package/android/src/androidTest/java/com/usercentrics/{reactnativemodule → reactnative}/mock/GetCMPDataMock.kt +0 -0
- /package/android/src/androidTest/java/com/usercentrics/{reactnativemodule → reactnative}/mock/GetConsentsMock.kt +0 -0
- /package/android/src/androidTest/java/com/usercentrics/{reactnativemodule → reactnative}/mock/GetTCFDataMock.kt +0 -0
- /package/android/src/androidTest/java/com/usercentrics/{reactnativemodule → reactnative}/mock/GetUSPDataMock.kt +0 -0
- /package/android/src/androidTest/java/com/usercentrics/{reactnativemodule → reactnative}/mock/GetUserSessionDataMock.kt +0 -0
- /package/android/src/androidTest/java/com/usercentrics/{reactnativemodule → reactnative}/mock/ReactContextProviderMock.kt +0 -0
- /package/android/src/androidTest/java/com/usercentrics/{reactnativemodule → reactnative}/mock/SaveDecisionsForTCFMock.kt +0 -0
- /package/android/src/androidTest/java/com/usercentrics/{reactnativemodule → reactnative}/mock/SaveDecisionsMock.kt +0 -0
package/README.md
CHANGED
|
@@ -25,22 +25,22 @@ The Usercentrics Apps SDK is a native Consent Management Platform solution for m
|
|
|
25
25
|
## 📋 Requirements
|
|
26
26
|
|
|
27
27
|
### Mobile Platforms
|
|
28
|
-
* **Android
|
|
28
|
+
* **Android 7.0 (API 24)** or higher
|
|
29
29
|
* **iOS 11** or higher
|
|
30
30
|
|
|
31
31
|
### Development Environment
|
|
32
32
|
* **Node.js 18.0+** (LTS recommended)
|
|
33
33
|
* **npm 9.0+** or **Yarn 1.22+**
|
|
34
34
|
* **TypeScript 5.1+**
|
|
35
|
-
* **React 18.2+**
|
|
35
|
+
* **React 18.2+** (React 19 supported)
|
|
36
36
|
* **React Native 0.74.3+** (with Fabric support)
|
|
37
37
|
|
|
38
38
|
### Android Development
|
|
39
39
|
* **Java 17+** (OpenJDK or Oracle JDK)
|
|
40
|
-
* **Android SDK** with API
|
|
40
|
+
* **Android SDK** with API 34+ platforms
|
|
41
41
|
* **Android NDK 25+**
|
|
42
|
-
* **Gradle 8.2+**
|
|
43
|
-
* **Kotlin 1.9.22+**
|
|
42
|
+
* **Gradle 8.2+** (Gradle 8.13 used)
|
|
43
|
+
* **Kotlin 1.9.22+** (Kotlin 2.0.21 recommended)
|
|
44
44
|
* **Android Gradle Plugin 8.2+**
|
|
45
45
|
|
|
46
46
|
### iOS Development (macOS only)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
def usercentrics_version = "2.
|
|
1
|
+
def usercentrics_version = "2.24.0"
|
|
2
2
|
version usercentrics_version
|
|
3
3
|
|
|
4
4
|
buildscript {
|
|
@@ -78,4 +78,14 @@ dependencies {
|
|
|
78
78
|
androidTestImplementation 'androidx.test.ext:junit-ktx:1.1.3'
|
|
79
79
|
androidTestImplementation 'androidx.test:runner:1.4.0'
|
|
80
80
|
androidTestImplementation 'androidx.test:rules:1.4.0'
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Fix for Gradle task dependency issue with React Native autolinking
|
|
84
|
+
// This ensures that packageReleaseResources task waits for generateReleaseResValues to complete
|
|
85
|
+
afterEvaluate {
|
|
86
|
+
if (project.tasks.findByName("packageReleaseResources") && project.tasks.findByName(":usercentrics_react-native-sdk:generateReleaseResValues")) {
|
|
87
|
+
project.tasks.named("packageReleaseResources").configure {
|
|
88
|
+
dependsOn(":usercentrics_react-native-sdk:generateReleaseResValues")
|
|
89
|
+
}
|
|
90
|
+
}
|
|
81
91
|
}
|
package/android/build.gradle.kts
CHANGED
|
@@ -1,10 +1,21 @@
|
|
|
1
|
+
val usercentricsVersion = "2.24.0"
|
|
2
|
+
val reactNativeVersion = "+"
|
|
3
|
+
|
|
4
|
+
fun BooleanProperty(name: String): Boolean {
|
|
5
|
+
return project.hasProperty(name) && project.property(name) == "true"
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
val isNewArchitectureEnabled = BooleanProperty("newArchEnabled")
|
|
9
|
+
val isHermesEnabled = BooleanProperty("hermesEnabled")
|
|
10
|
+
|
|
1
11
|
plugins {
|
|
2
12
|
id("com.android.library")
|
|
3
|
-
id("
|
|
13
|
+
id("kotlin-android")
|
|
4
14
|
}
|
|
5
15
|
|
|
6
|
-
|
|
7
|
-
|
|
16
|
+
if (isNewArchitectureEnabled) {
|
|
17
|
+
apply(plugin = "com.facebook.react")
|
|
18
|
+
}
|
|
8
19
|
|
|
9
20
|
android {
|
|
10
21
|
namespace = "com.usercentrics.reactnative"
|
|
@@ -16,11 +27,14 @@ android {
|
|
|
16
27
|
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
|
17
28
|
consumerProguardFiles("proguard-rules.pro")
|
|
18
29
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
buildConfigField("boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchEnabled.toString())
|
|
30
|
+
// BuildConfig flags
|
|
31
|
+
buildConfigField("boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled.toString())
|
|
23
32
|
buildConfigField("boolean", "IS_HERMES_ENABLED", isHermesEnabled.toString())
|
|
33
|
+
|
|
34
|
+
ndk {
|
|
35
|
+
abiFilters += listOf("armeabi-v7a", "arm64-v8a", "x86", "x86_64")
|
|
36
|
+
}
|
|
37
|
+
|
|
24
38
|
}
|
|
25
39
|
|
|
26
40
|
compileOptions {
|
|
@@ -31,34 +45,50 @@ android {
|
|
|
31
45
|
kotlinOptions {
|
|
32
46
|
jvmTarget = "17"
|
|
33
47
|
}
|
|
34
|
-
|
|
35
|
-
compileOptions {
|
|
36
|
-
sourceCompatibility = JavaVersion.VERSION_17
|
|
37
|
-
targetCompatibility = JavaVersion.VERSION_17
|
|
38
|
-
}
|
|
39
48
|
|
|
40
49
|
sourceSets {
|
|
41
|
-
getByName("main").java.srcDirs(
|
|
50
|
+
getByName("main").java.srcDirs(
|
|
51
|
+
"src/main/kotlin",
|
|
52
|
+
"$buildDir/generated/codegen/NativeModules"
|
|
53
|
+
)
|
|
42
54
|
}
|
|
43
55
|
|
|
44
56
|
buildFeatures {
|
|
45
57
|
buildConfig = true
|
|
46
58
|
}
|
|
47
59
|
|
|
48
|
-
|
|
60
|
+
packaging {
|
|
49
61
|
jniLibs {
|
|
50
62
|
useLegacyPackaging = false
|
|
51
63
|
}
|
|
52
64
|
}
|
|
65
|
+
|
|
53
66
|
}
|
|
54
67
|
|
|
55
68
|
dependencies {
|
|
56
69
|
implementation("com.facebook.react:react-android:$reactNativeVersion")
|
|
57
70
|
implementation("com.usercentrics.sdk:usercentrics-ui:$usercentricsVersion")
|
|
58
71
|
|
|
72
|
+
// Unit tests
|
|
73
|
+
testImplementation("junit:junit:4.13.2")
|
|
74
|
+
testImplementation("io.mockk:mockk:1.13.12")
|
|
75
|
+
testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.9.0")
|
|
76
|
+
|
|
77
|
+
// Instrumented tests
|
|
78
|
+
androidTestImplementation("com.facebook.react:react-android:$reactNativeVersion")
|
|
59
79
|
androidTestImplementation("io.mockk:mockk-android:1.12.0")
|
|
60
80
|
androidTestImplementation("junit:junit:4.13.2")
|
|
61
81
|
androidTestImplementation("androidx.test.ext:junit-ktx:1.1.3")
|
|
62
82
|
androidTestImplementation("androidx.test:runner:1.4.0")
|
|
63
83
|
androidTestImplementation("androidx.test:rules:1.4.0")
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Fix for Gradle task dependency issue with React Native autolinking
|
|
87
|
+
// This ensures that packageReleaseResources task waits for generateReleaseResValues to complete
|
|
88
|
+
afterEvaluate {
|
|
89
|
+
if (project.tasks.findByName("packageReleaseResources") != null && project.tasks.findByName(":usercentrics_react-native-sdk:generateReleaseResValues") != null) {
|
|
90
|
+
project.tasks.named("packageReleaseResources").configure {
|
|
91
|
+
dependsOn(":usercentrics_react-native-sdk:generateReleaseResValues")
|
|
92
|
+
}
|
|
93
|
+
}
|
|
64
94
|
}
|
|
@@ -290,11 +290,11 @@ class RNUsercentricsModuleTest {
|
|
|
290
290
|
val result = promise.resolveValue as WritableArray
|
|
291
291
|
val consent = result.getMap(0)
|
|
292
292
|
|
|
293
|
-
assertEquals(false, consent
|
|
294
|
-
assertEquals("ocv9HNX_g", consent
|
|
295
|
-
assertEquals("Facebook SDK", consent
|
|
296
|
-
assertEquals(0, consent
|
|
297
|
-
assertEquals("1.0.1", consent
|
|
293
|
+
assertEquals(false, consent?.getBoolean("status"))
|
|
294
|
+
assertEquals("ocv9HNX_g", consent?.getString("templateId"))
|
|
295
|
+
assertEquals("Facebook SDK", consent?.getString("dataProcessor"))
|
|
296
|
+
assertEquals(0, consent?.getInt("type"))
|
|
297
|
+
assertEquals("1.0.1", consent?.getString("version"))
|
|
298
298
|
}
|
|
299
299
|
|
|
300
300
|
@Test
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
package com.usercentrics.reactnativemodule.fake
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.Promise
|
|
4
|
+
import com.facebook.react.bridge.WritableMap
|
|
5
|
+
import java.util.concurrent.CountDownLatch
|
|
6
|
+
|
|
7
|
+
internal class FakePromise : Promise {
|
|
8
|
+
|
|
9
|
+
var resolveValue: Any? = null
|
|
10
|
+
var rejectThrowable: Throwable? = null
|
|
11
|
+
|
|
12
|
+
private val lock = CountDownLatch(1)
|
|
13
|
+
|
|
14
|
+
fun await() {
|
|
15
|
+
lock.await()
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
override fun resolve(value: Any?) {
|
|
19
|
+
resolveValue = value
|
|
20
|
+
lock.countDown()
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
override fun reject(code: String, message: String?) {
|
|
24
|
+
rejectThrowable = RuntimeException("$code: $message")
|
|
25
|
+
lock.countDown()
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
override fun reject(code: String, throwable: Throwable?) {
|
|
29
|
+
rejectThrowable = throwable ?: RuntimeException(code)
|
|
30
|
+
lock.countDown()
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
override fun reject(code: String, message: String?, throwable: Throwable?) {
|
|
34
|
+
rejectThrowable = throwable ?: RuntimeException("$code: $message")
|
|
35
|
+
lock.countDown()
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
override fun reject(throwable: Throwable) {
|
|
39
|
+
rejectThrowable = throwable
|
|
40
|
+
lock.countDown()
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
override fun reject(throwable: Throwable, userInfo: WritableMap) {
|
|
44
|
+
rejectThrowable = throwable
|
|
45
|
+
lock.countDown()
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
override fun reject(code: String, userInfo: WritableMap) {
|
|
49
|
+
rejectThrowable = RuntimeException("$code: $userInfo")
|
|
50
|
+
lock.countDown()
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
override fun reject(code: String, throwable: Throwable?, userInfo: WritableMap) {
|
|
54
|
+
rejectThrowable = throwable
|
|
55
|
+
lock.countDown()
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
override fun reject(code: String, message: String?, userInfo: WritableMap) {
|
|
59
|
+
rejectThrowable = RuntimeException("$code: $message")
|
|
60
|
+
lock.countDown()
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
override fun reject(code: String?, message: String?, throwable: Throwable?, userInfo: WritableMap?) {
|
|
64
|
+
rejectThrowable = throwable ?: RuntimeException("$code: $message")
|
|
65
|
+
lock.countDown()
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
@Deprecated("Use reject(code, message) instead")
|
|
69
|
+
override fun reject(message: String) {
|
|
70
|
+
rejectThrowable = RuntimeException(message)
|
|
71
|
+
lock.countDown()
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
package com.usercentrics.
|
|
1
|
+
package com.usercentrics.reactnative
|
|
2
2
|
|
|
3
3
|
import com.facebook.react.bridge.*
|
|
4
|
-
import com.usercentrics.
|
|
5
|
-
import com.usercentrics.
|
|
4
|
+
import com.usercentrics.reactnative.api.UsercentricsProxy
|
|
5
|
+
import com.usercentrics.reactnative.extensions.*
|
|
6
6
|
import com.usercentrics.sdk.UsercentricsAnalyticsEventType
|
|
7
7
|
import com.usercentrics.sdk.models.settings.UsercentricsConsentType
|
|
8
8
|
import com.usercentrics.sdk.services.tcf.TCFDecisionUILayer
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
package com.usercentrics.reactnative
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.TurboReactPackage
|
|
4
|
+
import com.facebook.react.bridge.NativeModule
|
|
5
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
6
|
+
import com.facebook.react.module.annotations.ReactModuleList
|
|
7
|
+
import com.facebook.react.module.model.ReactModuleInfo
|
|
8
|
+
import com.facebook.react.module.model.ReactModuleInfoProvider
|
|
9
|
+
import com.facebook.react.uimanager.ViewManager
|
|
10
|
+
import com.usercentrics.reactnative.api.UsercentricsProxyImpl
|
|
11
|
+
|
|
12
|
+
@ReactModuleList(
|
|
13
|
+
nativeModules = [
|
|
14
|
+
RNUsercentricsModule::class,
|
|
15
|
+
],
|
|
16
|
+
)
|
|
17
|
+
class RNUsercentricsPackage : TurboReactPackage() {
|
|
18
|
+
|
|
19
|
+
private val usercentricsProxy = UsercentricsProxyImpl()
|
|
20
|
+
|
|
21
|
+
override fun getModule(s: String, reactApplicationContext: ReactApplicationContext): NativeModule? {
|
|
22
|
+
when (s) {
|
|
23
|
+
RNUsercentricsModule.NAME -> {
|
|
24
|
+
val reactContextProvider = ReactContextProviderImpl(reactApplicationContext)
|
|
25
|
+
return RNUsercentricsModule(reactApplicationContext, usercentricsProxy, reactContextProvider)
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return null
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
override fun getReactModuleInfoProvider(): ReactModuleInfoProvider =
|
|
32
|
+
ReactModuleInfoProvider {
|
|
33
|
+
val moduleInfos: MutableMap<String, ReactModuleInfo> = HashMap()
|
|
34
|
+
val isTurboModule = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
|
|
35
|
+
moduleInfos[RNUsercentricsModule.NAME] =
|
|
36
|
+
ReactModuleInfo(
|
|
37
|
+
RNUsercentricsModule.NAME,
|
|
38
|
+
RNUsercentricsModule.NAME,
|
|
39
|
+
false, // canOverrideExistingModule
|
|
40
|
+
false, // needsEagerInit
|
|
41
|
+
true, // hasConstants
|
|
42
|
+
false, // isCxxModule
|
|
43
|
+
isTurboModule,
|
|
44
|
+
)
|
|
45
|
+
moduleInfos
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> {
|
|
49
|
+
return emptyList()
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
package com.usercentrics.
|
|
1
|
+
package com.usercentrics.reactnative.api
|
|
2
2
|
|
|
3
3
|
import android.app.Activity
|
|
4
4
|
import android.content.Context
|
|
5
5
|
import com.facebook.react.bridge.Promise
|
|
6
|
-
import com.usercentrics.
|
|
6
|
+
import com.usercentrics.reactnative.extensions.toWritableMap
|
|
7
7
|
import com.usercentrics.sdk.*
|
|
8
8
|
import com.usercentrics.sdk.errors.UsercentricsError
|
|
9
9
|
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
cmake_minimum_required(VERSION 3.13)
|
|
2
|
+
set(CMAKE_VERBOSE_MAKEFILE ON)
|
|
3
|
+
|
|
4
|
+
# Set library name
|
|
5
|
+
set(LIB_TARGET_NAME react_codegen_RNUsercentricsModule)
|
|
6
|
+
|
|
7
|
+
# Add compile options
|
|
8
|
+
add_compile_options(
|
|
9
|
+
-fexceptions
|
|
10
|
+
-frtti
|
|
11
|
+
-std=c++20
|
|
12
|
+
-Wall
|
|
13
|
+
-Wpedantic
|
|
14
|
+
-Wno-gnu-zero-variadic-macro-arguments
|
|
15
|
+
-Wno-dollar-in-identifier-extension
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
# Find source files
|
|
19
|
+
file(GLOB LIB_CUSTOM_SRCS CONFIGURE_DEPENDS *.cpp)
|
|
20
|
+
|
|
21
|
+
# Create the library
|
|
22
|
+
add_library(
|
|
23
|
+
${LIB_TARGET_NAME}
|
|
24
|
+
SHARED
|
|
25
|
+
${LIB_CUSTOM_SRCS}
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
# Include directories
|
|
29
|
+
target_include_directories(
|
|
30
|
+
${LIB_TARGET_NAME}
|
|
31
|
+
PUBLIC
|
|
32
|
+
.
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
# Link libraries based on React Native version
|
|
36
|
+
if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76)
|
|
37
|
+
target_link_libraries(
|
|
38
|
+
${LIB_TARGET_NAME}
|
|
39
|
+
ReactAndroid::reactnative
|
|
40
|
+
ReactAndroid::jsi
|
|
41
|
+
fbjni::fbjni
|
|
42
|
+
)
|
|
43
|
+
else()
|
|
44
|
+
target_link_libraries(
|
|
45
|
+
${LIB_TARGET_NAME}
|
|
46
|
+
fbjni
|
|
47
|
+
folly_runtime
|
|
48
|
+
glog
|
|
49
|
+
jsi
|
|
50
|
+
react_codegen_rncore
|
|
51
|
+
react_debug
|
|
52
|
+
react_nativemodule_core
|
|
53
|
+
react_render_core
|
|
54
|
+
react_render_debug
|
|
55
|
+
react_render_graphics
|
|
56
|
+
react_render_mapbuffer
|
|
57
|
+
react_render_componentregistry
|
|
58
|
+
react_utils
|
|
59
|
+
rrc_view
|
|
60
|
+
turbomodulejsijni
|
|
61
|
+
yoga
|
|
62
|
+
)
|
|
63
|
+
endif()
|
|
64
|
+
|
|
65
|
+
# Compile options based on React Native version
|
|
66
|
+
if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 80)
|
|
67
|
+
target_compile_reactnative_options(${LIB_TARGET_NAME} PRIVATE)
|
|
68
|
+
else()
|
|
69
|
+
target_compile_options(
|
|
70
|
+
${LIB_TARGET_NAME}
|
|
71
|
+
PRIVATE
|
|
72
|
+
-DLOG_TAG=\"ReactNative\"
|
|
73
|
+
-fexceptions
|
|
74
|
+
-frtti
|
|
75
|
+
-std=c++20
|
|
76
|
+
-Wall
|
|
77
|
+
)
|
|
78
|
+
endif()
|
|
79
|
+
|
|
80
|
+
# Additional include directories
|
|
81
|
+
target_include_directories(
|
|
82
|
+
${CMAKE_PROJECT_NAME}
|
|
83
|
+
PUBLIC
|
|
84
|
+
${CMAKE_CURRENT_SOURCE_DIR}
|
|
85
|
+
)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#include <ReactCommon/JavaTurboModule.h>
|
|
2
|
+
#include <ReactCommon/TurboModule.h>
|
|
3
|
+
#include <jsi/jsi.h>
|
|
4
|
+
|
|
5
|
+
namespace facebook {
|
|
6
|
+
namespace react {
|
|
7
|
+
|
|
8
|
+
JSI_EXPORT
|
|
9
|
+
std::shared_ptr<TurboModule> RNUsercentricsModule_ModuleProvider(
|
|
10
|
+
const std::string &moduleName,
|
|
11
|
+
const JavaTurboModule::InitParams ¶ms) {
|
|
12
|
+
// This is a placeholder implementation
|
|
13
|
+
// The actual module is implemented in Java/Kotlin
|
|
14
|
+
return nullptr;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
} // namespace react
|
|
18
|
+
} // namespace facebook
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#include <jni.h>
|
|
2
|
+
#include <jsi/jsi.h>
|
|
3
|
+
#include <fbjni/fbjni.h>
|
|
4
|
+
#include <ReactCommon/CallInvokerHolder.h>
|
|
5
|
+
#include <ReactCommon/TurboModuleUtils.h>
|
|
6
|
+
|
|
7
|
+
namespace facebook {
|
|
8
|
+
namespace react {
|
|
9
|
+
|
|
10
|
+
// This is a minimal C++ TurboModule bridge that delegates to the Kotlin implementation
|
|
11
|
+
// The actual TurboModule implementation is in RNUsercentricsModule.kt
|
|
12
|
+
|
|
13
|
+
extern "C" JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *) {
|
|
14
|
+
return facebook::jni::initialize(vm, [] {
|
|
15
|
+
// No additional initialization needed
|
|
16
|
+
// The Kotlin TurboModule will be loaded via TurboReactPackage
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
} // namespace react
|
|
21
|
+
} // namespace facebook
|
|
22
|
+
|