Skip to Content
рдПрдлрдмреАрдЬреА рд╕реЗ рдорд╛рдЗрдЧреНрд░реЗрдЯ рд╣реЛ рд░рд╣рд╛ рд╣реИ

ЁЯЪА рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдЧрд╛рдЗрдб: flutter_background_geolocation тЖТ рдЯреНрд░реИрд╕рд▓реЗрдЯ

flutter_background_geolocation рд╕реЗ рдЯреНрд░реЗрд╕рд▓реЗрдЯ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ? рдмрдврд╝рд┐рдпрд╛ рд╡рд┐рдХрд▓реНрдк! рдЯреНрд░реИрд╕рд▓реЗрдЯ 1:1 рд╕рдВрдЧрдд рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдУрдкрди-рд╕реЛрд░реНрд╕ (рдЕрдкрд╛рдЪреЗ 2.0) рд╡рд┐рдХрд▓реНрдк рд╣реИ - рд╕рд╛рде рд╣реА рдХрд▓рдореИрди рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ, рдореЙрдХ рдбрд┐рдЯреЗрдХреНрд╢рди, рдкреНрд░рд╛рдЗрд╡реЗрд╕реА рдЬреЛрди рдФрд░ рднреА рдмрд╣реБрдд рдХреБрдЫред рдХреЛрдИ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреБрдВрдЬрд┐рдпрд╛рдБ рдирд╣реАрдВ, рдХреЛрдИ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ SDK рдирд╣реАрдВ, рдкреВрд░реНрдг рд╕реНрд░реЛрдд рдХреЛрдб рдирд╣реАрдВред

ЁЯТб рдпрд╣ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рд╣рдореЗрд╢рд╛ рд╡рд░реНрддрдорд╛рди рд░рд┐рд▓реАрдЬрд╝ рдХреЛ рджрд░реНрд╢рд╛рддреА рд╣реИред


тЪб 3-рд╕реНрдЯреЗрдк рд╕реНрдкреАрдб рд░рди

рд╕рдЪ рдореЗрдВ, рдпрд╣ рдЗрддрдирд╛ рддреЗрдЬрд╝ рд╣реИред

рдЪрд░рдг 1 - рдирд┐рд░реНрднрд░рддрд╛ рдмрджрд▓реЗрдВ:

# Before dependencies: flutter_background_geolocation: ^5.x.x

тЬи рдХреЗ рдмрд╛рдж

dependencies: tracelet: ^3.6.14

рдЪрд░рдг 2 - рдЖрдпрд╛рдд рдЕрджреНрдпрддрди рдХрд░реЗрдВ:

// Before import 'package:flutter_background_geolocation/flutter_background_geolocation.dart' as bg; // After тАФ short & sweet тЬЕ import 'package:tracelet/tracelet.dart' as tl;

рдЪрд░рдг 3 - рдХрдХреНрд╖рд╛ рдХрд╛ рдирд╛рдо рдвреВрдВрдвреЗрдВ рдФрд░ рдмрджрд▓реЗрдВ:

// Before bg.BackgroundGeolocation.ready(bg.Config(...)); // After tl.Tracelet.ready(tl.Config.balanced().copyWith(...));

рд╡рд╕реНрддреБрддрдГ рдпрд╣реА рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐, рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдирд╛, рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓рдмреИрдХ - 1:1 рд╕рдВрдЧрддред рдЗрд╕ рдЧрд╛рдЗрдб рдХрд╛ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕рд╛ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдзреЛрдЦрд╛ рдкрддреНрд░ рд╣реИред


ЁЯПЧя╕П рдХреЙрдиреНрдлрд╝рд┐рдЧ: рдлрд╝реНрд▓реИрдЯ рд╕реЗ рд╕рдВрд░рдЪрд┐рдд рддрдХ

рдкрд┐рдЫрд▓рд╛ рдкреНрд▓рдЧрдЗрди рдПрдХ рд╕реНрддрд░ рдкрд░ рд╕рднреА рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдПрдХрд▓ рдлреНрд▓реИрдЯ Config() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЯреНрд░реИрд╕рд▓реЗрдЯ рдЙрдиреНрд╣реЗрдВ рддрд╛рд░реНрдХрд┐рдХ рдЦрдВрдбреЛрдВ рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддрд╛ рд╣реИ - рдЬрд┐рд╕рд╕реЗ рдмрдбрд╝реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдкрдврд╝рдирд╛ рдФрд░ рдмрдирд╛рдП рд░рдЦрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

// Before тАФ flat config bg.Config( desiredAccuracy: bg.Config.DESIRED_ACCURACY_HIGH, distanceFilter: 10.0, stopOnTerminate: false, startOnBoot: true, stopTimeout: 5, url: 'https://api.example.com/locations', batchSync: true, autoSync: true, headers: {'Authorization': 'Bearer $token'}, heartbeatInterval: 60, notification: bg.Notification(title: 'Tracking', text: 'Active'), debug: true, logLevel: bg.Config.LOG_LEVEL_VERBOSE, ); // After тАФ organized by section ЁЯПа tl.Config( geo: tl.GeoConfig( desiredAccuracy: tl.DesiredAccuracy.high, // typed enums! distanceFilter: 10.0, ), app: tl.AppConfig( stopOnTerminate: false, startOnBoot: true, heartbeatInterval: 60, ), android: tl.AndroidConfig( foregroundService: tl.ForegroundServiceConfig( notificationTitle: 'Tracking', notificationText: 'Active', ), ), motion: tl.MotionConfig( stopTimeout: 5, ), http: tl.HttpConfig( url: 'https://api.example.com/locations', batchSync: true, autoSync: true, headers: {'Authorization': 'Bearer $token'}, ), logger: tl.LoggerConfig( debug: true, logLevel: tl.LogLevel.verbose, // readable enum instead of int constants ), );

рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЕрдиреБрднрд╛рдЧ рдПрдХ рдирдЬрд╝рд░ рдореЗрдВ:

  • geo тЖТ GeoConfig - рд╕рдЯреАрдХрддрд╛, рджреВрд░реА рдлрд╝рд┐рд▓реНрдЯрд░, рд▓реЛрдЪ, рдЖрд╡рдзрд┐рдХ рдореЛрдб, рдХрд▓рдорди рдлрд╝рд┐рд▓реНрдЯрд░, рдореЙрдХ рдбрд┐рдЯреЗрдХреНрд╢рди
  • app тЖТ AppConfig тАФ рдЬреАрд╡рдирдЪрдХреНрд░, рджрд┐рд▓ рдХреА рдзрдбрд╝рдХрди, рд╢реЗрдбреНрдпреВрд▓
  • android тЖТ AndroidConfig - ЁЯЖХ рдХреЗрд╡рд▓ Android: рдЕрдЧреНрд░рднреВрдорд┐ рд╕реЗрд╡рд╛ рдЕрдзрд┐рд╕реВрдЪрдирд╛, рд╕реНрдерд╛рди рдЕрджреНрдпрддрди рдЕрдВрддрд░рд╛рд▓, рдЕрд▓рд╛рд░реНрдо рдкреНрд░рдмрдВрдзрдХ, рдЖрд╡рдзрд┐рдХ рд░рдгрдиреАрддрд┐рдпрд╛рдБ
  • ios тЖТ IosConfig - ЁЯЖХ iOS-рдХреЗрд╡рд▓: рдЧрддрд┐рд╡рд┐рдзрд┐ рдкреНрд░рдХрд╛рд░, рдкреГрд╖реНрдарднреВрдорд┐ рд╕рддреНрд░, рдирд┐рд▓рдВрдмрди рдХреЛ рд░реЛрдХреЗрдВ
  • motion тЖТ MotionConfig - рд╕реНрдЯреЙрдк рдЯрд╛рдЗрдордЖрдЙрдЯ, рдЧрддрд┐рд╡рд┐рдзрд┐ рдкрд╣рдЪрд╛рди, рдПрдХреНрд╕реЗрд▓реЗрд░реЛрдореАрдЯрд░-рдХреЗрд╡рд▓ рдореЛрдб
  • http тЖТ HttpConfig - рд╕рд┐рдВрдХ рдпреВрдЖрд░рдПрд▓, рд╣реЗрдбрд░, рдмреИрдЪрд┐рдВрдЧ, рдкреБрдирдГ рдкреНрд░рдпрд╛рд╕ рдмреИрдХрдСрдлрд╝, рд╡рд╛рдИ-рдлрд╛рдИ-рдХреЗрд╡рд▓ рдореЛрдб
  • logger тЖТ LoggerConfig тАФ рд▓реЙрдЧ рд╕реНрддрд░, рдЕрдзрд┐рдХрддрдо рджрд┐рди, рдбрд┐рдмрдЧ рдзреНрд╡рдирд┐рдпрд╛рдБ
  • geofence тЖТ GeofenceConfig - рдирд┐рдХрдЯрддрд╛ рддреНрд░рд┐рдЬреНрдпрд╛, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЯреНрд░рд┐рдЧрд░, рдиреЙрдХ-рдЖрдЙрдЯ рдореЛрдб
  • persistence тЖТ PersistenceConfig - рдЬрд╛рд░реА рдореЛрдб, рдЕрдзрд┐рдХрддрдо рджрд┐рди/рд░рд┐рдХреЙрд░реНрдб, рдЯреЗрдореНрдкрд▓реЗрдЯ
  • audit тЖТ AuditConfig - ЁЯЖХ SHA-256 рд╣реИрд╢ рдЪреЗрди - рдХреНрдпреЛрдВрдХрд┐ рдЫреЗрдбрд╝рдЫрд╛рдбрд╝-рд░реЛрдзреА рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ
  • privacyZone тЖТ PrivacyZoneConfig - ЁЯЖХ рдЧреЛрдкрдиреАрдпрддрд╛ рдХреНрд╖реЗрддреНрд░ рдЗрдВрдЬрди - рдЬреАрдбреАрдкреАрдЖрд░ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рджреЛрд╕реНрдд
  • security тЖТ SecurityConfig - ЁЯЖХ рдЖрд░рд╛рдо рдкрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди (encryptDatabase)
  • attestation тЖТ AttestationConfig - ЁЯЖХ рдбрд┐рд╡рд╛рдЗрд╕ рд╕рддреНрдпрд╛рдкрди / рдЕрдЦрдВрдбрддрд╛ рдЬрд╛рдВрдЪ

ЁЯЧ║я╕П рдмрд┐рдЧ рдХреЙрдиреНрдлрд┐рдЧ рдЪреАрдЯ рд╢реАрдЯ

рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдлрд╝реАрд▓реНрдб рдореЗрдВ 1:1 рдореИрдкрд┐рдВрдЧ рд╣реЛрддреА рд╣реИред рдпрд╣ рд░рд╣рд╛ рдЖрдкрдХрд╛ рд░реЛрд╕реЗрдЯрд╛ рд╕реНрдЯреЛрдиред

рд╕реНрдерд╛рди рдФрд░ рдЯреНрд░реИрдХрд┐рдВрдЧ тЖТ GeoConfig

Before тЖТ Tracelet тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА desiredAccuracy (int: -2тАж100) тЖТ geo.desiredAccuracy (DesiredAccuracy enum) .high / .medium / .low / .veryLow / .passive distanceFilter тЖТ geo.distanceFilter (default 10m) stationaryRadius тЖТ geo.stationaryRadius (default 25m) locationTimeout тЖТ geo.locationTimeout (default 60s) disableElasticity тЖТ geo.disableElasticity elasticityMultiplier тЖТ geo.elasticityMultiplier (default 1.0) stopAfterElapsedMinutes тЖТ geo.stopAfterElapsedMinutes (-1 = disabled) enableTimestampMeta тЖТ geo.enableTimestampMeta maxMonitoredGeofences тЖТ geo.maxMonitoredGeofences (-1 = platform default)

рдПрдВрдбреНрд░реЙрдЗрдб-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝реАрд▓реНрдб тЖТ AndroidConfig:

Before тЖТ Tracelet тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА locationUpdateInterval тЖТ android.locationUpdateInterval (1000ms) fastestLocationUpdateInterval тЖТ android.fastestLocationUpdateInterval (500ms) deferTime тЖТ android.deferTime allowIdenticalLocations тЖТ android.allowIdenticalLocations geofenceModeHighAccuracy тЖТ geofence.geofenceModeHighAccuracy (cross-platform; android.* is deprecated) scheduleUseAlarmManager тЖТ android.scheduleUseAlarmManager

iOS-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝реАрд▓реНрдб тЖТ IosConfig:

Before тЖТ Tracelet тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА activityType тЖТ ios.activityType (LocationActivityType enum) useSignificantChangesOnly тЖТ ios.useSignificantChangesOnly showsBackgroundLocationIndicator тЖТ ios.showsBackgroundLocationIndicator pausesLocationUpdatesAutomatically тЖТ ios.pausesLocationUpdatesAutomatically locationAuthorizationRequest тЖТ ios.locationAuthorizationRequest disableLocationAuthorizationAlert тЖТ ios.disableLocationAuthorizationAlert preventSuspend тЖТ ios.preventSuspend

ЁЯЖХ рдЯреНрд░реИрд╕рд▓реЗрдЯ-рдЕрдирдиреНрдп рдЬрд┐рдпреЛрдХреЙрдиреНрдлрд╝рд┐рдЧ рдлрд╝реАрд▓реНрдб:

  • geo.enableAdaptiveMode - рдЧрддрд┐рд╡рд┐рдзрд┐ + рдмреИрдЯрд░реА + рдЧрддрд┐ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рджреВрд░реА рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ
  • geo.periodicLocationInterval - рдбрд┐рдлрд╝реЙрд▓реНрдЯ 900s (15 рдорд┐рдирдЯ)
  • geo.periodicDesiredAccuracy - рдбрд┐рдлрд╝реЙрд▓реНрдЯ .medium
  • geo.filter (LocationFilter) - рдХрд▓рдорди, рдореЙрдХ рдбрд┐рдЯреЗрдХреНрд╢рди, рд╕рдЯреАрдХрддрд╛ рд╕реАрдорд╛рдПрдБ

