Skip to Content
പ്രധാന ആശയങ്ങൾട്രേസ്ലെറ്റ് സമന്വയം

Tracelet Sync: The Network Story

ഡാറ്റ ഒരിക്കലും നിങ്ങളുടെ സെർവറുകളിൽ എത്തുന്നില്ലെങ്കിൽ ലൊക്കേഷൻ ട്രാക്കിംഗ് അർത്ഥമാക്കുന്നില്ല. എലിവേറ്ററുകളിൽ പ്രവേശിക്കുമ്പോഴോ താഴ്‌വരകളിലൂടെ വാഹനമോടിക്കുമ്പോഴോ വൈഫൈയിൽ നിന്ന് സെല്ലുലാറിലേക്ക് മാറുമ്പോഴോ മൊബൈൽ ഉപകരണങ്ങൾ നിരന്തരം കണക്ഷൻ ഡ്രോപ്പ് ചെയ്യുന്നു. UI ഉണർത്താതെ തന്നെ ഡാറ്റ ഡെലിവറി ഉറപ്പാക്കാൻ രൂപകൽപ്പന ചെയ്‌തിരിക്കുന്ന ഒരു ഓഫ്‌ലൈൻ-ആദ്യ ബാറ്ററി-അവബോധ നെറ്റ്‌വർക്കിംഗ് എഞ്ചിനാണ് Tracelet Sync.

ട്രേസ്‌ലെറ്റ് 3.2.0 അപ്‌ഡേറ്റ്: HTTP സമന്വയ ലോജിക് tracelet_sync മൊഡ്യൂളിലേക്ക് നീക്കി. നിങ്ങൾക്ക് നെറ്റ്‌വർക്ക് സിൻക്രൊണൈസേഷൻ ആവശ്യമുണ്ടെങ്കിൽ ഈ മൊഡ്യൂൾ ഉൾപ്പെടുത്തണം.


നെറ്റ്‌വർക്കിലേക്ക് എങ്ങനെ സമന്വയിപ്പിക്കാം

Tracelet Core ലൊക്കേഷനുകൾ ക്യാപ്‌ചർ ചെയ്യുമ്പോൾ, tracelet_sync എന്നത് നിങ്ങളുടെ സെർവറിലേക്ക് അവ എത്തിക്കുന്ന പശ്ചാത്തല HTTP എഞ്ചിനാണ്. ഇത് പ്രവർത്തനക്ഷമമാക്കാൻ, നിങ്ങൾ ട്രാക്കിംഗ് ആരംഭിക്കുന്നതിന് മുമ്പ് TraceletSync.ready() സമാരംഭിക്കുക:

import 'package:tracelet_sync/tracelet_sync.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); // 1. Configure the Sync Engine await TraceletSync.ready(SyncConfig( url: 'https://your-api.com/locations', method: 'POST', autoSyncThreshold: 10, // Sync every 10 locations autoSyncDelay: 10000, // Wait 10s before pushing syncInterval: 0, // (Optional) Seconds between repeating queue flushes; 0 = off batchSync: true, // Send as a JSON array maxBatchSize: 250, // Up to 250 locations per request headers: { 'Authorization': 'Bearer YOUR_TOKEN' }, )); // 2. Configure and start Tracelet Core as usual await Tracelet.ready(Config.balanced()); await Tracelet.start(); }

കോൺഫിഗർ ചെയ്തുകഴിഞ്ഞാൽ, താഴെയുള്ള എല്ലാ സാഹചര്യങ്ങളും എഞ്ചിൻ സ്വയമേവ കൈകാര്യം ചെയ്യും!


രംഗം 1: മലകയറ്റം

ആശയങ്ങൾ പര്യവേക്ഷണം ചെയ്‌തു: ഓഫ്‌ലൈൻ ക്യൂയിംഗ്, ബാച്ച് സമന്വയം, ഡീബൗൺസിംഗ്

പ്രശ്നം

