initialize static method
Future<InstallResponse>
initialize({
- required LinkFortyConfig config,
- int attributionWindowHours = 168,
- String? deviceId,
- @visibleForTesting NetworkManagerProtocol? networkManager,
- @visibleForTesting StorageManagerProtocol? storageManager,
- @visibleForTesting FingerprintCollectorProtocol? fingerprintCollector,
Initializes the LinkForty SDK with the provided config.
This must be called before using any other SDK features.
Parameters:
config: The SDK configuration object.attributionWindowHours: The duration in hours to look back for clicks. Defaults to 168 hours (7 days).deviceId: An optional unique device identifier for high-confidence matching.networkManager: For testing - allows injecting a mock network layer.storageManager: For testing - allows injecting a mock storage layer.fingerprintCollector: For testing - allows injecting a mock collector.
Returns an InstallResponse containing attribution results.
Throws AlreadyInitializedError if called more than once without reset. Throws LinkFortyError if initialization or initial attribution fails.
Implementation
static Future<InstallResponse> initialize({
required LinkFortyConfig config,
int attributionWindowHours = 168,
String? deviceId,
@visibleForTesting NetworkManagerProtocol? networkManager,
@visibleForTesting StorageManagerProtocol? storageManager,
@visibleForTesting FingerprintCollectorProtocol? fingerprintCollector,
}) async {
if (_instance != null) {
throw const AlreadyInitializedError();
}
config.validate();
final sdk = LinkForty._();
sdk._config = config;
LinkFortyLogger.isDebugEnabled = config.debug;
final effectiveStorageManager =
storageManager ?? await StorageManager.create();
final effectiveNetworkManager =
networkManager ?? NetworkManager(config: config);
final effectiveFingerprintCollector =
fingerprintCollector ?? FingerprintCollector();
sdk._networkManager = effectiveNetworkManager;
final attributionContext = AttributionContext(
storage: effectiveStorageManager,
debug: config.debug,
);
sdk._attributionContext = attributionContext;
sdk._attributionManager = AttributionManager(
networkManager: effectiveNetworkManager,
storageManager: effectiveStorageManager,
fingerprintCollector: effectiveFingerprintCollector,
);
sdk._eventTracker = EventTracker(
networkManager: effectiveNetworkManager,
storageManager: effectiveStorageManager,
attributionContext: attributionContext,
);
final deepLinkHandler = DeepLinkHandler();
deepLinkHandler.configure(
networkManager: effectiveNetworkManager,
fingerprintCollector: effectiveFingerprintCollector,
baseURL: config.baseURL,
attributionContext: attributionContext,
);
sdk._deepLinkHandler = deepLinkHandler;
sdk._isInitialized = true;
_instance = sdk;
sdk._initializationCompleter.complete();
final response = await sdk._attributionManager!.reportInstall(
attributionWindowHours: attributionWindowHours,
deviceId: deviceId,
appToken: config.appToken,
);
if (response.attributed && response.deepLinkData != null) {
await sdk._deepLinkHandler?.deliverDeferredDeepLink(
response.deepLinkData,
);
}
LinkFortyLogger.log(
'SDK initialized successfully (attributed: ${response.attributed})',
);
return response;
}