nimblephp/firebase
Composer 安装命令:
composer require nimblephp/firebase
包简介
Standalone Firebase push notifications module for NimblePHP - FCM sending with device registry and delivery queue processed by cron
README 文档
README
Samodzielny moduł powiadomień push dla NimblePHP oparty na Firebase Cloud
Messaging (FCM HTTP v1). Moduł trzyma własny stan (rejestr urządzeń + kolejka
wysyłki), a wysyłkę realizuje worker cron — nie wymaga żadnego innego modułu poza
framework i migrations.
Instalacja
composer require nimblephp/firebase
Migracje (module_firebase_device, module_firebase_delivery) uruchamiają się
przez Module::onUpdate() (grupa module_firebase) podczas aktualizacji aplikacji.
Konfiguracja (env)
Konto serwisowe Firebase Admin SDK — plik albo wartości inline:
| Zmienna | Znaczenie |
|---|---|
FCM_CREDENTIALS_PATH |
ścieżka do firebase-adminsdk.json (domyślnie /run/secrets/firebase-adminsdk.json) |
FCM_PROJECT_ID |
id projektu (gdy bez pliku) |
FCM_CLIENT_EMAIL |
client_email konta serwisowego |
FCM_PRIVATE_KEY |
private_key konta serwisowego |
Użycie
Rejestracja urządzenia (z kontrolera)
$device = $this->loadModel(\NimblePHP\Firebase\ModuleFirebaseDeviceModel::class); $deviceId = $device->register([ 'installation_id' => $installationId, // unikalny per instalacja 'token' => $fcmToken, 'platform' => 'android', ]);
register() robi upsert po installation_id (aktualizuje token, reaktywuje).
Powiązanie urządzenia z użytkownikiem to zadanie aplikacji — trzymaj mapowanie
user ↔ device_id (lub installation_id) we własnej tabeli. Moduł celowo nie
zna pojęcia konta.
Kolejkowanie powiadomienia
$delivery = $this->loadModel(\NimblePHP\Firebase\ModuleFirebaseDeliveryModel::class); // pojedyncze urządzenie $delivery->enqueue($deviceId, 'Tytuł', 'Treść', ['key' => 'value'], priority: 2); // wiele urządzeń naraz (id urządzeń ustalasz po swojej stronie) $service = new \NimblePHP\Firebase\PushService(); $service->enqueueForDevices($delivery, [$deviceId1, $deviceId2], 'Tytuł', 'Treść');
Wysyłka (dwustopniowy cron)
Wysyłka jest rozdzielona, żeby wolne wywołania HTTP do FCM nie blokowały kolejki:
- Dispatcher
#[Cron('* * * * *')](dispatchQueueCron) — co minutę zmienia wpisynew → queuedi dorzuca jedno lekkie zadanie na dostarczenie (Cron::addJob). Same INSERT-y, więc nawet duży backlog rozrzuca się szybko. - Zadanie wysyłki (
sendDeliveryJob(id)) — wykonuje pojedyncze wywołanie FCM, ustawia status (sent/failed/invalid) i deaktywuje urządzenie z nieważnym tokenem. Krótkie, nie przetrzymuje kolejki.
Statusy dostarczenia: new → queued → sent | failed | invalid.
Wysyłka bezpośrednia (bez kolejki)
(new \NimblePHP\Firebase\FcmService())->sendToDevice( $fcmToken, ['title' => 'Tytuł', 'body' => 'Treść', 'priority' => 2], ['key' => 'value'] );
Klasy
FcmService— transport FCM v1 (OAuth2 JWT RS256, bez zależności zewnętrznych)ModuleFirebaseDeviceModel— rejestr urządzeń (register,getByInstallationId,deactivate) + cron czyszczącyModuleFirebaseDeliveryModel— kolejka wysyłki (enqueue) + dispatcher cron +sendDeliveryJobPushService— fan-out po liście urządzeń + dispatch/wysyłka kolejkiFcmDeliveryException/FirebaseException
统计信息
- 总下载量: 1
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 1
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2026-07-01