gatherDeviceInfo method

  1. @override
Future<Map<String, Object?>> gatherDeviceInfo()
override

Gathers device info

Implementation

@override
Future<Map<String, Object?>> gatherDeviceInfo() async {
  final deviceInfoPlugin = DeviceInfoPlugin();
  final packageInfoFuture = _loadPackageInfo();
  final deviceDataFuture = _getDeviceData(deviceInfoPlugin);
  final deviceCategoryFuture = _getDeviceCategory();
  final isLimitAdTrackingEnabledFuture = _isLimitAdTrackingEnabled();

  final packageInfo = await packageInfoFuture;

  // Get device info map per platform
  final deviceData = await deviceDataFuture;

  // Screen diagonal inches for category detection
  final deviceCategory = await deviceCategoryFuture;

  // Device ID (Android ID)
  String? deviceId;
  if (defaultTargetPlatform == TargetPlatform.android ||
      defaultTargetPlatform == TargetPlatform.iOS) {
    deviceId = deviceData['id'];
  } else {
    deviceId = null;
  }

  // Get brand, model, platform version fallback logic
  final brand = deviceData['brand'] ?? 'unknown';
  final model = deviceData['model'] ?? 'unknown';
  final platformVersion =
      deviceData['version.release'] ??
      deviceData['systemVersion'] ??
      'unknown';

  // Timezone offset in seconds
  final timeZoneOffsetSeconds = DateTime.now().timeZoneOffset.inSeconds;

  // User locale language-country
  final locale = PlatformDispatcher.instance.locale;
  final userDefaultLanguage = locale.toLanguageTag();

  // Advertising ID and limited ad tracking status (async)
  final isLimitAdTrackingEnabled = await isLimitAdTrackingEnabledFuture;
  // Do NOT send advertising ID when user has opted out of ad tracking
  // (required by Google Play / App Store policies).
  final advertisingId =
      isLimitAdTrackingEnabled ? null : await _getAdvertisingId();

  return {
    'category': deviceCategory,
    'id': deviceId,
    'model': model,
    'timezone_offset_seconds': timeZoneOffsetSeconds,
    'is_limited_ad_tracking_enabled': isLimitAdTrackingEnabled,
    'brand_name': brand,
    'platform_version': platformVersion,
    'resettable_id': advertisingId,
    'user_default_language': userDefaultLanguage,
    'app_version': packageInfo?.version,
  };
}