@usercentrics/react-native-sdk 2.23.0 → 2.23.3
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 +103 -22
- package/android/{build.gradle → build-legacy.gradle} +19 -2
- package/android/build.gradle.kts +76 -0
- package/android/gradle.properties +6 -2
- package/android/settings.gradle.kts +21 -0
- 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/AndroidManifest.xml +1 -2
- package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/RNUsercentricsModule.kt +34 -30
- package/android/src/main/java/com/usercentrics/reactnative/RNUsercentricsModuleSpec.kt +99 -0
- package/android/src/main/java/com/usercentrics/{reactnativeusercentrics → reactnative}/RNUsercentricsPackage.kt +3 -2
- 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 +5 -4
- 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 +20 -18
- 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/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 +25 -1
- package/ios/RNUsercentricsModuleSpec.h +103 -0
- package/lib/NativeUsercentrics.d.ts +30 -0
- package/lib/NativeUsercentrics.js +10 -0
- package/lib/NativeUsercentrics.js.map +1 -0
- package/lib/Usercentrics.d.ts +8 -8
- package/lib/Usercentrics.js +3 -1
- package/lib/Usercentrics.js.map +1 -1
- package/package.json +98 -79
- package/react-native-usercentrics.podspec +26 -3
- package/CHANGELOG.md +0 -822
- package/android/settings.gradle +0 -1
- package/android/src/androidTest/java/com/usercentrics/reactnativemodule/fake/FakePromise.kt +0 -67
- 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/ios/{RNUsercentricsModule.m → RNUsercentricsModule.mm} +0 -0
package/README.md
CHANGED
|
@@ -22,12 +22,36 @@ The Usercentrics Apps SDK is a native Consent Management Platform solution for m
|
|
|
22
22
|
<img src="https://docs.usercentrics.com/cmp_in_app_sdk/latest/assets/media/predefinedUI.png" alt="Usercentrics UI" />
|
|
23
23
|
</p>
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
|
|
25
|
+
## 📋 Requirements
|
|
26
|
+
|
|
27
|
+
### Mobile Platforms
|
|
28
|
+
* **Android 5.0 (API 21)** or higher
|
|
29
|
+
* **iOS 11** or higher
|
|
30
|
+
|
|
31
|
+
### Development Environment
|
|
32
|
+
* **Node.js 18.0+** (LTS recommended)
|
|
33
|
+
* **npm 9.0+** or **Yarn 1.22+**
|
|
34
|
+
* **TypeScript 5.1+**
|
|
35
|
+
* **React 18.2+**
|
|
36
|
+
* **React Native 0.74.3+** (with Fabric support)
|
|
37
|
+
|
|
38
|
+
### Android Development
|
|
39
|
+
* **Java 17+** (OpenJDK or Oracle JDK)
|
|
40
|
+
* **Android SDK** with API 33+ platforms
|
|
41
|
+
* **Android NDK 25+**
|
|
42
|
+
* **Gradle 8.2+**
|
|
43
|
+
* **Kotlin 1.9.22+**
|
|
44
|
+
* **Android Gradle Plugin 8.2+**
|
|
45
|
+
|
|
46
|
+
### iOS Development (macOS only)
|
|
47
|
+
* **Xcode 15.0+** with iOS SDK
|
|
48
|
+
* **CocoaPods 1.12+**
|
|
49
|
+
* **iOS Simulators** (recommended)
|
|
50
|
+
|
|
51
|
+
### Optional but Recommended
|
|
52
|
+
* **Watchman** (for better file watching)
|
|
53
|
+
* **Git** (for version control)
|
|
54
|
+
* **SDKMan** (for Java version management)
|
|
31
55
|
|
|
32
56
|
## Get started!
|
|
33
57
|
|
|
@@ -41,35 +65,92 @@ Continue to our [documentation](https://usercentrics.com/docs/apps/intro/) for a
|
|
|
41
65
|
|
|
42
66
|
See the [example](https://github.com/Usercentrics/react-native/tree/master/example) directory for a complete sample app using Usercentrics.
|
|
43
67
|
|
|
44
|
-
##
|
|
68
|
+
## Quick Start
|
|
45
69
|
|
|
46
|
-
|
|
70
|
+
### 🚀 Automated Setup (Recommended)
|
|
47
71
|
|
|
72
|
+
The easiest way to get started is using our automated setup script:
|
|
73
|
+
|
|
74
|
+
```sh
|
|
75
|
+
# Check your development environment
|
|
76
|
+
npm run check-requirements
|
|
77
|
+
|
|
78
|
+
# Automatically install missing dependencies
|
|
79
|
+
npm run auto-setup
|
|
80
|
+
|
|
81
|
+
# Verify everything is ready
|
|
82
|
+
npm run check-requirements
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### 📱 Running the Sample Project
|
|
86
|
+
|
|
87
|
+
### Option 1: Using Helper Scripts
|
|
88
|
+
```sh
|
|
89
|
+
# Install all dependencies
|
|
90
|
+
npm run install-dependencies
|
|
91
|
+
|
|
92
|
+
# Run Android app
|
|
93
|
+
npm run run-android
|
|
94
|
+
|
|
95
|
+
# Run iOS app (macOS only)
|
|
96
|
+
npm run ios
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Option 2: Manual Setup
|
|
48
100
|
* From root folder:
|
|
49
101
|
```sh
|
|
50
|
-
npm install
|
|
102
|
+
npm install --legacy-peer-deps
|
|
51
103
|
```
|
|
52
104
|
* From example folder:
|
|
53
105
|
```sh
|
|
54
|
-
npm install
|
|
106
|
+
npm install --legacy-peer-deps
|
|
55
107
|
```
|
|
56
108
|
|
|
57
|
-
|
|
109
|
+
### iOS (macOS only)
|
|
58
110
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
111
|
+
From example folder:
|
|
112
|
+
```sh
|
|
113
|
+
npx pod-install
|
|
114
|
+
npx react-native run-ios
|
|
115
|
+
```
|
|
64
116
|
|
|
65
|
-
|
|
117
|
+
### Android
|
|
66
118
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
119
|
+
Make sure you have Android SDK configured, then from example folder:
|
|
120
|
+
```sh
|
|
121
|
+
npx react-native run-android
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## 🛠️ Development Scripts
|
|
125
|
+
|
|
126
|
+
| Script | Description |
|
|
127
|
+
|--------|-------------|
|
|
128
|
+
| `npm run auto-setup` | 🤖 Automatically install all required dependencies |
|
|
129
|
+
| `npm run check-requirements` | 🔍 Check development environment requirements |
|
|
130
|
+
| `npm run clean-all-caches` | 🧹 Clean all project and system caches |
|
|
131
|
+
| `npm run install-dependencies` | 📦 Install dependencies in root and example folders |
|
|
132
|
+
| `npm run run-android` | 🤖 Kill conflicting ports and run Android app |
|
|
133
|
+
|
|
134
|
+
### 🔧 Troubleshooting
|
|
135
|
+
|
|
136
|
+
If you encounter issues:
|
|
137
|
+
|
|
138
|
+
1. **Check Requirements**: `npm run check-requirements`
|
|
139
|
+
2. **Clean & Reinstall**: `npm run clean-all-caches && npm run install-dependencies`
|
|
140
|
+
3. **Auto Setup**: `npm run auto-setup` (installs missing tools)
|
|
141
|
+
4. **Manual Setup**: Follow the detailed error messages from check-requirements
|
|
142
|
+
|
|
143
|
+
### 📋 Environment Setup
|
|
144
|
+
|
|
145
|
+
The project includes intelligent scripts that will:
|
|
146
|
+
- ✅ Detect your operating system (macOS/Linux)
|
|
147
|
+
- ✅ Check for required tools and versions
|
|
148
|
+
- ✅ Install missing dependencies automatically
|
|
149
|
+
- ✅ Configure environment variables
|
|
150
|
+
- ✅ Apply necessary patches
|
|
151
|
+
- ✅ Verify the setup works correctly
|
|
71
152
|
|
|
72
|
-
|
|
153
|
+
## Consent Mediation
|
|
73
154
|
|
|
74
155
|
You can enable and run the Consent Mediation example in this example by following the [documentation](https://usercentrics.com/docs/apps/features/consent-mediation/#enable-mediation).
|
|
75
156
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
def usercentrics_version = "2.23.
|
|
1
|
+
def usercentrics_version = "2.23.3"
|
|
2
2
|
version usercentrics_version
|
|
3
3
|
|
|
4
4
|
buildscript {
|
|
@@ -27,6 +27,7 @@ apply plugin: 'com.android.library'
|
|
|
27
27
|
apply plugin: 'kotlin-android'
|
|
28
28
|
|
|
29
29
|
android {
|
|
30
|
+
namespace 'com.usercentrics.reactnative'
|
|
30
31
|
compileSdkVersion 33
|
|
31
32
|
|
|
32
33
|
compileOptions {
|
|
@@ -43,6 +44,22 @@ android {
|
|
|
43
44
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
|
44
45
|
consumerProguardFile "proguard-rules.pro"
|
|
45
46
|
}
|
|
47
|
+
|
|
48
|
+
buildTypes {
|
|
49
|
+
debug {
|
|
50
|
+
debuggable true
|
|
51
|
+
}
|
|
52
|
+
release {
|
|
53
|
+
minifyEnabled false
|
|
54
|
+
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
publishing {
|
|
59
|
+
singleVariant('release') {
|
|
60
|
+
withSourcesJar()
|
|
61
|
+
}
|
|
62
|
+
}
|
|
46
63
|
}
|
|
47
64
|
|
|
48
65
|
repositories {
|
|
@@ -61,4 +78,4 @@ dependencies {
|
|
|
61
78
|
androidTestImplementation 'androidx.test.ext:junit-ktx:1.1.3'
|
|
62
79
|
androidTestImplementation 'androidx.test:runner:1.4.0'
|
|
63
80
|
androidTestImplementation 'androidx.test:rules:1.4.0'
|
|
64
|
-
}
|
|
81
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
plugins {
|
|
2
|
+
id("com.android.library")
|
|
3
|
+
id("org.jetbrains.kotlin.android")
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
val usercentricsVersion = "2.23.3"
|
|
7
|
+
val reactNativeVersion = "0.79.6"
|
|
8
|
+
|
|
9
|
+
android {
|
|
10
|
+
namespace = "com.usercentrics.reactnative"
|
|
11
|
+
compileSdk = 34
|
|
12
|
+
|
|
13
|
+
defaultConfig {
|
|
14
|
+
minSdk = 24
|
|
15
|
+
targetSdk = 34
|
|
16
|
+
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
|
17
|
+
consumerProguardFiles("proguard-rules.pro")
|
|
18
|
+
|
|
19
|
+
val isNewArchEnabled = project.findProperty("newArchEnabled") == "true"
|
|
20
|
+
val isHermesEnabled = project.findProperty("hermesEnabled") == "true"
|
|
21
|
+
|
|
22
|
+
buildConfigField("boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchEnabled.toString())
|
|
23
|
+
buildConfigField("boolean", "IS_HERMES_ENABLED", isHermesEnabled.toString())
|
|
24
|
+
|
|
25
|
+
ndk {
|
|
26
|
+
abiFilters += listOf("armeabi-v7a", "arm64-v8a", "x86", "x86_64")
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
compileOptions {
|
|
31
|
+
sourceCompatibility = JavaVersion.VERSION_17
|
|
32
|
+
targetCompatibility = JavaVersion.VERSION_17
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
kotlinOptions {
|
|
36
|
+
jvmTarget = "17"
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
compileOptions {
|
|
40
|
+
sourceCompatibility = JavaVersion.VERSION_17
|
|
41
|
+
targetCompatibility = JavaVersion.VERSION_17
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
sourceSets {
|
|
45
|
+
getByName("main").java.srcDirs("src/main/kotlin")
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
buildFeatures {
|
|
49
|
+
buildConfig = true
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
packaging {
|
|
53
|
+
jniLibs {
|
|
54
|
+
useLegacyPackaging = false
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
dependencies {
|
|
60
|
+
implementation("com.facebook.react:react-android:$reactNativeVersion")
|
|
61
|
+
implementation("com.usercentrics.sdk:usercentrics-ui:$usercentricsVersion")
|
|
62
|
+
|
|
63
|
+
// Unit tests (JVM)
|
|
64
|
+
testImplementation("junit:junit:4.13.2")
|
|
65
|
+
testImplementation("io.mockk:mockk:1.13.12")
|
|
66
|
+
testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.9.0")
|
|
67
|
+
testImplementation("com.facebook.react:react-android:$reactNativeVersion")
|
|
68
|
+
|
|
69
|
+
// Instrumented tests (Android)
|
|
70
|
+
androidTestImplementation("com.facebook.react:react-android:$reactNativeVersion")
|
|
71
|
+
androidTestImplementation("io.mockk:mockk-android:1.12.0")
|
|
72
|
+
androidTestImplementation("junit:junit:4.13.2")
|
|
73
|
+
androidTestImplementation("androidx.test.ext:junit-ktx:1.1.3")
|
|
74
|
+
androidTestImplementation("androidx.test:runner:1.4.0")
|
|
75
|
+
androidTestImplementation("androidx.test:rules:1.4.0")
|
|
76
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
pluginManagement {
|
|
2
|
+
repositories {
|
|
3
|
+
google()
|
|
4
|
+
mavenCentral()
|
|
5
|
+
gradlePluginPortal()
|
|
6
|
+
}
|
|
7
|
+
plugins {
|
|
8
|
+
id("org.jetbrains.kotlin.android") version "2.0.21"
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
dependencyResolutionManagement {
|
|
13
|
+
repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)
|
|
14
|
+
repositories {
|
|
15
|
+
google()
|
|
16
|
+
mavenCentral()
|
|
17
|
+
maven { url = uri("https://www.jitpack.io") }
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
rootProject.name = "usercentrics"
|
|
@@ -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,2 +1 @@
|
|
|
1
|
-
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
2
|
-
package="com.usercentrics.reactnativeusercentrics"></manifest>
|
|
1
|
+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"/>
|
|
@@ -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
|
|
@@ -11,18 +11,18 @@ internal class RNUsercentricsModule(
|
|
|
11
11
|
reactContext: ReactApplicationContext,
|
|
12
12
|
private val usercentricsProxy: UsercentricsProxy,
|
|
13
13
|
private val reactContextProvider: ReactContextProvider,
|
|
14
|
-
) :
|
|
14
|
+
) : RNUsercentricsModuleSpec(reactContext) {
|
|
15
15
|
|
|
16
|
-
override fun getName() =
|
|
16
|
+
override fun getName() = NAME
|
|
17
17
|
|
|
18
18
|
@ReactMethod
|
|
19
|
-
fun configure(options: ReadableMap) {
|
|
19
|
+
override fun configure(options: ReadableMap) {
|
|
20
20
|
val usercentricsOptions = options.usercentricsOptionsFromMap()
|
|
21
21
|
usercentricsProxy.initialize(reactApplicationContext, usercentricsOptions)
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
@ReactMethod
|
|
25
|
-
fun isReady(promise: Promise) {
|
|
25
|
+
override fun isReady(promise: Promise) {
|
|
26
26
|
usercentricsProxy.isReady({
|
|
27
27
|
promise.resolve(it.toWritableMap())
|
|
28
28
|
}, {
|
|
@@ -31,7 +31,7 @@ internal class RNUsercentricsModule(
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
@ReactMethod
|
|
34
|
-
fun showFirstLayer(options: ReadableMap?, promise: Promise) {
|
|
34
|
+
override fun showFirstLayer(options: ReadableMap?, promise: Promise) {
|
|
35
35
|
runOnUiThread {
|
|
36
36
|
try {
|
|
37
37
|
val context = reactContextProvider.context()
|
|
@@ -46,7 +46,7 @@ internal class RNUsercentricsModule(
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
@ReactMethod
|
|
49
|
-
fun showSecondLayer(options: ReadableMap?, promise: Promise) {
|
|
49
|
+
override fun showSecondLayer(options: ReadableMap?, promise: Promise) {
|
|
50
50
|
runOnUiThread {
|
|
51
51
|
try {
|
|
52
52
|
val context = reactContextProvider.context()
|
|
@@ -61,7 +61,7 @@ internal class RNUsercentricsModule(
|
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
@ReactMethod
|
|
64
|
-
fun restoreUserSession(controllerId: String, promise: Promise) {
|
|
64
|
+
override fun restoreUserSession(controllerId: String, promise: Promise) {
|
|
65
65
|
usercentricsProxy.instance.restoreUserSession(controllerId, {
|
|
66
66
|
promise.resolve(it.toWritableMap())
|
|
67
67
|
}, {
|
|
@@ -70,59 +70,59 @@ internal class RNUsercentricsModule(
|
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
@ReactMethod
|
|
73
|
-
fun getControllerId(promise: Promise) {
|
|
73
|
+
override fun getControllerId(promise: Promise) {
|
|
74
74
|
promise.resolve(usercentricsProxy.instance.getControllerId())
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
@ReactMethod
|
|
78
|
-
fun getABTestingVariant(promise: Promise) {
|
|
78
|
+
override fun getABTestingVariant(promise: Promise) {
|
|
79
79
|
promise.resolve(usercentricsProxy.instance.getABTestingVariant())
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
@ReactMethod
|
|
83
|
-
fun getConsents(promise: Promise) {
|
|
83
|
+
override fun getConsents(promise: Promise) {
|
|
84
84
|
promise.resolve(usercentricsProxy.instance.getConsents().toWritableArray())
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
@ReactMethod
|
|
88
|
-
fun getCMPData(promise: Promise) {
|
|
88
|
+
override fun getCMPData(promise: Promise) {
|
|
89
89
|
promise.resolve(usercentricsProxy.instance.getCMPData().serialize())
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
@ReactMethod
|
|
93
|
-
fun getAdditionalConsentModeData(promise: Promise) {
|
|
93
|
+
override fun getAdditionalConsentModeData(promise: Promise) {
|
|
94
94
|
promise.resolve(usercentricsProxy.instance.getAdditionalConsentModeData().serialize())
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
@ReactMethod
|
|
98
|
-
fun setCMPId(id: Int) {
|
|
98
|
+
override fun setCMPId(id: Int) {
|
|
99
99
|
usercentricsProxy.instance.setCMPId(id)
|
|
100
100
|
}
|
|
101
101
|
|
|
102
102
|
@ReactMethod
|
|
103
|
-
fun setABTestingVariant(variant: String) {
|
|
103
|
+
override fun setABTestingVariant(variant: String) {
|
|
104
104
|
usercentricsProxy.instance.setABTestingVariant(variant)
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
@ReactMethod
|
|
108
|
-
fun getTCFData(promise: Promise) {
|
|
108
|
+
override fun getTCFData(promise: Promise) {
|
|
109
109
|
usercentricsProxy.instance.getTCFData {
|
|
110
110
|
promise.resolve(it.serialize())
|
|
111
111
|
}
|
|
112
112
|
}
|
|
113
113
|
|
|
114
114
|
@ReactMethod
|
|
115
|
-
fun getUserSessionData(promise: Promise) {
|
|
115
|
+
override fun getUserSessionData(promise: Promise) {
|
|
116
116
|
promise.resolve(usercentricsProxy.instance.getUserSessionData())
|
|
117
117
|
}
|
|
118
118
|
|
|
119
119
|
@ReactMethod
|
|
120
|
-
fun getUSPData(promise: Promise) {
|
|
120
|
+
override fun getUSPData(promise: Promise) {
|
|
121
121
|
promise.resolve(usercentricsProxy.instance.getUSPData().serialize())
|
|
122
122
|
}
|
|
123
123
|
|
|
124
124
|
@ReactMethod
|
|
125
|
-
fun changeLanguage(language: String, promise: Promise) {
|
|
125
|
+
override fun changeLanguage(language: String, promise: Promise) {
|
|
126
126
|
usercentricsProxy.instance.changeLanguage(language, {
|
|
127
127
|
promise.resolve(null)
|
|
128
128
|
}, {
|
|
@@ -131,7 +131,7 @@ internal class RNUsercentricsModule(
|
|
|
131
131
|
}
|
|
132
132
|
|
|
133
133
|
@ReactMethod
|
|
134
|
-
fun acceptAllForTCF(fromLayer: Int, consentType: Int, promise: Promise) {
|
|
134
|
+
override fun acceptAllForTCF(fromLayer: Int, consentType: Int, promise: Promise) {
|
|
135
135
|
promise.resolve(
|
|
136
136
|
usercentricsProxy.instance.acceptAllForTCF(
|
|
137
137
|
TCFDecisionUILayer.values()[fromLayer], UsercentricsConsentType.values()[consentType]
|
|
@@ -140,7 +140,7 @@ internal class RNUsercentricsModule(
|
|
|
140
140
|
}
|
|
141
141
|
|
|
142
142
|
@ReactMethod
|
|
143
|
-
fun acceptAll(consentType: Int, promise: Promise) {
|
|
143
|
+
override fun acceptAll(consentType: Int, promise: Promise) {
|
|
144
144
|
promise.resolve(
|
|
145
145
|
usercentricsProxy.instance.acceptAll(
|
|
146
146
|
UsercentricsConsentType.values()[consentType]
|
|
@@ -149,7 +149,7 @@ internal class RNUsercentricsModule(
|
|
|
149
149
|
}
|
|
150
150
|
|
|
151
151
|
@ReactMethod
|
|
152
|
-
fun denyAllForTCF(fromLayer: Int, consentType: Int, promise: Promise) {
|
|
152
|
+
override fun denyAllForTCF(fromLayer: Int, consentType: Int, promise: Promise) {
|
|
153
153
|
promise.resolve(
|
|
154
154
|
usercentricsProxy.instance.denyAllForTCF(
|
|
155
155
|
TCFDecisionUILayer.values()[fromLayer], UsercentricsConsentType.values()[consentType]
|
|
@@ -158,7 +158,7 @@ internal class RNUsercentricsModule(
|
|
|
158
158
|
}
|
|
159
159
|
|
|
160
160
|
@ReactMethod
|
|
161
|
-
fun denyAll(consentType: Int, promise: Promise) {
|
|
161
|
+
override fun denyAll(consentType: Int, promise: Promise) {
|
|
162
162
|
promise.resolve(
|
|
163
163
|
usercentricsProxy.instance.denyAll(
|
|
164
164
|
UsercentricsConsentType.values()[consentType]
|
|
@@ -167,7 +167,7 @@ internal class RNUsercentricsModule(
|
|
|
167
167
|
}
|
|
168
168
|
|
|
169
169
|
@ReactMethod
|
|
170
|
-
fun saveDecisionsForTCF(
|
|
170
|
+
override fun saveDecisionsForTCF(
|
|
171
171
|
tcfDecisions: ReadableMap,
|
|
172
172
|
fromLayer: Int,
|
|
173
173
|
saveDecisions: ReadableArray,
|
|
@@ -185,7 +185,7 @@ internal class RNUsercentricsModule(
|
|
|
185
185
|
}
|
|
186
186
|
|
|
187
187
|
@ReactMethod
|
|
188
|
-
fun saveDecisions(decisions: ReadableArray, consentType: Int, promise: Promise) {
|
|
188
|
+
override fun saveDecisions(decisions: ReadableArray, consentType: Int, promise: Promise) {
|
|
189
189
|
promise.resolve(
|
|
190
190
|
usercentricsProxy.instance.saveDecisions(
|
|
191
191
|
decisions.deserializeUserDecision(), UsercentricsConsentType.values()[consentType]
|
|
@@ -194,7 +194,7 @@ internal class RNUsercentricsModule(
|
|
|
194
194
|
}
|
|
195
195
|
|
|
196
196
|
@ReactMethod
|
|
197
|
-
fun saveOptOutForCCPA(isOptedOut: Boolean, consentType: Int, promise: Promise) {
|
|
197
|
+
override fun saveOptOutForCCPA(isOptedOut: Boolean, consentType: Int, promise: Promise) {
|
|
198
198
|
promise.resolve(
|
|
199
199
|
usercentricsProxy.instance.saveOptOutForCCPA(
|
|
200
200
|
isOptedOut, UsercentricsConsentType.values()[consentType]
|
|
@@ -203,12 +203,12 @@ internal class RNUsercentricsModule(
|
|
|
203
203
|
}
|
|
204
204
|
|
|
205
205
|
@ReactMethod
|
|
206
|
-
fun track(event: Int) {
|
|
206
|
+
override fun track(event: Int) {
|
|
207
207
|
usercentricsProxy.instance.track(UsercentricsAnalyticsEventType.values()[event])
|
|
208
208
|
}
|
|
209
209
|
|
|
210
210
|
@ReactMethod
|
|
211
|
-
fun clearUserSession(promise: Promise) {
|
|
211
|
+
override fun clearUserSession(promise: Promise) {
|
|
212
212
|
usercentricsProxy.instance.clearUserSession({
|
|
213
213
|
promise.resolve(it.toWritableMap())
|
|
214
214
|
}, {
|
|
@@ -219,4 +219,8 @@ internal class RNUsercentricsModule(
|
|
|
219
219
|
private fun runOnUiThread(block: () -> Unit) {
|
|
220
220
|
UiThreadUtil.runOnUiThread(block)
|
|
221
221
|
}
|
|
222
|
+
|
|
223
|
+
companion object {
|
|
224
|
+
const val NAME = "RNUsercentricsModule"
|
|
225
|
+
}
|
|
222
226
|
}
|