initialize method

Future<void> initialize({
  1. String? sessionId,
  2. String? userId,
})

Inicializa el IdManager sessionId - ID de sesión específico a usar (opcional) userId - ID de usuario a establecer durante la inicialización (opcional)

Implementation

Future<void> initialize({
  String? sessionId,
  String? userId,
}) async {
  if (_isInitialized) {
    return;
  }

  try {
    _prefs = await SharedPreferences.getInstance();
    _sequence = _prefs?.getInt(_sequenceKey) ?? 0;

    // Generar un nuevo executionId al iniciar
    await _generateExecutionId();

    // Generar installationId si no existe (con lógica específica por plataforma)
    final hasInstallationId = _prefs?.containsKey(_installationIdKey) ?? false;

    if (!hasInstallationId) {
      await _generatePlatformSpecificInstallationId();
    } else {
      final existingInstallationId = _prefs?.getString(_installationIdKey);
      _fallbackInstallationId = existingInstallationId;
    }

    // Manejar sessionId: usar el proporcionado o generar/recuperar uno existente
    if (sessionId != null && sessionId.isNotEmpty) {
      // Si se proporciona un sessionId específico, usarlo y resetear secuencia
      await overrideSessionId(sessionId);
    } else if (!(_prefs?.containsKey(_sessionIdKey) ?? false)) {
      // Si no existe sessionId y no se proporciona uno, generar nuevo
      await generateSessionId();
    }
    // Si existe sessionId almacenado y no se proporciona uno nuevo, mantener el existente

    // Establecer userId si se proporciona
    if (userId != null && userId.isNotEmpty) {
      await setUserId(userId);
    }

    _isInitialized = true;
  } catch (e) {
    // En caso de error, usar valores por defecto
    _sequence = 0;
    await _generateFallbackIds(sessionId: sessionId, userId: userId);
    _isInitialized = true;
  }
}