Skip to Content
முக்கிய கருத்துக்கள்ட்ரேஸ்லெட் ஒத்திசைவு

ட்ரேஸ்லெட் ஒத்திசைவு: நெட்வொர்க் கதை

தரவு உங்கள் சர்வர்களை அடையவில்லை என்றால் இருப்பிட கண்காணிப்பு என்பது ஒன்றுமில்லை. லிஃப்ட்களுக்குள் நுழையும் போது, ​​பள்ளத்தாக்குகள் வழியாக வாகனம் ஓட்டும்போது அல்லது வைஃபையிலிருந்து செல்லுலருக்கு மாறும்போது மொபைல் சாதனங்கள் தொடர்ந்து இணைப்பைக் குறைக்கின்றன. ட்ரேஸ்லெட் ஒத்திசைவு என்பது ஆஃப்லைன்-முதல், பேட்டரி-விழிப்புணர்வு நெட்வொர்க்கிங் இன்ஜின் ஆகும், இது UI ஐ எழுப்பாமல் தரவு விநியோகத்தை உறுதிசெய்ய வடிவமைக்கப்பட்டுள்ளது.

டிரேஸ்லெட் 3.2.0 புதுப்பிப்பு: HTTP ஒத்திசைவு தர்க்கம் tracelet_sync தொகுதிக்கு நகர்த்தப்பட்டது. உங்களுக்கு பிணைய ஒத்திசைவு தேவைப்பட்டால் இந்த தொகுதியைச் சேர்க்க வேண்டும்.


நெட்வொர்க்குடன் எவ்வாறு ஒத்திசைப்பது

ட்ரேஸ்லெட் கோர் இருப்பிடங்களைக் கைப்பற்றும் போது, ​​**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ஐப் பயன்படுத்த முயற்சித்தால், அது தோல்வியடையும், சிக்னலைத் தேடும் பேட்டரி வீணாகிவிடும், மேலும் இருப்பிடப் புள்ளிகளை நிரந்தரமாக இழக்க நேரிடும். அவர் இறுதியாக தனது காரில் திரும்பும்போது, ​​அவரது பாதை ஒரு வெற்று வரைபடம் போல இருக்கும்.

ட்ரேஸ்லெட் ஒத்திசைவு அதை எவ்வாறு தீர்க்கிறது

  1. ஆஃப்லைன் SQLite நிலைத்தன்மை (autoSyncThreshold) மார்க் சிக்னல் இல்லாததால், HTTP கோரிக்கைகளை அனுப்பும் முயற்சியை Tracelet உடனடியாக நிறுத்துகிறது. மாறாக, ஒவ்வொரு இடமும் உள்ளூர் SQLite தரவுத்தளத்தில் பாதுகாப்பாக சேமிக்கப்படும். நாங்கள் autoSyncThreshold: 100 ஐ அமைத்துள்ளோம், அதாவது தரவுத்தளத்தில் குறைந்தது 100 புள்ளிகள் வரிசையாக இருக்கும் வரை ட்ரேஸ்லெட் நெட்வொர்க் ரேடியோவை எழுப்ப முயற்சிக்காது.

  2. Debounced Syncing (autoSyncDelay) மார்க் இறுதியாக மலையிலிருந்து கீழே இறங்கி 4G ஐ மீண்டும் பெறும்போது, ​​திடீரென்று 500 வரிசை இடங்களை அவர் பெற்றுள்ளார். 500 உடனடி HTTP கோரிக்கைகளை நீக்குவதற்குப் பதிலாக (அவரது மொபைலை முடக்கிவிடும்), autoSyncDelay: 10000 ட்ரேஸ்லெட்டிடம் 10 வினாடிகள் காத்திருக்கச் சொல்கிறது. இது தரவின் விரைவான வருகையைத் தடுக்கிறது, இணைப்பை உறுதிப்படுத்த அனுமதிக்கிறது.

  3. தொகுப்பு ஒத்திசைவு (batchSync & maxBatchSize) 500 தனிப்பட்ட POST கோரிக்கைகளுக்குப் பதிலாக, batchSync: true மற்றும் maxBatchSize: 250 ஆகியவை இருப்பிடங்களை இரண்டு பெரிய JSON வரிசைகளாக இணைக்கின்றன. இது முதல் 250 புள்ளிகளை அனுப்புகிறது, உங்கள் சர்வர் HTTP 200 OK ஐத் திருப்பித் தரும் வரை காத்திருக்கிறது, SQLite இலிருந்து அந்த புள்ளிகளை நீக்குகிறது, பின்னர் வரிசை காலியாக இருக்கும் வரை, அடுத்த தொகுதியை, பழையதை முதலில் அனுப்புகிறது. ஒரு தொகுதி பதிவேற்றும் போது பதிவுசெய்யப்பட்ட இருப்பிடம் அதே ரன் மூலம் எடுக்கப்படும், எனவே ஒரு தூண்டுதல் எப்போதும் முழு பேக்லாக் வடிகட்டுகிறது. ஒரு தொகுதி தோல்வியுற்றால், ரன் நிறுத்தப்படும் மற்றும் அடுத்த தூண்டுதல் மீண்டும் முயற்சிக்கும்; ஒரு டவுன் சர்வர் ஒரு லூப்பில் அடிக்கப்படவில்லை. ஒரு கையேடு sync() ஒரு தானியங்கு ஒத்திசைவு செயலில் உள்ளது, எனவே இரண்டும் ஒரே வரிசைகளை அனுப்பாது.

  4. இடைவெளி அடிப்படையிலான ஒத்திசைவு (syncInterval) autoSyncDelay புதிய இருப்பிடங்களுக்கு எதிர்வினையாற்றுகிறது. உங்களுக்கு நேரத்தால் இயக்கப்படும் ஃப்ளஷ் தேவையென்றால் - எத்தனை புள்ளிகள் குவிந்திருந்தாலும், நிலையான கேடன்ஸில் வரிசைப்படுத்தப்பட்ட அனைத்தையும் பதிவேற்றலாம் - ஃப்ளஷ்களுக்கு இடையில் உள்ள வினாடிகளின் எண்ணிக்கையில் syncInterval ஐ அமைக்கவும் (எ.கா. syncInterval: 60 ஆஃப்லைன் வரிசையை நிமிடத்திற்கு ஒரு முறை ஃப்ளஷ் செய்யும்). இது debounce உடன் இயங்குகிறது மற்றும் இயல்பாகவே முடக்கப்பட்டுள்ளது (0).


