ЁЯЪА рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдЧрд╛рдЗрдб: 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.scheduleUseAlarmManageriOS-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝реАрд▓реНрдб тЖТ 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- рдбрд┐рдлрд╝реЙрд▓реНрдЯ.mediumgeo.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.enabledHTTP рд╕рд┐рдВрдХ тЖТ 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- рдбрд┐рдлрд╝реЙрд▓реНрдЯ 1000mshttp.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рдирд╣реАрдВscheduleUseAlarmManagerAppConfig рдореЗрдВ рдирд╣реАрдВ рд╣реИ тАФ рдЕрдм рдпрд╣android.scheduleUseAlarmManagerрд╣реИpreventSuspendAppConfig рдореЗрдВ рдирд╣реАрдВ рд╣реИ тАФ рдЕрдм рдпрд╣ios.preventSuspendрд╣реИ- рдмреИрдХрдПрдВрдб
is_movingрдХреЛ рдкрд╛рд░реНрд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ тАФ рдЕрдм рдпрд╣isMovingрд╣реИ (рдХреИрдорд▓рдХреЗрд╕) - рдЕрднреА рднреА рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреБрдВрдЬреА рдХреЛрдб рдорд┐рд▓рд╛? тАФ рдЗрд╕реЗ рд╣рдЯрд╛ рджреЗрдВ тАФ рдЯреНрд░реЗрд╕рд▓реЗрдЯ рдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ
StateрдЧреБрдг рдЕрд▓рдЧ рджрд┐рдЦрддреЗ рд╣реИрдВ тАФ рдПрдкреАрдЖрдИ рд╕рдВрджрд░реНрдн┬а рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВHeadlessEvent.eventрдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐рдпрд╛рдБ тАФ рдЗрд╕реЗ рдХрд╛рд╕реНрдЯ рдХрд░реЗрдВ:event.event as tl.Location
ЁЯУЪ рдЕрдзрд┐рдХ рд╕рдВрд╕рд╛рдзрди
- рдПрдкреАрдЖрдИ рд╕рдВрджрд░реНрдн┬а - рд╣рд░ рд╡рд┐рдзрд┐, рд╣рд░ рдкреИрд░рд╛рдореАрдЯрд░
- рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЧрд╛рдЗрдб┬а - рд╕рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рдЧрд╣рд░рд╛рдИ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ
- рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдЯреНрд░реИрдХрд┐рдВрдЧ┬а - рдпрд╣ рдРрдк рдХрд┐рд▓ рд╕реЗ рдХреИрд╕реЗ рдмрдЪрддрд╛ рд╣реИ
- рдПрдВрдбреНрд░реЙрдЗрдб рдЗрдВрд╕реНрдЯрд╛рд▓реЗрд╢рди┬а - рдПрдВрдбреНрд░реЙрдЗрдб-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реЗрдЯрдЕрдк
- рдЖрдИрдУрдПрд╕ рдЗрдВрд╕реНрдЯрд╛рд▓реЗрд╢рди┬а - рдЖрдИрдУрдПрд╕-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реЗрдЯрдЕрдк
- рдЧрд┐рдЯрд╣рдм рдореБрджреНрджреЗ┬а тАФ рдЕрдЯрдХ рдЧрдП? рд╣рдордиреЗ рддреБрдореНрд╣реЗрдВ рдкрд╛ рд▓рд┐рдпрд╛ рд╣реИ
рдУрдкрди-рд╕реЛрд░реНрд╕ рдкрдХреНрд╖ рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдХреАрдЬрд╝ рд╣реИрдВ. ЁЯНк