@usercentrics/react-native-sdk 2.9.0 → 2.10.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/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  [Release Notes](https://docs.usercentrics.com/cmp_in_app_sdk/latest/about/history/)
2
2
 
3
+ ### 2.10.0 - November 16, 2023
4
+
5
+ ## Improvements
6
+
7
+ * Accessibility: Various issues have been addressed to enhance accessibility.
8
+ * Resolved banner compatibility issues with iOS VoiceOver.
9
+ * Resolved banner compatibility issues with Android TalkBack.
10
+ * Adjusted font sizes to comply with Accessibility requirements on both iOS and Android.
11
+
12
+ * Added Ukrainian support language for TCF.
13
+
14
+ ## Resolved Issues
15
+
16
+ * Fixed the issue of not disclosing the setting "showCloseButton" has been addressed, preventing errors on Android.
17
+ * Fixed the crash on Android when passing an invalid controller id to restore the user session.
18
+ * Fixed The issue of the remote variant configuration not being used in first layer on Unity.
19
+
3
20
  ### 2.9.0 - October 6, 2023
4
21
 
5
22
  ## Features
package/README.md CHANGED
@@ -6,50 +6,36 @@
6
6
  alt="follow on Twitter">
7
7
  </a>
8
8
 
9
- ## Overview
9
+ # Welcome!
10
10
 
11
- The Usercentrics Apps SDK is a Consent Management Platform framework for mobile, TV, Web, and Unity applications, that enables the collection, documentation, and management of your user's privacy settings, in order to ensure legal compliance for different legal frameworks around the world.
11
+ You are now one step closer from making **privacy** a core feature in your application. We are very happy that you decided to make this a priority. We are here to help you **build trust** with your users.
12
+
13
+ ## The Usercentrics Apps SDK
14
+
15
+ The Usercentrics Apps SDK is a native Consent Management Platform solution for mobile apps, mobile games & TV applications, that enables the collection, documentation, and management of your user's privacy choices, in order to ensure legal compliance for legal regulations around the world.
12
16
 
13
17
  <p align="center">
14
18
  <img src="https://docs.usercentrics.com/cmp_in_app_sdk/latest/assets/media/predefinedUI.png" alt="Usercentrics UI" />
15
19
  </p>
16
20
 
17
- ### Supported Legal Frameworks
18
-
19
- * 🇪🇺 GDPR - European Union's General Data Protection Regulation
20
- * 🇺🇸 CCPA - California's Consumer Privacy Act
21
- * 🇧🇷 LGPD - Brazil’s Lei Geral de Proteção de Dados
22
- * 🌎 TCF 2.0 - Transparency & Consent Framework 2.0
23
-
24
- ### Supported Platforms
25
-
26
- | Android | iOS | Web | tvOS | MacOS |
27
- |:-------:|:---:|:-----:|:----:|:-----:|
28
- | ✅ | ✅ | ❌ | ❌ | ❌ |
29
-
30
21
  ### Requirements
31
22
  * Android 5.0 (API 21) or higher with Kotlin 1.5 or higher
32
23
  * iOS 11 or higher
33
24
  * React 17.0 or higher
34
25
  * React Native 0.65 or higher
35
- * Node 14
26
+ * Node 14
36
27
 
37
- ## Installation
28
+ ## Get started!
38
29
 
39
- Install the library from npm:
30
+ In order to use and test the SDK, you will need a Usercentrics Account. Get [started with a free trial](https://usercentrics.com/in-app-sdk/).
40
31
 
41
- ```sh
42
- npm install @usercentrics/react-native-sdk
43
- ```
32
+ ## Integration
44
33
 
45
- For iOS, after installing the package, you will need to install the Usercentrics dependency by running from your project folder, in this repository go to example/ and run:
46
- ```sh
47
- npx pod-install
48
- ```
49
- Or running from example/ios/ folder:
50
- ```sh
51
- pod install
52
- ```
34
+ Continue to our [documentation](https://usercentrics.com/docs/apps/intro/) for a step by step integration guide.
35
+
36
+ ## Example
37
+
38
+ See the [example](https://github.com/Usercentrics/react-native/tree/master/example) directory for a complete sample app using Usercentrics.
53
39
 
54
40
  ## Sample Project
55
41
 
@@ -79,16 +65,5 @@ To run the sample project, you will need to run npm install from both root and e
79
65
  npx react-native run-android
80
66
  ```
81
67
 
82
- ## Integration
83
-
84
- Continue to our [documentation](https://docs.usercentrics.com/cmp_in_app_sdk/) for a step by step integration guide.
85
-
86
- ## Example
87
-
88
- See the [example](https://github.com/Usercentrics/react-native/tree/master/example) directory for a complete sample app using Usercentrics.
89
-
90
- ## Get an Account
91
- First step to get started with our SDK, is to create a Usercentrics Account, [get started with a free account](https://usercentrics.com/pricing/#mobile) or [request a quote](https://usercentrics.com/in-app-sdk/#in-app-demo) for your organization.
92
-
93
68
  ## Maintainers
94
69
  - [Usercentrics](https://github.com/Usercentrics)
@@ -1,4 +1,4 @@
1
- def usercentrics_version = "2.9.0"
1
+ def usercentrics_version = "2.10.0"
2
2
  version usercentrics_version
3
3
 
4
4
  buildscript {
@@ -105,14 +105,18 @@ class RNUsercentricsModuleTest {
105
105
  fun testConfigure() {
106
106
  val usercentricsProxy = FakeUsercentricsProxy()
107
107
  val contextMock = mockk<ReactApplicationContext>(relaxed = true)
108
- val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
108
+ val module =
109
+ RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
109
110
 
110
111
  module.configure(usercentricsOptions)
111
112
 
112
113
  assertEquals(1, usercentricsProxy.initializeCount)
113
114
  assertEquals("AAAAA", usercentricsProxy.initializeOptionsArgument?.settingsId)
114
115
  assertEquals("BBBBB", usercentricsProxy.initializeOptionsArgument?.ruleSetId)
115
- assertEquals(UsercentricsLoggerLevel.NONE, usercentricsProxy.initializeOptionsArgument?.loggerLevel)
116
+ assertEquals(
117
+ UsercentricsLoggerLevel.NONE,
118
+ usercentricsProxy.initializeOptionsArgument?.loggerLevel
119
+ )
116
120
  assertEquals(1000L, usercentricsProxy.initializeOptionsArgument?.timeoutMillis)
117
121
  assertEquals("1.2.3", usercentricsProxy.initializeOptionsArgument?.version)
118
122
  assertEquals(NetworkMode.EU, usercentricsProxy.initializeOptionsArgument?.networkMode)
@@ -122,7 +126,8 @@ class RNUsercentricsModuleTest {
122
126
  fun testConfigureWithWrongValues() {
123
127
  val usercentricsProxy = FakeUsercentricsProxy()
124
128
  val contextMock = mockk<ReactApplicationContext>(relaxed = true)
125
- val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
129
+ val module =
130
+ RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
126
131
 
127
132
  module.configure(JavaOnlyMap())
128
133
  assertEquals(UsercentricsOptions(), usercentricsProxy.initializeOptionsArgument)
@@ -132,7 +137,8 @@ class RNUsercentricsModuleTest {
132
137
  fun testIsReady() {
133
138
  val usercentricsProxy = FakeUsercentricsProxy(isReadyAnswer = usercentricsReadyStatus)
134
139
  val contextMock = mockk<ReactApplicationContext>(relaxed = true)
135
- val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
140
+ val module =
141
+ RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
136
142
 
137
143
  val promise = FakePromise()
138
144
  module.isReady(promise)
@@ -155,7 +161,8 @@ class RNUsercentricsModuleTest {
155
161
 
156
162
  val usercentricsProxy = FakeUsercentricsProxy(isReadyAnswer = error)
157
163
  val contextMock = mockk<ReactApplicationContext>(relaxed = true)
158
- val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
164
+ val module =
165
+ RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
159
166
 
160
167
  val promise = FakePromise()
161
168
  module.isReady(promise)
@@ -174,7 +181,8 @@ class RNUsercentricsModuleTest {
174
181
 
175
182
  val usercentricsProxy = FakeUsercentricsProxy(instanceAnswer = usercentricsSDK)
176
183
  val contextMock = mockk<ReactApplicationContext>(relaxed = true)
177
- val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
184
+ val module =
185
+ RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
178
186
 
179
187
  val promise = FakePromise()
180
188
  module.restoreUserSession("abc", promise)
@@ -202,7 +210,8 @@ class RNUsercentricsModuleTest {
202
210
  }
203
211
  val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
204
212
  val contextMock = mockk<ReactApplicationContext>(relaxed = true)
205
- val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
213
+ val module =
214
+ RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
206
215
 
207
216
  val promise = FakePromise()
208
217
  module.restoreUserSession("abc", promise)
@@ -217,7 +226,8 @@ class RNUsercentricsModuleTest {
217
226
  every { usercentricsSDK.getControllerId() }.returns("abc")
218
227
  val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
219
228
  val contextMock = mockk<ReactApplicationContext>(relaxed = true)
220
- val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
229
+ val module =
230
+ RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
221
231
  val promise = FakePromise()
222
232
 
223
233
  module.getControllerId(promise)
@@ -232,7 +242,8 @@ class RNUsercentricsModuleTest {
232
242
  every { usercentricsSDK.getABTestingVariant() }.returns("variantA")
233
243
  val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
234
244
  val contextMock = mockk<ReactApplicationContext>(relaxed = true)
235
- val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
245
+ val module =
246
+ RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
236
247
  val promise = FakePromise()
237
248
 
238
249
  module.getABTestingVariant(promise)
@@ -248,7 +259,8 @@ class RNUsercentricsModuleTest {
248
259
 
249
260
  val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
250
261
  val contextMock = mockk<ReactApplicationContext>(relaxed = true)
251
- val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
262
+ val module =
263
+ RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
252
264
 
253
265
  val promise = FakePromise()
254
266
 
@@ -280,7 +292,8 @@ class RNUsercentricsModuleTest {
280
292
 
281
293
  val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
282
294
  val contextMock = mockk<ReactApplicationContext>(relaxed = true)
283
- val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
295
+ val module =
296
+ RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
284
297
 
285
298
  val promise = FakePromise()
286
299
 
@@ -318,7 +331,8 @@ class RNUsercentricsModuleTest {
318
331
 
319
332
  val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
320
333
  val contextMock = mockk<ReactApplicationContext>(relaxed = true)
321
- val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
334
+ val module =
335
+ RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
322
336
 
323
337
  module.setCMPId(123)
324
338
 
@@ -332,7 +346,8 @@ class RNUsercentricsModuleTest {
332
346
 
333
347
  val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
334
348
  val contextMock = mockk<ReactApplicationContext>(relaxed = true)
335
- val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
349
+ val module =
350
+ RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
336
351
 
337
352
  module.setABTestingVariant("variantA")
338
353
 
@@ -348,7 +363,8 @@ class RNUsercentricsModuleTest {
348
363
 
349
364
  val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
350
365
  val contextMock = mockk<ReactApplicationContext>(relaxed = true)
351
- val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
366
+ val module =
367
+ RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
352
368
  val promise = FakePromise()
353
369
 
354
370
  module.getTCFData(promise)
@@ -365,7 +381,8 @@ class RNUsercentricsModuleTest {
365
381
  every { usercentricsSDK.getUserSessionData() }.returns(GetUserSessionDataMock.fake)
366
382
  val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
367
383
  val contextMock = mockk<ReactApplicationContext>(relaxed = true)
368
- val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
384
+ val module =
385
+ RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
369
386
  val promise = FakePromise()
370
387
 
371
388
  module.getUserSessionData(promise)
@@ -380,7 +397,8 @@ class RNUsercentricsModuleTest {
380
397
 
381
398
  val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
382
399
  val contextMock = mockk<ReactApplicationContext>(relaxed = true)
383
- val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
400
+ val module =
401
+ RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
384
402
  val promise = FakePromise()
385
403
 
386
404
  module.getUSPData(promise)
@@ -399,7 +417,8 @@ class RNUsercentricsModuleTest {
399
417
  }
400
418
  val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
401
419
  val contextMock = mockk<ReactApplicationContext>(relaxed = true)
402
- val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
420
+ val module =
421
+ RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
403
422
  val promise = FakePromise()
404
423
 
405
424
  module.changeLanguage("abc", promise)
@@ -426,7 +445,8 @@ class RNUsercentricsModuleTest {
426
445
 
427
446
  val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
428
447
  val contextMock = mockk<ReactApplicationContext>(relaxed = true)
429
- val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
448
+ val module =
449
+ RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
430
450
  val promise = FakePromise()
431
451
 
432
452
  module.changeLanguage("abc", promise)
@@ -454,7 +474,8 @@ class RNUsercentricsModuleTest {
454
474
 
455
475
  val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
456
476
  val contextMock = mockk<ReactApplicationContext>(relaxed = true)
457
- val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
477
+ val module =
478
+ RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
458
479
 
459
480
  val promise = FakePromise()
460
481
  module.acceptAllForTCF(0, 0, promise)
@@ -482,7 +503,8 @@ class RNUsercentricsModuleTest {
482
503
 
483
504
  val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
484
505
  val contextMock = mockk<ReactApplicationContext>(relaxed = true)
485
- val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
506
+ val module =
507
+ RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
486
508
 
487
509
  val promise = FakePromise()
488
510
  module.denyAllForTCF(0, 0, promise)
@@ -509,7 +531,8 @@ class RNUsercentricsModuleTest {
509
531
 
510
532
  val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
511
533
  val contextMock = mockk<ReactApplicationContext>(relaxed = true)
512
- val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
534
+ val module =
535
+ RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
513
536
 
514
537
  val promise = FakePromise()
515
538
  module.acceptAll(0, promise)
@@ -530,7 +553,8 @@ class RNUsercentricsModuleTest {
530
553
 
531
554
  val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
532
555
  val contextMock = mockk<ReactApplicationContext>(relaxed = true)
533
- val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
556
+ val module =
557
+ RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
534
558
 
535
559
  val promise = FakePromise()
536
560
  module.denyAll(0, promise)
@@ -552,7 +576,8 @@ class RNUsercentricsModuleTest {
552
576
 
553
577
  val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
554
578
  val contextMock = mockk<ReactApplicationContext>(relaxed = true)
555
- val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
579
+ val module =
580
+ RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
556
581
 
557
582
  val promise = FakePromise()
558
583
  module.saveDecisions(SaveDecisionsMock.callDecisions.serialize(), 0, promise)
@@ -576,7 +601,8 @@ class RNUsercentricsModuleTest {
576
601
 
577
602
  val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
578
603
  val contextMock = mockk<ReactApplicationContext>(relaxed = true)
579
- val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
604
+ val module =
605
+ RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
580
606
 
581
607
  val promise = FakePromise()
582
608
  module.saveDecisionsForTCF(
@@ -603,7 +629,8 @@ class RNUsercentricsModuleTest {
603
629
 
604
630
  val usercentricsProxy = FakeUsercentricsProxy(usercentricsSDK)
605
631
  val contextMock = mockk<ReactApplicationContext>(relaxed = true)
606
- val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
632
+ val module =
633
+ RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
607
634
 
608
635
  val promise = FakePromise()
609
636
  module.saveOptOutForCCPA(
@@ -628,7 +655,8 @@ class RNUsercentricsModuleTest {
628
655
 
629
656
  val usercentricsProxy = FakeUsercentricsProxy(usercentricsSdk)
630
657
  val contextMock = mockk<ReactApplicationContext>(relaxed = true)
631
- val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
658
+ val module =
659
+ RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
632
660
 
633
661
  module.track(UsercentricsAnalyticsEventType.ACCEPT_ALL_FIRST_LAYER.ordinal)
634
662
 
@@ -640,7 +668,8 @@ class RNUsercentricsModuleTest {
640
668
  fun testResetMethod() {
641
669
  val usercentricsProxy = FakeUsercentricsProxy()
642
670
  val contextMock = mockk<ReactApplicationContext>(relaxed = true)
643
- val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
671
+ val module =
672
+ RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
644
673
 
645
674
  module.reset()
646
675
 
@@ -651,7 +680,8 @@ class RNUsercentricsModuleTest {
651
680
  fun testShowFirstLayer() {
652
681
  val usercentricsProxy = FakeUsercentricsProxy()
653
682
  val contextMock = mockk<ReactApplicationContext>(relaxed = true)
654
- val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
683
+ val module =
684
+ RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
655
685
  val promise = FakePromise()
656
686
  module.showFirstLayer(bannerSettingsMap.toWritableMap(), promise)
657
687
  promise.await()
@@ -662,7 +692,8 @@ class RNUsercentricsModuleTest {
662
692
  fun testShowSecondLayer() {
663
693
  val usercentricsProxy = FakeUsercentricsProxy()
664
694
  val contextMock = mockk<ReactApplicationContext>(relaxed = true)
665
- val module = RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
695
+ val module =
696
+ RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
666
697
  val promise = FakePromise()
667
698
  module.showSecondLayer(bannerSettingsMap.toWritableMap(), promise)
668
699
  promise.await()
@@ -672,7 +703,7 @@ class RNUsercentricsModuleTest {
672
703
  @Test
673
704
  fun testShowFirstLayerWithCustomLocalLogo() {
674
705
  val context = InstrumentationRegistry.getInstrumentation().context
675
- val reactContextProviderMock = object: ReactContextProviderMock() {
706
+ val reactContextProviderMock = object : ReactContextProviderMock() {
676
707
 
677
708
  override fun context(): Context {
678
709
  return context
@@ -681,7 +712,11 @@ class RNUsercentricsModuleTest {
681
712
 
682
713
  val usercentricsProxy = FakeUsercentricsProxy()
683
714
  val reactApplicationContext = mockk<ReactApplicationContext>(relaxed = true)
684
- val module = RNUsercentricsModule(reactApplicationContext, usercentricsProxy, reactContextProviderMock)
715
+ val module = RNUsercentricsModule(
716
+ reactApplicationContext,
717
+ usercentricsProxy,
718
+ reactContextProviderMock
719
+ )
685
720
 
686
721
  val bannerSettingsMap = mapOf(
687
722
  "variant" to null,
@@ -702,7 +737,8 @@ class RNUsercentricsModuleTest {
702
737
  module.showFirstLayer(bannerSettingsMap.toWritableMap(), promise)
703
738
  promise.await()
704
739
 
705
- val someLocalImageDrawableId = context.resources.getIdentifier("some_local_image", "drawable", context.packageName)
740
+ val someLocalImageDrawableId =
741
+ context.resources.getIdentifier("some_local_image", "drawable", context.packageName)
706
742
  val expectedBannerSettings = BannerSettings(
707
743
  firstLayerStyleSettings = FirstLayerStyleSettings(
708
744
  layout = UsercentricsLayout.Popup(
@@ -716,4 +752,28 @@ class RNUsercentricsModuleTest {
716
752
  )
717
753
  assertEquals(expectedBannerSettings, usercentricsProxy.showFirstLayerBannerSettings)
718
754
  }
755
+
756
+ @Test
757
+ fun testShowFirstLayerWhenShowCloseButtonIsNull() {
758
+ val usercentricsProxy = FakeUsercentricsProxy()
759
+ val contextMock = mockk<ReactApplicationContext>(relaxed = true)
760
+ val module =
761
+ RNUsercentricsModule(contextMock, usercentricsProxy, ReactContextProviderMock())
762
+ val bannerSettingsMap = mapOf(
763
+ "secondLayerStyleSettings" to mapOf(
764
+ "showCloseButton" to null
765
+ ),
766
+ )
767
+ val promise = FakePromise()
768
+ module.showFirstLayer(bannerSettingsMap.toWritableMap(), promise)
769
+ promise.await()
770
+
771
+ val expectedBannerSettings = BannerSettings(
772
+ secondLayerStyleSettings = SecondLayerStyleSettings(
773
+ showCloseButton = null
774
+ )
775
+ )
776
+
777
+ assertEquals(expectedBannerSettings, usercentricsProxy.showFirstLayerBannerSettings)
778
+ }
719
779
  }
@@ -155,7 +155,7 @@ internal fun String.deserializeButtonType(): ButtonType {
155
155
  internal fun ReadableMap.secondLayerStyleSettingsFromMap(context: Context): SecondLayerStyleSettings {
156
156
  return SecondLayerStyleSettings(
157
157
  buttonLayout = getMap("buttonLayout")?.buttonLayoutFromMap(context),
158
- showCloseButton = getBoolean("showCloseButton"),
158
+ showCloseButton = getBooleanOrNull("showCloseButton"),
159
159
  )
160
160
  }
161
161
 
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@usercentrics/react-native-sdk",
3
- "version": "2.9.0",
3
+ "version": "2.10.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.9.0",
10
+ "iosPackageVersion": "2.10.0",
11
11
  "license": "SEE LICENSE IN LICENSE",
12
12
  "files": [
13
13
  "android",