காட்சி 2: Cafe Wi-Fi உடன் இணைக்கிறது

கருத்துகள் ஆராயப்பட்டன: செல்லுலார் கட்டுப்பாடுகள், டெல்டா சுருக்கம்

பிரச்சனை

மார்க் தனது பயணத்தை முடித்துவிட்டு ஒரு ஓட்டலுக்குச் செல்கிறார். அவர் சர்வதேச அளவில் பயணம் செய்கிறார், எனவே அவரது செல்லுலார் தரவுத் திட்டம் மிகவும் விலை உயர்ந்தது. உங்கள் ஆப்ஸ் JSON இருப்பிடத் தரவின் மெகாபைட்களை வரிசைப்படுத்தியுள்ளது, மேலும் அவரது ரோமிங் 4G இணைப்பு மூலம் அதை அனுப்பினால் அவருக்கு பணம் செலவாகும்.

ட்ரேஸ்லெட் ஒத்திசைவு அதை எவ்வாறு தீர்க்கிறது

  1. செல்லுலார் கட்டுப்பாடு (disableAutoSyncOnCellular) disableAutoSyncOnCellular: true ஐ அமைப்பதன் மூலம், மார்க் 4G இல் இருக்கும்போது டிராஸ்லெட் ஒத்திசைவு இயந்திரத்தை முழுவதுமாகத் தடுக்கிறது. SQLite இல் இருப்பிடங்கள் பாதுகாப்பாக இருக்கும். அவர் ஓட்டலின் வைஃபையுடன் இணைக்கும் தருணத்தில், OS ட்ரேஸ்லெட்டை எழுப்புகிறது, மேலும் ஒத்திசைவு இயந்திரம் தானாக வரிசையை சுத்தப்படுத்துகிறது.

  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 ஐ வழங்கும். ஒரு அப்பாவி ஒத்திசைவு இயந்திரம், தரவு தோல்வியடைந்ததாக நினைத்து அதை நீக்கும் அல்லது 401s இன் எல்லையற்ற சுழற்சியில் சிக்கி, பேட்டரியை வடிகட்டிவிடும். திரை அணைக்கப்பட்ட நிலையில் மார்க்கின் ஃபோன் பாக்கெட்டில் உள்ளது—அவரால் இப்போது உள்நுழைய முடியாது.