ЁЯз╣ рд╕реНрдерд╛рди рдлрд╝рд┐рд▓реНрдЯрд░ тЖТ LocationFilter (рдЯреНрд░реЗрд╕рд▓реЗрдЯ-рдЕрдирдиреНрдп!)

  • ЁЯЖХ рдиреЙрдЯрдЯреНрд░рд╛рдВрд╕0рд▓реЗрдЯ тАФ рдиреЛрдЯрдЯреНрд░рд╛рдВрд╕1рд▓реЗрдЯ / рдиреЛрдЯрдЯреНрд░рд╛рдВрд╕2рд▓реЗрдЯ / рдиреЛрдЯрдЯреНрд░рд╛рдВрд╕3рд▓реЗрдЯ
  • ЁЯЖХ filter.useKalmanFilter - 4-рд╕реНрдЯреЗрдЯ рдПрдХреНрд╕рдЯреЗрдВрдбреЗрдб рдХрд▓рдореИрди рдлрд╝рд┐рд▓реНрдЯрд░ - рдПрдХ рдкреЗрд╢реЗрд╡рд░ рдХреА рддрд░рд╣ рдЬреАрдкреАрдПрд╕ рд╢реЛрд░ рдХреЛ рд╕реБрдЪрд╛рд░реВ рдХрд░реЗрдВ
  • ЁЯЖХ filter.mockDetectionLevel - .disabled / .basic / .heuristic - рдЙрди рдирдХрд▓реА рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдкрдХрдбрд╝реЗрдВ
  • ЁЯЖХ filter.rejectMockLocations - рдирдХрд▓реА рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рд╕реНрд╡рддрдГ-рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ
  • ЁЯЖХ filter.maxImpliedSpeed - рд╕реНрдкрд╛рдЗрдХ рдлрд╝рд┐рд▓реНрдЯрд░ - тАЬрдирд╣реАрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдЯреЗрд▓реАрдкреЛрд░реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛тАЭ
  • ЁЯЖХ filter.trackingAccuracyThreshold - рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рд╕рдЯреАрдХрддрд╛
  • ЁЯЖХ filter.odometerAccuracyThreshold - рдУрдбреЛрдореАрдЯрд░ рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рд╕рдЯреАрдХрддрд╛

рдЧрддрд┐рд╡рд┐рдзрд┐ рдкрд╣рдЪрд╛рди тЖТ MotionConfig

Before тЖТ Tracelet тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА stopTimeout тЖТ motion.stopTimeout (default 5 min) motionTriggerDelay тЖТ motion.motionTriggerDelay disableMotionActivityUpdates тЖТ motion.disableMotionActivityUpdates (set true for accelerometer-only, no permission!) isMoving тЖТ motion.isMoving (initial state) activityRecognitionInterval тЖТ motion.activityRecognitionInterval (10000ms) minimumActivityRecognitionConfidence тЖТ motion.minimumActivityRecognitionConfidence (75) disableStopDetection тЖТ motion.disableStopDetection stopDetectionDelay тЖТ motion.stopDetectionDelay stopOnStationary тЖТ motion.stopOnStationary triggerActivities тЖТ motion.activityTypes (Set<ActivityType>)

ЁЯЖХ рдЯреНрд░реИрд╕рд▓реЗрдЯ-рдЕрдирдиреНрдп рдореЛрд╢рдирдХреЙрдиреНрдлрд╝рд┐рдЧ рдлрд╝реАрд▓реНрдб:

  • motion.motionDetectionMode - .accelerometer / .speed / .smart - рдЧрддрд┐ рдХрд╛ рдкрддрд╛ рдХреИрд╕реЗ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╕реНрдорд╛рд░реНрдЯ = рдПрдХреНрд╕реЗрд▓реЗрд░реЛрдореАрдЯрд░ рдФрд░ рдЬреАрдкреАрдПрд╕ рд╕реНрдкреАрдб; рдЕрдиреБрд╢рдВрд╕рд┐рдд)
  • motion.shakeThreshold - рдПрдХреНрд╕реЗрд▓реЗрд░реЛрдореАрдЯрд░-рдХреЗрд╡рд▓ рдЯреНрдпреВрдирд┐рдВрдЧ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ 2.5)
  • motion.stillThreshold - рдПрдХреНрд╕реЗрд▓реЗрд░реЛрдореАрдЯрд░-рдХреЗрд╡рд▓ рдЯреНрдпреВрдирд┐рдВрдЧ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ 0.4)
  • motion.stillSampleCount - рдПрдХреНрд╕реЗрд▓реЗрд░реЛрдореАрдЯрд░-рдХреЗрд╡рд▓ рдЯреНрдпреВрдирд┐рдВрдЧ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ 25)
  • motion.speedMovingThreshold / motion.speedStationaryDelay / motion.speedWakeConfirmCount - рд╕реНрдкреАрдб-рдореЛрдб рдЯреНрдпреВрдирд┐рдВрдЧ (.speed / .smart рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдпреБрдХреНрдд)
  • motion.stationaryTrackingMode / motion.stationaryPeriodicInterval / motion.stationaryPeriodicAccuracy - рдПрдХ рдмрд╛рд░ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдкрд░ рдХреНрдпрд╛ рдХрд░реЗрдВ (рдЖрд╡рдзрд┐рдХ рд╕реБрдзрд╛рд░ рдмрдирд╛рдо рдЬрд┐рдпреЛрдлреЗрдВрд╕)

рдЖрд╡реЗрджрди тЖТ AppConfig

Before тЖТ Tracelet тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА stopOnTerminate тЖТ app.stopOnTerminate (default true) startOnBoot тЖТ app.startOnBoot (default false) heartbeatInterval тЖТ app.heartbeatInterval (default 60s) schedule тЖТ app.schedule (cron-like expressions)

рдиреЛрдЯ: scheduleUseAlarmManager тЖТ android.scheduleUseAlarmManager | preventSuspend тЖТ ios.preventSuspend

ЁЯФФ рдЕрдЧреНрд░рднреВрдорд┐ рд╕реЗрд╡рд╛ рдЕрдзрд┐рд╕реВрдЪрдирд╛ тЖТ AndroidConfig.foregroundService

рдорд╣рддреНрд╡рдкреВрд░реНрдг (2.x.x рдкрд░рд┐рд╡рд░реНрддрди): рдЕрдЧреНрд░рднреВрдорд┐ рд╕реЗрд╡рд╛ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдЕрдм android.foregroundService (рдПрдХ AndroidConfig) рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХреА рдЧрдИ рд╣реИ, app рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдирд╣реАрдВред рдпрд╣ рдХреЗрд╡рд▓ Android рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ.

Before (Notification) тЖТ Tracelet (AndroidConfig.foregroundService) тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА title тЖТ android.foregroundService.notificationTitle text тЖТ android.foregroundService.notificationText color тЖТ android.foregroundService.notificationColor smallIcon тЖТ android.foregroundService.notificationSmallIcon largeIcon тЖТ android.foregroundService.notificationLargeIcon priority тЖТ android.foregroundService.notificationPriority channelName тЖТ android.foregroundService.channelName channelId тЖТ android.foregroundService.channelId sticky тЖТ android.foregroundService.notificationOngoing actions тЖТ android.foregroundService.actions enabled тЖТ android.foregroundService.enabled

HTTP рд╕рд┐рдВрдХ тЖТ HttpConfig

Before тЖТ Tracelet тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА url тЖТ http.url (null = sync disabled) method тЖТ http.method (HttpMethod.post / .put) headers тЖТ http.headers httpRootProperty тЖТ http.httpRootProperty (default 'location') batchSync тЖТ http.batchSync maxBatchSize тЖТ http.maxBatchSize autoSync тЖТ http.autoSync autoSyncThreshold тЖТ http.autoSyncThreshold httpTimeout тЖТ http.httpTimeout (default 60000ms) params тЖТ http.params extras тЖТ http.extras locationsOrderDirection тЖТ http.locationsOrderDirection (LocationOrder enum)

