Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@ internal fun Any?.deserializeOptions(): UsercentricsOptions {
this["initTimeoutMillis"]?.let {
options.initTimeoutMillis = (it as Int).toLong()
}
this["controllerId"]?.let {
options.controllerId = it as String
}
this["bannerCustomization"]?.let {
options.bannerCustomization = it.deserializeBannerInitCustomization()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,10 @@ class InitializeBridgeUnitTest {
InitializeMock.callWithDataInitTimeoutMillis,
usercentricsProxy.initializeOptionsArgument?.initTimeoutMillis
)
assertEquals(
InitializeMock.callWithDataControllerId,
usercentricsProxy.initializeOptionsArgument?.controllerId
)
assertEquals(1, result.successCount)
assertEquals(InitializeMock.expected, result.successResultArgument)
}
Expand Down Expand Up @@ -118,6 +122,10 @@ class InitializeBridgeUnitTest {
defaultOptions.networkMode,
usercentricsProxy.initializeOptionsArgument?.networkMode
)
assertEquals(
defaultOptions.controllerId,
usercentricsProxy.initializeOptionsArgument?.controllerId
)
assertEquals(1, result.successCount)
assertEquals(InitializeMock.expected, result.successResultArgument)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ internal object InitializeMock {
"version" to "1.2.3",
"networkMode" to "EU",
"initTimeoutMillis" to 1500,
"controllerId" to "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
)
)
val callWithDataSettingsId = "AAAAA"
Expand All @@ -28,6 +29,7 @@ internal object InitializeMock {
val callWithDataVersion = "1.2.3"
val callWithDataNetworkMode = NetworkMode.EU
val callWithDataInitTimeoutMillis = 1500L
val callWithDataControllerId = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
val callWithoutData = FakeFlutterMethodCall(
method = "initialize",
arguments = mapOf(
Expand Down
1 change: 1 addition & 0 deletions example/test/fake_usercentrics.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ class FakeUsercentrics extends UsercentricsPlatform {
NetworkMode? networkMode,
bool? consentMediation,
int? initTimeoutMillis,
String? controllerId,
// ignore: deprecated_member_use
BannerInitCustomization? bannerCustomization,
}) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@ extension UsercentricsOptions {
options.initTimeoutMillis = Int64(initTimeoutMillis)
}

if let controllerId = dict["controllerId"] as? String {
options.controllerId = controllerId
}

if let consentMediation = dict["consentMediation"] as? Bool {
options.consentMediation = consentMediation
}
Expand Down
3 changes: 3 additions & 0 deletions lib/src/internal/bridge/initialize_bridge.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ abstract class InitializeBridge {
NetworkMode? networkMode,
bool? consentMediation,
int? initTimeoutMillis,
String? controllerId,
// ignore: deprecated_member_use_from_same_package
BannerInitCustomization? bannerCustomization,
});
Expand All @@ -40,6 +41,7 @@ class MethodChannelInitialize extends InitializeBridge {
NetworkMode? networkMode,
bool? consentMediation,
int? initTimeoutMillis,
String? controllerId,
// ignore: deprecated_member_use_from_same_package
BannerInitCustomization? bannerCustomization,
}) {
Expand All @@ -53,6 +55,7 @@ class MethodChannelInitialize extends InitializeBridge {
networkMode: networkMode,
consentMediation: consentMediation,
initTimeoutMillis: initTimeoutMillis,
controllerId: controllerId,
bannerCustomization: bannerCustomization,
);
channel.invokeMethod(_name, arguments);
Expand Down
2 changes: 2 additions & 0 deletions lib/src/internal/platform/method_channel_usercentrics.dart
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ class MethodChannelUsercentrics extends UsercentricsPlatform {
NetworkMode? networkMode,
bool? consentMediation,
int? initTimeoutMillis,
String? controllerId,
// ignore: deprecated_member_use_from_same_package
BannerInitCustomization? bannerCustomization,
}) async {
Expand Down Expand Up @@ -116,6 +117,7 @@ class MethodChannelUsercentrics extends UsercentricsPlatform {
networkMode: networkMode,
consentMediation: consentMediation,
initTimeoutMillis: initTimeoutMillis,
controllerId: controllerId,
bannerCustomization: bannerCustomization);

await status.then((value) => isReadyCompleter?.complete(null));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ class InitializeOptionsSerializer {
NetworkMode? networkMode,
bool? consentMediation,
int? initTimeoutMillis,
String? controllerId,
// ignore: deprecated_member_use_from_same_package
BannerInitCustomization? bannerCustomization,
}) =>
Expand All @@ -30,6 +31,7 @@ class InitializeOptionsSerializer {
'networkMode': NetworkModeSerializer.serialize(networkMode),
'consentMediation': consentMediation,
'initTimeoutMillis': initTimeoutMillis,
'controllerId': controllerId,
'bannerCustomization': BannerInitCustomizationSerializer.serialize(
bannerCustomization,
),
Expand Down
1 change: 1 addition & 0 deletions lib/src/platform/usercentrics_platform.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ abstract class UsercentricsPlatform {
NetworkMode? networkMode,
bool? consentMediation,
int? initTimeoutMillis,
String? controllerId,
// ignore: deprecated_member_use_from_same_package
BannerInitCustomization? bannerCustomization,
});
Expand Down
10 changes: 10 additions & 0 deletions lib/src/usercentrics.dart
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,14 @@ class Usercentrics {
/// - The [networkMode] sets the network operation mode. Be careful, use this option only if we have confirmed that it is ready to use because it has a significant impact on the whole system's performance. The default value is "world".
/// - The [consentMediation] enables the feature of consent mediation, this feature works with a set of selected SDKs that you can find in the documentation.
/// - The [initTimeoutMillis] sets a timeout for the SDK to initialize. Minimum value is 5000ms. The default value is 10000ms.
/// - The [controllerId] can be used to inject a previously-issued controllerID at SDK
/// initialisation. Use this to preserve user identity across login/logout flows that clear
/// local consent storage. Store the controllerId server-side after the first successful init,
/// then pass it here on every subsequent login. The SDK will skip generating a new ID and use
/// this value instead. It is persisted to local storage, so subsequent re-initialisations
/// without this option continue to use it. The value must be a 64-character lowercase
/// hexadecimal string (the format produced internally by the SDK). Invalid values are ignored
/// with a warning log and the SDK falls back to its normal ID resolution (stored → generated).
/// - The [bannerCustomization] enables further programmatic customization of the predefined Banner UI, applied at init-time.
/// **Deprecated:** [bannerCustomization] is deprecated and will be removed in a future release. Configure banner appearance via the Usercentrics dashboard instead.
static void initialize({
Expand All @@ -39,6 +47,7 @@ class Usercentrics {
NetworkMode? networkMode,
bool? consentMediation,
int? initTimeoutMillis,
String? controllerId,
@Deprecated(
'BannerInitCustomization is deprecated and will be removed in a future release. Configure banner appearance via the Usercentrics dashboard instead.')
BannerInitCustomization? bannerCustomization,
Expand All @@ -53,6 +62,7 @@ class Usercentrics {
networkMode: networkMode,
consentMediation: consentMediation,
initTimeoutMillis: initTimeoutMillis,
controllerId: controllerId,
// ignore: deprecated_member_use_from_same_package
bannerCustomization: bannerCustomization);

Expand Down
3 changes: 3 additions & 0 deletions test/internal/bridge/fake_initialize_bridge.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ class FakeInitializeBridge extends InitializeBridge {
NetworkMode? invokeNetworkModeArgument;
bool? invokeConsentMediationArgument;
int? invokeInitTimeoutMillisArgument;
String? invokeControllerIdArgument;
// ignore: deprecated_member_use_from_same_package
BannerInitCustomization? invokeBannerCustomizationArgument;

Expand All @@ -31,6 +32,7 @@ class FakeInitializeBridge extends InitializeBridge {
NetworkMode? networkMode,
bool? consentMediation,
int? initTimeoutMillis,
String? controllerId,
// ignore: deprecated_member_use_from_same_package
BannerInitCustomization? bannerCustomization,
}) {
Expand All @@ -45,6 +47,7 @@ class FakeInitializeBridge extends InitializeBridge {
invokeNetworkModeArgument = networkMode;
invokeConsentMediationArgument = consentMediation;
invokeInitTimeoutMillisArgument = initTimeoutMillis;
invokeControllerIdArgument = controllerId;
invokeBannerCustomizationArgument = bannerCustomization;
}
}
5 changes: 5 additions & 0 deletions test/internal/bridge/initialize_bridge_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ void main() {
"networkMode": "EU",
'consentMediation': true,
"initTimeoutMillis": 25000,
"controllerId":
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bannerCustomization": {
'paddingTop': 16,
'paddingBottom': null,
Expand Down Expand Up @@ -55,6 +57,8 @@ void main() {
const mockDefaultLanguage = "en";
const mockTimeoutMillis = 20000;
const mockInitTimeoutMillis = 25000;
const mockControllerId =
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
const mockNetworkMode = NetworkMode.eu;
const mockConsentMediation = true;
// ignore: deprecated_member_use_from_same_package
Expand Down Expand Up @@ -94,6 +98,7 @@ void main() {
networkMode: mockNetworkMode,
consentMediation: mockConsentMediation,
initTimeoutMillis: mockInitTimeoutMillis,
controllerId: mockControllerId,
// ignore: deprecated_member_use
bannerCustomization: mockBannerCustomization);

Expand Down
6 changes: 5 additions & 1 deletion test/internal/platform/method_channel_usercentrics_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@ void main() {
const networkMode = NetworkMode.eu;
const consentMediation = true;
const initTimeoutMillis = 7000;
const controllerId =
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";

instance.initialize(
settingsId: settingsId,
Expand All @@ -61,7 +63,8 @@ void main() {
version: version,
networkMode: networkMode,
consentMediation: consentMediation,
initTimeoutMillis: initTimeoutMillis);
initTimeoutMillis: initTimeoutMillis,
controllerId: controllerId);
await instance.isReadyCompleter?.future;

expect(initializeBridge.invokeCount, 1);
Expand All @@ -76,6 +79,7 @@ void main() {
expect(initializeBridge.invokeConsentMediationArgument, consentMediation);
expect(
initializeBridge.invokeInitTimeoutMillisArgument, initTimeoutMillis);
expect(initializeBridge.invokeControllerIdArgument, controllerId);

expect(isReadyBridge.invokeCount, 1);
expect(isReadyBridge.invokeChannelArgument?.name, "usercentrics");
Expand Down
3 changes: 3 additions & 0 deletions test/platform/fake_usercentrics_platform.dart
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ class FakeUsercentricsPlatform extends UsercentricsPlatform {
NetworkMode? networkModeArgument;
bool? consentMediationArgument;
int? initializeInitTimeoutMillisArgument;
String? initializeControllerIdArgument;
// ignore: deprecated_member_use_from_same_package
BannerInitCustomization? initializeBannerCustomizationArgument;

Expand All @@ -85,6 +86,7 @@ class FakeUsercentricsPlatform extends UsercentricsPlatform {
NetworkMode? networkMode,
bool? consentMediation,
int? initTimeoutMillis,
String? controllerId,
// ignore: deprecated_member_use_from_same_package
BannerInitCustomization? bannerCustomization,
}) {
Expand All @@ -98,6 +100,7 @@ class FakeUsercentricsPlatform extends UsercentricsPlatform {
networkModeArgument = networkMode;
consentMediationArgument = consentMediation;
initializeInitTimeoutMillisArgument = initTimeoutMillis;
initializeControllerIdArgument = controllerId;
initializeBannerCustomizationArgument = bannerCustomization;
}

Expand Down
Loading