getMetadata static method
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;
}