ЁЯЖХ рдЯреНрд░реИрд╕рд▓реЗрдЯ-рдЕрдирдиреНрдп HttpConfig рдлрд╝реАрд▓реНрдб:

  • http.disableAutoSyncOnCellular - рдХреЗрд╡рд▓ рд╡рд╛рдИ-рдлрд╝рд╛рдИ рд╕рд┐рдВрдХ - рдЙрд╕ рдбреЗрдЯрд╛ рдкреНрд▓рд╛рди рдХреЛ рд╕рд╣реЗрдЬреЗрдВ!
  • http.maxRetries - рдбрд┐рдлрд╝реЙрд▓реНрдЯ 10, рдШрд╛рддреАрдп рдмреИрдХрдСрдлрд╝ + рдШрдмрд░рд╛рд╣рдЯ рдХреЗ рд╕рд╛рде
  • http.retryBackoffBase - рдбрд┐рдлрд╝реЙрд▓реНрдЯ 1000ms
  • http.retryBackoffCap - рдбрд┐рдлрд╝реЙрд▓реНрдЯ 300000ms (5 рдорд┐рдирдЯ)

рдЬрд┐рдпреЛрдлреЗрдВрд╕рд┐рдВрдЧ тЖТ GeofenceConfig

Before тЖТ Tracelet тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА geofenceProximityRadius тЖТ geofence.geofenceProximityRadius (default 1000m) geofenceInitialTriggerEntry тЖТ geofence.geofenceInitialTriggerEntry (default true)
  • ЁЯЖХ geofence.geofenceModeKnockOut - рдкрд╣рд▓реЗ рдирд┐рдХрд╛рд╕ рдХреЗ рдмрд╛рдж рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЬрд┐рдпреЛрдлреЗрдВрд╕ рд╣рдЯрд╛рдПрдВ - рдПрдХ рдФрд░ рд╣реЛ рдЧрдпрд╛!

рджреГрдврд╝рддрд╛ тЖТ PersistenceConfig

Before тЖТ Tracelet тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА persistMode тЖТ persistence.persistMode (.all / .location / .geofence / .none) maxDaysToPersist тЖТ persistence.maxDaysToPersist (-1 = forever) maxRecordsToPersist тЖТ persistence.maxRecordsToPersist (-1 = unlimited) locationTemplate тЖТ persistence.locationTemplate (Mustache-style) geofenceTemplate тЖТ persistence.geofenceTemplate (Mustache-style) disableProviderChangeRecord тЖТ persistence.disableProviderChangeRecord extras тЖТ persistence.extras

рд▓реЙрдЧрд┐рдВрдЧ тЖТ LoggerConfig

Before тЖТ Tracelet тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА logLevel (int const) тЖТ logger.logLevel (.verbose / .debug / .info / .warning / .error) logMaxDays тЖТ logger.logMaxDays (default 3) debug тЖТ logger.debug (alert sounds тАФ fun at demos, terrifying at 3 AM)

ЁЯФР рдСрдбрд┐рдЯ рдЯреНрд░реЗрд▓ тЖТ AuditConfig (рдЯреНрд░реЗрд╕рд▓реЗрдЯ-рдПрдХреНрд╕рдХреНрд▓реВрд╕рд┐рд╡)

  • audit.enabled тАФ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ falseред рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд╛рди рдкрд░ SHA-256 рд╣реИрд╢ рд╢реНрд░реГрдВрдЦрд▓рд╛ - рдЫреЗрдбрд╝рдЫрд╛рдбрд╝ = рдирд╖реНрдЯ рд╣реЛ рдЧрдИ
  • рджреЗрд░ рд╕реЗ рдЕрдиреБрд╡рд╛рдж рдирд╣реАрдВ - рджреЗрд░ рд╕реЗ рдЕрдиреБрд╡рд╛рдж рдирд╣реАрдВ
  • audit.includeExtrasInHash тАФ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ false

ЁЯЫбя╕П рдЧреЛрдкрдиреАрдпрддрд╛ рдХреНрд╖реЗрддреНрд░ тЖТ PrivacyZoneConfig (рдЯреНрд░реЗрд╕рд▓реЗрдЯ-рдЕрдирдиреНрдп)

  • privacyZone.enabled тАФ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ falseред рдЧреЛрдкрдиреАрдпрддрд╛ рдХреНрд╖реЗрддреНрд░ рдЗрдВрдЬрди рд╕рдХреНрд╖рдо рдХрд░реЗрдВ.

ЁЯОп рд╕рдЯреАрдХрддрд╛ рд╕реНрдерд┐рд░рд╛рдВрдХ - рдЯрд╛рдЗрдк рдХреА рдЧрдИ рдПрдирдо!

Before (int constants) тЖТ Tracelet (typed enum) тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА Config.DESIRED_ACCURACY_NAVIGATION тЖТ DesiredAccuracy.high Config.DESIRED_ACCURACY_HIGH тЖТ DesiredAccuracy.high Config.DESIRED_ACCURACY_MEDIUM тЖТ DesiredAccuracy.medium Config.DESIRED_ACCURACY_LOW тЖТ DesiredAccuracy.low Config.DESIRED_ACCURACY_VERY_LOW тЖТ DesiredAccuracy.veryLow Config.DESIRED_ACCURACY_LOWEST тЖТ DesiredAccuracy.passive

ЁЯУб рдШрдЯрдирд╛рдПрдБ - рд╕рдорд╛рди рдирд╛рдо, рдХрдо рдЯрд╛рдЗрдкрд┐рдВрдЧ

рд╕рднреА 14 рдИрд╡реЗрдВрдЯ рд╕реНрдЯреНрд░реАрдо рдорд╛рдирдЪрд┐рддреНрд░ 1:1ред рдмрд╕ рдЙрдкрд╕рд░реНрдЧ рдмрджрд▓реЗрдВ:

Before тЖТ Tracelet Callback Type тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА onLocation(cb) тЖТ onLocation(cb) Location onMotionChange(cb) тЖТ onMotionChange(cb) Location onActivityChange(cb) тЖТ onActivityChange(cb) ActivityChangeEvent onProviderChange(cb) тЖТ onProviderChange(cb) ProviderChangeEvent onGeofence(cb) тЖТ onGeofence(cb) GeofenceEvent onGeofencesChange(cb) тЖТ onGeofencesChange(cb) GeofencesChangeEvent onHeartbeat(cb) тЖТ onHeartbeat(cb) HeartbeatEvent onHttp(cb) тЖТ onHttp(cb) HttpEvent onSchedule(cb) тЖТ onSchedule(cb) State onPowerSaveChange(cb) тЖТ onPowerSaveChange(cb) bool onConnectivityChange(cb) тЖТ onConnectivityChange(cb) ConnectivityChangeEvent onEnabledChange(cb) тЖТ onEnabledChange(cb) bool onNotificationAction(cb) тЖТ onNotificationAction(cb) String onAuthorization(cb) тЖТ onAuthorization(cb) AuthorizationEvent N/A тЖТ ЁЯЖХ onTrip(cb) TripEvent (auto-detected trips!) N/A тЖТ ЁЯЖХ onRemoteConfig(cb) Config (remote config applied) removeListeners() тЖТ removeListeners() Cancels all subscriptions
// Before тАФ so many characters... bg.BackgroundGeolocation.onLocation((bg.Location location) { print('[location] $location'); }); // After тАФ ahh, much better tl.Tracelet.onLocation((tl.Location location) { print('[location] $location'); });

