关于 flutter-firebase
flutter-firebase 是一项 Flutter 开发技能,介绍 Firebase 的配置及常见应用服务组织方式,涵盖身份验证、Firestore、通知、崩溃报告、分析和 Remote Config,并包含安全与测试指导。
主要功能
- 01Firebase 初始化与 flavor 配置
- 02基于 Repository 的身份验证模式
- 03类型化 Firestore 数据访问与批量写入
- 04FCM 通知生命周期处理
- 05Crashlytics 与 Analytics 配置
- 06Remote Config 默认值与获取策略
适用场景
- 01在 Flutter 应用中配置 Firebase 服务
- 02通过 AuthRepository 组织身份验证
- 03使用 Firestore 持久化类型化数据
- 04配置通知、崩溃报告或分析
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ dhruvanbhalara/ skills --skill flutter-firebase安装后在 Claude Code 中输入/flutter-firebase确认已加载。
详细介绍
Firebase 配置
- 使用
firebase_core进行初始化:在调用runApp()前调用Firebase.initializeApp() - 使用
flutterfire configure进行平台特定的配置 - 每个 flavor 使用独立的 Firebase 项目(参见
app-config技能) - 通过
injectable注册 Firebase 服务,确保 DI 一致
身份验证
- 使用
firebase_auth管理用户 - 将所有身份验证调用封装在
AuthRepository中:BLoC 或 UI 中不得直接使用FirebaseAuth - 至少支持电子邮件/密码、Google Sign-In 和 Apple Sign-In
- 在
AuthBloc中通过FirebaseAuth.instance.authStateChanges()流处理身份验证状态变化 - 使用
flutter_secure_storage存储身份验证令牌:绝不能存放在SharedPreferences或源代码中 - 实现妥善的退出登录:清除本地缓存、导航至登录页、释放用户专属的 BLoC
Firestore
- 使用
cloud_firestore持久化远程数据 - 由 DataSource 封装所有 Firestore 调用(
get、set、update、delete、snapshots) - 使用带类型的模型类,并提供
fromFirestore/toFirestore工厂方法 - 优先使用
.withConverter<T>()创建类型安全的集合引用 - 对多文档操作使用批量写入:绝不要多次顺序写入
- 实现离线持久化(移动端默认启用)
安全规则
- 绝不要仅依赖客户端验证:在 Firestore Security Rules 中强制执行规则
- 默认拒绝:从
allow read, write: if false;开始,只开放必要的权限 - 对仅限已验证身份的集合,始终验证
request.auth != null - 部署前使用 Firebase Emulator Suite 测试规则
推送通知(FCM)
- 使用
firebase_messaging处理推送通知 - 尽早请求通知权限,但应循序渐进(请求前先说明其用途)
- 分别处理前台、后台和已终止状态下的消息
- 将 FCM 令牌存储在 Firestore 用户文档中,以便在服务端进行定向发送
- 通过
onTokenRefresh流重新注册令牌
Crashlytics
- 使用
firebase_crashlytics报告崩溃 - 仅在 staging 和 production flavor 中启用:在 dev 中禁用
- 记录 Flutter 错误:
FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterFatalError - 通过
PlatformDispatcher.instance.onError捕获异步错误 - 添加用户上下文自定义键:
Crashlytics.instance.setCustomKey('userId', id)
Analytics
- 使用
firebase_analytics跟踪用户行为 - 使用描述性名称记录有意义的事件:
analytics.logEvent(name: 'purchase_completed') - 设置用户属性以进行细分:
analytics.setUserProperty(name: 'plan', value: 'pro') - 通过
GoRouter中的FirebaseAnalyticsObserver跟踪屏幕浏览 - 绝不要在分析事件中记录 PII(电子邮件、密码、电话号码)
Remote Config
- 使用
firebase_remote_config管理功能开关并进行 A/B 测试 - 在本地设置合理的默认值:即使未获取 Remote Config,应用也必须正常运行
- 在应用启动时获取并激活配置,并设置超时回退
- 缓存值并遵循最小获取间隔,以避免触发限流
评论
支持 Markdown