പർവതങ്ങളിലൂടെയുള്ള 3 മണിക്കൂർ കാൽനടയാത്ര ട്രാക്കുചെയ്യാൻ മാർക്ക് നിങ്ങളുടെ ഫിറ്റ്നസ് ആപ്പ് ഉപയോഗിക്കുന്നു. അദ്ദേഹത്തിന് സീറോ സെല്ലുലാർ സേവനം ഉണ്ട്. നിങ്ങളുടെ ആപ്പ് ഓരോ തവണയും ഒരു HTTP POST ചെയ്യാൻ ശ്രമിച്ചാൽ, അത് പരാജയപ്പെടുകയും സിഗ്നലിനായി തിരയുന്നത് ബാറ്ററി പാഴാക്കുകയും ലൊക്കേഷൻ പോയിൻ്റുകൾ എന്നെന്നേക്കുമായി നഷ്ടപ്പെടുകയും ചെയ്യും. ഒടുവിൽ അവൻ തൻ്റെ കാറിൽ തിരിച്ചെത്തുമ്പോൾ, അവൻ്റെ റൂട്ട് ഒരു ശൂന്യമായ ഭൂപടം പോലെ കാണപ്പെടും.

Tracelet സമന്വയം ഇത് എങ്ങനെ പരിഹരിക്കുന്നു

  1. ഓഫ്‌ലൈൻ SQLite പെർസിസ്റ്റൻസ് (autoSyncThreshold) മാർക്കിന് സിഗ്നൽ ഇല്ലാത്തതിനാൽ, HTTP അഭ്യർത്ഥനകൾ അയയ്‌ക്കാനുള്ള ശ്രമം Tracelet ഉടൻ നിർത്തുന്നു. പകരം, എല്ലാ സ്ഥലങ്ങളും ലോക്കൽ SQLite ഡാറ്റാബേസിൽ സുരക്ഷിതമായി സംഭരിച്ചിരിക്കുന്നു. ഞങ്ങൾ autoSyncThreshold: 100 സജ്ജീകരിച്ചു, അതായത് ഡാറ്റാബേസിൽ കുറഞ്ഞത് 100 പോയിൻ്റുകളെങ്കിലും ക്യൂവിൽ വരുന്നതുവരെ നെറ്റ്‌വർക്ക് റേഡിയോ ഉണർത്താൻ Tracelet ശ്രമിക്കില്ല.

  2. ഡീബൗൺസ്ഡ് സമന്വയിപ്പിക്കൽ (autoSyncDelay) മാർക്ക് ഒടുവിൽ പർവതത്തിലൂടെ ഇറങ്ങി 4G വീണ്ടെടുക്കുമ്പോൾ, അയാൾക്ക് പെട്ടെന്ന് 500 ക്യൂ ലൊക്കേഷനുകൾ ഉണ്ട്. 500 ഉടനടി HTTP അഭ്യർത്ഥനകൾ (അത് അവൻ്റെ ഫോൺ മരവിപ്പിക്കും) ഫയർ ചെയ്യുന്നതിനുപകരം, autoSyncDelay: 10000 Tracelet-നോട് 10 സെക്കൻഡ് കാത്തിരിക്കാൻ പറയുന്നു. ഇത് ഡാറ്റയുടെ ദ്രുതഗതിയിലുള്ള വരവ് ഇല്ലാതാക്കുന്നു, കണക്ഷനെ സ്ഥിരപ്പെടുത്താൻ അനുവദിക്കുന്നു.

  3. ബാച്ച് സമന്വയിപ്പിക്കൽ (batchSync & maxBatchSize) 500 വ്യക്തിഗത POST അഭ്യർത്ഥനകൾക്ക് പകരം, batchSync: true, maxBatchSize: 250 എന്നിവ ലൊക്കേഷനുകളെ രണ്ട് വലിയ JSON അറേകളാക്കി മാറ്റുന്നു. ഇത് ആദ്യത്തെ 250 പോയിൻ്റുകൾ അയയ്ക്കുന്നു, നിങ്ങളുടെ സെർവർ HTTP 200 OK തിരികെ നൽകുന്നതിനായി കാത്തിരിക്കുന്നു, SQLite-ൽ നിന്ന് ആ പോയിൻ്റുകൾ ഇല്ലാതാക്കുന്നു, തുടർന്ന് അടുത്ത ബാച്ച് അയയ്ക്കുന്നു.

  4. ഇൻ്റർവെൽ അധിഷ്ഠിത സമന്വയം (syncInterval) autoSyncDelay പുതിയ ലൊക്കേഷനുകളോട് പ്രതികരിക്കുന്നു. നിങ്ങൾക്ക് സമയാധിഷ്ഠിത ഫ്ലഷ് വേണമെങ്കിൽ - എത്ര പോയിൻ്റുകൾ സമാഹരിച്ചിട്ടുണ്ടെങ്കിലും, ഒരു നിശ്ചിത കാഡൻസിൽ ക്യൂ നിൽക്കുന്നതെന്തും അപ്‌ലോഡ് ചെയ്യുക - ഫ്ലഷുകൾക്കിടയിലുള്ള സെക്കൻഡുകളുടെ എണ്ണത്തിലേക്ക് syncInterval സജ്ജീകരിക്കുക (ഉദാ. syncInterval: 60 മിനിറ്റിൽ ഒരിക്കൽ ഓഫ്‌ലൈൻ ക്യൂ ഫ്ലഷ് ചെയ്യുന്നു). ഇത് ഡീബൗൺസിനൊപ്പം പ്രവർത്തിക്കുകയും സ്ഥിരസ്ഥിതിയായി പ്രവർത്തനരഹിതമാക്കുകയും ചെയ്യുന്നു (0).