ட்ரேஸ்லெட் ஒத்திசைவு அதை எவ்வாறு தீர்க்கிறது

  1. டைனமிக் ஹெடர் கால்பேக்குகள் ட்ரேஸ்லெட் 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);
  2. அதிவேக பின்னடைவு (maxRetries & retryBackoffCap) உங்கள் அங்கீகாரச் சேவையகம் செயலிழந்து 503ஐக் கொடுத்தால் என்ன செய்வது? ட்ரேஸ்லெட் இதை அழகாக கையாளுகிறது. இது மீண்டும் முயற்சிக்கிறது. அது தோல்வியடைகிறது. இது 1 வினாடி (retryBackoffBase), பிறகு 2 வினாடிகள், பிறகு 4 வினாடிகள் காத்திருக்கிறது. அதிவேக பேக்ஆஃப் 60 வினாடிகள் (retryBackoffCap) ஆக உள்ளது. 3 முயற்சிகளுக்குப் பிறகு (maxRetries), அது முழுவதுமாக கைவிட்டு, டேட்டாவை SQLite இல் பாதுகாப்பாக விட்டுவிட்டு நாளை மீண்டும் முயற்சிக்கவும். ஒரு விதிவிலக்கு: தனிப்பயன் ஒத்திசைவு பாடி பில்டருடன், அதன் உடலை அனுப்பிய பின் நேரம் முடிந்ததற்கான கோரிக்கை மீண்டும் முயற்சிக்கப்படவில்லை, ஏனெனில் சேவையகம் ஏற்கனவே அதைச் செயலாக்குகிறது மற்றும் மீண்டும் முயற்சித்தால் தொகுதி இரண்டு முறை வழங்கப்படும்; வரிசைகள் அடுத்த ஒத்திசைவுக்காக காத்திருக்கின்றன.


காட்சி 4: தனிப்பயன் சர்வர் திட்டம்

கருத்துகள் ஆராயப்பட்டன: தனிப்பயன் ஒத்திசைவு பாடி பில்டர்கள், ஸ்கீமா மேப்பிங்

பிரச்சனை

மார்க்கின் நிறுவனம் ஒரு பாரம்பரிய பின்தளத்தைக் கொண்டுள்ளது, இது இருப்பிடத் தரவை மிகவும் குறிப்பிட்ட, தரமற்ற வடிவத்தில் எதிர்பார்க்கிறது. ட்ரேஸ்லெட்டின் இயல்புநிலை JSON பேலோட் அவர்களின் சேவையகத்தின் தேவையான திட்டத்துடன் பொருந்தவில்லை, மேலும் இந்தப் பயன்பாட்டிற்காக மட்டும் பின்தளத்தில் API ஐ மாற்ற முடியாது.

ட்ரேஸ்லெட் ஒத்திசைவு அதை எவ்வாறு தீர்க்கிறது

  1. தனிப்பயன் ஒத்திசைவு பாடி பில்டர் (setSyncBodyBuilder) இயல்புநிலை JSON ரேப்பரைப் பயன்படுத்துவதற்குப் பதிலாக, ட்ரேஸ்லெட், நெட்வொர்க்கில் அனுப்பப்படுவதற்கு முன்பே, இருப்பிடங்களின் தொகுப்பை இடைமறித்து, உங்கள் சர்வர் விரும்பும் எந்த வடிவத்திலும் அவற்றை வரைபடமாக்க அனுமதிக்கிறது.

    டிரேஸ்லெட் 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, }; });
  2. தலை இல்லாத மரணதண்டனை டோக்கன் புதுப்பிப்புகளைப் போலவே, இந்த தனிப்பயன் பாடி பில்டிங்கையும் registerHeadlessSyncBodyBuilder() மூலம் பின்னணியில் முற்றிலும் தலையில்லாமல் செயல்படுத்தலாம், பயன்பாடு முற்றிலும் நிறுத்தப்பட்டாலும் உங்கள் தனிப்பயன் ஸ்கீமா கட்டமைக்கப்பட்டு அனுப்பப்படுவதை உறுதிசெய்கிறது.


காட்சி 5: டெலிவரி டிரைவர்

கருத்துகள் ஆராயப்பட்டன: பாதை சூழல் & வணிக லாஜிக் ஊசி

பிரச்சனை

உங்கள் பின்தளம் ஆயிரக்கணக்கான மூல ஆயங்களை பெறுகிறது. ஆனால் ஒரு ஒருங்கிணைப்பு மட்டும் உங்களுக்கு ஏன் பயனர் அங்கு இருந்தார் என்று சொல்லாது. ஓட்டுநர் டெலிவரி பணியில் இருந்தாரா? அவர்கள் எந்த ஆர்டரை வழங்குகிறார்கள்? பிசினஸ் லாஜிக்கை நேரடியாக பின்னணி இருப்பிட பேலோடில் இணைக்க உங்களுக்கு ஒரு வழி தேவை, எனவே அதை உங்கள் தரவுத்தளத்தில் எளிதாக வினவலாம்.

