Skip to Content
മറ്റ് ടൂളുകളും അഡാപ്റ്ററുകളുംഡാറ്റാബേസ് അഡാപ്റ്ററുകൾസുപാബേസ്

സുപാബേസ് പോസ്റ്റ്ഗ്രെസ് അഡാപ്റ്റർ

tracelet_supabase പാക്കേജ് നിങ്ങളുടെ പശ്ചാത്തല ലൊക്കേഷനുകൾ നേരിട്ട് Supabase Postgres-ലേക്ക് സമന്വയിപ്പിക്കുന്നതിന് ഒരു ഡ്രോപ്പ്-ഇൻ അഡാപ്റ്റർ നൽകുന്നു, ഒന്നുകിൽ Postgres RPC ഫംഗ്‌ഷൻ അല്ലെങ്കിൽ ഒരു Supabase Edge Function വഴി.

ഇൻസ്റ്റലേഷൻ

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

flutter pub add tracelet_supabase

ഈ അഡാപ്റ്റർ supabase_flutter ഉപയോഗിക്കുന്നു. സുപാബേസ് ക്ലയൻ്റ് ഉപയോഗിക്കുന്നതിന് മുമ്പ് നിങ്ങൾ അത് ആരംഭിക്കേണ്ടതുണ്ട്.

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

ട്രെയ്‌സ്‌ലെറ്റിൻ്റെ ബാറ്ററി-കാര്യക്ഷമമായ *നേറ്റീവ് എച്ച്ടിടിപി സമന്വയ എഞ്ചിനിലേക്ക് അഡാപ്റ്റർ പ്ലഗ് ചെയ്യുന്നു: buildHttpConfig നിങ്ങളുടെ സപ്‌ബേസ് റെസ്റ്റ് എൻഡ്‌പോയിൻ്റിൽ പോയിൻ്റ് ചെയ്യുന്ന ഒരു HttpConfig ഉൽപ്പാദിപ്പിക്കുന്നു — ഒന്നുകിൽ /rest/v1/rpc/<function> (RPC) അല്ലെങ്കിൽ /functions/v1/<function> (എഡ്ജ് ഫംഗ്‌ഷൻ) — apikey എന്നിവയ്‌ക്കായി സജ്ജീകരിച്ചിരിക്കുന്നു.

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

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

ഒരു ടേബിളും ഇൻജസ്റ്റ് ഫംഗ്‌ഷനും സൃഷ്‌ടിക്കുക

ലൊക്കേഷനുകൾ സ്വീകരിക്കുന്നതിനും RLS പ്രവർത്തനക്ഷമമാക്കുന്നതിനും ഇൻകമിംഗ് ബാച്ച് ചേർക്കുന്ന ഒരു Postgres ഫംഗ്‌ഷൻ ചേർക്കുന്നതിനും ഒരു പട്ടിക സൃഷ്‌ടിക്കുക. ട്രേസ്‌ലെറ്റ് ലൊക്കേഷൻ ഒബ്‌ജക്റ്റുകളുടെ ഒരു ബാച്ച് പോസ്റ്റുചെയ്യുന്നു, അതിനാൽ ഫംഗ്‌ഷൻ ഒരു jsonb അറേ സ്വീകരിക്കുന്നു:

