๐ เดฎเตเดเตเดฐเตเดทเตป เดเตเดกเต: flutter_background_geolocation โ Tracelet
flutter_background_geolocation เดเดจเตเดจเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดเตเดฐเตเดธเตโเดฒเตเดฑเตเดฑเดฟเดฒเตเดเตเดเต เดฎเดพเดฑเตเดเดฏเดพเดฃเต? เดฎเดฟเดเดเตเด เดคเดฟเดฐเดเตเดเตเดเตเดชเตเดชเต! Tracelet เดเดจเตเดจเดคเต 1:1 เด
เดจเตเดฏเตเดเตเดฏเดฎเดพเดฏ API เดเดณเตเดณ เดเดฐเต เดชเตเตผเดฃเตเดฃเดฎเดพเดฏ เดเดชเตเดชเตบ เดธเตเดดเตโเดธเต (เด
เดชเตเดชเดพเดเตเดเต 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() เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเต. Tracelet เด
เดตเดฏเต เดฒเตเดเดฟเดเตเดเตฝ เดตเดฟเดญเดพเดเดเตเดเดณเดพเดฏเดฟ เดเตเดฐเดฎเตเดเดฐเดฟเดเตเดเตเดจเตเดจเต - เดตเดฒเดฟเดฏ เดเตเตบเดซเดฟเดเดฑเตเดทเดจเตเดเตพ เดตเดพเดฏเดฟเดเตเดเดพเดจเตเด เดชเดฐเดฟเดชเดพเดฒเดฟเดเตเดเดพเดจเตเด เดตเดณเดฐเต เดเดณเตเดชเตเดชเดฎเดพเดเตเดเตเดจเตเดจเต.
// 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โ ๐ เดเตปเดกเตเดฐเตเดฏเดฟเดกเต เดฎเดพเดคเตเดฐเด: เดซเตเตผเดเตเดฐเตเดฃเตเดเต เดธเตเดตเดจ เด เดฑเดฟเดฏเดฟเดชเตเดชเต, เดฒเตเดเตเดเตเดทเตป เด เดชเตโเดกเตเดฑเตเดฑเต เดเดเดตเตเดณเดเตพ, เด เดฒเดพเดฑเด เดฎเดพเดจเตเดเตผ, เดเดจเตเดเดพเดฒเดฟเด เดคเดจเตเดคเตเดฐเดเตเดเตพiosโIosConfigโ ๐ iOS-เดฎเดพเดคเตเดฐเด: เดชเตเดฐเดตเตผเดคเตเดคเดจ เดคเดฐเด, เดชเดถเตเดเดพเดคเตเดคเดฒ เดธเตเดทเดจเตเดเตพ, เดคเดพเตฝเดเตเดเดพเดฒเดฟเดเดฎเดพเดฏเดฟ เดจเดฟเตผเดคเตเดคเตเดจเตเดจเดคเต เดคเดเดฏเตเดmotionโMotionConfig- เดเดพเดฒเดนเดฐเดฃเดชเตเดชเตเดเตฝ เดจเดฟเตผเดคเตเดคเตเด, เดชเตเดฐเดตเตผเดคเตเดคเดจ เดคเดฟเดฐเดฟเดเตเดเดฑเดฟเดฏเตฝ, เดเดเตเดธเดฟเดฒเดฑเตเดฎเตเดฑเตเดฑเตผ เดฎเดพเดคเตเดฐเด เดฎเตเดกเตhttpโHttpConfigโ เดธเดฎเดจเตเดตเดฏ URL, เดคเดฒเดเตเดเตเดเตเดเตเดเตพ, เดฌเดพเดเตเดเดฟเดเดเต, เดฌเดพเดเตเดเตเดเดซเต, Wi-Fi-เดฎเดพเดคเตเดฐเด เดฎเตเดกเต เดตเตเดฃเตเดเตเด เดถเตเดฐเดฎเดฟเดเตเดเตเดloggerโLoggerConfig- เดฒเตเดเต เดฒเตเดตเตฝ, เดชเดฐเดฎเดพเดตเดงเดฟ เดฆเดฟเดตเดธเดเตเดเตพ, เดกเตเดฌเดเต เดถเดฌเตโเดฆเดเตเดเตพgeofenceโGeofenceConfigโ เดชเตเดฐเตเดเตเดธเดฟเดฎเดฟเดฑเตเดฑเดฟ เดฑเตเดกเดฟเดฏเดธเต, เดชเตเดฐเดพเดฐเดเดญ เดเตเดฐเดฟเดเตผ, เดจเตเดเตเดเตเดเตเดเต เดฎเตเดกเตpersistenceโPersistenceConfig- เดชเตเตผเดธเดฟเดธเตเดฑเตเดฑเต เดฎเตเดกเต, เดชเดฐเดฎเดพเดตเดงเดฟ เดฆเดฟเดตเดธเด/เดฐเตเดเดเตพ, เดเตเดเดชเตเดฒเตเดฑเตเดฑเตเดเตพauditโAuditConfigโ ๐ SHA-256 เดนเดพเดทเต เดเตเดฏเดฟเตป โ เดเดพเดฐเดฃเด เดเดพเดเดชเตผ เดชเตเดฐเตเดซเต เดชเตเดฐเดงเดพเดจเดฎเดพเดฃเตprivacyZoneโPrivacyZoneConfigโ ๐ เดชเตเดฐเตเดตเดธเดฟ เดธเตเตบ เดเดเตเดเดฟเตป โ GDPR-เตปเตเดฑเต เดเดฑเตเดฑ เดเดเตเดเดพเดคเดฟ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)Android-เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเด เดซเตเตฝเดกเตเดเตพ โ 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๐ Tracelet-exclusive GeoConfig เดซเตเตฝเดกเตเดเตพ:
geo.enableAdaptiveMode- เดเดเตเดฑเตเดฑเดฟเดตเดฟเดฑเตเดฑเดฟ + เดฌเดพเดฑเตเดฑเดฑเดฟ + เดธเตเดชเตเดกเต เด เดจเตเดธเดฐเดฟเดเตเดเต เดฆเตเดฐเด เดซเดฟเตฝเดเตเดเตผ เดชเตเดฐเตเดคเตเดคเดชเตเดชเตเดเตเดคเตเดคเตเดจเตเดจเตgeo.periodicLocationIntervalโ เดกเดฟเดซเตเตพเดเตเดเต 900เดธเต (15 เดฎเดฟเดจเดฟเดฑเตเดฑเต)geo.periodicDesiredAccuracyโ เดกเดฟเดซเตเตพเดเตเดเต.mediumgeo.filter(LocationFilter) - เดเตฝเดฎเดพเตป, เดฎเตเดเตเดเต เดกเดฟเดฑเตเดฑเดเตเดทเตป, เดเตเดคเตเดฏเดค เดคเตเดฐเตเดทเตเตพเดกเตเดเตพ
๐งน เดฒเตเดเตเดเตเดทเตป เดซเดฟเตฝเดเตเดเตผ โ LocationFilter (เดเตเดฐเตเดธเตโเดฒเตเดฑเตเดฑเต-เดเดเตโเดธเตโเดเตเดฒเตเดธเตเดตเต!)
- ๐
filter.policyโLocationFilterPolicy.adjust/.ignore/.discard - ๐
filter.useKalmanFilterโ 4-เดธเตเดฑเตเดฑเตเดฑเตเดฑเต เดเดเตเดธเตเดฑเตเดฑเตเตปเดกเดกเต เดเตฝเดฎเดพเตป เดซเดฟเตฝเดเตเดเตผ โ เดเดฐเต เดชเตเดฐเต เดชเตเดฒเต GPS เดถเดฌเตเดฆเด เดธเตเดเดฎเดฎเดพเดเตเดเตเด - ๐
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>)๐ Tracelet-exclusive MotionConfig เดซเตเตฝเดกเตเดเตพ:
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- เดเดฐเดฟเดเตเดเตฝ เดจเดฟเดถเตเดเดฒเดฎเดพเดฏเดฟ เดเดจเตเดคเตเดเตเดฏเตเดฏเดฃเด (เดเดจเตเดเดพเดฒเดฟเด เดชเดฐเดฟเดนเดพเดฐเดเตเดเตพ vs เดเดฟเดฏเตเดซเตเตปเดธเตเดเตพ)
เด
เดชเตเดเตเดท โ 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เดเดจเตเดจเดคเดฟเดจเต เดเตเดดเดฟเดฒเดฒเตเดฒ. เดเดคเต เดเตปเดกเตเดฐเตเดฏเดฟเดกเต เดฎเดพเดคเตเดฐเดฎเตเดณเตเดณ เดเดฐเต เดเดถเดฏเดฎเดพเดฃเต.
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)๐ Tracelet-exclusive HttpConfig เดซเตเตฝเดกเตเดเตพ:
http.disableAutoSyncOnCellularโ Wi-Fi-เดฎเดพเดคเตเดฐเด เดธเดฎเดจเตเดตเดฏเด โ เด เดกเดพเดฑเตเดฑ เดชเตเดฒเดพเตป เดธเดเดฐเดเตเดทเดฟเดเตเดเตเด!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.hashAlgorithmโ เดจเตเดเตเดเตเดเตเดฐเดพเตปเดธเต1เดฒเตเดฑเตเดฑเต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)- เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเตเดเตเดเตเดเดฟเดฏ เดเดฐเต เดธเตเตบ เดเตเตผเดเตเดเตเด: เดเดดเดฟเดตเดพเดเตเดเตเด / เดคเดฐเดเดคเดพเดดเตเดคเตเดคเตเด / เดเดตเตปเตเดฑเต-เดฎเดพเดคเตเดฐเด- เดจเตเดเตเดฐเดพเตปเดธเต0เดฒเตเดฑเตเดฑเต - เดฌเตพเดเตเดเต เดเดกเต
removePrivacyZone(id)โ เดเดกเตปเตเดฑเดฟเดซเดฏเตผ เดตเดดเดฟ เดจเตเดเตเดเด เดเตเดฏเตเดฏเตเดremovePrivacyZones()โ เดเดฒเตเดฒเดพเด เดจเตเดเตเดเด เดเตเดฏเตเดฏเตเดgetPrivacyZones()- เดเดฒเตเดฒเดพ เดธเตเดฃเตเดเดณเตเด เดฒเดฟเดธเตเดฑเตเดฑเตเดเตเดฏเตเดฏเตเด
๐ เดเตเดฐเตเดฏเตโเดธเตโเดฒเตเดฑเตเดฑเต-เดเดเตโเดธเตโเดเตเดฒเตเดธเตเดตเต เดซเตเดเตเดเดฑเตเดเตพ
flutter_background_geolocation-เตฝ เดฒเดญเตเดฏเดฎเดฒเตเดฒเดพเดคเตเดค Tracelet-เตฝ เดจเดฟเดเตเดเตพเดเตเดเต เดฒเดญเดฟเดเตเดเตเดจเตเดจ เดธเดตเดฟเดถเตเดทเดคเดเตพ:
- เดเดจเตเดเดพเดฒเดฟเด เดฎเตเดกเต โ
Tracelet.startPeriodic()โ Work Manager เดตเดดเดฟ เดเดฐเต N เดฎเดฟเดจเดฟเดฑเตเดฑเดฟเดฒเตเด GPS เดชเดฐเดฟเดนเดฐเดฟเดเตเดเตเดจเตเดจเต. เดซเตเตผเดเตเดฐเตเดฃเตเดเต เดธเตผเดตเตเดธเต เดเดฒเตเดฒ, เด เดฑเดฟเดฏเดฟเดชเตเดชเดฟเดฒเตเดฒ, เดฌเดพเดฑเตเดฑเดฑเดฟ เดกเตเดฐเตเดฏเดฟเดจเดฟเดฒเตเดฒ. - เดเตฝเดฎเดพเตป เดซเดฟเตฝเดเตเดเตผ โ
geo.filter.useKalmanFilter: trueโ 4-state EKF GPS เดถเดฌเตเดฆเดคเตเดคเต เดธเตเดเดฎเดฎเดพเดเตเดเตเดจเตเดจเต. เดจเดฟเดเตเดเดณเตเดเต เดเตเดฐเดพเดเตเดเตเดเตพ เดชเตเดฐเตเดซเดทเดฃเดฒเดพเดฏเดฟ เดเดพเดฃเดชเตเดชเตเดเตเดจเตเดจเต, เดฒเดนเดฐเดฟเดฏเดฟเดฒเดฒเตเดฒ. - เด
เดกเดพเดชเตเดฑเตเดฑเตเดตเต เดธเดพเดเดชเตเดฒเดฟเดเดเต โ
geo.enableAdaptiveMode: trueโ เดเดเตเดฑเตเดฑเดฟเดตเดฟเดฑเตเดฑเดฟ + เดฌเดพเดฑเตเดฑเดฑเดฟ + เดธเตเดชเตเดกเต เด เดเดฟเดธเตเดฅเดพเดจเดฎเดพเดเตเดเดฟ เดฆเตเดฐเด เดซเดฟเตฝเดเตเดเตผ เดธเตเดตเดฏเดฎเตเดต เดเตเดฐเดฎเตเดเดฐเดฟเดเตเดเตเดจเตเดจเต. - เดฎเตเดเตเดเต เดกเดฟเดฑเตเดฑเดเตเดทเตป (3-เดฒเตเดตเตฝ) โ
geo.filter.mockDetectionLevelโ เดธเดพเดฑเตเดฑเดฒเตเดฑเตเดฑเต เดเตเดฃเตเดเต, เดคเดคเตเดธเดฎเดฏ เดกเตเดฐเดฟเดซเตเดฑเตเดฑเต, เดเตเดเดธเตเดฑเตเดฑเดพเดฎเตเดชเต เดตเดฟเดถเดเดฒเดจเด เดเดจเตเดจเดฟเดต เดตเดดเดฟ GPS เดธเตเดชเตเดซเดฟเดเดเต เดชเดฟเดเดฟเดเตเดเตเดจเตเดจเต. - เดธเตเดตเดเดพเดฐเตเดฏเดคเดพ เดฎเตเดเดฒเดเตพ -
addPrivacyZone()- เดธเตเตปเดธเดฟเดฑเตเดฑเตเดตเต เดเดฐเดฟเดฏเดเดณเดฟเตฝ เดเตเดฐเดพเดเตเดเดฟเดเดเต เดเดดเดฟเดตเดพเดเตเดเตเด, เดคเดฐเดเดคเดพเดดเตเดคเตเดคเตเด เด เดฒเตเดฒเตเดเตเดเดฟเตฝ เดชเดฐเดฟเดฎเดฟเดคเดชเตเดชเตเดเตเดคเตเดคเตเด. เด เดจเตเดคเตผเดจเดฟเตผเดฎเตเดฎเดฟเดค GDPR เดชเดพเดฒเดฟเดเตเดเตฝ. - เดเดกเดฟเดฑเตเดฑเต เดเตเดฐเดฏเตฝ โ
verifyAuditTrail()โ SHA-256 เดนเดพเดทเต เดเตเดฏเดฟเตป. เดจเดฟเดเตเดเดณเตเดเต เดฒเตเดเตเดเตเดทเตป เดกเดพเดฑเตเดฑเดฏเดฟเตฝ เดเตเดคเตเดฐเดฟเดฎเด เดจเดเดจเตเดจเดฟเดเตเดเดฟเดฒเตเดฒเตเดจเตเดจเต เดคเตเดณเดฟเดฏเดฟเดเตเดเตเด. - เดเดฐเตเดเตเดฏ เดชเดฐเดฟเดถเตเดงเดจ โ
getHealth()โ เดเดฐเต เดเตเตพ เดเดฒเตเดฒเดพเด เดจเดฟเดเตเดเดณเตเดเต เดชเดฑเดฏเตเดจเตเดจเต: เด เดจเตเดฎเดคเดฟเดเตพ, GPS, เดฌเดพเดฑเตเดฑเดฑเดฟ, OEM เดชเตเดฐเดถเตเดจเดเตเดเตพ, 12 เดธเตเดตเดฏเดฎเตเดตเดฏเตเดณเตเดณ เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเตเดเตพ. - OEM เด
เดจเตเดฏเตเดเตเดฏเดค -
getSettingsHealth()- Huawei, Xiaomi, Samsung, OPPO เดเดจเตเดจเดฟเดตเดฏเดฟเตฝ เดเดเตเดฐเดฎเดฃเดพเดคเตเดฎเด เดฌเดพเดฑเตเดฑเดฑเดฟ เดเดฟเดฒเตเดฒเดฑเตเดเตพ เดเดฃเตเดเตเดคเตเดคเตเดเดฏเตเด เด เดต เดเดเตเดเดจเต เดชเดฐเดฟเดนเดฐเดฟเดเตเดเดพเดฎเตเดจเตเดจเต เดเดชเดฏเตเดเตเดคเดพเดเตเดเดณเตเดเต เดชเดฑเดฏเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเต. - เดฏเดพเดคเตเดฐ เดเดฃเตเดเตเดคเตเดคเตฝ โ
onTrip(cb)โ เดฆเตเดฐเด, เดฆเตเตผเดเตเดฏเด, เดตเดดเดฟ เดชเตเดฏเดฟเตปเตเดฑเตเดเตพ, เดถเดฐเดพเดถเดฐเดฟ เดตเตเดเดค เดเดจเตเดจเดฟเดตเดฏเตเดณเตเดณ เดฏเดพเดคเตเดฐเดเตพ เดธเตเดตเดฏเดฎเตเดต เดเดฃเตเดเตเดคเตเดคเตเดจเตเดจเต. - เดชเตเดณเดฟเดเตเตบ เดเดฟเดฏเตเดซเตเตปเดธเตเดเตพ โ
Geofence(vertices: [...])โ เดธเตผเดเตเดเดฟเดณเตเดเตพ เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ. เดฑเต-เดเดพเดธเตเดฑเตเดฑเดฟเดเดเต เดชเตเดณเดฟเดเตเตบ เดชเดฟเดจเตเดคเตเดฃ เดเดชเดฏเตเดเดฟเดเตเดเต เดเดคเต เดเดเตเดคเดฟเดฏเตเด เดตเดฐเดฏเตเดเตเดเตเด. - เดเดฟเดฏเตเดซเตเตปเดธเต เดจเตเดเตเดเตเดเตเดเต โ
geofence.geofenceModeKnockOutโ เดเดฆเตเดฏ เดเดเตเดธเดฟเดฑเตเดฑเดฟเดจเต เดถเตเดทเด เดเดฟเดฏเตเดซเตเตปเดธเต เดธเตเดตเดฏเดฎเตเดต เดจเตเดเตเดเดเดเตเดฏเตเดฏเตเดจเตเดจเต. เดเดฑเตเดฑเดคเตเดคเดตเดฃ เด เดฒเตเตผเดเตเดเตเดเตพเดเตเดเต เด เดจเตเดฏเตเดเตเดฏเดฎเดพเดฃเต. - เดเดฟเดฏเตเดซเตเตปเดธเต เดฒเตเดเตเดเตเด
เดชเตเดชเต โ
getGeofence(id)โ เด เดตเดฏเตเดฒเตเดฒเดพเด เดฒเตเดกเต เดเตเดฏเตเดฏเดพเดคเต เดเดฐเตเดฑเตเดฑ เดเดฟเดฏเตเดซเตเตปเดธเต เด เดจเตเดตเตเดทเดฟเดเตเดเตเด. - เด
เดจเตเดฎเดคเดฟ เดธเดนเดพเดฏเดฟเดเตพ โ
openAppSettings(),openBatterySettings()โ เดธเดฟเดธเตเดฑเตเดฑเด เดเตเดฐเดฎเตเดเดฐเดฃเดเตเดเดณเดฟเดฒเตเดเตเดเต เดจเตเดฐเดฟเดเตเดเต เดเดดเดคเตเดคเดฟเดฒเตเดณเตเดณ เดฒเดฟเดเตเดเตเดเตพ. - เดธเตเดฎเดพเตผเดเตเดเต เดตเตเดฃเตเดเตเด เดถเตเดฐเดฎเดฟเดเตเดเตเดจเตเดจเต โ
http.maxRetries+ backoff โ เดตเดฟเดฑเดฏเดฒเตเดเตเดฏเตเดณเตเดณ เดเดเตโเดธเตโเดชเตเดฃเตปเดทเตเดฏเตฝ เดฌเดพเดเตเดเตเดเดซเต. เดจเดฟเดเตเดเดณเตเดเต เดธเตเตผเดตเตผ เดจเดฟเดเตเดเตพเดเตเดเต เดจเดจเตเดฆเดฟ เดชเดฑเดฏเตเด. - Wi-Fi-เดฎเดพเดคเตเดฐเด เดธเดฎเดจเตเดตเดฏเด โ
http.disableAutoSyncOnCellularโ เดฎเตเดฌเตเตฝ เดกเดพเดฑเตเดฑ เดธเดเดฐเดเตเดทเดฟเดเตเดเตเด, เดตเตเดซเตเดฏเดฟเตฝ เดฎเดพเดคเตเดฐเด เดธเดฎเดจเตเดตเดฏเดฟเดชเตเดชเดฟเดเตเดเตเด. - เดเดเตเดธเดฟเดฒเดฑเตเดฎเตเดฑเตเดฑเตผ เดฎเดพเดคเตเดฐเดฎเตเดณเตเดณ เดเดฒเดจเด โ
motion.shakeThresholdโ เดชเตเดฐเดตเตผเดคเตเดคเดจ เดคเดฟเดฐเดฟเดเตเดเดฑเดฟเดฏเตฝ เด เดจเตเดฎเดคเดฟเดฏเดฟเดฒเตเดฒเดพเดคเต เดเดฒเดจเด เดเดฃเตเดเตเดคเตเดคเตเด. เดชเตเดเตเดฏเด เด เดจเตเดฎเดคเดฟ เดชเตเดชเตเดชเตเด เดชเตเดชเต. - เดตเตเดฌเต เดชเดฟเดจเตเดคเตเดฃ โ เด เดคเต เดกเดพเตผเดเตเดเต เดเดชเดฟเด เดซเตเตผเดเตเดฐเตเดฃเตเดเต (เดเตป-เดเดพเดฌเต) เดเตเดฐเดพเดเตเดเดฟเดเดเดฟเดจเดพเดฏเดฟ เดฌเตเดฐเตเดธเดฑเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเต. เดชเดถเตเดเดพเดคเตเดคเดฒ เดเตเดฐเดพเดเตเดเดฟเดเดเตเด เดจเดฟเดฐเดตเดงเดฟ เดชเตเดฐเดพเดฆเตเดถเดฟเด เดธเดตเดฟเดถเตเดทเดคเดเดณเตเด เดฒเดญเตเดฏเดฎเดฒเตเดฒ - เดตเตเดฌเต เดชเดฟเดจเตเดคเตเดฃ เดเดพเดฃเตเด.
๐คท เดธเดตเดฟเดถเตเดทเดคเดเตพ เดเดคเตเดตเดฐเต Tracelet-เตฝ เดเดฒเตเดฒ
เดฎเตเดฎเตเดชเดคเตเดคเต เดชเตเดฒเดเดฟเดจเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดเตเดฑเดเตเดเต เดธเดตเดฟเดถเตเดทเดคเดเตพ เดเดคเตเดตเดฐเต เดฒเดญเตเดฏเดฎเดฒเตเดฒ. เด เดต เดเดจเตเดจเตเดเดฟเตฝ เดเดธเตเดคเตเดฐเดฃเด เดเตเดฏเตเดคเดคเต เด เดฒเตเดฒเตเดเตเดเดฟเตฝ เดเดณเตเดชเตเดชเดคเตเดคเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเดคเต เดเดฃเต:
- เดธเตเตผเดตเตผ เดธเตเดกเต เดเดฟเดฏเตเดซเตเตปเดธเต เดธเดฎเดจเตเดตเดฏเด โ เดเดธเตเดคเตเดฐเดฃเด เดเตเดฏเตโเดคเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต. เดเดชเตเดชเตเตพ, เดจเดฟเดเตเดเดณเตเดเต API-เดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดเตเดคเตเดคเต
addGeofences()-เดฒเตเดเตเดเต เดตเดฟเดณเดฟเดเตเดเตเด. locationTemplateเดเตปเตเดฑเตผเดชเตเดณเตเดทเตป โ เดชเตเดฐเดเตเดฏเดพเดชเดฟเดเตเดเต, เดตเดฏเตผ เดเตเดฏเตเดคเดฟเดเตเดเดฟเดฒเตเดฒ.onLocationเดเตเตพเดฌเดพเดเตเดเดฟเตฝ เดชเดฐเดฟเดตเตผเดคเตเดคเดจเด เดเตเดฏเตเดฏเตเด เด เดฒเตเดฒเตเดเตเดเดฟเตฝhttp.extrasเดเดชเดฏเตเดเดฟเดเตเดเตเด.- JWT เดเดเตเดเต-เดฑเดฟเดซเตเดฐเดทเต โ เดชเตเดฐเดเตเดฏเดพเดชเดฟเดเตเดเต, เดตเดฏเตผ เดเตเดฏเตโเดคเดฟเดเตเดเดฟเดฒเตเดฒ.
http.headersเดธเตเดตเดฎเตเดงเดฏเดพ เดธเดเตเดเดฎเดพเดเตเดเตเด;onAuthorizationเดเตเตพเดเตเดเตเด. - เดกเตเดฎเต เดธเตเตผเดตเตผ - เดเดธเตเดคเตเดฐเดฃเด เดเตเดฏเตเดคเดฟเดเตเดเดฟเดฒเตเดฒ. เดจเดฟเดเตเดเดณเตเดเต เดธเตเดตเดจเตเดคเด เดฌเดพเดเตเดเตเตปเดกเต เดเดชเดฏเตเดเดฟเดเตเดเตเด - เดเดคเตเดเตเดเดฟเดฒเตเด REST เดเตปเดกเตโเดชเตเดฏเดฟเตปเตเดฑเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเต.
- เดฒเตเดธเตปเดธเต เดเต เดธเดเตเดตเดฎเดพเดเตเดเตฝ โ ๐ เดเดตเดถเตเดฏเดฎเดฟเดฒเตเดฒ! เดเดคเต เดเดชเตเดชเตบ เดธเตเดดเตโเดธเดพเดฃเต.
๐ ๏ธ เดเดเตเดเด เดเดเตเดเดฎเดพเดฏเตเดณเตเดณ เดฎเตเดเตเดฐเตเดทเตป
เดเดเตเดเด 1: pubspec.yaml เด
เดชเตโเดกเตเดฑเตเดฑเต เดเตเดฏเตเดฏเตเด
dependencies:
tracelet: ^3.6.14
flutter_background_geolocation เดเด เดเดคเตเดเตเดเดฟเดฒเตเด เดฒเตเดธเตปเดธเต เดเต เดชเดพเดเตเดเตเดเตเดเดณเตเด เดเดฒเตเดฒเดพเดคเดพเดเตเดเตเด. เดจเดฟเดเตเดเตพเดเตเดเต เด
เดต เดเดจเดฟ เดเดตเดถเตเดฏเดฎเดฟเดฒเตเดฒ!
เดเดเตเดเด 2: Android เดธเดเตเดเตเดเดฐเดฃเด
INSTALL-ANDROID.mdย เดเดพเดฃเตเด. เดชเตเดฐเดงเดพเดจ เดตเตเดฏเดคเตเดฏเดพเดธเดเตเดเตพ:
- เดเดชเตโเดทเดฃเตฝ เดกเดฟเดชเตปเดกเตปเดธเดฟเดเตพ โ ๐ เดจเดฟเดเตเดเตพเดเตเดเต เดเดฏเตผเดจเตเดจ เดเตเดคเตเดฏเดคเดฏเตเดณเตเดณ เดเดฟเดเดเดเดธเต เดเตเดฐเดพเดเตเดเดฟเดเดเต เดตเตเดฃเดฎเตเดเตเดเดฟเตฝ
play-services-locationเดเดจเตเดจเต เดจเดฟเดเตเดเดณเตเดเตbuild.gradle-เดฒเตเดเตเดเต เดตเตเดฏเดเตเดคเดฎเดพเดฏเดฟ เดเตเตผเดเตเดเดพเตป เดเตเดฐเตเดธเตโเดฒเตเดฑเตเดฑเต 2.0.0+ เดเดตเดถเตเดฏเดชเตเดชเตเดเตเดจเตเดจเต. เด เดฒเตเดฒเดพเดคเตเดคเดชเดเตเดทเด, เด เดคเต เดธเดพเดงเดพเดฐเดฃ AOSP GPS-เดฒเตเดเตเดเต เดฎเดเดเตเดเตเดจเตเดจเต. - เดฒเตเดธเตปเดธเต เดเต เดเดฒเตเดฒ โ
AndroidManifest.xmlเตฝ เดจเดฟเดจเตเดจเต เดเดคเตเดเตเดเดฟเดฒเตเดBackgroundGeolocation.orgเดเตเตบเดซเดฟเดเตเดทเตป เดจเตเดเตเดเด เดเตเดฏเตเดฏเตเด - เด เดจเตเดฎเดคเดฟเดเตพ โ Gradle เดตเดดเดฟ เดธเตเดตเดฏเดฎเตเดต เดฒเดฏเดฟเดชเตเดชเดฟเดเตเดเต, เดจเดฟเดเตเดเตพ เด เดต เดชเตเดฐเดเตเดฏเดพเดชเดฟเดเตเดเดฐเตเดคเต
minSdkVersionโ API 21+ (เดฎเตเดฎเตเดชเดคเตเดคเต เดชเตเดฒเต)- เดเตเดเตเดฒเดฟเตป โ เดเดฒเตเดฒเดพ เดจเตเดฑเตเดฑเตเดตเต เดเตเดกเตเด เดเตเดเตเดฒเดฟเตป เดเดฃเต
เดเดเตเดเด 3: iOS เดธเดเตเดเตเดเดฐเดฃเด
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เดเดชเดฏเตเดเดฟเดเตเดเตเด โ เดเตเดชเตเดชเต เดเตเดฏเตเดค enums, เดฎเดพเดเดฟเดเต เดจเดฎเตเดชเดฑเตเดเดณเดฒเตเดฒlogLevel: 5เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเดฟเดฒเตเดฒ โLogLevel.verboseเดเดชเดฏเตเดเดฟเดเตเดเตเดresetOdometer()เดเดฃเตเดเตเดคเตเดคเดพเดจเดพเดฏเดฟเดฒเตเดฒ โ เดเดคเต เดเดชเตเดชเตเตพsetOdometer(0)เดเดฃเตnotification:เดชเตเดฐเตเดชเตเดชเตผเดเตเดเดฟ เดชเตเดฏเดฟ โ เดเดคเตforegroundService: ForegroundServiceConfig(...)เดเดณเตเดณเดฟเตฝandroid:(AndroidConfig),appเด เดฒเตเดฒscheduleUseAlarmManagerAppConfig-เตฝ เดเดฒเตเดฒ โ เดเดคเต เดเดชเตเดชเตเตพandroid.scheduleUseAlarmManagerเดเดฃเตpreventSuspendAppConfig-เตฝ เดเดฒเตเดฒ โ เดเดคเต เดเดชเตเดชเตเตพios.preventSuspendเดเดฃเต- เดฌเดพเดเตเดเตเตปเดกเดฟเดจเต
is_movingเดชเดพเดดเตโเดธเต เดเตเดฏเตเดฏเดพเตป เดเดดเดฟเดฏเดฟเดฒเตเดฒ โ เดเดคเต เดเดชเตเดชเตเตพisMovingเดเดฃเต (camelCase) - เดเดชเตเดชเตเดดเตเด เดฒเตเดธเตปเดธเต เดเต เดเตเดกเต เดเดฃเตเดเต? - เด เดคเต เดเดฒเตเดฒเดพเดคเดพเดเตเดเตเด - เดเตเดฐเตเดธเตโเดฒเตเดฑเตเดฑเดฟเดจเต เดเดฐเตเดฃเตเดฃเด เดเดตเดถเตเดฏเดฎเดฟเดฒเตเดฒ
Stateเดชเตเดฐเตเดชเตเดชเตผเดเตเดเดฟเดเตพ เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฏเดฟ เดเดพเดฃเดชเตเดชเตเดเตเดจเตเดจเต โ API เดฑเดซเดฑเตปเดธเตย เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเตเดHeadlessEvent.eventเดคเดฐเด เดชเดฟเดถเดเตเดเตพ โ เดเดคเต เดเดพเดธเตเดฑเตเดฑเต เดเตเดฏเตเดฏเตเด:event.event as tl.Location
๐ เดเตเดเตเดคเตฝ เดตเดฟเดญเดตเดเตเดเตพ
- API เดฑเดซเดฑเตปเดธเตย โ เดเดฐเต เดฐเตเดคเดฟเดฏเตเด เดเดฐเต เดชเดพเดฐเดพเดฎเตเดฑเตเดฑเดฑเตเด
- เดเตเตบเดซเดฟเดเดฑเตเดทเตป เดเตเดกเตย โ เดเดฒเตเดฒเดพ เดเตเตบเดซเดฟเดเดฑเตเดทเตป เดเดชเตเดทเดจเตเดเดณเดฟเดฒเตเดเตเดเตเด เดเดดเดคเตเดคเดฟเตฝ เดฎเตเดเตเดเตเด
- เดชเดถเตเดเดพเดคเตเดคเดฒ เดเตเดฐเดพเดเตเดเดฟเดเดเตย โ เดเดชเตเดชเต เดเตเดฒเตเดฒเตเดจเตเดจเดคเดฟเดจเต เด เดคเดฟเดเตเดตเดฟเดเตเดเตเดจเตเดจเดคเตเดเตเดเดจเต
- Android เดเตปเดธเตเดฑเตเดฑเดพเดณเตเดทเตปย โ Android-เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเด เดธเดเตเดเตเดเดฐเดฃเด
- iOS เดเตปเดธเตเดฑเตเดฑเดพเดณเตเดทเตปย โ iOS-เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเด เดธเดเตเดเตเดเดฐเดฃเด
- GitHub เดชเตเดฐเดถเตเดจเดเตเดเตพย โ เดเตเดเตเดเตเดเดฟเดฏเต? เดเดเตเดเตพเดเตเดเต เดจเดฟเดจเตเดจเต เดเดฟเดเตเดเดฟ
เดเดชเตเดชเตบ เดธเตเดดเตโเดธเต เดญเดพเดเดคเตเดคเตเดเตเดเต เดธเตเดตเดพเดเดคเด. เดเดเตเดเตพเดเตเดเต เดเตเดเตเดเดฟเดเดณเตเดฃเตเดเต. ๐ช