ட்ரேஸ்லெட் ஒத்திசைவு அதை எவ்வாறு தீர்க்கிறது

  1. வழிச் சூழலை அமைத்தல் தனிப்பயன் மெட்டாடேட்டாவை ட்ரேஸ்லெட்டில் செலுத்தலாம். நீங்கள் setRouteContext() ஐ அழைத்த பிறகு பதிவுசெய்யப்பட்ட ஒவ்வொரு இடமும் தானாகவே SQLite தரவுத்தளத்தில் இந்தத் தரவுடன் நிரந்தரமாகக் குறிக்கப்படும்.

    await tl.Tracelet.setRouteContext( const tl.RouteContext( taskId: 'delivery-1234', driverId: 'john_doe', custom: {'shift_id': 'morning-shift-001'}, ), );
  2. விளைவான JSON பேலோட் ட்ரேஸ்லெட் உங்கள் பின்தளத்தில் ஒத்திசைக்கும்போது, ​​வரிசையில் உள்ள ஒவ்வொரு இடமும் 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" } } } ] }

பேட்டரி நிலை கண்காணிப்பு

ட்ரேஸ்லெட் கடுமையான, ஆஃப்லைன் சூழல்களுக்காக வடிவமைக்கப்பட்டுள்ளது, அங்கு ஒரு இருப்பிடம் பதிவுசெய்யப்பட்ட சில மணிநேரங்களுக்குப் பிறகு சாதனங்கள் ஒத்திசைக்கப்படலாம். புலத்தில் உள்ள சாதனத்தின் ஆரோக்கியத்தைப் புரிந்துகொள்ள உங்களுக்கு உதவ, ஒவ்வொரு இருப்பிடமும் பதிவுசெய்யப்படும் தருணத்தில் ட்ரேஸ்லெட் தானாகவே சரியான பேட்டரி நிலையைப் பிடிக்கும்.

இதற்கு பூஜ்ஜிய கட்டமைப்பு தேவை:

  • இயந்திரம் 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'") );

காட்சி 6: டெலிமேடிக்ஸ் பின்தளம்

கருத்துகள் ஆராயப்பட்டன: டெலிமாடிக்ஸ் ஒத்திசைவு, நிகழ்வு பேலோட் திட்டம், தனி முனைப்புள்ளிகள்

பிரச்சனை

உங்கள் பயன்பாடு ஏற்கனவே இருப்பிடங்களை ஸ்ட்ரீம் செய்கிறது. இப்போது தயாரிப்புக் குழு ஓட்டுநர் நடத்தையையும் விரும்புகிறது - கடுமையான பிரேக்கிங், கடுமையான முடுக்கம், கார்னரிங், வேகம் - ஒரு டிரைவருக்கு மதிப்பெண். இந்த நிகழ்வுகள் பின்னணியில் பதிவு செய்யப்படுகின்றன, வழக்கமாக ஃபோனில் சிக்னல் இல்லை மற்றும் யாரும் திரையைப் பார்க்கவில்லை. நீங்கள் இழக்கக் கூடிய வரிசைகள் அவையாகும், மேலும் “மீண்டும் முயற்சிக்கவும்” என்பதைத் தட்டுவதற்கு எந்தப் பயனரும் இல்லை.

