persistentUUID property

Future<String> get persistentUUID

Get a persistent device UUID that survives app reinstalls. Uses secure storage for persistence, generates new UUID if none exists.

Implementation

static Future<String> get persistentUUID async {
  // Return cached value if available
  if (_cachedUUID != null) {
    return _cachedUUID!;
  }

  // Strategy 1: Try to get from secure storage (survives app reinstalls)
  final storedUUID = await KeychainManager.shared.retrieveDeviceUUID();
  if (storedUUID != null && storedUUID.isNotEmpty) {
    _cachedUUID = storedUUID;
    return storedUUID;
  }

  // Strategy 2: Generate new UUID and store it
  final newUUID = _uuid.v4();
  try {
    await KeychainManager.shared.storeDeviceUUID(newUUID);
    _logger.debug('Generated and stored new device UUID');
  } catch (e) {
    _logger.warning('Failed to store device UUID: $e');
  }
  _cachedUUID = newUUID;
  return newUUID;
}