Skip to Content

Firebase リアルタイム データベース アダプター

tracelet_firebase パッケージは、バックグラウンドの場所を Firebase Realtime Database (RTDB) に直接同期するためのシームレスなドロップイン アダプターを提供します。これは 100% サーバーレスであり、Cloud Functions をデプロイする必要はありません。

インストール

flutter pub add tracelet_firebase

このアダプターは firebase_corefirebase_auth を使用します。 Flutter アプリを Firebase 用に構成し (flutterfire configure を使用)、使用する前に Firebase コンソールで リアルタイム データベースを作成する必要があります。

仕組み

Firestore SDK 統合とは異なり、このアダプターは別の書き込みパスを開きません。これは、Tracelet のバッテリー効率の高い ネイティブ HTTP 同期エンジンに接続されます。buildHttpConfig は、RTDB の REST エンドポイント (<database>/<path>.json) を指す HttpConfig を生成し、?auth= クエリ パラメーターとして Firebase Auth ID トークンで認証されます。

同期はネイティブ エンジンで実行されるため、アプリが強制終了された場合でも、指数バックオフとオフライン キューを使用してバッチがアップロードされます。トークンの有効期限が切れ、RTDB が 401 を返すと、configureTokenRefresh は Firebase ID トークンを透過的に更新し(フォアグラウンド * および* ヘッドレス バックグラウンド分離で)、再試行します。

セットアップと構成

Firebaseを初期化する

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() を 1 回呼び出してから、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() を使用します。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" } } } }