Skip to Content

ഫയർബേസ് തൽസമയ ഡാറ്റാബേസ് അഡാപ്റ്റർ

tracelet_firebase പാക്കേജ് നിങ്ങളുടെ പശ്ചാത്തല ലൊക്കേഷനുകൾ നേരിട്ട് ഫയർബേസ് റിയൽടൈം ഡാറ്റാബേസിലേക്ക് (RTDB) സമന്വയിപ്പിക്കുന്നതിന് തടസ്സമില്ലാത്ത, ഡ്രോപ്പ്-ഇൻ അഡാപ്റ്റർ നൽകുന്നു — 100% സെർവർരഹിതം, വിന്യസിക്കാൻ ക്ലൗഡ് ഫംഗ്‌ഷനുകളൊന്നുമില്ല.

ഇൻസ്റ്റലേഷൻ

നിങ്ങളുടെ pubspec.yaml-ലേക്ക് അഡാപ്റ്റർ ചേർക്കുക:

flutter pub add tracelet_firebase

ഈ അഡാപ്റ്റർ firebase_core, firebase_auth എന്നിവ ഉപയോഗിക്കുന്നു. നിങ്ങൾ ഫയർബേസിനായി (flutterfire configure ഉപയോഗിച്ച്) നിങ്ങളുടെ Flutter ആപ്പ് കോൺഫിഗർ ചെയ്യുകയും അത് ഉപയോഗിക്കുന്നതിന് മുമ്പ് Firebase കൺസോളിൽ ഒരു തത്സമയ ഡാറ്റാബേസ്** സൃഷ്ടിക്കുകയും വേണം.

ഇത് എങ്ങനെ പ്രവർത്തിക്കുന്നു

ഒരു ഫയർസ്റ്റോർ SDK സംയോജനത്തിൽ നിന്ന് വ്യത്യസ്തമായി, ഈ അഡാപ്റ്റർ ഒരു പ്രത്യേക റൈറ്റ് പാത്ത് തുറക്കുന്നില്ല. ഇത് Tracelet-ൻ്റെ ബാറ്ററി-കാര്യക്ഷമമായ *നേറ്റീവ് HTTP സമന്വയ എഞ്ചിനിലേക്ക് പ്ലഗ് ചെയ്യുന്നു: buildHttpConfig നിങ്ങളുടെ RTDB യുടെ റെസ്റ്റ് എൻഡ്‌പോയിൻ്റിലേക്ക് (<database>/<path>.json) പോയിൻ്റ് ചെയ്യുന്ന ഒരു HttpConfig ഉൽപ്പാദിപ്പിക്കുന്നു, ?auth= ആയി Firebase Auth ID ടോക്കൺ ഉപയോഗിച്ച് പ്രാമാണീകരിക്കുന്നു.

നേറ്റീവ് എഞ്ചിനിൽ സമന്വയിപ്പിക്കുന്നതിനാൽ, ബാച്ചുകൾ എക്‌സ്‌പോണൻഷ്യൽ ബാക്ക്ഓഫും ഓഫ്‌ലൈൻ ക്യൂയിംഗും ഉപയോഗിച്ച് അപ്‌ലോഡ് ചെയ്യപ്പെടുന്നു ആപ്പ് നിർബന്ധിതമായി പുറത്തുകടക്കുമ്പോഴും. ഒരു ടോക്കൺ കാലഹരണപ്പെടുകയും RTDB 401 തിരികെ നൽകുകയും ചെയ്യുമ്പോൾ, configureTokenRefresh ഫയർബേസ് ഐഡി ടോക്കൺ സുതാര്യമായി പുതുക്കുന്നു - മുൻവശത്ത് * കൂടാതെ* തലയില്ലാത്ത പശ്ചാത്തല ഐസൊലേറ്റിൽ - വീണ്ടും ശ്രമിക്കുന്നു.

സജ്ജീകരണവും കോൺഫിഗറേഷനും

ഫയർബേസ് ആരംഭിക്കുക

Tracelet-ലേക്ക് വിളിക്കുന്നതിന് മുമ്പ് നിങ്ങളുടെ main.dart-ൽ Firebase ആരംഭിക്കുക:

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" } } } }