getDeviceInfoContext static method

Future<SelfDescribing?> getDeviceInfoContext()

Implementation

static Future<SelfDescribing?> getDeviceInfoContext() async {
  final deviceFCM =
      await cacheInstance.getValue(cdnConfigInstance.getKeys(StorageKeyKeys.gkNotificationToken)!);
  final deviceInfoJson = await cacheInstance.getValue(cdnConfigInstance.getKeys(StorageKeyKeys.gkDeviceInfo)!);
  final deviceInfo = deviceInfoJson != null ? jsonDecode(deviceInfoJson) : {};

  // If no device id then dont pass the deviceInfoSchema
  final deviceId = deviceInfo[cdnConfigInstance.getKeys(StorageKeyKeys.gkDeviceUniqueId)];
  if (deviceId == null || deviceId.toString().isEmpty) {
    return null;
  }

  // ADD META TO THE USER DEVICE SCHEMA
  final metaItems = <Map<String, dynamic>>[];

  final isVersionAddedInMeta = metaItems.any((item) => item['property'] == 'sdk_version');

  if (!isVersionAddedInMeta) {
    metaItems.add({
      'property': 'sdk_version',
      'value': KPSdkVersion.version,
    });
    metaItems.add({
      'property': 'platform',
      'value': 'flutter',
    });
  }

  final schemas = cdnConfigInstance.getSnowplowSchema();
  final userDeviceSchema = (schemas is Map<String, String>)
      ? (schemas['user_device'] ?? 'user_device/jsonschema/1-0-0')
      : 'user_device/jsonschema/1-0-0';

  return _createContext(
    userDeviceSchema,
    {
      'device_id': deviceId,
      'android_ad_id':
          Platform.isAndroid ? deviceInfo[cdnConfigInstance.getKeys(StorageKeyKeys.gkGoogleAdId)] : '',
      'ios_ad_id': Platform.isIOS ? deviceInfo[cdnConfigInstance.getKeys(StorageKeyKeys.gkGoogleAdId)] : '',
      'fcm_token': deviceFCM ?? '',
      'app_domain': deviceInfo[cdnConfigInstance.getKeys(StorageKeyKeys.gkAppDomain)],
      'device_type': Platform.operatingSystem.toLowerCase(),
      'app_version': deviceInfo[cdnConfigInstance.getKeys(StorageKeyKeys.gkAppVersion)],
      'meta': metaItems,
    },
  );
}