getMetadata static method

Future<Map<String, String>> getMetadata()

Get device metadata for auth logging

Implementation

static Future<Map<String, String>> getMetadata() async {
  // Return cached metadata if available
  if (_cachedMetadata != null) {
    return _cachedMetadata!;
  }

  final metadata = <String, String>{};
  final deviceInfo = DeviceInfoPlugin();
  final packageInfo = await PackageInfo.fromPlatform();

  // Installation ID (persistent across app launches, unique per install)
  metadata['installation_id'] = await _getOrCreateInstallationId();

  // App info
  metadata['app_version'] = packageInfo.version;
  metadata['app_build'] = packageInfo.buildNumber;

  // Platform info
  if (kIsWeb) {
    metadata['platform'] = 'web';
    final webInfo = await deviceInfo.webBrowserInfo;
    metadata['os'] = webInfo.browserName.name;
    metadata['os_version'] = webInfo.appVersion ?? 'unknown';
    metadata['device_model'] = webInfo.platform ?? 'web';
    metadata['user_agent'] = webInfo.userAgent ?? '';
  } else if (Platform.isAndroid) {
    metadata['platform'] = 'android';
    final androidInfo = await deviceInfo.androidInfo;
    metadata['os'] = 'Android';
    metadata['os_version'] = androidInfo.version.release;
    metadata['device_model'] = '${androidInfo.manufacturer} ${androidInfo.model}';
    metadata['device_brand'] = androidInfo.brand;
    metadata['sdk_version'] = androidInfo.version.sdkInt.toString();
  } else if (Platform.isIOS) {
    metadata['platform'] = 'ios';
    final iosInfo = await deviceInfo.iosInfo;
    metadata['os'] = 'iOS';
    metadata['os_version'] = iosInfo.systemVersion;
    metadata['device_model'] = iosInfo.model;
    metadata['device_name'] = iosInfo.name;
    metadata['is_physical_device'] = iosInfo.isPhysicalDevice.toString();
  } else if (Platform.isMacOS) {
    metadata['platform'] = 'macos';
    final macInfo = await deviceInfo.macOsInfo;
    metadata['os'] = 'macOS';
    metadata['os_version'] = macInfo.osRelease;
    metadata['device_model'] = macInfo.model;
  } else if (Platform.isWindows) {
    metadata['platform'] = 'windows';
    final windowsInfo = await deviceInfo.windowsInfo;
    metadata['os'] = 'Windows';
    metadata['os_version'] = windowsInfo.productName;
    metadata['device_model'] = windowsInfo.computerName;
  } else if (Platform.isLinux) {
    metadata['platform'] = 'linux';
    final linuxInfo = await deviceInfo.linuxInfo;
    metadata['os'] = 'Linux';
    metadata['os_version'] = linuxInfo.version ?? 'unknown';
    metadata['device_model'] = linuxInfo.name;
  }

  // Locale and timezone
  try {
    metadata['locale'] = Platform.localeName;
  } catch (_) {
    metadata['locale'] = 'unknown';
  }

  // Cache for future calls
  _cachedMetadata = metadata;
  return metadata;
}