സാഹചര്യം 2: കഫേ വൈഫൈയിലേക്ക് കണക്‌റ്റ് ചെയ്യുന്നു

പര്യവേക്ഷണം ചെയ്ത ആശയങ്ങൾ: സെല്ലുലാർ നിയന്ത്രണങ്ങൾ, ഡെൽറ്റ കംപ്രഷൻ

പ്രശ്നം

മാർക്ക് തൻ്റെ കാൽനടയാത്ര പൂർത്തിയാക്കി ഒരു കഫേയിലേക്ക് പോകുന്നു. അവൻ അന്തർദേശീയമായി യാത്ര ചെയ്യുന്നു, അതിനാൽ അവൻ്റെ സെല്ലുലാർ ഡാറ്റ പ്ലാൻ വളരെ ചെലവേറിയതാണ്. നിങ്ങളുടെ ആപ്പ് ലൊക്കേഷൻ JSON ഡാറ്റയുടെ മെഗാബൈറ്റ് ക്യൂ അപ്പ് ചെയ്‌തു, അവൻ്റെ റോമിംഗ് 4G കണക്ഷനിലൂടെ അത് അയയ്‌ക്കുന്നത് അയാൾക്ക് പണച്ചെലവുണ്ടാക്കും.

Tracelet സമന്വയം ഇത് എങ്ങനെ പരിഹരിക്കുന്നു

  1. സെല്ലുലാർ നിയന്ത്രണം (disableAutoSyncOnCellular) disableAutoSyncOnCellular: true സജ്ജീകരിക്കുന്നതിലൂടെ, Mark 4G-ൽ ആയിരിക്കുമ്പോൾ Tracelet സമന്വയ എഞ്ചിനെ പൂർണ്ണമായും തടയുന്നു. ലൊക്കേഷനുകൾ SQLite-ൽ സുരക്ഷിതമാണ്. അവൻ കഫേയുടെ Wi-Fi-യിലേക്ക് കണക്റ്റുചെയ്യുന്ന നിമിഷം, OS Tracelet-നെ ഉണർത്തുന്നു, ഒപ്പം സമന്വയ എഞ്ചിൻ സ്വയമേവ ക്യൂ ഫ്ലഷ് ചെയ്യുന്നു.

  2. ഡെൽറ്റ എൻകോഡിംഗ് കംപ്രഷൻ (enableDeltaCompression) Wi-Fi-യിൽ പോലും, വലിയ JSON അറേകൾ അയയ്‌ക്കുന്നത് മന്ദഗതിയിലാണ്. ബാച്ച് അയയ്‌ക്കുന്നതിന് മുമ്പ് ട്രേസ്‌ലെറ്റ് ഡെൽറ്റ കംപ്രഷൻ പ്രയോഗിക്കുന്നു. മാർക്ക് ഒരു നേർരേഖയിൽ നടന്നാൽ, അവൻ്റെ അക്ഷാംശത്തിൽ വലിയ മാറ്റമുണ്ടായില്ല. ഓരോ പോയിൻ്റിനും പൂർണ്ണ കോർഡിനേറ്റുകൾ അയയ്‌ക്കുന്നതിനുപകരം, ട്രെയ്‌സ്‌ലെറ്റ് ആദ്യത്തെ പോയിൻ്റ് പൂർണ്ണമായി അയയ്‌ക്കുന്നു, തുടർന്ന് തുടർന്നുള്ള പോയിൻ്റുകൾക്കുള്ള വ്യത്യാസം (ഡെൽറ്റ) മാത്രം. deltaCoordinatePrecision: 5 (~1.1 മീറ്റർ വരെ കൃത്യത) ഉപയോഗിച്ച്, ഇത് HTTP പേലോഡ് വലുപ്പം 60% മുതൽ 80% വരെ കുറയ്ക്കുന്നു.

