移动/游戏
在 Capacitor 应用中接入 Firebase…
当需要在 Capacitor 6/7/8 应用(Android/iOS/Web)中通过 @capacitor-firebase/messaging 使用 FCM 推送通知时,按步骤完成 Firebase 配置、插件安装、平台配置、权限与代码实现并排查常见错误。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
在 Capacitor 应用中接入 Fi特定
解决思路
- 先分析项目:检查 android/、ios/ 目录确定目标平台,检查 vite.config.ts、angular.json、webpack.config.js、next.config.js 等确定构建工具/框架,从 package.json 读取 @capacitor/core 版本,并检查是否安装了冲突插件 @capacitor/push-notifications(若存在需执行 npm uninstall @capacitor/push-notifications 卸载)。
- 配置 Firebase:Android 检查 android/app/google-services.json 是否存在,iOS 检查 ios/App/App/GoogleService-Info.plist 是否存在;对缺失的平台按 references/firebase-setup.md 引导完成 Firebase 项目配置。
- 安装插件:执行 npm install @capacitor-firebase/messaging firebase,然后执行 npx cap sync。
- 配置 Android(仅当存在 android/ 时):按 references/android-setup.md 应用 Android 专属配置。
- 配置 iOS(仅当存在 ios/ 时):按 references/ios-setup.md 应用 iOS 专属配置,包括 APNs 密钥/证书设置、修改 AppDelegate.swift、启用相关 capabilities。
- 配置 Web(若项目面向 Web):按 references/web-setup.md 应用 Web 专属配置。
- 配置插件选项:询问用户是否自定义 iOS 前台通知展示方式,若是则在 capacitor.config.json 或 capacitor.config.ts 中添加 plugins.FirebaseMessaging.presentationOptions,可选值为 badge、sound、alert、criticalAlert,默认 ["alert", "badge", "sound"]。
- 添加推送代码:按 references/implementation.md 将推送通知代码加入项目,并根据用户框架调整导入与结构,覆盖:请求权限、获取 FCM token、监听收到的通知、处理通知点击。
- 配置可选功能:询问用户要启用哪些可选功能——主题订阅(仅 Android/iOS)、通知渠道(仅 Android SDK 26+)、token 刷新监听;对每项选中的功能按 references/implementation.md 应用对应代码。
- 同步并测试:执行 npx cap sync,然后按 references/testing.md 引导用户通过 Firebase Console 发送测试通知。
- 排错——插件冲突:@capacitor-firebase/messaging 不能与 @capacitor/push-notifications 共存,执行 npm uninstall @capacitor/push-notifications && npx cap sync。
- 排错——iOS 收不到通知:确认 APNs 密钥/证书已上传到 Firebase Console,确认已启用 Push Notifications 和 Background Modes capabilities,确认 AppDelegate.swift 包含所需 delegate 方法。
- 排错——iOS 未调用 didRegisterForRemoteNotificationsWithDeviceToken:在 Xcode 的 Signing & Capabilities 中添加 Push Notifications capability,并确认应用 bundle ID 与 Firebase 及 Apple Developer 门户中注册的一致。
- 排错——Android 收不到通知:确认 google-services.json 位于 android/app/google-services.json,并确认已应用 Google services Gradle 插件。
- 排错——Android 通知图标显示为白色方块:通知图标必须是透明背景上的白色像素,带颜色的应用图标会渲染成白色方块,需添加专用的推送通知图标。
- 排错——Web getToken() 失败:确认 VAPID key 正确,确认域名根目录存在 firebase-messaging-sw.js,并检查浏览器是否支持 Push API。
- 排错——FCM token 为 null:确认在调用 getToken() 之前已调用 requestPermissions() 且返回 granted;iOS 上确认设备不是模拟器(模拟器无法接收推送通知)。
- 排错——checkPermissions() 返回 denied:用户已永久拒绝通知权限,引导其通过设备设置(设置 > 应用 > 通知)重新启用。
- 排错——Android 13+ 无权限弹窗:Android 13(API 33)及以上必须显式调用 requestPermissions(),更早版本默认授予通知权限。
- 若可用,优先通过 MCP 服务器获取最新文档:按主题选择 Capawesome MCP 服务器(Capawesome 插件、CLI、Cloud)或 Capacitor MCP 服务器(Capacitor CLI、capacitor.config、原生 Android/iOS 项目、官方插件 API),调用 search_docs 并用 get_doc_page 阅读对应页面;两者冲突时以文档为准。若不可用,可提示用 claude mcp add --transport http capawesome "https://mcp.capawesome.io/mcp" 和 claude mcp add --transport http capacitor "https://capacitor-mcp.capawesome.io/mcp" 添加,但不要因此阻塞流程。
- 交互方式:逐步引导用户,一次只问一个不相关的问题;先自动检测项目(平台、构建工具、框架、package.json 依赖),仅在无法检测时才询问;提供具体选项(如“是否配置主题订阅?(yes/no)”)而非开放式问题。
适用边界 · 注意事项
- 不适用于本地通知(local notifications)。
- 不适用于非 Firebase 的推送服务提供商。
- 不适用于迁移 Capacitor 应用或插件,也不适用于非 Capacitor 的移动框架。