承接 nimblephp/firebase 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

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:

  1. Dispatcher #[Cron('* * * * *')] (dispatchQueueCron) — co minutę zmienia wpisy new → queued i dorzuca jedno lekkie zadanie na dostarczenie (Cron::addJob). Same INSERT-y, więc nawet duży backlog rozrzuca się szybko.
  2. 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ący
  • ModuleFirebaseDeliveryModel — kolejka wysyłki (enqueue) + dispatcher cron + sendDeliveryJob
  • PushService — fan-out po liście urządzeń + dispatch/wysyłka kolejki
  • FcmDeliveryException / FirebaseException

统计信息

  • 总下载量: 1
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 2
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-07-01

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固