സ്റ്റാൻഡേർഡ് പേലോഡ് (കംപ്രഷൻ ഇല്ല):

[ {"lat": 37.774900, "lng": -122.419400}, {"lat": 37.774910, "lng": -122.419410}, {"lat": 37.774920, "lng": -122.419420} ]

ഡെൽറ്റ എൻകോഡ് ചെയ്ത പേലോഡ് (നിങ്ങളുടെ സെർവറിന് ലഭിക്കുന്നത്):

[ {"lat": 37.774900, "lng": -122.419400}, {"dLat": 10, "dLng": 10}, {"dLat": 10, "dLng": 10} ]

രംഗം 3: കാലഹരണപ്പെട്ട സെഷൻ

പര്യവേക്ഷണം ചെയ്‌ത ആശയങ്ങൾ: 401 ആവർത്തനങ്ങൾ, തലയില്ലാത്ത കോൾബാക്കുകൾ, എക്‌സ്‌പോണൻഷ്യൽ ബാക്ക്ഓഫ്

പ്രശ്നം

കാൽനടയാത്രയ്ക്കിടെ മാർക്കിൻ്റെ ഓത്ത് ടോക്കൺ (JWT) കാലഹരണപ്പെട്ടു. Tracelet ഒടുവിൽ നിങ്ങളുടെ സെർവറിലേക്ക് ബാച്ച് സമന്വയിപ്പിക്കാൻ ശ്രമിക്കുമ്പോൾ, നിങ്ങളുടെ API ഒരു HTTP 401 Unauthorized നൽകുന്നു. ഒരു നിഷ്കളങ്കമായ സമന്വയ എഞ്ചിൻ ഒന്നുകിൽ ഡാറ്റ പരാജയപ്പെട്ടുവെന്ന് കരുതി അത് ഇല്ലാതാക്കും, അല്ലെങ്കിൽ 401 സെക്കൻഡിൻ്റെ അനന്തമായ ലൂപ്പിൽ കുടുങ്ങി, ബാറ്ററി ശൂന്യമാക്കും. സ്‌ക്രീൻ ഓഫായി മാർക്കിൻ്റെ ഫോൺ പോക്കറ്റിലുണ്ട്—അവന് ഇപ്പോൾ ലോഗിൻ ചെയ്യാൻ കഴിയില്ല.

Tracelet സമന്വയം ഇത് എങ്ങനെ പരിഹരിക്കുന്നു

  1. ഡൈനാമിക് ഹെഡർ കോൾബാക്കുകൾ Tracelet 401 ലഭിക്കുമ്പോൾ, അത് വീണ്ടും ശ്രമിക്കുന്നതിന് മുമ്പ് ഒരു പുതിയ ടോക്കൺ ലഭ്യമാക്കണം. മുൻവശത്തും പശ്ചാത്തലത്തിലും (തലയില്ലാത്ത) അവസ്ഥകളിൽ ഇത് കൈകാര്യം ചെയ്യാൻ നിങ്ങൾ കോൾബാക്കുകൾ രജിസ്റ്റർ ചെയ്യുന്നു.

ഫോർഗ്രൗണ്ട് കോൾബാക്ക്:

tl.Tracelet.setHeadersCallback(() async { final newJwt = await AuthAPI.refreshToken(); return {'Authorization': 'Bearer $newJwt'}; });

പശ്ചാത്തലം (തലയില്ലാത്ത) കോൾബാക്ക്: ഇത് നിങ്ങളുടെ UI ഉണർത്താതെ ഒരു ഒറ്റപ്പെട്ട ഡാർട്ട് എഞ്ചിനിൽ പ്രവർത്തിക്കുന്നു, ഉപയോക്താവ് ആപ്പ് നിർബന്ധിതമായി ഉപേക്ഷിച്ചാലും സമന്വയം പ്രവർത്തിക്കുന്നുവെന്ന് ഉറപ്പാക്കുന്നു.

