01-firebase-setup.md
google-services.json 檔案與 iOS 的 GoogleService-Info.plist。將以下內容加入 pubspec.yaml:
dependencies:
firebase_core: latest
firebase_auth: latest
firebase_database: latest
firebase_crashlytics: latest
firebase_app_check: latest
google-services.json 放置於 android/app/。在 build.gradle 加上必需的 Google Services 與 Crashlytics 外掛程式。GoogleService-Info.plist 放置於 ios/Runner/。web/index.html 加入 Firebase 設定物件。import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化 Firebase
await Firebase.initializeApp();
// 初始化驗證服務
final authService = AuthService();
// 初始化資料庫服務
final dbService = DatabaseService();
// 註冊 Crashlytics 錯誤處理程序
FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterFatalError;
runApp(MyApp());
}
| 變數 | 說明 |
|---|---|
FIREBASE_API_KEY |
Firebase 專案的 API 金鑰 |
FIREBASE_APP_ID |
Firebase 專案的 App ID |
FIREBASE_MESSAGING_SENDER_ID |
訊息發送者 ID |
FIREBASE_PROJECT_ID |
專案 ID |
透過 Firebase CLI 部署 database.rules.json。
{
"rules": {
".read": "auth != null",
".write": "auth != null && root.child('users').child(auth.uid).child('role').val() == 'admin'"
}
}
基於角色的讀寫規則概述:
在參考實作中,只有經過驗證的使用者可以讀取公開資料。測驗題庫或是認證考試資料的寫入權限,則僅限於擁有 admin 角色的使用者。如果您在設定模擬器的 IP 位址或預設閘道時遇到問題,請確保規則允許該網路存取。
android/app/ 目錄中。02-supabase-setup.md
pgvector 擴充功能。vector(768) 欄位的 questions 資料表,以支援語意搜尋。profiles 資料表與基於角色的觸發程序,來同步使用者角色。dependencies:
supabase_flutter: latest
除了基本的網際網路存取權限外,無需特定的平台設定。
import 'package:supabase_flutter/supabase_flutter.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Supabase.initialize(
url: 'YOUR_SUPABASE_URL',
anonKey: 'YOUR_SUPABASE_ANON_KEY',
);
runApp(MyApp());
}
| 變數 | 說明 |
|---|---|
SUPABASE_URL |
您的 Supabase 專案 URL |
SUPABASE_ANON_KEY |
用於公開存取的匿名金鑰 |
SUPABASE_SERVICE_ROLE_KEY |
Edge Functions 的服務角色金鑰 (請保密) |
透過 Supabase CLI 部署以下 7 個 Edge Functions:
generate-embeddings:為測驗題庫產生向量嵌入 (Vector Embeddings)。search-questions:執行向量相似度搜尋。user-role-sync:同步角色變更至 profile 資料表。process-payment:處理付款的 Webhook。export-data:為使用者產生資料匯出。send-notification:觸發推播通知。validate-test-score:驗證認證考試的成績。supabase functions deploy <function-name>
pgvector 擴充功能已安裝,且嵌入維度相符 (768)。OPTIONS 請求,並回傳正確的 CORS 標頭。03-mongodb-setup.md
mockexam_db) 與集合 (Questions, Discussions)。dependencies:
mongo_dart: latest
import 'package:mongo_dart/mongo_dart.dart';
class MongoService {
static final MongoService _instance = MongoService._internal();
late Db _db;
factory MongoService() {
return _instance;
}
MongoService._internal();
Future<void> init(String connectionString) async {
_db = await Db.create(connectionString);
await _db.open();
}
}
原因:瀏覽器無法透過 Dart 驅動程式使用的標準 TCP 協定直接連線至 MongoDB。
| 變數 | 說明 |
|---|---|
MONGO_CONNECTION_STRING |
MongoDB 連線字串 URI |
MONGO_WEB_PROXY_URL |
用於網頁代理的 Cloudflare Worker URL |
MONGO_DB_NAME |
資料庫名稱 |