-- Table CREATE TABLE public.locations ( id uuid DEFAULT gen_random_uuid() PRIMARY KEY, user_id uuid REFERENCES auth.users NOT NULL DEFAULT auth.uid(), latitude double precision NOT NULL, longitude double precision NOT NULL, accuracy double precision, speed double precision, timestamp timestamptz NOT NULL, is_moving boolean, created_at timestamptz DEFAULT now() ); ALTER TABLE public.locations ENABLE ROW LEVEL SECURITY; CREATE POLICY "Users insert their own locations" ON public.locations FOR INSERT WITH CHECK (auth.uid() = user_id); -- RPC function: receives the batch as a jsonb array and inserts each row. -- (The exact field names come from Tracelet's sync payload — see the -- Tracelet Sync docs for the payload schema.) CREATE OR REPLACE FUNCTION public.insert_tracelet_locations(payload jsonb) RETURNS void LANGUAGE sql SECURITY INVOKER AS $$ INSERT INTO public.locations (latitude, longitude, accuracy, speed, timestamp, is_moving) SELECT (e->'coords'->>'latitude')::double precision, (e->'coords'->>'longitude')::double precision, (e->'coords'->>'accuracy')::double precision, (e->'coords'->>'speed')::double precision, (e->>'timestamp')::timestamptz, (e->>'is_moving')::boolean FROM jsonb_array_elements(payload) AS e; $$;

കൂടുതൽ ഇഷ്‌ടാനുസൃത പ്രോസസ്സിംഗ് (സാധുവാക്കൽ, ഫാൻ-ഔട്ട്, സമ്പുഷ്ടീകരണം) തിരഞ്ഞെടുക്കണോ? പകരം ഒരു Supabase Edge Function വിന്യസിച്ച് അതിൻ്റെ പേര് edgeFunction എന്ന് നൽകുക - അഡാപ്റ്റർ ബാച്ചിനെ /functions/v1/<name> എന്നതിലേക്ക് പോസ്റ്റ് ചെയ്യും.

സുപാബേസ് ആരംഭിക്കുക

നിങ്ങളുടെ main.dart-ൽ Supabase ക്ലയൻ്റ് ആരംഭിക്കുക:

import 'package:supabase_flutter/supabase_flutter.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await Supabase.initialize( url: 'https://xyzcompany.supabase.co', anonKey: 'public-anon-key', ); runApp(const MyApp()); }

ടോക്കൺ പുതുക്കൽ കോൺഫിഗർ ചെയ്‌ത് HTTP കോൺഫിഗറേഷൻ നിർമ്മിക്കുക

configureTokenRefresh()-ലേക്ക് ഒരിക്കൽ വിളിക്കുക, നിങ്ങളുടെ RPC (അല്ലെങ്കിൽ എഡ്ജ് ഫംഗ്‌ഷൻ) ലക്ഷ്യമാക്കി HttpConfig നിർമ്മിക്കുക, അത് Tracelet.ready-ലേക്ക് കൈമാറുക:

import 'package:tracelet_supabase/tracelet_supabase.dart'; import 'package:tracelet/tracelet.dart'; const supabaseUrl = 'https://xyzcompany.supabase.co'; const supabaseAnonKey = 'public-anon-key'; // 1. Keep the Supabase session token fresh in the background (resolves 401s). await TraceletSupabase.configureTokenRefresh(anonKey: supabaseAnonKey); // 2. Build the native HTTP config. Provide EITHER rpcFunction OR edgeFunction. final httpConfig = TraceletSupabase.buildHttpConfig( supabaseUrl: supabaseUrl, anonKey: supabaseAnonKey, rpcFunction: 'insert_tracelet_locations', // ...or: edgeFunction: 'tracelet-ingest' // autoSync: true, batchSync: true, maxBatchSize: 250 are the defaults ); // 3. Start Tracelet with the adapter's HTTP config. await Tracelet.ready(Config( geo: const GeoConfig(distanceFilter: 50), http: httpConfig, )); await Tracelet.start();

ഇഷ്‌ടാനുസൃത മെറ്റാഡാറ്റ അറ്റാച്ചുചെയ്യുന്നു

എല്ലാ ലൊക്കേഷനും ബിസിനസ് ഡാറ്റ ഉപയോഗിച്ച് ടാഗുചെയ്യാൻ (ഉദാ. driver_id അല്ലെങ്കിൽ trip_id), setRouteContext() ഉപയോഗിക്കുക - ഇത് SQLite ക്യൂവിലൂടെ ഓരോ ലൊക്കേഷനുമായും സഞ്ചരിക്കുകയും നിങ്ങളുടെ ഫംഗ്‌ഷൻ സ്വീകരിക്കുന്ന പേലോഡിൽ ഉൾപ്പെടുത്തുകയും ചെയ്യുന്നു:

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

പ്രകടനം

സമന്വയിപ്പിക്കൽ Tracelet-ൻ്റെ ബാച്ച് എഞ്ചിനിലൂടെ പ്രവർത്തിക്കുന്നു, അതിനാൽ ഒരു പോയിൻ്റിന് ഒരു അഭ്യർത്ഥന എന്നതിലുപരി ഓഫ്‌ലൈൻ പോയിൻ്റുകളുടെ ബാക്ക്‌ലോഗ് ബാച്ചുകളായി ഫ്ലഷ് ചെയ്യുന്നു (സ്ഥിര maxBatchSize: 250). നിങ്ങളുടെ ആർപിസിക്കുള്ളിലെ പോസ്റ്റ്‌ഗ്രേസിൻ്റെ ബൾക്ക് ഇൻസേർട്ടുമായി സംയോജിപ്പിച്ച്, ഇത് ഉപകരണ ബാറ്ററിയിലും ഡാറ്റാബേസ് റൗണ്ട് ട്രിപ്പുകളിലും ഉയർന്ന ഫ്രീക്വൻസി ട്രാക്കിംഗ് (ഉദാ. ഓരോ 10 മീറ്ററിലും ഒരു പോയിൻ്റ്) കാര്യക്ഷമമായി നിലനിർത്തുന്നു.