@pragma('vm:entry-point') void headlessHeadersCallback(tl.HeadlessEvent event) async { final newJwt = await AuthAPI.refreshToken(); tl.Tracelet.setDynamicHeaders({'Authorization': 'Bearer $newJwt'}); } // Register it before runApp() tl.Tracelet.registerHeadlessHeadersCallback(headlessHeadersCallback);
  1. എക്‌സ്‌പോണൻഷ്യൽ ബാക്ക്ഓഫ് (maxRetries & retryBackoffCap) നിങ്ങളുടെ ഓത്ത് സെർവർ പ്രവർത്തനരഹിതമാവുകയും 503 നൽകുകയും ചെയ്താലോ? Tracelet ഇത് ഭംഗിയായി കൈകാര്യം ചെയ്യുന്നു. അത് വീണ്ടും ശ്രമിക്കാൻ ശ്രമിക്കുന്നു. അത് പരാജയപ്പെടുന്നു. ഇത് 1 സെക്കൻഡ് (retryBackoffBase), തുടർന്ന് 2 സെക്കൻഡ്, തുടർന്ന് 4 സെക്കൻഡ് കാത്തിരിക്കുന്നു. എക്‌സ്‌പോണൻഷ്യൽ ബാക്ക്ഓഫ് 60 സെക്കൻഡിൽ (retryBackoffCap) പരിമിതപ്പെടുത്തിയിരിക്കുന്നു. 3 ശ്രമങ്ങൾക്ക് ശേഷം (maxRetries), അത് പൂർണ്ണമായും ഉപേക്ഷിക്കുന്നു, നാളെ വീണ്ടും ശ്രമിക്കുന്നതിനായി ഡാറ്റ സുരക്ഷിതമായി SQLite-ൽ വിടുന്നു.

സാഹചര്യം 4: കസ്റ്റം സെർവർ സ്കീമ

ആശയങ്ങൾ പര്യവേക്ഷണം ചെയ്‌തു: ഇഷ്‌ടാനുസൃത സമന്വയ ബോഡി ബിൽഡർമാർ, സ്കീമ മാപ്പിംഗ്

പ്രശ്നം

ലൊക്കേഷൻ ഡാറ്റ വളരെ നിർദ്ദിഷ്ടവും നിലവാരമില്ലാത്തതുമായ ഫോർമാറ്റിൽ പ്രതീക്ഷിക്കുന്ന ഒരു ലെഗസി ബാക്കെൻഡ് മാർക്കിൻ്റെ കമ്പനിക്കുണ്ട്. Tracelet-ൻ്റെ ഡിഫോൾട്ട് JSON പേലോഡ് അവരുടെ സെർവറിന് ആവശ്യമായ സ്കീമയുമായി പൊരുത്തപ്പെടുന്നില്ല, മാത്രമല്ല ഈ ആപ്പിന് വേണ്ടി മാത്രം ബാക്കെൻഡ് API മാറ്റാൻ അവർക്ക് കഴിയില്ല.

Tracelet സമന്വയം ഇത് എങ്ങനെ പരിഹരിക്കുന്നു

  1. ഇഷ്‌ടാനുസൃത സമന്വയ ബോഡി ബിൽഡർ (setSyncBodyBuilder) ഡിഫോൾട്ട് JSON റാപ്പർ ഉപയോഗിക്കുന്നതിനുപകരം, നെറ്റ്‌വർക്കിലൂടെ അയയ്‌ക്കുന്നതിന് മുമ്പായി ലൊക്കേഷനുകളുടെ ബാച്ച് തടസ്സപ്പെടുത്താൻ Tracelet നിങ്ങളെ അനുവദിക്കുന്നു, ഇത് നിങ്ങളുടെ സെർവർ ആഗ്രഹിക്കുന്ന ഏത് രൂപത്തിലും മാപ്പ് ചെയ്യാൻ നിങ്ങളെ അനുവദിക്കുന്നു.

ട്രേസ്‌ലെറ്റ് 3.2.8 മുതൽ, ഈ ബിൽഡർക്ക് കൈമാറിയ ലൊക്കേഷനുകൾ ശക്തമായ ഒരു നെസ്റ്റഡ് സ്‌കീമ ഉപയോഗിക്കുന്നു (ഇവിടെ കോർഡിനേറ്റുകൾ സുരക്ഷിതമായി coords എന്നതിന് കീഴിലും ആക്‌റ്റിവിറ്റി ഡാറ്റ activity എന്നതിന് കീഴിലും ഗ്രൂപ്പുചെയ്യുന്നു).

