flutter-firebase
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseFirebase Setup
Firebase配置
- Use for initialization — call
firebase_corebeforeFirebase.initializeApp()runApp() - Use for platform-specific setup
flutterfire configure - Use separate Firebase projects per flavor (see skill)
app-config - Register Firebase services via for consistent DI
injectable
- 使用完成初始化 —— 在调用
firebase_core之前先执行runApp()Firebase.initializeApp() - 使用完成平台专属配置
flutterfire configure - 不同环境版本对应独立的Firebase项目(参考技能)
app-config - 通过注册Firebase服务,实现统一的依赖注入
injectable
Authentication
身份验证
- Use for user management
firebase_auth - Wrap all auth calls in an — no direct
AuthRepositoryusage in BLoCs or UIFirebaseAuth - Support email/password, Google Sign-In, and Apple Sign-In at minimum
- Handle auth state changes via stream in
FirebaseAuth.instance.authStateChanges()AuthBloc - Store auth tokens via — never in
flutter_secure_storageor source codeSharedPreferences - Implement proper sign-out: clear local cache, navigate to login, dispose user-specific BLoCs
- 使用实现用户管理
firebase_auth - 所有认证相关调用都封装在中 —— 禁止在BLoCs或UI层直接调用
AuthRepositoryFirebaseAuth - 至少支持邮箱/密码、Google Sign-In、Apple Sign-In三种认证方式
- 在中通过
AuthBloc流处理认证状态变更FirebaseAuth.instance.authStateChanges() - 使用存储认证令牌 —— 绝对不要存储在
flutter_secure_storage或者源码中SharedPreferences - 实现规范的登出逻辑:清空本地缓存、跳转至登录页、销毁用户专属的BLoCs
Firestore
Firestore
- Use for remote data persistence
cloud_firestore - DataSources wrap all Firestore calls (,
get,set,update,delete)snapshots - Use typed model classes with /
fromFirestorefactory methodstoFirestore - Prefer for type-safe collection references
.withConverter<T>() - Use batch writes for multi-document operations — never multiple sequential writes
- Implement offline persistence (enabled by default on mobile)
- 使用实现远程数据持久化
cloud_firestore - DataSource层封装所有Firestore调用(、
get、set、update、delete)snapshots - 使用带/
fromFirestore工厂方法的类型化模型类toFirestore - 优先使用获取类型安全的集合引用
.withConverter<T>() - 多文档操作使用批量写入 —— 绝对不要执行多次顺序写入
- 实现离线持久化(移动端默认已开启)
Security Rules
安全规则
- NEVER rely on client-side validation alone — enforce rules in Firestore Security Rules
- Default deny: start with and open only what's needed
allow read, write: if false; - Always validate for authenticated-only collections
request.auth != null - Test rules with the Firebase Emulator Suite before deploying
- 绝对不要只依赖客户端校验 —— 必须在Firestore安全规则中强制校验
- 默认拒绝所有访问:初始规则设置为,仅开放必要的权限
allow read, write: if false; - 针对仅允许认证用户访问的集合,必须校验
request.auth != null - 部署前使用Firebase Emulator Suite测试规则
Push Notifications (FCM)
推送通知(FCM)
- Use for push notifications
firebase_messaging - Request notification permissions early but gracefully (explain value before requesting)
- Handle foreground, background, and terminated-state messages separately
- Store FCM token in Firestore user document for server-side targeting
- Re-register token on stream
onTokenRefresh
- 使用实现推送通知功能
firebase_messaging - 尽早且友好地申请通知权限(申请前先向用户说明权限价值)
- 分别处理前台、后台、应用终止三种状态下的消息
- 将FCM令牌存储在Firestore的用户文档中,用于服务端定向推送
- 监听流,令牌刷新时重新注册
onTokenRefresh
Crashlytics
Crashlytics
- Use for crash reporting
firebase_crashlytics - Enable in staging and production flavors only — disable in dev
- Record Flutter errors:
FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterFatalError - Catch async errors via
PlatformDispatcher.instance.onError - Add custom keys for user context:
Crashlytics.instance.setCustomKey('userId', id)
- 使用实现崩溃上报
firebase_crashlytics - 仅在预发和生产环境开启 —— 开发环境关闭
- 记录Flutter错误:
FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterFatalError - 通过捕获异步错误
PlatformDispatcher.instance.onError - 增加用户上下文自定义键:
Crashlytics.instance.setCustomKey('userId', id)
Analytics
Analytics
- Use for user behavior tracking
firebase_analytics - Log meaningful events with descriptive names:
analytics.logEvent(name: 'purchase_completed') - Set user properties for segmentation:
analytics.setUserProperty(name: 'plan', value: 'premium') - Track screen views via in
FirebaseAnalyticsObserverGoRouter - NEVER log PII (emails, passwords, phone numbers) in analytics events
- 使用实现用户行为追踪
firebase_analytics - 记录语义清晰的有效事件:
analytics.logEvent(name: 'purchase_completed') - 设置用户属性实现用户分群:
analytics.setUserProperty(name: 'plan', value: 'premium') - 在中通过
GoRouter追踪页面浏览FirebaseAnalyticsObserver - 绝对不要在分析事件中记录个人可识别信息(邮箱、密码、手机号)
Remote Config
远程配置
- Use for feature flags and A/B testing
firebase_remote_config - Set sensible defaults locally — app MUST work without Remote Config fetched
- Fetch and activate on app start with a timeout fallback
- Cache values and respect minimum fetch intervals to avoid throttling
- 使用实现功能开关和A/B测试
firebase_remote_config - 本地设置合理的默认值 —— 就算没有拉取到远程配置,应用也必须能正常运行
- 应用启动时拉取并激活配置,设置超时兜底逻辑
- 缓存配置值,遵守最小拉取间隔要求避免被限流