initialize static method
Creates a long-lived SDK runtime from one public initialization shape.
Implementation
static Future<BtxCustomerSdk> initialize({
required BtxCustomerSdkInitialization initialization,
}) async {
_validateInitialization(initialization);
final diagnostics = BtxSdkDiagnostics(
scope: 'sdk',
enabled: btxDiagnosticsEnabledForApiUrl(
initialization.usesBundledCredentials
? initialization.apiBaseUrl ?? btxProductionApiBaseUrl
: initialization.configuration!.apiBaseUrl,
),
);
diagnostics.log(
'sdk.initialize.start',
<String, Object?>{
'runtimeId': diagnostics.instanceId,
'mode': initialization.usesBundledCredentials ? 'bundled' : 'explicit',
'telemetryMode': initialization.telemetry.runtimeMode.name,
'lifecycleBinding': initialization.telemetry.bindAppLifecycle,
'initialIdentityPresent': initialization.usesBundledCredentials
? initialization.initialIdentity != null
: initialization.configuration?.customer.externalId.isNotEmpty ==
true,
},
);
if (initialization.usesBundledCredentials) {
WidgetsFlutterBinding.ensureInitialized();
final binding = BtxHeadlessBinding(
initialIdentity: initialization.initialIdentity,
credentials: initialization.credentials,
credentialsPath: initialization.credentialsPath,
apiBaseUrl: initialization.apiBaseUrl,
appContextAttributes: initialization.appContextAttributes,
httpClient: initialization.httpClient,
uuid: initialization.uuid,
bindAppLifecycle: initialization.telemetry.bindAppLifecycle,
runtimeMode: initialization.telemetry.runtimeMode,
initialAppSession: initialization.telemetry.initialAppSession,
);
await binding.attach();
diagnostics.log(
'sdk.initialize.complete',
<String, Object?>{
'runtimeId': diagnostics.instanceId,
'mode': 'bundled',
'active': binding.isActive,
},
);
return BtxCustomerSdk._bundled(
binding: binding,
diagnostics: diagnostics,
);
}
final identity = _normalizeIdentity(
BtxHostIdentity(
externalId: initialization.configuration!.customer.externalId,
name: initialization.configuration!.customer.name,
email: initialization.configuration!.customer.email,
),
);
WidgetsFlutterBinding.ensureInitialized();
final durableStoragePath = await resolveBtxTelemetryStoragePath();
final bootstrap = _telemetryBootstrapFromConfiguration(
configuration: initialization.configuration!,
initialAppSession: initialization.telemetry.initialAppSession,
identity: identity,
durableStoragePath: durableStoragePath,
);
final runtime = await createBtxTelemetryRuntime(
bootstrap: bootstrap,
mode: initialization.telemetry.runtimeMode,
httpClient: initialization.httpClient,
uuid: initialization.uuid,
);
final statusNotifier = ValueNotifier<BtxCustomerSdkStatus>(
_statusForIdentity(identity),
);
final featureFlagsStore = BtxFeatureFlagStore(
identity: identity,
);
featureFlagsStore.apply(runtime.featureFlags, allowUnload: true);
final sdk = BtxCustomerSdk._explicit(
runtime: runtime,
authScope: btxAuthScopeForBootstrap(bootstrap),
statusNotifier: statusNotifier,
featureFlagsStore: featureFlagsStore,
diagnostics: diagnostics,
);
if (initialization.telemetry.bindAppLifecycle) {
WidgetsFlutterBinding.ensureInitialized();
sdk._attachLifecycleBinding();
}
diagnostics.log(
'sdk.initialize.complete',
<String, Object?>{
'runtimeId': diagnostics.instanceId,
'mode': 'explicit',
'active': sdk.isActive,
},
);
return sdk;
}