Skip to Content

फायरबेस रीयलटाइम डेटाबेस एडाप्टर

tracelet_firebase पैकेज आपके पृष्ठभूमि स्थानों को सीधे फ़ायरबेस रीयलटाइम डेटाबेस (आरटीडीबी) में सिंक करने के लिए एक निर्बाध, ड्रॉप-इन एडाप्टर प्रदान करता है - 100% सर्वर रहित, बिना किसी क्लाउड फ़ंक्शंस को तैनात करने के।

इंस्टालेशन

एडाप्टर को अपने pubspec.yaml में जोड़ें:

flutter pub add tracelet_firebase

यह एडॉप्टर firebase_core और firebase_auth का उपयोग करता है। आपको अपने फ़्लटर ऐप को फ़ायरबेस (flutterfire configure का उपयोग करके) के लिए कॉन्फ़िगर करना होगा और इसे उपयोग करने से पहले फ़ायरबेस कंसोल में एक रीयलटाइम डेटाबेस बनाना होगा।

यह काम किस प्रकार करता है

फायरस्टोर एसडीके एकीकरण के विपरीत, यह एडाप्टर एक अलग लेखन पथ नहीं खोलता है। यह ट्रैसलेट के बैटरी-कुशल नेटिव HTTP सिंक इंजन में प्लग होता है: buildHttpConfig आपके RTDB के REST एंडपॉइंट (<database>/<path>.json) की ओर इशारा करते हुए एक HttpConfig उत्पन्न करता है, जो ?auth= क्वेरी पैरामीटर के रूप में फायरबेस ऑथ आईडी टोकन के साथ प्रमाणित होता है।

क्योंकि सिंकिंग मूल इंजन में चलती है, बैचों को घातीय बैकऑफ़ और ऑफ़लाइन कतार के साथ अपलोड किया जाता है तब भी जब ऐप को बलपूर्वक बंद किया जाता है। जब एक टोकन की समय सीमा समाप्त हो जाती है और RTDB 401 लौटाता है, तो configureTokenRefresh पारदर्शी रूप से फायरबेस आईडी टोकन को ताज़ा करता है - अग्रभूमि में और हेडलेस पृष्ठभूमि में अलग-थलग - और पुनः प्रयास करता है।

सेटअप और कॉन्फ़िगरेशन

फायरबेस आरंभ करें

ट्रेसलेट को कॉल करने से पहले अपने main.dart में फायरबेस प्रारंभ करें:

import 'package:firebase_core/firebase_core.dart'; import 'firebase_options.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, ); runApp(const MyApp()); }

टोकन रिफ्रेश कॉन्फ़िगर करें और HTTP कॉन्फ़िगरेशन बनाएं

configureTokenRefresh() को एक बार कॉल करें, फिर अपने RTDB पथ के लिए HttpConfig बनाएं और इसे Tracelet.ready को पास करें:

import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:tracelet_firebase/tracelet_firebase.dart'; import 'package:tracelet/tracelet.dart'; // 1. Your Realtime Database URL (from FirebaseOptions). final databaseUrl = Firebase.app().options.databaseURL; // 2. Keep the Firebase ID token fresh in the background (resolves 401s). await TraceletFirebase.configureTokenRefresh(); // 3. Get the signed-in user's id for a per-user write path. final uid = FirebaseAuth.instance.currentUser?.uid ?? 'anonymous_device'; // 4. Build the native HTTP config for RTDB. final httpConfig = await TraceletFirebase.buildHttpConfig( databaseUrl: databaseUrl!, // e.g. https://my-project-default-rtdb.firebaseio.com path: 'locations/$uid', // secure this path in your RTDB rules // autoSync: true, batchSync: true, maxBatchSize: 250 are the defaults ); // 5. Start Tracelet with the adapter's HTTP config. await Tracelet.ready(Config( geo: const GeoConfig(distanceFilter: 50), http: httpConfig, )); await Tracelet.start();

सुरक्षित नियमों के विरुद्ध लेखन को सफल बनाने के लिए उपयोगकर्ता को प्रमाणित किया जाना चाहिए। यदि आपके पास अभी तक वास्तविक साइन-इन प्रवाह नहीं है, तो परीक्षण के दौरान uid प्राप्त करने के लिए FirebaseAuth.instance.signInAnonymously() पर्याप्त है।

कस्टम मेटाडेटा संलग्न करना

प्रत्येक स्थान को व्यावसायिक डेटा (जैसे order_id या trip_id) के साथ टैग करने के लिए, setRouteContext() का उपयोग करें - यह SQLite कतार के माध्यम से प्रत्येक स्थान के साथ यात्रा करता है और RTDB पेलोड में शामिल होता है:

await Tracelet.setRouteContext(RouteContext( taskId: 'order_123', custom: {'trip_id': 'trip_456'}, ));

सुरक्षा नियम

अपने रीयलटाइम डेटाबेस को सुरक्षित करें ताकि प्रमाणित उपयोगकर्ता केवल अपने स्वयं के स्थान पथ पर ही लिख सकें:

{ "rules": { "locations": { "$uid": { ".read": "auth != null && auth.uid === $uid", ".write": "auth != null && auth.uid === $uid" } } } }