Skip to Content
मूल अवधारणाएँजियोफ़ेंसिंग

जियोफेंसिंग एपीआई

ट्रैसलेट एक मजबूत, ऑफ़लाइन-प्रथम जियोफ़ेंसिंग इंजन प्रदान करता है। मानक ओएस जियोफेंसिंग के विपरीत, जो 20-100 जियोफेंस तक सीमित है और आपके ऐप को जगाने के लिए ओएस की आवश्यकता होती है, ट्रैसलेट रस्ट इंजन के भीतर आंतरिक रूप से जियोफेंस का मूल्यांकन करता है। यह शून्य अतिरिक्त बैटरी खपत के साथ असीमित जियोफेंस को सक्षम बनाता है।


1. वृत्ताकार बनाम बहुभुज भूबाड़ें

ट्रैसलेट मानक गोलाकार जियोफेंस और जटिल बहुभुज जियोफेंस दोनों का समर्थन करता है।

वृत्ताकार भूबाड़ें

एक वृत्ताकार भू-बाड़ को एक केंद्र निर्देशांक और एक त्रिज्या (मीटर में) द्वारा परिभाषित किया जाता है।

final circular = tl.Geofence( identifier: 'headquarters', latitude: 37.7749, longitude: -122.4194, radius: 200, // 200 meters notifyOnEntry: true, notifyOnExit: true, notifyOnDwell: true, // Triggers if they stay inside loiteringDelay: 300, // Trigger dwell after 5 minutes );

बहुभुज भूबाड़ें

एक बहुभुज भू-बाड़ को एक जटिल आकार (जैसे पार्क या इमारत) को रेखांकित करने वाले निर्देशांक की एक श्रृंखला द्वारा परिभाषित किया गया है।

final polygon = tl.Geofence.polygon( identifier: 'golden_gate_park', vertices: [ tl.Coordinate(latitude: 37.773972, longitude: -122.431297), tl.Coordinate(latitude: 37.769996, longitude: -122.511055), tl.Coordinate(latitude: 37.764516, longitude: -122.508566), ], notifyOnEntry: true, notifyOnExit: true, );

2. जियोफेंस जोड़ना और हटाना

ट्रैसलेट सभी जियोफेंस को स्थानीय SQLite डेटाबेस में संग्रहीत करता है। इसका मतलब है कि वे ऐप पुनरारंभ होने पर लगातार बने रहते हैं। हर बार ऐप लॉन्च होने पर आपको उन्हें दोबारा जोड़ने की ज़रूरत नहीं है।

जियोफेंस जोड़ना

आप एकल जियोफ़ेंस या जियोफ़ेंस की एक श्रृंखला जोड़ सकते हैं।

// Add a single geofence await tl.Tracelet.addGeofence(circular); // Add multiple geofences efficiently await tl.Tracelet.addGeofences([circular, polygon]);

जियोफेंस हटाना

उन्हें उनके विशिष्ट पहचानकर्ता द्वारा हटा दें, या संपूर्ण डेटाबेस साफ़ करें।

// Remove a specific geofence await tl.Tracelet.removeGeofence('headquarters'); // Remove all geofences entirely await tl.Tracelet.removeGeofences();

3. सक्रिय जियोफेंस की सूची बनाना

आप किसी भी समय SQLite डेटाबेस से यह देखने के लिए क्वेरी कर सकते हैं कि वर्तमान में कौन से जियोफेंस की निगरानी की जा रही है।

final geofences = await tl.Tracelet.getGeofences(); for (final fence in geofences) { print('Monitoring: \${fence.identifier}'); }

4. जियोफ़ेंस इवेंट सुनना

जब उपयोगकर्ता जियोफेंस सीमा को पार करता है, तो ट्रैसलेट onGeofence ईवेंट को सक्रिय करता है। क्योंकि स्थान अपडेट के दौरान मूल्यांकन रस्ट कोर में होता है, ये ईवेंट सक्रिय हो जाएंगे भले ही ऐप बंद हो जाए (आपके हेडलेस कॉलबैक को ट्रिगर करना)।

tl.Tracelet.onGeofence((evt) { if (evt.action == tl.GeofenceEventAction.ENTER) { print('User entered: \${evt.identifier}'); } else if (evt.action == tl.GeofenceEventAction.EXIT) { print('User exited: \${evt.identifier}'); } else if (evt.action == tl.GeofenceEventAction.DWELL) { print('User is dwelling inside: \${evt.identifier}'); } });

5. एंड्रॉइड: अग्रभूमि सेवा और Google Play नीति

Google Play नीति में बदलाव - 28 अक्टूबर, 2026 से प्रभावी। जियोफेंसिंग नहीं है अब अग्रभूमि सेवा स्थान के लिए अनुमत उपयोग का मामला। वे ऐप्स जो a. का उपयोग करते हैं अग्रभूमि सेवा केवल जियोफेंसिंग के लिए इसे हटाना होगा FOREGROUND_SERVICE_LOCATION (और FOREGROUND_SERVICE, यदि अन्यथा उपयोग न किया गया हो) उनके मर्ज किए गए मेनिफेस्ट से अनुमतियाँ।

ट्रैसलेट का मानक जियोफेंस मोड मूल एंड्रॉइड जियोफेंस एपीआई का उपयोग करता है (GeofencingClient), जो ENTER/EXIT सक्रिय करता है - और आपके ऐप को आपके में पुनः लॉन्च करता है नेतृत्वहीन कार्य - जबकि ऐप निलंबित या समाप्त हो गया है, बिना a अग्रभूमि सेवा. मानक मोड में startGeofences() को कॉल करना नहीं प्रारंभ होता है एक अग्रभूमि सेवा (3.5.x के अनुसार), इसलिए यह डिफ़ॉल्ट रूप से अनुपालन योग्य है।

आक्रामक OEM (सैमसंग/Xiaomi/Huawei/OnePlus/Oppo/Vivo): 3.6.1 तक, प्रत्येक डिवाइस पर एक स्पष्ट geofenceModeHighAccuracy: false का सम्मान किया जाता है। पहले 3.6.1 इन ओईएम ने चुपचाप उच्च-सटीकता मोड को मजबूर कर दिया - और इसके साथ अग्रभूमि सेवा और इसकी सतत अधिसूचना - तब भी जब आप false सेट करते हैं, जिसने उपरोक्त अनुरूप मानक-मोड पथ को तोड़ दिया। यदि आप इन उपकरणों को लक्षित करते हैं, 3.6.1 या बाद का उपयोग करें। आक्रामक OEM पर SDK अब एक विश्वसनीयता चेतावनी लॉग करता है (मूल जियोफेंस डिलीवरी में देरी हो सकती है) आपके कॉन्फिगरेशन को ओवरराइड करने के बजाय।

यदि आप ट्रेसलेट का उपयोग केवल जियोफेंसिंग के लिए करते हैं

  1. अग्रभूमि सेवा सक्षम नहीं करें:

    await tl.Tracelet.ready(const tl.Config( android: tl.AndroidConfig( foregroundService: tl.ForegroundServiceConfig(enabled: false), ), geofence: tl.GeofenceConfig(geofenceModeHighAccuracy: false), )); await tl.Tracelet.startGeofences();
  2. ट्रैसलेट एसडीके FOREGROUND_SERVICE / FOREGROUND_SERVICE_LOCATION घोषित करता है इसके निरंतर-ट्रैकिंग उपयोग के मामले के लिए। यदि आपका ऐप कभी भी निरंतर नहीं चलता है ट्रैकिंग, उन्हें मेनिफेस्ट-मर्जर के साथ मर्ज किए गए मेनिफेस्ट से हटा दें आपके ऐप के android/app/src/main/AndroidManifest.xml में remove नियम:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" tools:node="remove" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" tools:node="remove" /> </manifest>

यदि आप निरंतर ट्रैकिंग और जियोफेंसिंग का उपयोग करते हैं

आप ट्रैकिंग उपयोग के मामले के लिए FOREGROUND_SERVICE_LOCATION रख सकते हैं (उदा. नेविगेशन/बेड़े ट्रैकिंग), लेकिन अग्रभूमि सेवा का उपयोग नहीं किया जाना चाहिए जियोफेंसिंग। ट्रेसलेट पहले से ही इसे संभालता है: एफजीएस निरंतर ट्रैकिंग के लिए चलता है (start()), और जियोफेंस-ओनली मोड पर स्विच करना (मानक में startGeofences()) मोड) एफजीएस को नष्ट कर देता है।

उच्च-सटीकता जियोफ़ेंस मोड (geofenceModeHighAccuracy: true) का उपयोग करता है चुस्त, इन-ऐप सीमा का पता लगाने के लिए निरंतर जीपीएस, जो चलता है अग्रभूमि सेवा. वह सतत स्थान है - नीति में “जियोफेंसिंग” नहीं अर्थ - इसलिए इसे केवल तभी सक्षम करें जब आपके ऐप के पास एक अलग अनुमत स्थान उपयोग हो मामला। अधिकांश ऐप्स के लिए, मानक मोड सुसंगत और बैटरी-कुशल विकल्प है।