ЁЯФз рд╡рд┐рдзрд┐рдпрд╛рдБ - рд╕рдВрдкреВрд░реНрдг рдорд╛рдирдЪрд┐рддреНрд░рдг

рдЬреАрд╡рди рдЪрдХреНрд░

Before тЖТ Tracelet тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА bg.BackgroundGeolocation.ready(cfg) тЖТ tl.Tracelet.ready(cfg) bg.BackgroundGeolocation.start() тЖТ tl.Tracelet.start() bg.BackgroundGeolocation.stop() тЖТ tl.Tracelet.stop() bg.BackgroundGeolocation.startGeofences() тЖТ tl.Tracelet.startGeofences() N/A тЖТ ЁЯЖХ tl.Tracelet.startPeriodic() bg.BackgroundGeolocation.getState() тЖТ tl.Tracelet.getState() bg.BackgroundGeolocation.setConfig() тЖТ tl.Tracelet.setConfig() bg.BackgroundGeolocation.reset() тЖТ tl.Tracelet.reset() N/A тЖТ ЁЯЖХ tl.Tracelet.getHealth()

рдЬрдЧрд╣

Before тЖТ Tracelet тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА getCurrentPosition(...) тЖТ getCurrentPosition(...) same params: desiredAccuracy, timeout, maximumAge, persist, samples, extras N/A тЖТ ЁЯЖХ getLastKnownLocation() тАФ zero battery cost! watchPosition(cb, ...) тЖТ watchPosition(cb, ...) тАФ returns watchId stopWatchPosition(id) тЖТ stopWatchPosition(id) changePace(isMoving) тЖТ changePace(isMoving) N/A тЖТ ЁЯЖХ updateLocationProviderOptions() тАФ live accuracy/filter override, no pipeline restart getOdometer() тЖТ getOdometer() setOdometer(value) тЖТ setOdometer(value) resetOdometer() тЖТ setOdometer(0) тАФ one less method to remember

рдЬрд┐рдпреЛрдлрд╝реЗрдВрд╕рд┐рдВрдЧ

Before тЖТ Tracelet тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА addGeofence(g) тЖТ addGeofence(g) addGeofences(list) тЖТ addGeofences(list) removeGeofence(id) тЖТ removeGeofence(id) removeGeofences() тЖТ removeGeofences() getGeofences() тЖТ getGeofences() N/A тЖТ ЁЯЖХ getGeofence(id) тАФ get one without fetching all N/A тЖТ ЁЯЖХ geofenceExists(id) тАФ quick existence check

рджреГрдврд╝рддрд╛ рдФрд░ рд╕рдордиреНрд╡рдпрди

Before тЖТ Tracelet тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА getLocations() тЖТ getLocations([SQLQuery?]) тАФ optional filtering! getCount() тЖТ getCount() destroyLocations() тЖТ destroyLocations() destroyLocation(uuid) тЖТ destroyLocation(uuid) insertLocation(params) тЖТ insertLocation(params) тАФ returns UUID sync() тЖТ sync()

рдЕрдиреБрдорддрд┐рдпрд╛рдБ - рд╣рдореЗрдВ рдХреБрдЫ рджрд┐рдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ рдорд┐рд▓ рдЧрдП рд╣реИрдВ

Before тЖТ Tracelet тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА requestPermission() тЖТ requestLocationAuthorization() N/A тЖТ ЁЯЖХ getLocationAuthorization() N/A тЖТ ЁЯЖХ hasBackgroundPermission (getter) N/A тЖТ ЁЯЖХ getNotificationAuthorization() N/A тЖТ ЁЯЖХ requestNotificationAuthorization() N/A тЖТ ЁЯЖХ getMotionAuthorization() N/A тЖТ ЁЯЖХ requestMotionAuthorization() N/A тЖТ ЁЯЖХ requestTemporaryFullAccuracyAuthorization(purpose) тАФ iOS 14+ N/A тЖТ ЁЯЖХ canScheduleExactAlarms() тАФ Android 12+ N/A тЖТ ЁЯЖХ openExactAlarmSettings() N/A тЖТ ЁЯЖХ openAppSettings() N/A тЖТ ЁЯЖХ openLocationSettings() N/A тЖТ ЁЯЖХ openBatterySettings() N/A тЖТ ЁЯЖХ isIgnoringBatteryOptimizations()

рд▓реЙрдЧрд┐рдВрдЧ

Before тЖТ Tracelet тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА getLog() тЖТ getLog([SQLQuery?]) тАФ optional filtering destroyLog() тЖТ destroyLog() emailLog(email) тЖТ emailLog(email) log(level, msg) тЖТ log(level, msg)

рд╢реЗрдбреНрдпреВрд▓рд┐рдВрдЧ, рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛рд░реНрдп рдФрд░ рдиреЗрддреГрддреНрд╡рд╣реАрди

Before тЖТ Tracelet тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА startSchedule() тЖТ startSchedule() stopSchedule() тЖТ stopSchedule() startBackgroundTask() тЖТ startBackgroundTask() stopBackgroundTask(id) тЖТ stopBackgroundTask(id) registerHeadlessTask(cb) тЖТ registerHeadlessTask(cb)

рдЙрдкрдпреЛрдЧрд┐рддрд╛

Before тЖТ Tracelet тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА getProviderState() тЖТ getProviderState() getSensors() тЖТ getSensors() getDeviceInfo() тЖТ getDeviceInfo() playSound(name) тЖТ playSound(name) isPowerSaveMode тЖТ isPowerSaveMode N/A тЖТ ЁЯЖХ getSettingsHealth() тАФ detects OEM battery killers N/A тЖТ ЁЯЖХ openOemSettings(label) тАФ opens OEM settings page N/A тЖТ ЁЯЖХ requestSettings(action) N/A тЖТ ЁЯЖХ showSettings(action)

ЁЯФР рдСрдбрд┐рдЯ рдЯреНрд░реЗрд▓ (рдХреЗрд╡рд▓-рдЯреНрд░реИрд╕рд▓реЗрдЯ - рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬрд╝-рдЧреНрд░реЗрдб рдЕрдЦрдВрдбрддрд╛)

  • verifyAuditTrail() тАФ SHA-256 рд╣реИрд╢ рдЪреЗрди рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ тАФ рдХреНрдпрд╛ рдХреБрдЫ рдЫреЗрдбрд╝рдЫрд╛рдбрд╝ рдХреА рдЧрдИ рдереА?
  • getAuditProof(uuid) - рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд╛рди рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд╝рд┐рдХ рдкреНрд░рдорд╛рдг

ЁЯЫбя╕П рдЧреЛрдкрдиреАрдпрддрд╛ рдХреНрд╖реЗрддреНрд░ (рдХреЗрд╡рд▓-рдЯреНрд░реИрд╕рд▓реЗрдЯ - рдЬреАрдбреАрдкреАрдЖрд░ рдзрдиреНрдпрд╡рд╛рдж рдХрд╣рддрд╛ рд╣реИ)

  • addPrivacyZone(zone) - рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдХреНрд╖реЗрддреНрд░ рдЬреЛрдбрд╝реЗрдВ: рдмрд╣рд┐рд╖реНрдХреГрдд / рдиреАрдЪрд╛ / рдХреЗрд╡рд▓-рдШрдЯрдирд╛
  • addPrivacyZones(list) - рдереЛрдХ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
  • removePrivacyZone(id) тАФ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рд╣рдЯрд╛рдПрдБ
  • рдЯреНрд░рд╛рдВрд╕0рджреЗрд░ рд╕реЗ рдирд╣реАрдВ - рд╕рднреА рдХреЛ рд╣рдЯрд╛ рджреЗрдВ
  • getPrivacyZones() - рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рд╕реВрдЪреА рдмрдирд╛рдПрдВ