ட்ரேஸ்லெட் ஒத்திசைவு அதை எவ்வாறு தீர்க்கிறது

  1. syncTelematics உடன் தேர்ந்தெடுக்கவும் வாகனம் ஓட்டுதல் மற்றும் தாக்க நிகழ்வுகள் எப்போதும் உள்நாட்டில் தொடரும் - இதைத்தான் Tracelet.getTelematicsEvents() படிக்கிறது. அவற்றைப் பதிவேற்றுவது இயல்புநிலையில் தேர்வு மற்றும் முடக்கம் ஆகும், எனவே ஏற்கனவே உள்ள ஒருங்கிணைப்பின் பேலோட் அதன் அடியில் மாறாது.

    http: tl.HttpConfig( url: 'https://api.example.com/locations', method: tl.HttpMethod.post, autoSync: true, batchSync: true, maxBatchSize: 50, syncTelematics: true, // ← upload driving/impact events too ),
  2. ஒரு கோரிக்கை, ஒரு ரேடியோ விழிப்பு (இயல்புநிலை) syncTelematics: true மற்றும் telematicsUrl இல்லாமல், நிகழ்வுகள் இருப்பிடக் கோரிக்கையை உங்கள் location வரிசைக்கு அடுத்து ரூட்-லெவல் telematics வரிசையாக இயக்கும். ஒரு ஃப்ளஷ் ஒரு இடுகையாக இருக்கும் - பின்னணி ரேடியோ ஒரு முறை எழுகிறது, இரண்டு முறை அல்ல.

    { "location": [ /* ...your usual location records... */ ], "telematics": [ { "id": 412, "event_type": "harsh_braking", "severity": 0.82, "speed": 18.4, "value": 0.47, "latitude": 24.8607, "longitude": 67.0011, "timestamp": "2026-08-20T09:14:02.000Z", "synced": false, "trip_id": "9f2c0f1e-4c31-4b2a-9a77-1d0f3b5e7c88" } ] }
    புலம்வகைபொருள்
    நோட்ரான்ஸ்0லேட்நோட்ரான்ஸ்1லேட்உள்ளூர் SQLite வரிசையின் முதன்மை விசை. ஒவ்வொரு நிறுவலுக்கும் ஏறுவரிசை - உங்கள் பக்கத்தில் நகல் எடுக்க அதைப் பயன்படுத்தவும்.
    நோட்ரான்ஸ்0லேட்நோட்ரான்ஸ்1லேட்நோட்ரான்ஸ்2லேட், நோட்ரான்ஸ்3லேட், நோட்ரான்ஸ்4லேட், நோட்ரான்ஸ்5லேட் அல்லது ஒரு தாக்க வகை (potential_crash, crash, potential_fall, fall).
    நோட்ரான்ஸ்0லேட்நோட்ரான்ஸ்1லேட்இயல்பாக்கப்பட்ட 0.0–1.0 - நிகழ்வு கண்டறிதல் வரம்பை எவ்வளவு தூரம் கடந்தது.
    நோட்ரான்ஸ்0லேட்நோட்ரான்ஸ்1லேட்நிகழ்வின் வேகம் m/s இல். ஒரு தாக்கத்திற்கு, உள்ளே செல்லும் வேகம்.
    நோட்ரான்ஸ்0லேட்நோட்ரான்ஸ்1லேட்severityக்குப் பின்னால் உள்ள இயற்பியல் அளவு: g கடுமையான நிகழ்வுகள் மற்றும் தாக்கங்களுக்கு, கிமீ/மணி வரம்பிற்கு மேல் வேகம்.
    நோட்ரான்ஸ்0லேட் / நோட்ரான்ஸ்1லேட்நோட்ரான்ஸ்2லேட்எங்கே நடந்தது.
    நோட்ரான்ஸ்0லேட்நோட்ரான்ஸ்1லேட்ISO-8601.
    நோட்ரான்ஸ்0லேட்நோட்ரான்ஸ்1லேட்வரிசையைப் படிக்கும் போது அதன் நிலை — கம்பியில் ஒரு நிகழ்வுக்கு எப்போதும் false.
    நோட்ரான்ஸ்0லேட்நோட்ரான்ஸ்1லேட்இந்த நிகழ்வின் போது பதிவுசெய்யப்பட்ட பயணம் அல்லது null இன் வெளியில். அந்த பயணத்தின் போது பதிவுசெய்யப்பட்ட இடங்களிலும் அதே மதிப்பு தோன்றும், இதுவே நீங்கள் அவற்றை குழுவாக்க உதவுகிறது.

    speed மற்றும் value ஆகியவை 3.8.3 இல் தொடர்ந்த வரிசையில் சேர்ந்தன. இரண்டுக்கும் பழைய நிறுவல் அறிக்கை 0 மூலம் பதிவுசெய்யப்பட்ட நிகழ்வுகள்: நெடுவரிசைகள் பூஜ்ஜியமாக இல்லை, எனவே மேம்படுத்தப்பட்ட தரவுத்தளமானது பழைய வரிசையை உண்மையான பூஜ்ஜியத்திலிருந்து சொல்ல முடியாது.

  3. பேச்சிங் மற்றும் மீண்டும் முயற்சி 250 ஒத்திசைக்கப்படாத நிகழ்வுகள் ஒரு ஃப்ளஷுக்கு செல்லும், முதலில் பழையது. அந்த வரம்பு maxBatchSize இலிருந்து சுயாதீனமானது, இது இருப்பிடத் தொகுப்பை மட்டுமே அளவிடுகிறது.

    நிகழ்வுகள் ஒத்திசைக்கப்பட்டதாகக் குறிக்கப்படும் அவற்றைக் கொண்டு சென்ற கோரிக்கை வெற்றிபெறும்போது மட்டுமே. தோல்வியுற்ற போஸ்ட் - ஆஃப்லைன், 401, 503 - அவர்களை இடங்களைப் போலவே கைவிடுவதற்குப் பதிலாக அடுத்த முயற்சிக்கு வரிசையில் நிற்க வைக்கிறது.

    அவை குறியிடப்பட்டவை, நீக்கப்படவில்லை என்பதை நினைவில் கொள்ளவும்: பதிவேற்றப்பட்ட நிகழ்வு Tracelet.getTelematicsEvents() க்கு தெரியும், எனவே உங்கள் ஆப்ஸ் டிரைவருக்கு அதன் சொந்த வரலாற்றைக் காண்பிக்கும். ஒத்திசைக்கப்பட்ட வால் புதிய 1000 வரிசைகளுக்கு டிரிம் செய்யப்பட்டதால், அட்டவணை எப்போதும் வளர முடியாது. ஒத்திசைக்கப்படாத வரிசைகள் ஒருபோதும் ஒழுங்கமைக்கப்படாது.

  4. trip_id உடன் பயணத்தின் மூலம் நிகழ்வுகளை தொகுத்தல் ஒவ்வொரு இடம் மற்றும் வாகனம் ஓட்டும் நிகழ்வு ஒரு trip_id ஐக் கொண்டுள்ளது: UUIDv4 ஒரு பயணம் தொடங்கும் போது SDK ஐ மாற்றுகிறது, எந்த பயணமும் இயங்காதபோது null ஆகும். இது இரண்டு வரிசைகளுக்கு இடையே உள்ள இணைப்பாகும் - SELECT … WHERE trip_id = ? உங்களுக்கு ஒரு பயணத்தின் புள்ளிகளையும் அதன் கடுமையான பிரேக்கிங் நிகழ்வுகளையும் ஒன்றாக வழங்குகிறது.

    எப்போது எழுதப்பட்டது என்பது முக்கியமான பகுதி. ஐடி SQLite வரிசையில் செருகு நேரத்தில் முத்திரையிடப்படும், வரிசை பதிவேற்றப்படும்போது அல்ல. எனவே இன்று காலைப் பயணத்தின் போது பதிவுசெய்யப்பட்ட ஒரு புள்ளி, மாலை வரை ஃபோன் ஆஃப்லைனில் இருந்தாலும், வரிசை குறைவதற்குள் வேறு பயணம் ஓடிக்கொண்டிருந்தாலும், அந்தப் பயணத்துடன் லேபிளிடப்பட்டிருக்கும். பதிவேற்ற நேரத்தில் அதைத் தீர்ப்பது, ஃப்ளஷில் சுறுசுறுப்பாக நடந்ததைக் கொண்டு முழு பின்னடைவையும் மறுபெயரிடும்.

    உங்கள் பின்தளத்தை வடிவமைப்பதில் மதிப்புள்ள இரண்டு விளைவுகள்:

    • பயணத்தின் தொடக்கத்தில் சில புள்ளிகள் trip_id: null கொண்டிருக்கும். பயணத்தை கண்டறிதல் ஒரு இயக்க மாற்றத்தை பின்பற்றுகிறது, எனவே SDK பயணம் துவங்கியதாக அறிவிக்கும் முன்பே சில திருத்தங்கள் பதிவு செய்யப்பட்டுள்ளன. அவை மீண்டும் நிரப்பப்படவில்லை - மதிப்பு எழுதும் தருணத்தில் நிலையை பதிவு செய்கிறது. பயணத்தின் தொடக்க நேர முத்திரைக்கு அருகிலுள்ள ஒவ்வொரு புள்ளியும் அதன் ஐடியைக் கொண்டுள்ளது என்று கருத வேண்டாம்.
    • அதன் மூலம் வரிசைப்படுத்த வேண்டாம். UUIDv4 ஒளிபுகா மற்றும் காலவரிசைப்படி வரிசைப்படுத்தாது. timestamp மூலம் ஆர்டர் செய்து, பயணங்களை அவற்றின் தொடக்கத்தில் ஆர்டர் செய்யுங்கள்.

    trip_id என்பது சேர்க்கை — விசையானது தற்போதுள்ள இருப்பிடம் மற்றும் டெலிமாடிக்ஸ் பதிவுகளை மறுபெயரிடாமல் அல்லது எதையும் நகர்த்தாமல் இணைகிறது, மேலும் எந்த பயணமும் செயலில் இல்லாதபோது வெளிப்படையாக null ஆகும், எனவே நீங்கள் இருக்கும் விசையை நம்பலாம். பயண அடையாளத்திற்கு முன் எழுதப்பட்ட வரிசைகள் அனுப்பப்பட்ட அறிக்கை null.

  5. பயணச் சுருக்கங்கள் (trips) ஒவ்வொரு முடிக்கப்பட்ட பயணமும் ஒரு முறை சேமிக்கப்படும், அதே trip_id இன் கீழ் அதன் இருப்பிடங்கள் மற்றும் ஓட்டுநர் நிகழ்வுகள் மேற்கொள்ளப்படுகின்றன, மேலும் அடுத்த ஃப்ளஷுடன் ரூட்-லெவல் trips வரிசையாக வெளியேறும், இன்னும் ஒரு இடுகையில்:

    { "location": [ ... ], "telematics": [ ... ], "trips": [ { "trip_id": "9f2c0f1e-4c31-4b2a-9a77-1d0f3b5e7c88", "started_at": "2026-08-20T08:52:11.000Z", "ended_at": "2026-08-20T09:14:11.000Z", "distance": 18420.0, "duration": 1320.0, "average_speed": 13.95, "start_location": { "latitude": 24.81, "longitude": 67.05 }, "stop_location": { "latitude": 24.8607, "longitude": 67.0011 }, "synced": false } ] }
    புலம்வகைபொருள்
    நோட்ரான்ஸ்0லேட்நோட்ரான்ஸ்1லேட்பயணத்தின் UUIDv4, location மற்றும் telematics வரிசைகளுடன் இணைக்கும் விசை.
    நோட்ரான்ஸ்0லேட் / நோட்ரான்ஸ்1லேட்ISO 8601பயண வரம்புகள், UTC.
    நோட்ரான்ஸ்0லேட்நோட்ரான்ஸ்1லேட்பயணத்தின் வழிப் புள்ளிகளில் மீட்டர்கள்.
    நோட்ரான்ஸ்0லேட்நோட்ரான்ஸ்1லேட்நொடிகள்.
    நோட்ரான்ஸ்0லேட்நோட்ரான்ஸ்1லேட்distance / duration, m/s; பூஜ்ஜிய நீள பயணத்திற்கு 0.
    நோட்ரான்ஸ்0லேட் / நோட்ரான்ஸ்1லேட்பொருள் அல்லது nullநோட்ரான்ஸ்3லேட்; null, திருத்தம் எதுவும் கிடைக்காதபோது.
    நோட்ரான்ஸ்0லேட்நோட்ரான்ஸ்1லேட்பேலோடில் எப்போதும் false.
    • சரியாக ஒரு பயணத்திற்கு ஒரு சுருக்கம். இது trip_id இல் விசை செய்யப்படுகிறது, எனவே ஒரு பயணம் இரண்டு வரிசைகளாக இருமுறை அனுப்பப்படாது; மறுமுயற்சி மீண்டும் அதே கோரிக்கையை வழங்கும் பட்சத்தில், trip_id ஐ உங்களின் மேல்விசையாகப் பயன்படுத்தவும்.
    • எல்லாவற்றையும் போலவே டெலிவரி செய்யப்பட்டது. ஒரு பயணம் அனுப்பப்பட்டதாகக் குறிக்கப்படும், அதை எடுத்துச் செல்லும் கோரிக்கை வெற்றியடையும் போது மட்டுமே; ஒரு தோல்வியுற்ற பறிப்பு நிலுவையில் உள்ளது. அதன் கடைசி இருப்பிடம் பதிவேற்றப்பட்ட பிறகு முடிவடையும் பயணம் அதன் சொந்த கோரிக்கையின் பேரில் இன்னும் செல்கிறது.
    • trips இல்லை, காலியாக இல்லை, அனுப்புவதற்கு எதுவும் இல்லாத போது, மற்றும் ஏற்கனவே உள்ள நுகர்வோர் விசையை புறக்கணிக்க முடியும்.
    • தனிப்பயன் பாடி பில்டர்கள் context.trips (தலை இல்லாத பில்டர்கள்: event['trips']) போன்ற பொருட்களைப் பெறுகிறார்கள். உங்கள் உடலில் அவற்றைச் சேர்க்கவும்: கோரிக்கை வெற்றியடைந்தவுடன் பில்டருக்கு அனுப்பப்பட்ட பயணம் குறிக்கப்பட்டது.
    • சாதனம் 1,000 சுருக்கங்களை வைத்திருக்கிறது; பழையது கைவிடப்பட்டது, எனவே ஒத்திசைக்காத பயன்பாடு காலவரையின்றி அட்டவணையை வளர்க்காது.
  6. ஒரு தனி முனைப்புள்ளி (telematicsUrl) இடங்களைத் தவிர வேறு எங்காவது நிகழ்வுகளை உங்கள் பின்தளத்தில் வழி நடத்தினால், telematicsUrl ஐ அமைக்கவும். நிகழ்வுகள் அதன் சொந்த இடுகையில் பயணிக்கின்றன - உடல் {"telematics": [...]}, அதே தலைப்புகள், காலக்கெடுக்கள், மறு முயற்சிகள் மற்றும் SSL பின்னிங் url -க்குப் பதிலாக - இருப்பிட பேலோடில் சவாரி செய்வதற்குப் பதிலாக.

    http: tl.HttpConfig( url: 'https://api.example.com/locations', syncTelematics: true, telematicsUrl: 'https://api.example.com/telematics', ),

    பேட்டரியின் விலை பார்ப்பதை விட சிறியதாக உள்ளது: இரண்டு கோரிக்கைகளும் ஒரே ஃப்ளஷ்ஷிற்குள் மீண்டும் மீண்டும் செல்கின்றன, எனவே இரண்டாவது ஏற்கனவே விழித்திருக்கும் ரேடியோவை மீண்டும் பயன்படுத்துகிறது. அதன் சொந்த அட்டவணையில் இயங்கும் இரண்டாவது அப்லோடரே பேட்டரியை வடிகட்டுகிறது, அது இதுவல்ல. ஒரு டெலிமாடிக்ஸ்-மட்டும் ஃப்ளஷ் (நிகழ்வுகள் வரிசையில் இல்லை, புதிய இடங்கள் இல்லை) காலியான ஒன்றை அனுப்புவதற்குப் பதிலாக POST இடத்தை முழுவதுமாகத் தவிர்க்கிறது.

    பின்னர் இணைக்கப்பட்ட பாதைக்கு செல்ல, null ஐ விட வெற்று சரத்தை அனுப்பவும் — config இணைக்கப்பட்டது, மாற்றப்படவில்லை, எனவே null என்றால் “ஏற்கனவே உள்ளதை விட்டு விடுங்கள்”.

  7. கஸ்டம் பாடி பில்டர்களும் அவர்களைப் பார்க்கிறார்கள் நீங்களே உடலை வடிவமைத்தால், மேலே உள்ள அட்டவணையில் உள்ள அதே புலப் பெயர்களைப் பயன்படுத்தி, ஒத்திசைக்கப்படாத நிகழ்வுகள் இருப்பிடங்களுடன் சூழலில் வரும்:

    Tracelet.setSyncBodyBuilder((context) async { return { 'points': context.locations, 'events': context.telematics, // driving/impact events 'trips': context.trips, // completed-trip summaries }; });

    syncTelematics இயக்கப்படும் வரை context.telematics காலியாக இருக்கும்.

பயணச் சுருக்கங்கள் தொடர்ந்து ஒத்திசைக்கப்படுகின்றன (மேலே உள்ள உருப்படி 5). பயணத்தின் முடிவை SDK கண்டறியும் போது, ​​சுருக்கமானது பூர்வீகமாக எழுதப்படுகிறது, எனவே இது start() என்று அழைக்கப்படும் டார்ட் தனிமைப்படுத்தலைச் சார்ந்து இருக்காது, மேலும் இது ஆஃப்லைனில் நீடிக்கிறது. ஒரு வரம்பு உள்ளது: பயணம் கண்டறிதல் SDK அமர்வில் இயங்குகிறது, செயல்முறை மறுதொடக்கம் செய்யப்பட்ட பிறகு மேற்கொள்ளப்படும் கொலை-நிலை கண்காணிப்பில் அல்ல, எனவே அந்த நிலைத்தில் மேற்கொள்ளப்படும் பயணம் பயணத்தையும் சுருக்கத்தையும் உருவாக்காது. அதன் இருப்பிடங்கள் இன்னும் trip_id: null உடன் பதிவு செய்யப்பட்டுள்ளன. சுருக்கங்கள் தொடரும் முன் பதிப்பில் முடிந்த பயணங்கள் எதுவும் இல்லை. #401  ஐப் பார்க்கவும்.

Last updated on