🚀 இடம்பெயர்வு வழிகாட்டி: flutter_background_geolocation → Tracelet
flutter_background_geolocation இலிருந்து டிரேஸ்லெட்க்கு மாறுகிறீர்களா? சிறந்த தேர்வு! ட்ரேஸ்லெட் என்பது 1:1 இணக்கமான API உடன் முழுமையான திறந்த மூல (Apache 2.0) மாற்றாகும் - மேலும் Kalman வடிகட்டுதல், போலி கண்டறிதல், தனியுரிமை மண்டலங்கள் மற்றும் பல போன்ற கூடுதல் அம்சங்கள். உரிம விசைகள் இல்லை, தனியுரிம 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-மட்டும்: முன்புற சேவை அறிவிப்பு, இருப்பிட புதுப்பிப்பு இடைவெளிகள், AlarmManager, காலமுறை உத்திகள்ios→IosConfig— 🆕 iOS-மட்டும்: செயல்பாட்டு வகை, பின்புல அமர்வுகள், இடைநிறுத்தத்தைத் தடுmotion→MotionConfig— காலக்கெடுவை நிறுத்து, செயல்பாடு அறிதல், முடுக்கமானி மட்டும் பயன்முறைhttp→HttpConfig— ஒத்திசைவு URL, தலைப்புகள், பேச்சிங், பேக்ஆஃப், வைஃபை-மட்டும் முறை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🆕 ட்ரேஸ்லெட் பிரத்தியேக ஜியோ கான்ஃபிக் புலங்கள்:
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>)🆕 ட்ரேஸ்லெட் பிரத்தியேக 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— ஒருமுறை நிலையாக என்ன செய்ய வேண்டும் (அவ்வப்போது திருத்தங்கள் மற்றும் புவிவெப்பங்கள்)
விண்ணப்பம் → 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| நோட்ரான்ஸ்2லேட் → நோட்ரான்ஸ்3லேட்
🔔 முன்புற சேவை அறிவிப்பு → AndroidConfig.foregroundService
முக்கியம் (2.x.x மாற்றம்): முன்புற சேவை அறிவிப்பு இப்போது
appஇன் கீழ் அல்ல,android.foregroundService(ஒருAndroidConfig) கீழ் கட்டமைக்கப்பட்டுள்ளது. இது ஆண்ட்ராய்டு மட்டும் கான்செப்ட்.
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— Wi-Fi-மட்டும் ஒத்திசைவு — அந்தத் தரவுத் திட்டத்தைச் சேமிக்கவும்!http.maxRetries- இயல்புநிலை 10, அதிவேக பேக்ஆஃப் + நடுக்கம்http.retryBackoffBase- இயல்புநிலை 1000mshttp.retryBackoffCap— இயல்புநிலை 300000ms (5 நிமிடம்)
ஜியோஃபென்சிங் → நாட்ரான்ஸ்0லேட்
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— NOTTRANS1LATEaudit.includeExtrasInHash— இயல்புநிலையாகfalse
🛡️ தனியுரிமை மண்டலங்கள் → PrivacyZoneConfig (டிரேஸ்லெட் பிரத்தியேக)
privacyZone.enabled— இயல்புநிலையாகfalse. தனியுரிமை மண்டல இயந்திரத்தை இயக்கு.
🎯 துல்லியம் மாறிலிகள் — தட்டச்சு செய்யப்பட்ட Enums!
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)— ஒரு குறிப்பிட்ட இருப்பிட பதிவுக்கான கிரிப்டோகிராஃபிக் ஆதாரம்
🛡️ தனியுரிமை மண்டலங்கள் (டிரேஸ்லெட் மட்டும் - GDPR நன்றி கூறுகிறது)
addPrivacyZone(zone)- செயலுடன் ஒரு மண்டலத்தைச் சேர்க்கவும்: விலக்கு / இழிவு / நிகழ்வு மட்டும்addPrivacyZones(list)— மொத்தமாக சேர்removePrivacyZone(id)— அடையாளங்காட்டி மூலம் அகற்றுremovePrivacyZones()— அனைத்தையும் அகற்றுgetPrivacyZones()— அனைத்து மண்டலங்களையும் பட்டியலிடுங்கள்
🎁 ட்ரேஸ்லெட்-பிரத்தியேக அம்சங்கள்
flutter_background_geolocation இல் கிடைக்காத ட்ரேஸ்லெட்டுடன் நீங்கள் பெறும் அம்சங்கள்:
- காலமுறை பயன்முறை —
Tracelet.startPeriodic()— ஒர்க்மேனேஜர் மூலம் ஒவ்வொரு N நிமிடங்களுக்கும் ஜி.பி.எஸ். முன்புற சேவை இல்லை, அறிவிப்பு இல்லை, பேட்டரி வடிகால் இல்லை. - Kalman filter —
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— மொபைல் டேட்டாவைச் சேமிக்கவும், Wi-Fi இல் மட்டும் ஒத்திசைக்கவும். - முடுக்கமானி மட்டுமே இயக்கம் —
motion.shakeThreshold— செயல்பாட்டு அங்கீகார அனுமதியின்றி இயக்கத்தைக் கண்டறியவும். பூஜ்ஜிய அனுமதி பாப்அப். - இணைய ஆதரவு — அதே டார்ட் ஏபிஐ முன்புற (இன்-டேப்) கண்காணிப்பிற்காக உலாவியில் இயங்குகிறது. பின்னணி கண்காணிப்பு மற்றும் பல சொந்த அம்சங்கள் கிடைக்கவில்லை - இணைய ஆதரவு ஐப் பார்க்கவும்.
🤷 அம்சங்கள் இன்னும் ட்ரேஸ்லெட்டில் இல்லை
முந்தைய செருகுநிரலில் இருந்து சில அம்சங்கள் இன்னும் கிடைக்கவில்லை. அவை திட்டமிடப்பட்டவை அல்லது எளிதாகச் செயல்படுகின்றன:
- சர்வர் பக்க ஜியோஃபென்ஸ் ஒத்திசைவு — திட்டமிடப்பட்டது. இப்போதைக்கு, உங்கள் API இலிருந்து பெற்று
addGeofences()ஐ அழைக்கவும். locationTemplateஇடைச்செருகல் — அறிவிக்கப்பட்டது, வயர்டு அல்ல.onLocationதிரும்ப அழைப்பில் மாற்றவும் அல்லதுhttp.extrasஐப் பயன்படுத்தவும்.- JWT தானாக புதுப்பித்தல் — அறிவிக்கப்பட்டது, வயர்டு அல்ல.
http.headersஐ கைமுறையாக அமைக்கவும்;onAuthorizationஐக் கேளுங்கள். - டெமோ சர்வர் - திட்டமிடப்படவில்லை. உங்கள் சொந்த பின்தளத்தைப் பயன்படுத்தவும் - எந்த ரெஸ்ட் எண்ட்பாயிண்ட் வேலை செய்கிறது.
- உரிம விசை செயல்படுத்தல் — 🎉 தேவையில்லை! இது திறந்த மூலமாகும்.
🛠️ படிப்படியான இடம்பெயர்வு
படி 1: pubspec.yaml ஐப் புதுப்பிக்கவும்
dependencies:
tracelet: ^3.6.14
flutter_background_geolocation மற்றும் ஏதேனும் உரிம விசை தொகுப்புகளை நீக்கவும். உங்களுக்கு அவை இனி தேவைப்படாது!
படி 2: Android அமைவு
INSTALL-ANDROID.md ஐப் பார்க்கவும். முக்கிய வேறுபாடுகள்:
- விருப்ப சார்புகள் — 🆕 ட்ரேஸ்லெட் 2.0.0+ க்கு நீங்கள் அதிக துல்லியமான GMS கண்காணிப்பை விரும்பினால், உங்கள்
build.gradleஇல்play-services-locationஐ வெளிப்படையாக சேர்க்க வேண்டும். இல்லையெனில், அது நிலையான AOSP GPSக்கு திரும்பும். - உரிம விசை இல்லை —
AndroidManifest.xmlஇலிருந்து எந்தBackgroundGeolocation.orgகட்டமைப்பையும் அகற்றவும் - அனுமதிகள் — Gradle வழியாக தானாக இணைக்கப்பட்டது, நீங்கள் அவற்றை அறிவிக்க வேண்டாம்
minSdkVersion— API 21+ (முன்பு போலவே)- Kotlin — அனைத்து சொந்த குறியீடு கோட்லின் ஆகும்
படி 3: iOS அமைவு
பார்க்கவும் INSTALL-IOS.md . முக்கிய வேறுபாடுகள்:
- உரிம விசை இல்லை — முந்தைய செருகுநிரலின் plist உள்ளீடுகளை அகற்றவும்
- பின்னணி முறைகள் — அதே: இருப்பிட புதுப்பிப்புகள், பின்னணி பெறுதல், தொலைநிலை அறிவிப்புகள்
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 பேலோடு: பாம்பு_கேஸ் → ஒட்டக உறை
கவனிக்க, பின்தளத்தில் devs! உங்கள் சர்வரில் புதுப்பிக்க ஒரு விஷயம்.
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ஐப் பயன்படுத்தவும்- நாட்ரான்ஸ்0லேட் கண்டுபிடிக்க முடியவில்லை — இது இப்போது நாட்ரான்ஸ்1லேட்
notification:சொத்து போய்விட்டது — இதுforegroundService: ForegroundServiceConfig(...)உள்ளேandroid:(AndroidConfig),appஅல்லscheduleUseAlarmManagerAppConfig இல் இல்லை — இது இப்போதுandroid.scheduleUseAlarmManagerpreventSuspendAppConfig இல் இல்லை — இது இப்போதுios.preventSuspend- பின்னணியில்
is_movingஐ அலச முடியாது — இதுisMovingஇப்போது (camelCase) - இன்னும் உரிம விசைக் குறியீடு உள்ளதா? - அதை நீக்கவும் - ட்ரேஸ்லெட்டுக்கு ஒன்று தேவையில்லை
Stateபண்புகள் வித்தியாசமாகத் தெரிகிறது — API குறிப்பு ஐச் சரிபார்க்கவும்HeadlessEvent.eventவகை பிழைகள் — Cast it:event.event as tl.Location
📚 மேலும் வளங்கள்
- API குறிப்பு — ஒவ்வொரு முறை, ஒவ்வொரு அளவுரு
- உள்ளமைவு வழிகாட்டி — அனைத்து கட்டமைப்பு விருப்பங்களிலும் ஆழமாக மூழ்கவும்
- பின்னணி கண்காணிப்பு — அது எப்படி உயிர் பிழைக்கிறது ஆப் கொலைகள்
- Android நிறுவல் — Android-குறிப்பிட்ட அமைப்பு
- iOS நிறுவல் — iOS-குறிப்பிட்ட அமைப்பு
- GitHub சிக்கல்கள் — சிக்கியுள்ளதா? நாங்கள் உன்னைப் பெற்றுள்ளோம்
திறந்த மூல பக்கத்திற்கு வரவேற்கிறோம். எங்களிடம் குக்கீகள் உள்ளன. 🍪