அடிக்கடி கேட்கப்படும் கேள்விகள்
பொது அனுமதிகள் & செயலிழப்புகள்
எந்த அனுமதியையும் சேர்க்கவில்லை என்றால் என்ன நடக்கும்? இடிந்துவிடுமோ?
இல்லை, ட்ரேஸ்லெட் செயலிழக்காது. ட்ரேஸ்லெட் அதிக நெகிழ்ச்சியுடன் வடிவமைக்கப்பட்டுள்ளது. கட்டாய இருப்பிட அனுமதிகளை அறிவிக்காமலோ அல்லது கோராமலோ நீங்கள் Tracelet.start() ஐ அழைக்க முயற்சித்தால், Tracelet செக்யூரிட்டி எக்சப்சனைப் பிடித்து, கன்சோலில் விரிவான பிழையைப் பதிவுசெய்து, தோல்வி நிகழ்வை உங்கள் கேட்பவர்களுக்கு வெளிப்படுத்தும். பயன்பாடு தானாகவே தொடர்ந்து இயங்கும். இருப்பினும், அனுமதிகள் வழங்கப்படும் வரை எந்த இடமும் பதிவு செய்யப்படாது.
நாம் இயக்க (உடல் செயல்பாடு) அனுமதியை இயக்கவில்லை என்றால் என்ன நடக்கும்?
இல்லை, அது செயலிழக்காது. ACTIVITY_RECOGNITION (Android) அல்லது Motion & Fitness (iOS) அனுமதி வழங்கப்படாவிட்டால், ட்ரேஸ்லெட் தானாகவே நிலையான தூர அடிப்படையிலான கண்காணிப்புக்குத் திரும்பும்.
இருப்பினும், பேட்டரி வடிகால் கணிசமாக அதிகரிக்கும். இயக்கம் கண்டறிதல் இல்லாமல், சாதனம் நிலையாக இருக்கும்போது ட்ரேஸ்லெட் GPS வன்பொருளை தூங்க வைக்க முடியாது. உகந்த பேட்டரி ஆயுளை உறுதி செய்வதற்காக தயாரிப்பு பயன்பாடுகளுக்கு இந்த அனுமதியைக் கோருவது மிகவும் பரிந்துரைக்கப்படுகிறது.
iOS உருவாக்கம் மற்றும் அமைவு
”வரையறுக்கப்படாத சின்னம்” ரஸ்ட்/யூனிஎஃப்ஐ பிழைகள் (_ffi_tracelet_core_rustbuffer_free, _uniffi_tracelet_core_checksum_method_*) மூலம் iOS உருவாக்கம் தோல்வியடைகிறது.
Flutter’s Swift Package Manager ஒருங்கிணைப்பை இயக்கவும். Tracelet’s Rust core (TraceletCore.xcframework, tracelet_ios ஆல் பயன்படுத்தப்படும் UniFFI குறியீடுகளை வெளிப்படுத்துகிறது) Swift Package Manager மூலம் இணைக்கப்பட்டுள்ளது. பாரம்பரிய CocoaPods-மட்டும் பாதையில் கட்டமைப்பு tracelet_ios இலக்குடன் இணைக்கப்படவில்லை, எனவே Xcode இன் இணைப்பான் _ffi_tracelet_core_rustbuffer_free மற்றும் _uniffi_tracelet_core_checksum_method_* போன்ற வரையறுக்கப்படாத குறியீடுகளைப் புகாரளிக்கிறது.
இதை இதனுடன் சரிசெய்யவும்:
flutter config --enable-swift-package-manager
flutter clean
flutter pub get
flutter run # or: flutter build iosகுறிப்புகள்:
.xcworkspaceஐ திறந்து Xcode இலிருந்து நேரடியாக உருவாக்குவதை விட, SPM-அறிவு கட்டமைப்பை இயக்கும் Flutter CLI அல்லது உங்கள் IDE (VS Code) இலிருந்து உருவாக்கவும்/இயக்கவும்.- இது ஒரு முறை உலகளாவிய ஃப்ளட்டர் அமைப்பாகும்; ஒரு திட்டத்திற்கு நீங்கள் அதை மாற்ற வேண்டியதில்லை.
flutter clean+ ஒரு புதியpod installமட்டுமே அதை இல்லை தீர்க்காது - காணாமல் போன துண்டு ரஸ்ட் கட்டமைப்பை இணைக்கும் SPM ஆகும், பழைய Pods அல்ல.
பேட்டரி & மோஷன் சென்சார்கள்
நடக்கும்போது மோஷன் சென்சார் அதிக பேட்டரியை இழுக்கிறதா?
இல்லை, இது உண்மையில் பேட்டரியைச் சேமிக்கிறது. ஹார்டுவேர் மோஷன் சென்சார்கள் (முடுக்கமானி/படி கண்டறிதல்) ஒரு மணி நேரத்திற்கு 0.1% பேட்டரியை விட குறைவாகவே பயன்படுத்துகின்றன. ட்ரேஸ்லெட் இந்த அல்ட்ரா-லோ-பவர் சென்சாரைப் பயன்படுத்தி, ஃபோன் ஒரு மேசையில் இருக்கும் போதெல்லாம், மிகவும் சக்தி வாய்ந்த ஜிபிஎஸ் சிப்பை (ஒரு மணிநேரத்திற்கு NOTRANS1 லேட் வடிகட்டுகிறது) முழுவதுமாக அணைக்க.
நீங்கள் நடக்கத் தொடங்கும் போது, இயக்கம் சென்சார் உடனடியாக GPS ஐ எழுப்பி பயணத்தை பதிவு செய்யும். பாரம்பரிய கண்காணிப்புடன் ஒப்பிடும்போது ஒட்டுமொத்த முடிவு பேட்டரி ஆயுளுக்கு ஒரு பெரிய நிகர-பாசிட்டிவ் ஆகும்.
ஃபோன் நகராதபோது நான் ஏன் தொடர்ச்சியான புதுப்பிப்புகளைப் பெறக்கூடாது?
இது வேண்டுமென்றே செய்யப்பட்டது — இது ட்ரேஸ்லெட் வழங்கும் மிகப்பெரிய பேட்டரி சேமிப்பு ஆகும். சாதனம் அசையாமல் இருப்பதை ட்ரேஸ்லெட் தீர்மானிக்கும் போது, ட்ரேஸ்லெட் தொடர்ச்சியான ஜி.பி.எஸ்-ஐக் குறைத்து, குறைந்த-பவர் பயன்முறைக்கு (அவ்வப்போது ஒரு-ஷாட் திருத்தங்கள் அல்லது ஜியோஃபென்ஸ் கண்காணிப்பு) மாறுகிறது. உண்மையான இயக்கம் மீண்டும் தொடங்கும் தருணத்தில், தொடர்ச்சியான கண்காணிப்பு தானாகவே எழுகிறது.
நிலையானதாக இருக்கும் போது “நான் இங்கே இருக்கிறேன்” என்ற குறிப்பிட்ட இடத்தை நீங்கள் இன்னும் விரும்பினால், heartbeatInterval (வினாடிகள்) அமைக்கவும். நிறுத்தப்பட்டிருக்கும் போது சிறிய ஜிபிஎஸ் ட்ரிஃப்ட் ஓடோமீட்டரை உயர்த்தாது - odometerAccuracyThreshold (இயல்பு 50 m) ஐ விட மோசமான திருத்தங்கள் தூரத்திலிருந்து விலக்கப்படும்.
பேட்டரி பயன்பாட்டை இன்னும் குறைப்பது எப்படி?
ட்ரேஸ்லெட் ஏற்கனவே ஜி.பி.எஸ் நிலையாக இருக்கும்போது தூங்குகிறது, ஆனால் உங்களிடம் பல நெம்புகோல்கள் உள்ளன:
- பேட்டரி பட்ஜெட் —
GeoConfigஇல்batteryBudgetPerHourஅமைக்கவும் (எ.கா.3.03%/hrக்கு). ட்ரேஸ்லெட் பின்னர் அந்த இலக்கின் கீழ் இருக்க இயக்க நேரத்தில்distanceFilterமற்றும்desiredAccuracyஆகியவற்றை தானாக சரிசெய்கிறது. - வேக்லாக் வெளியீடு —
AndroidConfigஇல்releaseWakelockWhenStationary: trueஐ அமைக்கவும், பயனர் நிலையாக இருக்கும்போது CPU முழுவதுமாக தூங்க அனுமதிக்கவும் (MotionDetectionMode.smartதேவை). - தூர வடிப்பான் — ஒரு பெரிய
distanceFilter(மீட்டர்கள்) நகரும் போது குறைவான திருத்தங்களை பதிவு செய்கிறது. - குறைந்த துல்லியம் —
medium/lowஇன்desiredAccuracyஆனதுhigh/bestஐ விட குறைவான ஆற்றலைப் பெறுகிறது. - காலமுறை பயன்முறை — “தோராயமாக அவை எங்கே இருக்கின்றன” என்பதற்காக, தொடர்ச்சியான கண்காணிப்பை விட குறிப்பிட்ட கால இடைவெளியில் ஒரு முறை திருத்தங்கள் (
startPeriodic) மிகவும் மலிவானவை. - இயக்க அனுமதியை வழங்குங்கள் —
ACTIVITY_RECOGNITIONட்ரேஸ்லெட் இல்லாமல் ஜிபிஎஸ் ஆக்ரோஷமாக தூங்க முடியாது.
motionDetectionMode விருப்பங்களுக்கு என்ன வித்தியாசம்?
GPS ஐ தொடங்க/நிறுத்துவதற்கான இயக்கத்தை ட்ரேஸ்லெட் எவ்வாறு கண்டறிகிறது என்பதை motionDetectionMode தீர்மானிக்கிறது:
accelerometer— வன்பொருள் மோஷன் சென்சார்களைப் பயன்படுத்துகிறது (மற்றும் அனுமதிக்கப்பட்டால் செயல்பாட்டு அங்கீகாரம்). குறைந்த சக்தி, உட்புறத்திலும் ஜிபிஎஸ் பிழைத்திருத்தம் இல்லாமல் வேலை செய்கிறது.speed— GPS வேகத்தை மட்டுமே பயன்படுத்துகிறது. எளிமையானது மற்றும் யூகிக்கக்கூடியது, ஆனால் நீங்கள் நிறுத்திவிட்டதைக் கவனிக்க இதற்கு ஜிபிஎஸ் திருத்தம் தேவை, எனவே இது மெதுவாக வினைபுரிந்து அதிக சக்தியைப் பயன்படுத்துகிறது.smart— இரண்டையும் ஒருங்கிணைக்கிறது: *முடுக்கமானி அல்லது GPS வேகம் நீங்கள் நகர்கிறீர்கள் என்று சொன்னால் அது தொடர்ந்து கண்காணிப்பில் இருக்கும், மேலும் நீங்கள் நிறுத்தியதை இரண்டும் ஒப்புக்கொண்டால் மட்டுமே நிலையானதாக இருக்கும். தவறான மாற்றங்களுக்கு எதிராக மிகவும் வலுவானது; பெரும்பாலான பயன்பாடுகளுக்கு பரிந்துரைக்கப்படுகிறது.
இருப்பிட சேவைகள் & கண்காணிப்பு நிலைங்கள்
கண்காணிப்பு செயலில் இருக்கும்போது பயனர் இருப்பிடச் சேவைகளை முடக்கினால் என்ன நடக்கும்?
குறுகிய பதில்: ட்ரேஸ்லெட் டிராக்கிங்கை நிறுத்தவோ, செயலிழக்கவோ அல்லது கிழிக்கவோ செய்யாது. இது கண்காணிப்பு அமர்வை ஆயுதமாக வைத்திருக்கிறது, providerchange நிகழ்வை வெளியிடுகிறது, இதன் மூலம் உங்கள் பயன்பாடு செயல்பட முடியும், இருப்பிடம் முடக்கத்தில் இருக்கும் போது புதிய இடங்களைப் பதிவுசெய்யாது (கீழே உள்ள இரண்டு இயங்குதளம் சார்ந்த விதிவிலக்குகளுடன்), மேலும் தானாகவே மீண்டும் தொடங்கும் பயனர் இருப்பிடத்தை மீண்டும் இயக்கும் தருணத்தில் - ஒவ்வொரு நிலைத்திலும் (முன்புறம், பின்னணி, நிறுத்தப்பட்டது). நீங்கள் இல்லை மீண்டும் start() ஐ அழைக்க வேண்டும்.
“இருப்பிடச் சேவைகள் முடக்கப்பட்டுள்ளன” என்பது OS-நிலை இருப்பிடத்தை மாற்றுவதைக் குறிக்கிறது (Android: அமைப்புகள் → இருப்பிடம்; iOS: அமைப்புகள் → தனியுரிமை → இருப்பிடச் சேவைகள்). பயன்பாட்டின் அனுமதியைத் திரும்பப் பெறுவது தொடர்புடைய ஆனால் தனி வழக்கு - இந்த பதிலின் முடிவில் உள்ள குறிப்பைப் பார்க்கவும்.
அதை எப்படி கண்டறிவது
final sub = tl.Tracelet.onProviderChange((tl.ProviderChangeEvent e) {
if (!e.enabled) {
// Location services were turned OFF — prompt the user / show a banner.
} else {
// Back ON — Tracelet has already resumed; no action required.
}
});ProviderChangeEvent ஆனது enabled, status (அங்கீகாரம்), gps, network, accuracyAuthorization, gpsFallback மற்றும் mockLocationsDetected ஆகியவற்றைக் கொண்டுள்ளது. அதே நிகழ்வு பின்னணி/கொல்லப்பட்ட நிலையில் உள்ள தலை இல்லாத அழைப்பிற்கு வழங்கப்படும் (பதிவு செய்தால்) மேலும் நீங்கள் disableProviderChangeRecord: true ஐ அமைக்கும் வரை providerchange பதிவாக தொடரும்.
நிலை மற்றும் தளத்தின் அடிப்படையில் நடத்தை
| நிலை | அண்ட்ராய்டு | iOS |
|---|---|---|
| முன்பக்கம் | providerchange (enabled: false) தீ; முன்புற சேவை உயிருடன் இருக்கும்; மீண்டும் இயக்கப்படும் வரை புதிய திருத்தங்கள் எதுவும் இல்லை. | providerchange தீ; didFailWithError அழகாக கையாளப்படுகிறது (ஒரு-ஷாட்கள் கடைசியாக அறியப்பட்ட இடத்திற்குத் திரும்பும்); புதிய திருத்தங்கள் இல்லை. |
| பின்னணி | முன்புற சேவை (மற்றும் அதன் அறிவிப்பு) தொடர்ந்து இயங்குகிறது; இணைக்கப்பட்ட புதுப்பிப்புகள் வெறுமனே நிறுத்தப்படுகின்றன; providerchange இன்னும் அனுப்பப்பட்டது. மீண்டும் இயக்கியவுடன் தொடர்கிறது. | CLLocationManager சந்தா பதிவு செய்யப்பட்டிருக்கும்; இருப்பிடம் திரும்பும் வரை iOS எதையும் வழங்காது, பின்னர் மீண்டும் தொடங்கும் (மேலும் பகுதி/SLC வழியாக பயன்பாட்டை மீண்டும் தொடங்கலாம்). |
| நிறுத்தப்பட்டது (கொல்லப்பட்டது) | பின்னணி/துவக்க அமர்வு செயலில் இருந்தால் (stopOnTerminate: false / startOnBoot), சேவையானது மேலே உள்ள பின்னணியாக செயல்படும். செயல்முறை உயிருடன் இல்லை என்றால், OS அதைத் தொடங்கும் வரை எதுவும் இயங்காது. | குறிப்பிடத்தக்க இருப்பிடம்/பிராந்திய கண்காணிப்பு மூலம் iOS பயன்பாட்டை மறுதொடக்கம் செய்கிறது இருப்பிடம்/பிராந்திய நிகழ்வு நிகழும்போது மட்டுமே — இது இருப்பிடம் முடக்கத்தில் இருக்கும்போது செய்ய முடியாது. மீண்டும் இயக்கப்பட்டதும், அடுத்த தகுதி நிகழ்வு மீண்டும் தொடங்கப்பட்டு மீண்டும் தொடங்கும். |
எல்லா சந்தர்ப்பங்களிலும் அமர்வின் நிலை பாதுகாக்கப்படுகிறது, எனவே இருப்பிடத்தை மீண்டும் இயக்குவது, மறுதொடக்கம் செய்யாமல் தானாகவே கண்காணிப்பைத் தொடங்கும்.
ட்ரேஸ்லெட் என்ன * செய்யாது*
- இது இல்லை அமர்வை தானாக நிறுத்தும் அல்லது உங்கள் கட்டமைப்பு/நிலையை அழிக்கும்.
- இது இல்லை தூக்கி எறியவோ அல்லது செயலிழக்கச் செய்யவோ இல்லை — இயங்குதளம் “இடத்தை முடக்கியது / மறுக்கப்பட்டது” பிழை பிடிபட்டது.
- இது இல்லை இருப்பிடங்களை உருவாக்காது (கீழே உள்ள ஆண்ட்ராய்டு டெட் ரெகக்கனிங் தவிர) — உங்கள் DB ஆனது முடக்கப்பட்ட காலகட்டத்திற்கான இடைவெளியைக் கொண்டுள்ளது.
தெரிந்து கொள்ள வேண்டிய தளத்தின் பிரத்தியேகங்கள்
Android — பயனர் GPSஐ முடக்கினாலும், Wi-Fi/செல் பொசிஷனிங் இன்னும் இயக்கத்தில் இருந்தால், Tracelet தானாகவே பவர் பொசிஷனிங்கிற்குத் திரும்புகிறது gpsFallback: true உடன் providerchange ஐ வெளியிடுகிறது, GPS திரும்பும்போது முழுத் துல்லியத்தை மீட்டெடுக்கிறது. அந்த தோராயமான திருத்தங்கள் **** பதிவு செய்யப்பட்டு ஒத்திசைக்கப்பட்டது (locationSource மற்றும் அவற்றின் உண்மையான accuracy உடன் குறியிடப்பட்டுள்ளது). enableDeadReckoning: true எனில், கட்டமைக்கப்பட்ட தாமதத்திற்கு GPS தொலைந்த பிறகு, உண்மையான பிழைத்திருத்தம் வரும் வரை ட்ரேஸ்லெட் மோஷன் சென்சார்களில் இருந்து நிலைகளை மதிப்பிடும். நிலையான அறிவிப்பு முழுவதும் தெரியும்.
iOS — தோல்வியுற்ற requestLocation() ஆனது தொங்குவதற்குப் பதிலாக கடைசியாக அறியப்பட்ட இடத்தின் மூலம் ஒரு ஷாட் கோரிக்கைகளை தீர்க்கிறது. இருப்பிடம் முடக்கத்தில் இருக்கும்போது iOS எந்த பின்னணியையும் வழங்காது அல்லது நிகழ்வுகளை மறுதொடக்கம் செய்யாது; டெலிவரி மற்றும் கில்ட்-ஸ்டேட் மறுதொடக்கம் மீண்டும் இயக்கப்பட்டதும்.
உங்கள் பயன்பாட்டில் நீங்கள் என்ன செய்ய வேண்டும்
onProviderChangeக்கு குழுசேரவும் மற்றும்enabled == falseஆனதும் பேனர்/உரையாடலை வெளியிடவும்.- விருப்பமாக
Tracelet.openLocationSettings()வழியாக அமைப்புகளுக்கு பயனரை வழிநடத்தவும். - மறு-இயக்கத்தில் மீண்டும் வேண்டாம்
start()ஐ அழைக்கவும் - ட்ரேஸ்லெட் தானாகவே தொடங்கும்;start()ஐ அழைப்பது பாதிப்பில்லாதது ஆனால் தேவையற்றது.
ஆப்ஸின் அனுமதியை திரும்பப் பெறுதல் மற்றும் நிலைமாற்றத்தை முடக்குதல்
மாற்று முடக்குவது எல்லா பயன்பாடுகளையும் பாதிக்கிறது மேலும் மேலே குறிப்பிட்டபடி முழுமையாக மீட்டெடுக்க முடியும். ஆப்பின் இருப்பிட அனுமதியை (அல்லது “எப்போதும்” → “பயன்படுத்தும் போது” தரமிறக்குதல்) status / accuracyAuthorization புலங்கள் மூலம் அதே providerchange நிகழ்வின் மூலம் புகாரளிக்கப்படுகிறது. Android 12+ இல், பின்னணி-இருப்பிட அனுமதி தொலைந்துவிட்டால், துவக்க/பின்னணி மறுதொடக்கம் வேண்டுமென்றே தவிர்க்கப்படும் (இல்லையெனில் அது அமைதியாக தோல்வியடையும்) — அனுமதியை மீண்டும் அளித்து, மீண்டும் தொடங்குவதற்கு மீண்டும் தொடங்கவும்.
இருப்பிடங்கள் எவ்வளவு துல்லியமானவை மற்றும் வைஃபை/செல் திருத்தங்களிலிருந்து ஜிபிஎஸ்ஸை எப்படிச் சொல்வது?
ஒவ்வொரு Location ஆனது மீட்டரில் உண்மையான coords.accuracy மற்றும் locationSource குறிச்சொல்லைக் கொண்டுள்ளது: "gps" (≤50 மீ), "wifi" (≤200 மீ), "cell" (மோசமானது) அல்லது "network" (ஜிபிஎஸ் வீழ்ச்சியின் போது). ட்ரேஸ்லெட் இல்லை குறைந்த துல்லியமான திருத்தங்களை அமைதியாகக் கைவிடாது - அது அவற்றைப் பதிவுசெய்து, உங்கள் பாதை தொடர்ந்து இருக்கும் - ஆனால் இது ஓடோமீட்டர் (odometerAccuracyThreshold, இயல்புநிலை 50 மீ) மற்றும் சாத்தியமற்ற வேகத் தாவல்களை (maxImpliedSpeed) நிராகரிக்கிறது.
உங்களுக்கு ஜிபிஎஸ்-தர தரவை மட்டுமே தேவைப்பட்டால், உங்கள் பக்கத்தில் locationSource == "gps" அல்லது accuracy <= 50 மூலம் வடிகட்டவும். பயனர் தோராயமான/கரடுமுரடான இருப்பிடத்தை மட்டுமே (அல்லது iOS “துல்லியமான: ஆஃப்”) வழங்கியிருந்தால், ஒவ்வொரு திருத்தமும் OS கொள்கையின்படி தோராயமாக இருக்கும் - accuracyAuthorization / reducedAccuracy ஐச் சரிபார்க்கவும்.
என் டிராக் நடக்கும்போது இடது மற்றும் வலதுபுறம் தாவுகிறது மற்றும் தூரம் ஸ்ட்ராவாவை விட 2-3 மடங்கு அதிகமாக உள்ளது. நான் அதை எப்படி சரிசெய்வது?
ஜிபிஎஸ் சத்தம் உண்மையான இயக்கமாகப் பதிவு செய்யப்படுகிறது. நடை வேகத்தில் (~1.4 மீ/வி) ஒரு கைபேசியின் கிடைமட்டப் பிழையானது திறந்த வானத்தின் கீழ் 5-8 மீ மற்றும் மரத்தின் கீழ் அல்லது கட்டிடங்களுக்கு இடையில் கணிசமாக மோசமாக உள்ளது - பயனர் உண்மையில் இரண்டு திருத்தங்களுக்கு இடையில் எவ்வளவு தூரம் நகர்ந்தார் என்பதன் பெரும் பகுதி. பக்கவாட்டில் இருக்கும் ஒவ்வொரு நடுக்கமும் “ஸ்பைக்” ஒரு உண்மையான ஒருங்கிணைப்பு மாற்றமாகும், மேலும் ஒவ்வொரு சரிசெய்தலையும் நம்பும் ஓடோமீட்டர் அனைத்தையும் சேர்க்கிறது. ஃபிட்னஸ் பயன்பாடுகள் மென்மையாகத் தோற்றமளிக்கின்றன, ஏனெனில் அவை ஆன்-ஃபுட் கேஸுக்கு குறிப்பாக டியூன் செய்யப்படுகின்றன; SDK இயல்புநிலைகள் வாகனங்கள், சைக்கிள் ஓட்டுபவர்கள் மற்றும் பாதசாரிகள் முழுவதும் வேண்டுமென்றே நடுநிலை வகிக்கின்றன.
முதலில், 3.8.0-beta அல்லது அதற்குப் பிறகு மேம்படுத்தவும். 3.7.6 இல் அல்லது அதற்குக் கீழே உள்ள இரண்டு குறைபாடுகள் சரியாக இந்த அறிகுறியை உருவாக்கியது மற்றும் அதைச் சரிசெய்ய முடியவில்லை:
useKalmanFilter: trueஆனது ரெண்டர் செய்யப்பட்ட டிராக்கை மட்டும் மென்மையாக்கியது. ஸ்மூத்திங் பின் இருப்பிடச் செயலியை இயக்கி,coordsஐ மட்டுமே அளித்தது, எனவே ஓடோமீட்டர் raw jitter ஐ ஒருங்கிணைத்துக்கொண்டே இருந்தது - தூரம் தவறாக இருக்கும் போது வரைபடம் சுத்தமாக இருந்தது. இது இப்போது வடிப்பான்களுக்கு முன்** இயங்குகிறது, எனவே தூரம், துல்லியம்/மறைமுகமான-வேக வாயில்கள் மற்றும் ஓடோமீட்டர் அனைத்தும் டி-இரைச்சல் டிராக்கைப் பார்க்கின்றன. மேம்படுத்தப்பட்ட பிறகு உங்கள் பதிவு செய்யப்பட்ட தூரங்கள் குறையும் என்று எதிர்பார்க்கலாம்; அந்த துளி நீங்கள் முன்பு எண்ணிக்கொண்டிருந்த சத்தம்.odometerAccuracyThresholdக்கு மிகவும் கரடுமுரடான ஒரு ஃபிக்ஸ் சரியாக ஓடோமீட்டருக்கு வெளியே வைக்கப்பட்டுள்ளது, ஆனால் ஓடோமீட்டரின் குறிப்பு புள்ளி எப்படியும் அதற்கு முன்னேறியது - அதனால் அந்தப் பிரிவின் போது மூடப்பட்ட தரை நிரந்தரமாக இழக்கப்பட்டது. வாயிலை இறுக்குவது தூரத்தை சரி செய்வதை விட காணாமல் போனது. இப்போது ஒரு கரடுமுரடான திருத்தம் அதன் தூரத்தை ஒத்திவைக்கிறது அடுத்த நம்பகமான பிழைத்திருத்தம் முழு காலத்தையும் புத்தகமாக்குகிறது.
பின்னர் வரம்புகளை யூகிப்பதை நிறுத்துங்கள் — சாதனத்தில் வகைப்படுத்தி அவற்றைத் தேர்ந்தெடுக்கட்டும்:
await tl.Tracelet.ready(tl.Config(
geo: tl.GeoConfig(
filter: tl.LocationFilter(useKalmanFilter: true),
),
classifier: tl.ClassifierConfig(
enableFusedClassifier: true, // required — the classifier must be running
autoTuneFromTransportMode: true,
),
));still / walking / running / cycling / vehicle ஆகியவற்றை பிரிக்க GPS வேகத்துடன் முடுக்கமானி கேடன்ஸை வகைப்படுத்தி இணைக்கிறது, மேலும் ஒரு பயன்முறை கமிட் செய்யும் போது distanceFilter, trackingAccuracyThreshold, NOTRANSLATE, odometerAccuracyThreshold மற்றும் மதிப்புக்கு ஏற்றவாறு மாற்றுகிறது. உத்திரவாதங்களுக்கு போக்குவரத்து முறையில் தானாகச் சரிசெய்தல் என்பதைப் பார்க்கவும் (உறுதிப்படுத்தப்பட்ட மாற்றங்கள் மட்டுமே, வரம்புகள் இடமாற்றம் செய்யப்படுகின்றன, எனவே ஓடோமீட்டர் தொடர்ந்து இருக்கும், unknown உங்கள் சொந்த மதிப்புகளை மீட்டெடுக்கிறது).
debug: true மற்றும் logLevel: verbose உடன் நீங்கள் பதிவில் ஒவ்வொரு ரீட்யூனையும் பார்ப்பீர்கள்:
auto-tune: 'walking' → distanceFilter=8.0m trackingAccuracy=15m odometerAccuracy=10m maxImpliedSpeed=4m/sநடைபயிற்சி, ஜாகிங் மற்றும் ஓடுவதற்கு பரிந்துரைக்கப்பட்ட முன்னமைவுகள் உள்ளதா?
தானியங்கு-சரிப்படுத்தும் சரியான மதிப்புகள் இவைதான், எனவே உங்கள் ஆப்ஸ் எப்போதாவது ஒரு செயல்பாட்டை மட்டுமே (ரன்-டிராக்கர், டெலிவரி-ஆன்-ஃபுட் ஆப்) டிராக் செய்தால், நீங்கள் வகைப்படுத்தியை இயக்காமல் இருந்தால், அவற்றை நீங்கள் கையால் அமைக்கலாம்:
| செயல்பாடுகள் | நோட்ரான்ஸ்0லேட் | நோட்ரான்ஸ்1லேட் | நோட்ரான்ஸ்2லேட் | நோட்ரான்ஸ்3லேட் |
|---|---|---|---|---|
| நிலையான | 25 மீ | 15 மீ | 10 மீ | 3 மீ/வி |
| நடைபயிற்சி | 8 மீ | 15 மீ | 10 மீ | 4 மீ/வி |
| ஜாகிங் / ஓட்டம் | 12 மீ | 25 மீ | 15 மீ | 9 மீ/வி |
| சைக்கிள் ஓட்டுதல் | 20 மீ | 30 மீ | 20 மீ | 20 மீ/வி |
| ஓட்டுதல் | 30 மீ | 50 மீ | 30 மீ | 60 மீ/வி |
ஜாகிங் என்பது ஒரு தனி முன்னமைவு அல்ல. இது ரன்னிங் பேண்டிற்குள் (6-20 கிமீ/ம) அமர்ந்து அதன் வரம்புகளைப் பகிர்ந்து கொள்கிறது - ஓடுவதில் இருந்து வேறுபட்ட ஒரு “ஜாகிங் முன்னமைவு” துல்லியமாக கண்டுபிடிக்கப்படும், அளவீடு அல்ல.
நடைப்பயிற்சிக்கு மட்டுமேயான ஆப்ஸ், ஸ்மூதிங்குடன்:
geo: tl.GeoConfig(
distanceFilter: 8,
filter: tl.LocationFilter(
useKalmanFilter: true,
trackingAccuracyThreshold: 15,
odometerAccuracyThreshold: 10,
maxImpliedSpeed: 4,
),
),நீங்கள் ஏற்கனவே கையால் டியூன் செய்து இன்னும் ~50% நீளமாக இருந்தால், இந்த மூன்று விஷயங்களைச் சரிபார்க்கவும்:
- ஜிபிஎஸ் இரைச்சல் தளத்திற்கு கீழே உள்ள ஒரு
distanceFilterசத்தத்தை தூரமாக ஒப்புக்கொள்கிறது.distanceFilter: 5இல், நிலையான 6 மீ பிழையானது 6 மீ நடைப்பயணமாக உள்ளது. காலில் ~8 மீ அல்லது அதற்கு மேல் வைத்திருங்கள் - எதிர் உள்ளுணர்வுடன், குறைவான புள்ளிகளைப் பதிவு செய்வது அதிக துல்லியமான மொத்தத்தை அளிக்கிறது. - இறுக்கமான
trackingAccuracyThresholdஓடோமீட்டர் வாயிலை பொருத்தமற்றதாக்குகிறது.trackingAccuracyThreshold: 10உடன், எஞ்சியிருக்கும் ஒவ்வொரு பிழையும் ஏற்கனவே ≤ 10 மீ ஆகும், எனவேodometerAccuracyThreshold(இயல்பு50m) எதையும் நிராகரிக்காது. நீங்கள் எண்ணிக் கொண்டிருந்த வாசல் ஒன்றும் செய்யவில்லை; பிழை நீங்கள் வைத்த திருத்தங்களில் இருந்து வருகிறது, நீங்கள் கைவிட்டவை அல்ல. useKalmanFilterஇயல்பாக ஆஃப் செய்யப்பட்டுள்ளது, மேலும்3.8.0க்கு முன் அது இயக்கத்தில் இருந்தாலும் தூரத்தை பாதிக்கவில்லை.
மற்றொரு ஆப்ஸுடன் சரியான பொருத்தத்தை எதிர்பார்க்க வேண்டாம். ஸ்ட்ராவா, கூகுள் ஃபிட் மற்றும் ட்ரேஸ்லெட் ஆகியவை வெவ்வேறு ஃபிக்ஸ் ஸ்ட்ரீம்களைப் பயன்படுத்துகின்றன (மாதிரி கேடன்ஸ், வழங்குநர் அமைப்புகள், ஆப்ஸ் முன்புறமாக இருந்ததா) மற்றும் வெவ்வேறு ஸ்மூத்திங்கைப் பயன்படுத்துகின்றன. தெரிந்த-நீள பாதையில் சில சதவீதத்திற்குள் ஒப்பந்தம் என்பது யதார்த்தமான இலக்காகும் - நீங்கள் சரிபார்க்கக்கூடிய வழியை அளவிடுவது, மற்றொரு பயன்பாட்டின் எண்ணுக்கு எதிராக அல்ல.
getCurrentPosition() சில ஃபோன்களில் LOCATION_FAILURE இல் ஏன் தோல்வியடைகிறது ஆனால் மற்றவற்றில் வேலை செய்கிறது?
PlatformException(LOCATION_FAILURE, "Failed to obtain location") என்பது ஒரே-ஷாட் கோரிக்கையானது timeoutக்குள் ஒரு புதிய தீர்வைப் பெற முடியவில்லை, மேலும் க்கு திரும்புவதற்கு எந்த தற்காலிக சேமிப்பிடமும் இல்லை. இது உங்கள் குறியீட்டில் உள்ள பிழை அல்ல - இது சாதனத்தின் GPS/இணைந்த ஸ்டாக் சரியான நேரத்தில் சரிசெய்யத் தவறியது. அதிக துல்லியமான ஒன்-ஷாட் ஒரு புதிய பிழைத்திருத்தத்தைக் கேட்கிறது, மேலும் அது (எ.கா.) 30 வினாடிகளுக்குள் வெற்றிபெறுமா என்பது சாதனம் மற்றும் சூழலைப் பொறுத்தது:
- “Google இருப்பிடத் துல்லியம்” முடக்கப்பட்டுள்ளது — அமைப்புகள் → இருப்பிடம் → இருப்பிடச் சேவைகள் → Google இருப்பிடத் துல்லியம் (Wi-Fi/Bluetooth ஸ்கேனிங்). ஆன் செய்யும்போது, இணைக்கப்பட்ட வழங்குநர் கிட்டத்தட்ட உடனடியாக வீட்டிற்குள் Wi-Fi/செல் ஃபிக்ஸைத் திருப்பித் தருகிறார்; முடக்கப்பட்டால், வீட்டிற்குள் வராத ஜிபிஎஸ் பிழைத்திருத்தத்திற்காக ஃபோன் காத்திருக்க வேண்டும். இதுவே “எனது தொலைபேசியில் வேலை செய்கிறது, அவர்களுடையது அல்ல” என்பதன் #1 காரணம்.
- உட்புறம் / நிலத்தடி / வானக் காட்சி இல்லை — குளிர்ந்த ஜிபிஎஸ் ஃபிக்ஸுக்கு வானத் தெரிவுநிலை தேவை, மேலும் ஃபிளாக்ஷிப்கள் சில நொடிகளில் ஜிபிஎஸ் சரிசெய்தல் உதவி பெறும் போது (TTFF) பட்ஜெட் சிப்செட்கள் 30 வினாடிகளைத் தாண்டும்.
- ஜிபிஎஸ் வழங்குநர் OS நிலையில் முடக்கப்பட்டுள்ளது (நெட்வொர்க் மட்டும் இடம்) — தூய உயர் துல்லியமான கோரிக்கையில் பூட்டுவதற்கு எதுவும் இல்லை.
- Google Play சேவைகள் காணவில்லை/காலாவதியானது (சில Huawei/AOSP பில்ட்கள்) — இணைந்த கிளையண்ட் இயங்க முடியாது.
- மாதிரி எண்ணிக்கை -
samples: 3ட்ரேஸ்லெட்டுடன் மூன்று திருத்தங்களைச் சேகரிக்க வேண்டும்; மார்ஜினல் சிக்னலில் அது ஒன்றைப் பெறலாம் மற்றும் மற்றவற்றுக்கு முன் நேரம் வெளியேறலாம்.samples: 1உட்புறத்தில் மிகவும் மன்னிக்கக்கூடியது.
அதை எப்படி நம்பகமானதாக்குவது - கடைசியாக அறியப்பட்ட இடத்திற்கு திரும்பவும்:
Future<tl.Location?> bestPosition() async {
try {
return await tl.Tracelet.getCurrentPosition(
desiredAccuracy: tl.DesiredAccuracy.high,
timeout: 60, // cold GPS fixes on budget phones can exceed 30 s
samples: 1, // more forgiving indoors than 3
maximumAge: 30000, // accept a <30 s-old cached fix instantly
);
} on PlatformException catch (e) {
if (e.code == 'LOCATION_FAILURE') {
// Weak/indoor signal — fall back to the cached fix before giving up.
return await tl.Tracelet.getLastKnownLocation();
}
rethrow;
}
}maximumAgeஆனது GPS ஐ எழுப்பாமலேயே சமீபத்திய தற்காலிக சேமிப்பில் உள்ள பிழைத்திருத்தத்தை உடனடியாக வழங்கும் - 30 வினாடிகள் பழைய நிலை நன்றாக இருக்கும் போது வருகை/செக்-இன் செய்ய ஏற்றது.getLastKnownLocation()ஒருபோதும் வழங்குநரைச் செயல்படுத்தாது மற்றும் இணைக்கப்பட்ட கேச் வைத்திருப்பதைத் திருப்பித் தரும், எனவே உண்மையாக எதுவும் கிடைக்காதபோது மட்டுமே “பலவீனமான சமிக்ஞை” செய்தியைக் காட்டுவீர்கள்.- அறிமுகப்படுத்தப்பட்ட பிறகு முதல் திருத்தத்திற்கு
timeoutதாராளமாக (45-60 வினாடிகள்) வைத்திருங்கள், மேலும் உட்புறத் திருத்தங்கள் தொடர்ந்து தோல்வியடைந்தால் Google இருப்பிடத் துல்லியத்தை இயக்கும்படி பயனர்களைத் தூண்டவும் (getProviderState()/getHealth()மூலம் வழங்குநரின் நிலையைக் கண்டறியவும்).
பின்னணி & முடித்தல்
ஆப்ஸ் மூடப்பட்ட பிறகு அல்லது ஸ்வைப் செய்த பிறகு Tracelet தொடர்ந்து கண்காணிக்கிறதா?
Android — ஆம், stopOnTerminate: false உடன். பயனர் சமீபத்திய ஆப்ஸை ஸ்வைப் செய்யும் போது, ஃப்ளட்டர் இன்ஜின் தேவையில்லாத சொந்த பின்னணி சேவையில் ட்ரேஸ்லெட் கைகளைக் கண்காணிக்கும், எனவே இருப்பிடப் பிடிப்பு மற்றும் ஒத்திசைவு தொடரும். நிலையான முன்-சேவை அறிவிப்பே அந்தச் சேவையை உயிர்ப்புடன் வைத்திருக்கும். stopOnTerminate: true மூலம், எதிர்பார்த்தபடி ஸ்வைப்-அவேயில் கண்காணிப்பு நிறுத்தப்படும்.
iOS — இது ஆப்ஸ் எப்படி மூடப்பட்டது என்பதைப் பொறுத்தது. நினைவகம்/சிஸ்டம் காரணங்களுக்காக பயன்பாட்டை iOS நிறுத்தினால், அடுத்த குறிப்பிடத்தக்க இடமாற்றத்தின் பின்னணியில் மறுதொடக்கம் மீண்டும் தொடங்கும். பயனர் பயன்பாட்டை விட்டு வெளியேறினால் (பயன்பாட்டு மாற்றியில் மேல்நோக்கி ஸ்வைப் செய்யவும்), ஆப்ஸ் மீண்டும் திறக்கப்படும் வரை iOS வேண்டுமென்றே அதன் இருப்பிடச் சேவைகள் அனைத்தையும் இடைநிறுத்துகிறது - இதை எந்த SDKயும் மேலெழுத Apple அனுமதிக்காது.
நான் showNotificationOnPauseOnly: true ஐ அமைத்துள்ளேன் ஆனால் அறிவிப்பு எப்போதும் தெரியும். ஏன்?
ஏனெனில் stopOnTerminate ஆனது false ஆகும், மேலும் இரண்டு அமைப்புகளையும் மதிக்க முடியாது.
அறிவிப்பை மறைப்பது என்பது முன்புற சேவையை தரமிறக்குவதாகும் - அறிவிப்பு இல்லாமல் Androidல் எந்த முன்புற சேவையும் இல்லை - மேலும் முன்புற சேவையை வைத்திருக்காத செயலானது, பயனர் சமீபத்திய ஆப்ஸை ஸ்வைப் செய்யும் போது ஆண்ட்ராய்டு அழிக்கும் செயலாகும். எனவே அறிவிப்பு மறைக்கப்பட்ட நிலையில், stopOnTerminate: false எதுவும் உத்தரவாதம் அளிக்கவில்லை: இடைவெளிக்குள் ஸ்வைப் செய்தல் (பிக்சல் மடிப்பில் 285 எம்.எஸ்., ஆண்ட்ராய்டு 15 சாதனத்தில் 700–1500 எம்.எஸ்.) தலையில்லாத பணி, நிகழ்வுகள் மற்றும் பதிவுகள் எதுவுமின்றி செயல்முறையை முற்றிலும் அழித்தது. பணியை அகற்றும் நேரத்தில் SDK எதுவும் செய்வதைத் தடுக்க முடியாது - பணி அகற்றப்பட்டதாக உங்கள் பயன்பாட்டிற்குச் சொல்வதற்கு முன்பு எந்த செயல்முறைகளை அழிக்க வேண்டும் என்பதை Android ஏற்கனவே தேர்வு செய்துள்ளது.
உயிர்வாழும் வாக்குறுதிக்கு ஆதரவாக ட்ரேஸ்லெட் அதைத் தீர்க்கிறது: stopOnTerminate: false உடன் கொடி புறக்கணிக்கப்படும் மற்றும் அறிவிப்பு தொடர்ந்து இருக்கும். இது லைஃப்சைக்கிள் சேனலில் start() க்கு ஒரு முறை காரணத்தை பதிவு செய்கிறது, எனவே Tracelet.getLogs() அதைக் காண்பிக்கும்.
நீங்கள் மறைக்கப்பட்ட அறிவிப்பைப் பெற விரும்புவீர்களானால் stopOnTerminate: true ஐ அமைக்கவும், மேலும் பயன்பாடு ஸ்வைப் செய்யப்பட்டவுடன் கண்காணிப்பு முடிவடையும். முழு விளக்கம் 📖
ஆஃப்லைன் & ஒத்திசைவு
சாதனத்தில் இணையம் இல்லையென்றால் எனது இருப்பிடங்களுக்கு என்ன நடக்கும்?
எதுவும் இழக்கப்படவில்லை. ஒவ்வொரு பிழைத்திருத்தமும் சாதனத்தில் உள்ள தரவுத்தளத்தில் எழுதப்படும் (encryptDatabase: true ஆக இருக்கும் போது குறியாக்கம் செய்யப்படும்) அது கைப்பற்றப்பட்ட உடனேயே — பிணையத்தை சாராதது. இணைப்பு திரும்பும்போது தானியங்கு ஒத்திசைவு அவற்றைப் பதிவேற்றுகிறது, அதிவேக பேக்ஆஃப் (maxRetries, retryBackoffBase, retryBackoffCap) மூலம் மீண்டும் முயற்சிக்கிறது. தரவுத்தளத்தில் இருந்து ஒரு தொகுதி நீக்கப்பட்டது சேவையகம் ரசீதை உறுதிசெய்த பின்னரே, எனவே தோல்வியுற்ற அல்லது குறுக்கிடப்பட்ட பதிவேற்றம் மீண்டும் முயற்சி செய்யப்படுகிறது, கைவிடப்படவில்லை.
உங்கள் தக்கவைப்பு வரம்புகளுக்குள் இருப்பிடங்கள் தாங்கல் (maxDaysToPersist, இயல்புநிலை 3 நாட்கள் மற்றும் maxRecordsToPersist, இயல்புநிலை வரம்பற்றது); அவை மீறப்பட்டவுடன் பழமையானவை கத்தரிக்கப்படுகின்றன. அந்த வரம்பை அணைக்க -1 என அமைக்கவும் - இயல்புநிலை சாளரத்தை விட ஆஃப்லைனில் நீண்டு இருக்கும் என நீங்கள் எதிர்பார்க்கிறீர்கள் என்றால், வேண்டுமென்றே செய்வது மதிப்பு, ஏனெனில் தக்கவைப்பால் கைவிடப்பட்ட பதிவு பதிவேற்றப்படவில்லை. 3.8.3 க்கு முன் எந்த வரம்பும் நடைமுறைப்படுத்தப்படவில்லை, எனவே வரிசை கட்டுப்பாடில்லாமல் வளர்ந்தது. disableAutoSyncOnCellular: true மூலம் செல்லுலரில் பதிவேற்றங்களை நிறுத்தி வைக்கலாம்.
இணையம் மீண்டும் வரும்போது Tracelet_sync தானாகவே எனது பின்தளத்திற்குத் தள்ளப்படுமா?
ஆம், தானாகவே மற்றும் முழுவதுமாக பின்னணியில். நீங்கள் tracelet_sync (அல்லது tracelet_supabase / tracelet_firebase போன்ற அதன் ரேப்பர்கள்) பயன்படுத்தினால், நீங்கள் எந்த நெட்வொர்க்-ரீட்ரை லாஜிக்கையும் எழுத வேண்டியதில்லை.
நெட்வொர்க் இணைப்பு மீட்டமைக்கப்பட்டுள்ளதை OS கண்டறியும் போது, நேட்டிவ் சின்க் இன்ஜின் உடனடியாக பின்னணியில் எழுந்து, தற்காலிகமாகச் சேமிக்கப்பட்ட இடங்களை உங்கள் பின்தளத்தில் காலவரிசைத் தொகுதிகளில் பதிவேற்றத் தொடங்குகிறது. உள்ளூர் தரவுத்தளமானது சேவையகத்துடன் முழுமையாகப் பிடிக்கப்படும் வரை இது தொடர்ந்து பதிவேற்றப்படும், நீண்ட ஆஃப்லைன் காலங்களுக்குப் பிறகும் பூஜ்ஜிய தரவு இழப்பை உறுதி செய்கிறது.
மறுதொடக்கம் & சாதனத் திறத்தல்
மறுதொடக்கம் செய்த பிறகு, நான் சாதனத்தைத் திறப்பதற்கு முன் ட்ரேஸ்லெட் கண்காணிக்கத் தொடங்குகிறதா?
இல்லை — ட்ரேஸ்லெட் மீண்டும் தொடங்குவதற்கு முன், சாதனம் மறுதொடக்கம் செய்யப்பட்ட பிறகு ஒருமுறையாவது திறக்கப்பட வேண்டும். இது ஆண்ட்ராய்டு இயங்குதள விதி (நேரடி பூட் / கோப்பு அடிப்படையிலான என்க்ரிப்ஷன்), ட்ரேஸ்லெட் வரம்பு அல்ல, மேலும் இது SDKயின் ஒவ்வொரு இருப்பிடத்திற்கும் பொருந்தும்.
குளிர்ந்த துவக்கத்திற்குப் பிறகு சாதனம் நேரடி துவக்க பயன்முறையில் உள்ளது மற்றும் பெரும்பாலான பயன்பாட்டுத் தரவு இன்னும் குறியாக்கம் செய்யப்பட்டுள்ளது. ஆண்ட்ராய்டு BOOT_COMPLETED ஒளிபரப்பை மட்டுமே வழங்கும் அதுவரை, ட்ரேஸ்லெட்டின் கட்டமைப்பு, நிலை மற்றும் இருப்பிடத் தரவுத்தளத்தை வைத்திருக்கும் நற்சான்றிதழ்-மறைகுறியாக்கப்பட்ட சேமிப்பகத்தை அணுக முடியாது - படிக்கவோ எழுதவோ எதுவும் இல்லை.
மறுதொடக்கத்திற்குப் பிறகு வரிசை பின்வருமாறு:
- சாதனம் பூட்ஸ் → டிரேஸ்லெட் செயலற்ற நிலையில் உள்ளது.
- பயனர் ஒருமுறை திறக்கிறார் → NOTRANS0லேட் ஃபயர்ஸ் → ட்ரேஸ்லெட் கண்காணிப்பு மற்றும் ஒத்திசைவை மீண்டும் தொடங்கும்.
முதல் மட்டும்தான் முக்கியம். அதன் பிறகு திரையை மீண்டும் பூட்டலாம் (ஃபோன் பாக்கெட்டில், ஸ்கிரீன் ஆஃப்) மற்றும் கண்காணிப்பு/ஒத்திசைவு சாதாரணமாக தொடரும்.
பூட் ரெஸ்யூமிற்கான தேவைகள்: startOnBoot: true, stopOnTerminate: false, மற்றும் பின்னணி-இருப்பிடம் (“எப்போதும்”) அனுமதி வழங்கப்பட்டது. Android 14+ இல், OS ஆனது துவக்கத்தில் இருந்து இருப்பிட முன்புற சேவையைத் தொடங்குவதைத் தடைசெய்கிறது, எனவே ட்ரேஸ்லெட், ஆப்ஸ் திறக்கப்படும் வரை, WorkManager/alarm ட்ராக்கிங்கிற்கு (தொடர்ச்சியான அறிவிப்பு இல்லை) திரும்பும்.
iOS மறுதொடக்கத்தில் தானாகவே தொடங்க முடியாது - பயனர் பயன்பாட்டைத் திறக்கும் வரை அல்லது குறிப்பிடத்தக்க-இருப்பிடம்-மாற்றம் அதை மீண்டும் தொடங்கும் வரை பயன்பாடுகள் துவக்கத்தில் இயங்காது மற்றும் தொடங்கப்படாமல் இருக்கும், இது முதல் மறுதொடக்கத்திற்குப் பிறகு திறக்கப்பட்ட பிறகு மட்டுமே நடக்கும்.
முதல் திறப்பதற்கு முன் அதைக் கண்காணிக்க முடியுமா?
இயல்பாக இல்லை. திறப்பதற்கு முன் இருப்பிடங்களைக் கைப்பற்றுவதற்கு Android Direct Boot தேவைப்படுகிறது, அதாவது ட்ரேஸ்லெட் தேவைப்படும் தரவை சாதனம்-குறியாக்கப்பட்ட சேமிப்பகத்திற்கு நகர்த்துவது — பயனர் அங்கீகரிக்கும் முன் படிக்கக்கூடியது, நற்சான்றிதழ்-மறைகுறியாக்கப்பட்ட (மற்றும் விருப்பமாக encryptDatabase-பாதுகாக்கப்பட்ட) சேமிப்பக ட்ரேஸ்லெட்டை விட பலவீனமான ஓய்வு உத்தரவாதம். உங்கள் தரவை முழுமையாகப் பாதுகாக்க, ட்ரேஸ்லெட் இல்லை பெட்டிக்கு வெளியே நேரடி துவக்கத்தை இயக்குகிறது. ப்ரீ-அன்லாக் டிராக்கிங் என்பது உங்கள் பயன்பாட்டுக்கு கடினமான தேவையாக இருந்தால், அதை மேம்பட்ட, ஆப்-லெவல் ஆப்ட்-இன் ஆக இயக்கலாம் - அதை நம்புவதற்கு முன் அணுகவும்.
ஜியோஃபென்சிங்
நான் போலி / உருவகப்படுத்தப்பட்ட இடங்களைச் சோதிக்கும்போது ஜியோஃபென்ஸ் மாற்றங்கள் சுடுவதில்லை (இது 1.x இல் வேலை செய்தது)
போலி இருப்பிடங்கள் இன்னும் செயல்படுகின்றன - ஆனால் உயர் துல்லியமான ஜியோஃபென்ஸ் பயன்முறையில், ஜியோஃபென்ஸ் மதிப்பீடு செய்யப்படுவதற்கு முன், உங்கள் கேலி செய்யப்பட்ட திருத்தங்கள் வடிகட்டப்படுகின்றன. geofenceModeHighAccuracy: true மூலம், தொடர்ச்சியான-ஜிபிஎஸ் ஸ்ட்ரீமில் இருந்து மாற்றங்கள் பயன்பாட்டில் கணக்கிடப்படும், மேலும் மதிப்பீட்டாளர் இருப்பிடத்தை பாஸ் செய்யும் திருத்தங்களில் மட்டுமே இயங்கும். பாதை-உருவகப்படுத்துதல் கருவிகள் பொதுவாக புள்ளிகளுக்கு இடையே “டெலிபோர்ட்” செய்யப்படுகின்றன, மேலும் அந்த தாவல்கள் நிராகரிக்கப்படுகின்றன:
maxImpliedSpeed- இரண்டு தொலைதூர மாதிரிகளுக்கு இடையே உள்ள நம்பமுடியாத வேகம் ஒரு வெளிப்புறமாக கருதப்பட்டு கைவிடப்பட்டது.useKalmanFilter: true- மென்மையான சண்டைகள் திடீர், உடல் ரீதியான போலி தாவல்கள்.trackingAccuracyThreshold— சில போலி வழங்குநர்கள்accuracy = 0அல்லது வாசலில் தோல்வியடையும் ஒரு நம்பத்தகாத மதிப்பைப் புகாரளிக்கின்றனர்.
உங்கள் தற்போதைய இருப்பிடத்தில் வைக்கப்பட்டுள்ள ஜியோஃபென்ஸ் இன்னும் எரிகிறது, ஏனெனில் geofenceInitialTriggerEntry: true பதிவு செய்யும் போது ENTER ஐ வெளியிடுகிறது (இயக்கம் தேவையில்லை) - எனவே அது வடிகட்டி வழியாக செல்லாது.
உயர்-துல்லிய பயன்முறையில் போலி சோதனைக்கு, வடிப்பான்களை தளர்த்தவும்:
geo: tl.GeoConfig(
distanceFilter: 0,
disableElasticity: true,
filter: tl.LocationFilter(
rejectMockLocations: false,
useKalmanFilter: false, // disable smoothing
maxImpliedSpeed: 0, // 0 disables the implied-speed reject
trackingAccuracyThreshold: 0, // accept regardless of reported accuracy
),
),டெவலப்பர் விருப்பங்கள் → மாதிரி இருப்பிட பயன்பாட்டைத் தேர்ந்தெடு என்பதன் கீழ் உங்கள் போலி பயன்பாட்டைத் தேர்ந்தெடுத்து, சிறிய, யதார்த்தமான படிகளில் உருவகப்படுத்தப்பட்ட வழியை முன்னெடுக்கவும்.
எளிய பாதை நிலையான ஜியோஃபென்ஸ் பயன்முறையில் (geofenceModeHighAccuracy: false), இது OS ஜியோஃபென்சிங் சேவையை பிரதிநிதித்துவப்படுத்துகிறது. OS ஆனது இணைக்கப்பட்ட வழங்குநருக்கு எதிராக மதிப்பிடுகிறது மற்றும் சிஸ்டம் மாக்-லொகேஷன் ஆப்ஸை இல்லாத SDK வடிப்பான்களை மதிக்கிறது — அங்கு ≥ ~100 மீ ஆரம் பயன்படுத்தவும், ஏனெனில் OS குறைந்தபட்ச நடைமுறையை செயல்படுத்துகிறது மற்றும் சிறிய/வெளியேறு மாற்றங்கள் அதற்குக் கீழே நம்பகத்தன்மையற்றவை.
debug: true மற்றும் logLevel: verbose உடன், Location filtered by Rust processor: <reason>க்கான பதிவுகளைப் பார்க்கவும் - ஒவ்வொரு கேலி ஃபிக்ஸையும் எந்த வடிகட்டி கைவிடப்பட்டது என்பதை இது உங்களுக்குச் சொல்கிறது.
ஒரே ஜியோஃபென்ஸுக்கு, குறிப்பாக ஆக்கிரமிப்பு-OEM ஆண்ட்ராய்டு ஃபோன்களில் (Xiaomi, Vivo, Oppo…) மீண்டும் மீண்டும் ENTER/EXIT ஐ ஏன் பார்க்கிறேன்?
டிரேஸ்லெட் ஏற்கனவே “உள்ளே அறியப்பட்ட” செயல்முறை மரணத்தைத் தக்கவைக்கும் ஒரு ரெஸ்யூம்-பாதுகாப்பான நிலையைத் தொடர்கிறது, எனவே ஒரு OEM உங்கள் ஆப்ஸைக் கொன்று மீண்டும் தொடங்குவது, மண்டலத்தை விட்டு வெளியேறாத சாதனத்திற்கு ENTER ஐத் தானாகவே செயல்படுத்தாது.
ஒரு மண்டலத்தை “புதுப்பிக்க” ஒவ்வொரு வெளியீட்டின் போதும் addGeofence() க்கு முன்னதாக ஹோஸ்ட் ஆப் removeGeofences() ஐ அழைப்பதே வழக்கமான காரணம்:
// Don't do this on every app start:
await tl.Tracelet.removeGeofences();
await tl.Tracelet.addGeofence(tl.Geofence(identifier: 'OFFICE', latitude: lat, longitude: lng, radius: radius));removeGeofences() வேண்டுமென்றே நிலைத்திற்குள்ளேயே நீடித்ததை அழிக்கிறது - வேலி உண்மையாகவே போய்விட்டதால், அது அவசியம். addGeofence() ஏற்கனவே அடையாளங்காட்டி மூலம் மேம்படுத்துகிறது, புதிய ஆயத்துடன் மீண்டும் அழைப்பது ஏற்கனவே உள்ள வேலியைப் புதுப்பிக்கிறது:
// Do this instead — updates OFFICE if it exists, creates it if not:
await tl.Tracelet.addGeofence(tl.Geofence(identifier: 'OFFICE', latitude: lat, longitude: lng, radius: radius));ஒரு வேலி உண்மையில் நீக்கப்படும்போது removeGeofence() / removeGeofences() ஐ மட்டும் அழைக்கவும், அதே அடையாளங்காட்டியுடன் இருக்கும் ஒன்றைப் புதுப்பிக்க வேண்டாம். அரிதாகவே கொல்லப்படும் சாதனத்தில், அகற்று-பின்-சேர்க்கும் init பாதை குளிர் தொடக்கத்தில் ஒருமுறை இயங்குகிறது மற்றும் கண்ணுக்குத் தெரியாதது. ஆக்ரோஷமான OEM இல், OS உங்கள் ஆப்ஸை மீண்டும் மீண்டும் அழித்து, மீண்டும் தொடங்கும் போது, அது ஒரு மணி நேரத்திற்கு டஜன் கணக்கான முறை மீண்டும் இயக்க முடியும், மேலும் ஒவ்வொரு ஓட்டமும் உண்மையான GPS பிழைத்திருத்தம் வருவதற்கு முன்பே உள்-நிலையைத் துடைத்துவிடும் - ஒவ்வொரு முறையும் SDK இன் இப்போது-வெற்றுக் கண்ணோட்டத்தில் புதிய, தொழில்நுட்ப ரீதியாக-சரியான ENTER ஐ உருவாக்குகிறது.
தரவு பாதுகாப்பு மற்றும் தனியுரிமை
எனது இருப்பிடத் தரவு ஓய்வில் குறியாக்கம் செய்யப்பட்டுள்ளதா?
விருப்பமாக, ஆம். இடங்களைத் தாங்கும் உள்ளூர் SQLite தரவுத்தளத்தை குறியாக்க encryptDatabase: true ஐ அமைக்கவும். ஆண்ட்ராய்டில் இது SQLCipher (AES-256) ஐப் பயன்படுத்துகிறது மற்றும் உங்கள் பயன்பாட்டில் SQLCipher சார்புநிலையைச் சேர்க்க வேண்டும் - இது விருப்பத்தேர்வில் வைக்கப்படும், எனவே இயல்புநிலை உருவாக்கம் சிறியதாக இருக்கும், மேலும் encryptDatabase ஐ அழைப்பது தெளிவான பிழையை ஏற்படுத்தும். iOS இல் மறைகுறியாக்கப்பட்ட ஸ்டோர் சொந்தமாக கையாளப்படுகிறது.
ரகசியத்தன்மையை விட ஆதாரங்களை சிதைப்பதற்காக, ஆடிட் டிரெயில் (audit.enabled) ஒவ்வொரு பதிவையும் (எ.கா. SHA-256) ஹாஷ்-செயின் செய்கிறது, இதன் மூலம் உண்மைக்குப் பிறகு வரலாறு மாற்றப்படவில்லை என்பதை நீங்கள் நிரூபிக்கலாம். தனியுரிமை மண்டலங்கள் முக்கியமான பகுதிகளுக்குள் (பயனரின் வீடு போன்றவை) திருத்தங்களை அடக்க அல்லது திருத்த உங்களை அனுமதிக்கிறது.
ட்ரேஸ்லெட் போலி / போலி ஜிபிஎஸ் இருப்பிடங்களைக் கண்டறியுமா?
ஆம், LocationFilter இல் mockDetectionLevel வழியாக:
disabled(இயல்புநிலை) — எல்லா இடங்களும் நிபந்தனையின்றி ஏற்றுக்கொள்ளப்படும்.basic- இயங்குதளத்தின் “இஸ் மாக்” கொடியை நம்புகிறது.heuristic- பிளாட்ஃபார்ம் கொடி பிளஸ் நேட்டிவ் ஹியூரிஸ்டிக்ஸ் மற்றும் கொடியை மறைக்கும் ஸ்பூஃபர்களைப் பிடிக்க டார்ட்-சைட் டைம்ஸ்டாம்ப் சோதனை.
heuristic இல், ஒவ்வொரு Location ஆனது ஏன் உண்மையானது அல்லது போலியானது என தீர்மானிக்கப்பட்டது, எனவே நீங்கள் உங்கள் சொந்த தர்க்கத்தில் போலித் திருத்தங்களை ஏற்கலாம், கொடியிடலாம் அல்லது நிராகரிக்கலாம்.
flutter_background_gelocation இலிருந்து இடம்பெயர்கிறது
நான் flutter_background_geolocation இலிருந்து வருகிறேன் — சுவிட்ச் எவ்வளவு கடினமாக உள்ளது?
ட்ரேஸ்லெட்டின் API வேண்டுமென்றே flutter_background_geolocation க்கு நெருக்கமாக உள்ளது, எனவே பெரும்பாலான பயன்பாடுகள் குறைந்தபட்ச மாற்றங்களுடன் வரைபடமாக்கப்படுகின்றன - ready/start/stop, இருப்பிடம்/இயக்கம்/வழங்குபவர் நிகழ்வுகள் மற்றும் HTTP ஒத்திசைவு அனைத்தும் நேரடி சமமானவை. கட்டமைப்பு/நிகழ்வு மேப்பிங் அட்டவணை மற்றும் கவனிக்க வேண்டிய சில நடத்தை வேறுபாடுகளுக்கு முழு இடம்பெயர்வு வழிகாட்டி ஐப் பார்க்கவும்.