ЁЯОБрдЯреНрд░реЗрд╕рд▓реЗрдЯ-рд╡рд┐рд╢реЗрд╖ рд╕реБрд╡рд┐рдзрд╛рдПрдБ

рдЯреНрд░реИрд╕рд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ рдорд┐рд▓рдиреЗ рд╡рд╛рд▓реА рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдЬреЛ flutter_background_geolocation рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВ:

  • рдЖрд╡рдзрд┐рдХ рдореЛрдб - Tracelet.startPeriodic() - рдЬреАрдкреАрдПрд╕ рд╡рд░реНрдХрдореИрдиреЗрдЬрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рд░ рдПрди рдорд┐рдирдЯ рдореЗрдВ рдареАрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдХреЛрдИ рдЕрдЧреНрд░рднреВрдорд┐ рд╕реЗрд╡рд╛ рдирд╣реАрдВ, рдХреЛрдИ рд╕реВрдЪрдирд╛ рдирд╣реАрдВ, рдХреЛрдИ рдмреИрдЯрд░реА рдЦрддреНрдо рдирд╣реАрдВред
  • рдХрд▓рдореИрди рдлрд╝рд┐рд▓реНрдЯрд░ тАФ geo.filter.useKalmanFilter: true тАФ 4-рд╕реНрдЯреЗрдЯ рдИрдХреЗрдПрдл рдЬреАрдкреАрдПрд╕ рд╢реЛрд░ рдХреЛ рд╕реБрдЪрд╛рд░реВ рдХрд░рддрд╛ рд╣реИред рдЖрдкрдХреЗ рдЯреНрд░реИрдХ рдкреЗрд╢реЗрд╡рд░ рджрд┐рдЦрддреЗ рд╣реИрдВ, рдирд╢реЗ рдореЗрдВ рдирд╣реАрдВред
  • рдЕрдиреБрдХреВрд▓реА рдирдореВрдирд╛рдХрд░рдг - geo.enableAdaptiveMode: true - рдЧрддрд┐рд╡рд┐рдзрд┐ + рдмреИрдЯрд░реА + рдЧрддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рджреВрд░реА рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рддрд╛ рд╣реИред
  • рдореЙрдХ рдбрд┐рдЯреЗрдХреНрд╢рди (3-рд▓реЗрд╡рд▓) - geo.filter.mockDetectionLevel - рд╕реИрдЯреЗрд▓рд╛рдЗрдЯ рдХрд╛рдЙрдВрдЯ, рд░рд┐рдпрд▓рдЯрд╛рдЗрдо рдбреНрд░рд┐рдлреНрдЯ рдФрд░ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреАрдкреАрдПрд╕ рд╕реНрдкреВрдлрд┐рдВрдЧ рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИред
  • рдЧреЛрдкрдиреАрдпрддрд╛ рдХреНрд╖реЗрддреНрд░ - addPrivacyZone() - рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдЯреНрд░реИрдХрд┐рдВрдЧ рдХреЛ рдмрд╣рд┐рд╖реНрдХреГрдд, рдиреАрдЪрд╛ рдпрд╛ рд╕реАрдорд┐рдд рдХрд░реЗрдВред рдЬреАрдбреАрдкреАрдЖрд░ рдЕрдиреБрдкрд╛рд▓рди рдЕрдВрддрд░реНрдирд┐рд╣рд┐рддред
  • рдСрдбрд┐рдЯ рдЯреНрд░реЗрд▓ тАФ verifyAuditTrail() тАФ SHA-256 рд╣реИрд╢ рдЪреЗрдиред рд╕рд╛рдмрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рд╕реНрдерд╛рди рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдЫреЗрдбрд╝рдЫрд╛рдбрд╝ рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИред
  • рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдВрдЪ - getHealth() - рдПрдХ рдХреЙрд▓ рдЖрдкрдХреЛ рд╕рдм рдХреБрдЫ рдмрддрд╛рддреА рд╣реИ: рдЕрдиреБрдорддрд┐рдпрд╛рдБ, рдЬреАрдкреАрдПрд╕, рдмреИрдЯрд░реА, OEM рд╕рдорд╕реНрдпрд╛рдПрдБ, 12 рдСрдЯреЛ-рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБред
  • OEM рдЕрдиреБрдХреВрд▓рддрд╛ - getSettingsHealth() - Huawei, Xiaomi, Samsung, OPPO рдкрд░ рдЖрдХреНрд░рд╛рдордХ рдмреИрдЯрд░реА рдХрд┐рд▓рд░ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПред
  • рдпрд╛рддреНрд░рд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ - onTrip(cb) - рджреВрд░реА, рдЕрд╡рдзрд┐, рдорд╛рд░реНрдЧ рдмрд┐рдВрджреБ рдФрд░ рдФрд╕рдд рдЧрддрд┐ рдХреЗ рд╕рд╛рде рдпрд╛рддреНрд░рд╛рдУрдВ рдХрд╛ рд╕реНрд╡рддрдГ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИред
  • рдмрд╣реБрднреБрдЬ рднреВрдмрд╛рдбрд╝ тАФ Geofence(vertices: [...]) тАФ рдХреЗрд╡рд▓ рд╡реГрддреНрдд рдирд╣реАрдВред рд░реЗ-рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдмрд╣реБрднреБрдЬ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдХреЛрдИ рднреА рдЖрдХреГрддрд┐ рдмрдирд╛рдПрдВред
  • рдЬрд┐рдпреЛрдлреЗрдВрд╕ рдиреЙрдХ-рдЖрдЙрдЯ тАФ geofence.geofenceModeKnockOut тАФ рдЬрд┐рдпреЛрдлреЗрдВрд╕ рдкрд╣рд▓реЗ рдирд┐рдХрд╛рд╕ рдХреЗ рдмрд╛рдж рд╕реНрд╡рддрдГ рд╣рдЯ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдХреЗ рдЕрд▓рд░реНрдЯ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реАред
  • рдЬрд┐рдпреЛрдлреЗрдВрд╕ рд▓реБрдХрдЕрдк тАФ getGeofence(id) тАФ рд╕рднреА рдХреЛ рд▓реЛрдб рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рд╣реА рдЬрд┐рдпреЛрдлреЗрдВрд╕ рдХреЛ рдХреНрд╡реЗрд░реА рдХрд░реЗрдВред
  • рдЕрдиреБрдорддрд┐ рд╕рд╣рд╛рдпрдХ - openAppSettings(), openBatterySettings() - рд╕рд┐рд╕реНрдЯрдо рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рд╕реАрдзреЗ рдбреАрдкрд▓рд┐рдВрдХред
  • рд╕реНрдорд╛рд░реНрдЯ рдкреБрдирд░реНрдкреНрд░рдпрд╛рд╕ тАФ http.maxRetries + рдмреИрдХрдСрдлрд╝ тАФ рдШрдмрд░рд╛рд╣рдЯ рдХреЗ рд╕рд╛рде рдШрд╛рддреАрдп рдмреИрдХрдСрдлрд╝ред рдЖрдкрдХрд╛ рд╕рд░реНрд╡рд░ рдЖрдкрдХреЛ рдзрдиреНрдпрд╡рд╛рдж рджреЗрдЧрд╛.
  • рдХреЗрд╡рд▓ рд╡рд╛рдИ-рдлрд╛рдИ рд╕рд┐рдВрдХ тАФ http.disableAutoSyncOnCellular тАФ рдореЛрдмрд╛рдЗрд▓ рдбреЗрдЯрд╛ рдмрдЪрд╛рдПрдВ, рдХреЗрд╡рд▓ рд╡рд╛рдИ-рдлрд╛рдИ рдкрд░ рд╕рд┐рдВрдХ рдХрд░реЗрдВред
  • рдПрдХреНрд╕реЗрд▓реЗрд░реЛрдореАрдЯрд░-рдХреЗрд╡рд▓ рдЧрддрд┐ тАФ motion.shakeThreshold тАФ рдЧрддрд┐рд╡рд┐рдзрд┐ рдкрд╣рдЪрд╛рди рдЕрдиреБрдорддрд┐ рдХреЗ рдмрд┐рдирд╛ рдЧрддрд┐ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВред рд╢реВрдиреНрдп рдЕрдиреБрдорддрд┐ рдкреЙрдкрдЕрдк.
  • рд╡реЗрдм рд╕рдорд░реНрдерди - рд╡рд╣реА рдбрд╛рд░реНрдЯ рдПрдкреАрдЖрдИ рдЕрдЧреНрд░рднреВрдорд┐ (рдЗрди-рдЯреИрдм) рдЯреНрд░реИрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИред рдкреГрд╖реНрдарднреВрдорд┐ рдЯреНрд░реИрдХрд┐рдВрдЧ рдФрд░ рдХрдИ рдореВрд▓ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВ - рд╡реЗрдм рд╕рдорд░реНрдерди рджреЗрдЦреЗрдВред