Tracelet.setSyncBodyBuilder((context) async { // Map Tracelet's nested schema to your legacy server's flat schema final mappedPoints = context.locations.map((loc) { final coords = loc['coords'] as Map; final activity = loc['activity'] as Map; return { 'lat': coords['latitude'], 'lng': coords['longitude'], 'time': loc['timestamp'], 'moving': loc['is_moving'], 'action': activity['type'], }; }).toList(); // Return the exact JSON structure your server expects return { 'device_id': myDeviceId, 'payload': mappedPoints, }; });
  1. തലയില്ലാത്ത വധശിക്ഷ ടോക്കൺ പുതുക്കലുകൾ പോലെ, ഈ ഇഷ്‌ടാനുസൃത ബോഡി ബിൽഡിംഗും registerHeadlessSyncBodyBuilder() വഴി പശ്ചാത്തലത്തിൽ പൂർണ്ണമായും തലയില്ലാതെ നടപ്പിലാക്കാൻ കഴിയും, ആപ്പ് പൂർണ്ണമായും അവസാനിപ്പിച്ചാലും നിങ്ങളുടെ ഇഷ്‌ടാനുസൃത സ്‌കീമ നിർമ്മിച്ച് അയയ്‌ക്കുന്നുവെന്ന് ഉറപ്പാക്കുന്നു.

രംഗം 5: ഡെലിവറി ഡ്രൈവർ

പര്യവേക്ഷണം ചെയ്‌ത ആശയങ്ങൾ: റൂട്ട് സന്ദർഭവും ബിസിനസ് ലോജിക് ഇഞ്ചക്ഷൻ

പ്രശ്നം

നിങ്ങളുടെ ബാക്കെൻഡിന് ആയിരക്കണക്കിന് റോ കോർഡിനേറ്റുകൾ ലഭിക്കുന്നു. എന്നാൽ ഒരു കോർഡിനേറ്റ് മാത്രം ഉപയോക്താവ് അവിടെ ഉണ്ടായിരുന്നത് എന്തുകൊണ്ട് നിങ്ങളോട് പറയുന്നില്ല. ഡ്രൈവർ ഡെലിവറി ടാസ്ക്കിൽ ആയിരുന്നോ? ഏത് ഓർഡറാണ് അവർ വിതരണം ചെയ്തത്? പശ്ചാത്തല ലൊക്കേഷൻ പേലോഡിലേക്ക് നേരിട്ട് ബിസിനസ്സ് ലോജിക് അറ്റാച്ചുചെയ്യാൻ നിങ്ങൾക്ക് ഒരു മാർഗം ആവശ്യമാണ്, അതിനാൽ നിങ്ങളുടെ ഡാറ്റാബേസിൽ അത് എളുപ്പത്തിൽ അന്വേഷിക്കാനാകും.

Tracelet സമന്വയം ഇത് എങ്ങനെ പരിഹരിക്കുന്നു

  1. റൂട്ട് സന്ദർഭം സജ്ജീകരിക്കുന്നു നിങ്ങൾക്ക് Tracelet-ലേക്ക് ഇഷ്‌ടാനുസൃത മെറ്റാഡാറ്റ കുത്തിവയ്ക്കാൻ കഴിയും. നിങ്ങൾ setRouteContext() എന്ന് വിളിച്ചതിന് ശേഷം റെക്കോർഡുചെയ്‌ത എല്ലാ ലൊക്കേഷനും ആന്തരിക SQLite ഡാറ്റാബേസിൽ ഈ ഡാറ്റയുമായി സ്വയമേവ ടാഗ് ചെയ്യപ്പെടും.

    await tl.Tracelet.setRouteContext( const tl.RouteContext( taskId: 'delivery-1234', driverId: 'john_doe', custom: {'shift_id': 'morning-shift-001'}, ), );
  2. ഫലമായ JSON പേലോഡ് Tracelet നിങ്ങളുടെ ബാക്കെൻഡുമായി സമന്വയിപ്പിക്കുമ്പോൾ, അറേയിലെ എല്ലാ ലൊക്കേഷനും context ഒബ്‌ജക്റ്റ് ഉൾപ്പെടും, ഈ ലൊക്കേഷൻ ഏത് ടാസ്‌ക്കിൻ്റേതാണെന്ന് കൃത്യമായി അറിയാമെന്ന് നിങ്ങളുടെ ബാക്കെൻഡിന് ഉറപ്പുനൽകുന്നു.

    { "locations": [ { "coords": { "latitude": 37.7749, "longitude": -122.4194 }, "battery": { "level": 0.85, "isCharging": true }, "extras": { "your_custom_key": "your_value" }, "context": { "taskId": "delivery-1234", "driverId": "john_doe", "custom": { "shift_id": "morning-shift-001" } } } ] }

ബാറ്ററി സ്റ്റേറ്റ് ട്രാക്കിംഗ്

ഒരു ലൊക്കേഷൻ റെക്കോർഡ് ചെയ്‌ത് മണിക്കൂറുകൾക്ക് ശേഷം ഉപകരണങ്ങൾ സമന്വയിപ്പിച്ചേക്കാവുന്ന പരുക്കൻ, ഓഫ്‌ലൈൻ പരിതസ്ഥിതികൾക്കായാണ് ട്രേസ്‌ലെറ്റ് രൂപകൽപ്പന ചെയ്‌തിരിക്കുന്നത്. ഫീൽഡിലെ ഉപകരണത്തിൻ്റെ ആരോഗ്യം മനസ്സിലാക്കാൻ നിങ്ങളെ സഹായിക്കുന്നതിന്, ഓരോ ലൊക്കേഷനും റെക്കോർഡ് ചെയ്യപ്പെടുന്ന നിമിഷത്തിൽ Tracelet യാന്ത്രികമായി കൃത്യമായ ബാറ്ററി നില പിടിച്ചെടുക്കുന്നു.

ഇതിന് പൂജ്യം കോൺഫിഗറേഷൻ ആവശ്യമാണ്:

  • എഞ്ചിൻ level (ഉദാ. 85% ന് 0.85), isCharging അവസ്ഥ എന്നിവ ക്യാപ്‌ചർ ചെയ്യുന്നു.
  • GPS കോർഡിനേറ്റുകൾക്കൊപ്പം ഓഫ്‌ലൈൻ SQLite ഡാറ്റാബേസിൽ ഈ അവസ്ഥ സുരക്ഷിതമായി സംരക്ഷിച്ചിരിക്കുന്നു.
  • ഉപകരണം ഓൺലൈനിൽ തിരികെ വരുമ്പോൾ, സമന്വയ എഞ്ചിൻ നിലവിലെ ബാറ്ററി നിലയല്ല, കൃത്യമായ ചരിത്ര ബാറ്ററി നിലയാണ് കൈമാറുന്നത്.

ഇത് നിങ്ങളുടെ ബാക്കെൻഡിനെ ഒരു റൂട്ടിലെ ബാറ്ററി ചോർച്ച കൃത്യമായി ദൃശ്യമാക്കാൻ അനുവദിക്കുന്നു, അല്ലെങ്കിൽ ഷിഫ്റ്റുകളിൽ ഡ്രൈവർമാർ അവരുടെ ഉപകരണങ്ങൾ തുടർച്ചയായി അൺപ്ലഗ് ചെയ്യുന്നുണ്ടോ എന്ന് തിരിച്ചറിയുക.

  1. സന്ദർഭം മായ്‌ക്കുന്നു ഡ്രൈവർ ഡെലിവറി പൂർത്തിയാക്കുമ്പോൾ, സന്ദർഭം വ്യക്തമാക്കുക. തുടർന്നുള്ള ലൊക്കേഷനുകൾ ഇനി ടാഗ് ചെയ്യപ്പെടില്ല.

    await tl.Tracelet.clearRouteContext();

സമന്വയിപ്പിക്കുന്നതിന് മുമ്പ് ഈ സന്ദർഭത്തെ അടിസ്ഥാനമാക്കി നിങ്ങൾക്ക് ആന്തരിക SQLite ഡാറ്റാബേസിൽ പോലും അന്വേഷിക്കാവുന്നതാണ്:

// Get all locations belonging to a specific delivery task final locations = await tl.Tracelet.getLocations( tl.SQLQuery(where: "context_task_id = 'delivery-1234'") );