initialize method
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;
}
}