ЁЯд╖ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдЕрднреА рдЯреНрд░реИрд╕рд▓реЗрдЯ рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВ

рдкрд┐рдЫрд▓реЗ рдкреНрд▓рдЧрдЗрди рдХреА рдХреБрдЫ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдЕрднреА рддрдХ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВред рд╡реЗ рдпрд╛ рддреЛ рдпреЛрдЬрдирд╛рдмрджреНрдз рд╣реИрдВ рдпрд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд╛рдо рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ:

  • рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдЬрд┐рдпреЛрдлреЗрдВрд╕ рд╕рд┐рдВрдХ - рдпреЛрдЬрдирд╛рдмрджреНрдзред рдЕрднреА рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреЗ рдПрдкреАрдЖрдИ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ addGeofences() рдкрд░ рдХреЙрд▓ рдХрд░реЗрдВред
  • locationTemplate рдЗрдВрдЯрд░рдкреЛрд▓реЗрд╢рди - рдШреЛрд╖рд┐рдд, рд╡рд╛рдпрд░реНрдб рдирд╣реАрдВред onLocation рдХреЙрд▓рдмреИрдХ рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ рдпрд╛ http.extras рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
  • JWT рдСрдЯреЛ-рд░рд┐рдлреНрд░реЗрд╢ - рдШреЛрд╖рд┐рдд, рд╡рд╛рдпрд░реНрдб рдирд╣реАрдВред http.headers рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВ; onAuthorization рдХреЛ рд╕реБрдиреЗрдВред
  • рдбреЗрдореЛ рд╕рд░реНрд╡рд░ - рдпреЛрдЬрдирд╛рдмрджреНрдз рдирд╣реАрдВред рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдмреИрдХрдПрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ - рдХреЛрдИ рднреА REST рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
  • рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреБрдВрдЬреА рд╕рдХреНрд░рд┐рдпрдг тАФ ЁЯОЙ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ! рдпрд╣ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рд╣реИ.

ЁЯЫая╕П рдЪрд░рдг-рджрд░-рдЪрд░рдг рдкреНрд░рд╡рд╛рд╕рди

рдЪрд░рдг 1: pubspec.yaml рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ

dependencies: tracelet: ^3.6.14

flutter_background_geolocation рдФрд░ рдХрд┐рд╕реА рднреА рд▓рд╛рдЗрд╕реЗрдВрд╕-рдХреБрдВрдЬреА рдкреИрдХреЗрдЬ рдХреЛ рд╣рдЯрд╛ рджреЗрдВред рдЕрдм рдЖрдкрдХреЛ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА!

рдЪрд░рдг 2: рдПрдВрдбреНрд░реЙрдЗрдб рд╕реЗрдЯрдЕрдк

INSTALL-ANDROID.md┬а рджреЗрдЦреЗрдВред рдореБрдЦреНрдп рдЕрдВрддрд░:

  • рд╡реИрдХрд▓реНрдкрд┐рдХ рдирд┐рд░реНрднрд░рддрд╛рдПрдБ - ЁЯЖХ рдпрджрд┐ рдЖрдк рдЙрдЪреНрдЪ рд╕рдЯреАрдХрддрд╛ рд╡рд╛рд▓реА рдЬреАрдПрдордПрд╕ рдЯреНрд░реИрдХрд┐рдВрдЧ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЯреНрд░реИрд╕рд▓реЗрдЯ 2.0.0+ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЕрдкрдиреЗ build.gradle рдореЗрдВ play-services-location рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдЕрдиреНрдпрдерд╛, рдпрд╣ рдорд╛рдирдХ AOSP GPS рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИред
  • рдХреЛрдИ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреБрдВрдЬреА рдирд╣реАрдВ - AndroidManifest.xml рд╕реЗ рдХрд┐рд╕реА рднреА BackgroundGeolocation.org рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд╣рдЯрд╛ рджреЗрдВ
  • рдЕрдиреБрдорддрд┐рдпрд╛рдБ - рдЧреНрд░реИрдбрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрд╡рдд: рд╡рд┐рд▓рдп, рдЖрдк рдЙрдиреНрд╣реЗрдВ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ
  • minSdkVersion - рдПрдкреАрдЖрдИ 21+ (рдкрд╣рд▓реЗ рдХреЗ рд╕рдорд╛рди)
  • рдХреЛрдЯрд▓рд┐рди - рд╕рднреА рдореВрд▓ рдХреЛрдб рдХреЛрдЯрд▓рд┐рди рд╣реИрдВ

рдЪрд░рдг 3: рдЖрдИрдУрдПрд╕ рд╕реЗрдЯрдЕрдк

INSTALL-IOS.md┬а рджреЗрдЦреЗрдВред рдореБрдЦреНрдп рдЕрдВрддрд░:

  • рдХреЛрдИ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреБрдВрдЬреА рдирд╣реАрдВ - рдкрд┐рдЫрд▓реЗ рдкреНрд▓рдЧрдЗрди рдХреА рдкреНрд▓рд┐рд╕реНрдЯ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рд╣рдЯрд╛ рджреЗрдВ
  • рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдореЛрдб - рд╡рд╣реА: рд▓реЛрдХреЗрд╢рди рдЕрдкрдбреЗрдЯ, рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдлрд╝реЗрдЪ, рд░рд┐рдореЛрдЯ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди
  • Info.plist - рд╕рдорд╛рди рдЙрдкрдпреЛрдЧ рд╡рд┐рд╡рд░рдг рдХреБрдВрдЬрд┐рдпрд╛рдБ (NSLocationAlwaysAndWhenInUseUsageDescription, рдЖрджрд┐)
  • Podfile тАФ рдкрд┐рдЫрд▓реЗ рдкреНрд▓рдЧрдЗрди рдХреЗ рдкреЙрдб рд╕реНрд░реЛрддреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ

рдЪрд░рдг 4: рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ

рдЕрдкрдиреЗ рдлреНрд▓реИрдЯ Config() тЖТ рдпреМрдЧрд┐рдХ Config() рдХреЛ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВред рдКрдкрд░ рдХреЙрдиреНрдлрд┐рдЧ: рдлреНрд▓реИрдЯ рд╕реЗ рд╕рдВрд░рдЪрд┐рдд рддрдХ рдЕрдиреБрднрд╛рдЧ рджреЗрдЦреЗрдВред

рдЪрд░рдг 5: рдЗрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ

bg.BackgroundGeolocation.onXxx тЖТ tl.Tracelet.onXxx рдвреВрдВрдвреЗрдВ рдФрд░ рдмрджрд▓реЗрдВ:

// Before bg.BackgroundGeolocation.onLocation((bg.Location location) { print('[location] $location'); }); // After tl.Tracelet.onLocation((tl.Location location) { print('[location] $location'); });

рдЪрд░рдг 6: рдЬреАрд╡рдирдЪрдХреНрд░ рдХреЙрд▓ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ

// Before bg.BackgroundGeolocation.ready(config).then((bg.State state) { if (!state.enabled) bg.BackgroundGeolocation.start(); }); // After tl.Tracelet.ready(config).then((tl.State state) { if (!state.enabled) tl.Tracelet.start(); });

рдЪрд░рдг 7: рд╣реЗрдбрд▓реЗрд╕ рдЯрд╛рд╕реНрдХ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ

// Before @pragma('vm:entry-point') void backgroundGeolocationHeadlessTask(bg.HeadlessEvent event) async { switch (event.name) { case bg.Event.LOCATION: bg.Location location = event.event; break; } } void main() { bg.BackgroundGeolocation.registerHeadlessTask(backgroundGeolocationHeadlessTask); runApp(MyApp()); } // After тАФ shorter function name is a bonus ЁЯШО @pragma('vm:entry-point') void headlessTask(tl.HeadlessEvent event) async { switch (event.name) { case 'location': tl.Location location = event.event as tl.Location; break; } } void main() { tl.Tracelet.registerHeadlessTask(headlessTask); runApp(MyApp()); }

ЁЯУж HTTP рдкреЗрд▓реЛрдб: рд╕реНрдиреЗрдХ_рдХреЗрд╕ тЖТ рдХреИрдорд▓рдХреЗрд╕

рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ, рдмреИрдХрдПрдВрдб рдбреЗрд╡! рдЖрдкрдХреЗ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреАрдЬрд╝ред

flutter_background_geolocation рдЗрд╕реЗ рднреЗрдЬрддрд╛ рд╣реИ:

{ "location": { "coords": { "latitude": 37.42, "longitude": -122.08, "accuracy": 12.3 }, "timestamp": "2026-03-06T10:30:00.000Z", "is_moving": true, "uuid": "abc-123", "odometer": 1234.5, "activity": { "type": "walking", "confidence": 85 }, "battery": { "level": 0.72, "is_charging": false }, "extras": { "custom_key": "custom_value" } } }

рдЯреНрд░реИрд╕рд▓реЗрдЯ рдЗрд╕реЗ рднреЗрдЬрддрд╛ рд╣реИ:

{ "location": { "coords": { "latitude": 37.42, "longitude": -122.08, "accuracy": 12.3 }, "timestamp": "2026-03-06T10:30:00.000Z", "isMoving": true, "uuid": "abc-123", "odometer": 1234.5, "isMock": false, "activity": { "type": "walking", "confidence": 85 }, "battery": { "level": 0.72, "isCharging": false }, "extras": { "custom_key": "custom_value" } } }

TL;DR: is_moving тЖТ isMoving, is_charging тЖТ isCharging, рд╕рд╛рде рд╣реА рдПрдХ рдирдпрд╛ isMock рдлрд╝реАрд▓реНрдбред рдЕрдкрдирд╛ JSON рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ рдФрд░ рдЖрдк рд╕реБрдирд╣рд░реЗ рд╣реИрдВред


ЁЯЪи рд╕рд╛рдорд╛рдиреНрдп рдЧреЛрдЪрд░

рдЗрдиреНрд╣реЗрдВ рдХрдард┐рди рддрд░реАрдХреЗ рд╕реЗ рди рд╕реАрдЦреЗрдВ - рд╣рдо рдкрд╣рд▓реЗ рд╣реА рд╕реАрдЦ рдЪреБрдХреЗ рд╣реИрдВ:

  • Config рдЕрдм рдорд┐рд╢реНрд░рд┐рдд рд╣реИ - рдлрд╝реАрд▓реНрдб рдХреЛ GeoConfig(...), AppConfig(...), HttpConfig(...), рдЖрджрд┐ рдореЗрдВ рд▓рдкреЗрдЯреЗрдВред
  • desiredAccuracy: -1 рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ - DesiredAccuracy.high рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ - рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдПрдирдо, рдЬрд╛рджреБрдИ рд╕рдВрдЦреНрдпрд╛ рдирд╣реАрдВ
  • logLevel: 5 рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ тАФ LogLevel.verbose рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
  • resetOdometer() рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрд╛ тАФ рдЕрдм рдпрд╣ setOdometer(0) рд╣реИ
  • notification: рд╕рдВрдкрддреНрддрд┐ рдЪрд▓реА рдЧрдИ - рдпрд╣ android: (AndroidConfig) рдХреЗ рдЕрдВрджрд░ foregroundService: ForegroundServiceConfig(...) рд╣реИ, app рдирд╣реАрдВ
  • scheduleUseAlarmManager AppConfig рдореЗрдВ рдирд╣реАрдВ рд╣реИ тАФ рдЕрдм рдпрд╣ android.scheduleUseAlarmManager рд╣реИ
  • preventSuspend AppConfig рдореЗрдВ рдирд╣реАрдВ рд╣реИ тАФ рдЕрдм рдпрд╣ ios.preventSuspend рд╣реИ
  • рдмреИрдХрдПрдВрдб is_moving рдХреЛ рдкрд╛рд░реНрд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ тАФ рдЕрдм рдпрд╣ isMoving рд╣реИ (рдХреИрдорд▓рдХреЗрд╕)
  • рдЕрднреА рднреА рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреБрдВрдЬреА рдХреЛрдб рдорд┐рд▓рд╛? тАФ рдЗрд╕реЗ рд╣рдЯрд╛ рджреЗрдВ тАФ рдЯреНрд░реЗрд╕рд▓реЗрдЯ рдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ
  • State рдЧреБрдг рдЕрд▓рдЧ рджрд┐рдЦрддреЗ рд╣реИрдВ тАФ рдПрдкреАрдЖрдИ рд╕рдВрджрд░реНрдн┬а рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ
  • HeadlessEvent.event рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐рдпрд╛рдБ тАФ рдЗрд╕реЗ рдХрд╛рд╕реНрдЯ рдХрд░реЗрдВ: event.event as tl.Location

ЁЯУЪ рдЕрдзрд┐рдХ рд╕рдВрд╕рд╛рдзрди


рдУрдкрди-рд╕реЛрд░реНрд╕ рдкрдХреНрд╖ рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдХреАрдЬрд╝ рд╣реИрдВ. ЁЯНк