@sadikkhan02/adapter-fcm
移动和Web推送通知适配器的NotifyKit使用Firebase云消息(FCM)。
这个包通过谷歌Firebase Cloud Messaging v1 API在Android、iOS(通过FCM的apn)和Web浏览器上提供推送通知。它符合 PushProvider 契约,对非字符串数据有效负载进行字符串化,并优雅地处理令牌无效。
安装
npm install @sadikkhan02/notifykit @sadikkhan02/adapter-fcm firebase-admin
注意:
firebase-admin被声明为外部对等依赖,以允许消费者控制SDK版本绑定、谷歌云环境认证和Firebase应用程序池。
配置和凭据
FCM需要谷歌的云服务帐户凭据 Firebase云消息传递API管理 的角色。
环境变量
| 变量 | 描述 |
|---|---|
FCM_SERVICE_ACCOUNT_JSON | 原始JSON字符串或Firebase服务帐户密钥的文件路径 |
GOOGLE_APPLICATION_CREDENTIALS | 标准谷歌云SDK凭据路径回退 |
FCM_PROJECT_ID | 可选显式谷歌云项目ID |
优先级顺序
适配器按以下顺序解析服务帐户凭据:
- 直接
serviceAccount参数new FcmPushProvider({ serviceAccount: ... })(对象、JSON字符串或文件路径) process.env.FCM_SERVICE_ACCOUNT_JSONprocess.env.GOOGLE_APPLICATION_CREDENTIALS- 预重火力点
app或者messaging客户端注入期权
使用
import { createNotifier } from '@sadikkhan02/notifykit';
import { FcmPushProvider } from '@sadikkhan02/adapter-fcm';
const pushProvider = new FcmPushProvider({
// Can be an object, JSON string, or file path:
serviceAccount: process.env.FCM_SERVICE_ACCOUNT_JSON,
});
const notifier = createNotifier({
providers: {
push: {
type: 'fcm',
adapter: pushProvider,
},
},
});
// Register push notification template
notifier.registerTemplate('new-message', '{{sender}} sent you a new message: {{preview}}');
// Enqueue push notification (returns immediately with jobId)
const { jobId } = await notifier.notify({
to: { pushToken: 'fcm_device_registration_token_xyz...' },
channels: ['push'],
template: 'new-message',
data: {
sender: 'Sarah',
preview: 'Hey, are you free for a call?',
// Data values are automatically stringified for FCM compliance
conversationId: 'conv_123',
},
});
// Start processing push queue
notifier.startWorker({ channels: ['push'], concurrency: 20 });
错误分类和DLQ路由
FCM错误代码被清晰地分类为瞬时网络/服务器故障和永久令牌失效:
| FCM /谷歌错误码 | 描述 | retryable | BullMQ行动 |
|---|---|---|---|
messaging/server-unavailable | 谷歌FCM后端过载 | true | 以指数回退重试 |
messaging/internal-error | 短暂的内部Firebase错误 | true | 以指数回退重试 |
messaging/quota-exceeded | 项目发送速率受限 | true | 以指数回退重试 |
messaging/unknown-error | 未知的网络/网关故障 | true | 以指数回退重试 |
messaging/registration-token-not-registered | 设备卸载的应用/令牌过期 | false | 直接路由到DLQ(不重试) |
messaging/invalid-registration-token | 格式错误或损坏的令牌字符串 | false | 直接路由到DLQ(不重试) |
messaging/mismatched-credential | 令牌属于不同的发送方ID | false | 直接路由到DLQ(不重试) |
messaging/authentication-error | 无效的服务帐户或过期的密钥 | false | 直接路由到DLQ(不重试) |
自动私钥清理
所有错误日志和提供程序结果都会自动剥离私钥(BEGIN PRIVATE KEY)、不记名令牌和客户端秘密。
许可证
麻省理工学院