opwoco/rms-push-notifications-bundle
A Symfony bundle for integrating RMS push notifications into your application. It provides configuration and delivery support for connecting app events to RMS push services, simplifying notification setup.
Bottom line: Do not integrate this package. It is a Symfony 2-era bundle whose two core transports — the Apple Push Notification Service legacy binary provider and Google Cloud Messaging — have both been shut down by their vendors. The repository has zero stars and zero dependents, so there is no upstream activity, no issue history, and no community to lean on. What remains is a domain model and some payload-shaping code wrapped in an obsolete framework integration.
Architecture fit — mismatch on two axes. First, the framing: despite being scoped here as a "Laravel/PHP package," this is a Symfony bundle. The Bundle suffix, the DependencyInjection extension, and the service-container XML/YAML wiring are all Symfony idioms. Laravel has no mechanism to consume a Symfony bundle; you would be discarding the bundle layer entirely and harvesting raw classes. Second, those raw classes are themselves coupled to Symfony 2 components — most notably the event dispatcher, whose base Event class moved to Symfony\Contracts\EventDispatcher\Event in Symfony 4.3. Any salvage work is a port, not an install.
Integration feasibility — low, and falling. The realistic options are (a) composer require and use it as intended, which is impossible on a modern Laravel stack; (b) fork and reimplement the transports against current APIs, which is a rewrite with the original as reference material; or (c) ignore the package and build or buy a maintained alternative. Only (b) and (c) are viable, and (b) costs more than (c) for a smaller result. There is no version of this that is a one-sprint integration.
Technical risk — the transports are dead, which caps the risk story at "unusable" rather than "risky." Both protocols this bundle exists to speak have been retired:
.p8 key) or certificate-based auth.So the bundle's central value proposition does not function against production Apple or Google endpoints. Secondary risks stack on top: PHP version drift (a Symfony 2-era codebase will not run cleanly on PHP 8.x), no security patch stream, an MIT license that permits a fork but offers no support obligation, and a 0.03 score against a 4.16 "opportunity" figure that the metadata itself contradicts. Treat the score as noise, not signal.
Key questions to resolve before any engineering time is spent:
Stack fit: none as-is. A Laravel application should express push notifications through the Notification facade with custom channels, dispatching to queued jobs. That is the idiomatic surface, and it composes with existing queue, retry, and observability infrastructure. A Symfony bundle cannot occupy that slot; anything ported from it must be re-hosted as a Laravel service provider plus a channel class.
Recommended path — replace, don't migrate. Adopt a maintained transport library rather than resurrecting this one. For APNs, a current HTTP/2 client with token-based auth; for Android, the FCM HTTP v1 API via a maintained Firebase SDK. If the team wants a single abstraction, wrap both behind one PushChannel interface and register it with Laravel's notification system. This is a few days of work and yields supported, patched, documented code.
If the bundle holds irreplaceable logic — extract, don't depend. Treat the repository as a specification document:
PushTransport, DeviceRepository, PushResult) that mirror those concepts without importing a single class from the package.device_tokens table exists, migrate it forward rather than recreating it; token churn means you cannot re-register the install base.Compatibility. Assume nothing runs on PHP 8. Verify PHP constraint and Symfony component versions before writing any code; if the plan depends on loading these classes at runtime, that plan is already wrong. Also confirm whether any transitive dependency is abandoned — with zero dependents there is no downstream evidence that the dependency graph resolves on a current platform.
Sequencing. (1) Confirm the business requirement and volume; (2) decide build-vs-buy — buy unless volume or compliance forces otherwise; (3) if building, extract the domain spec from this repo and close it; (4) build the transport layer against live sandbox credentials for both platforms; (5) run shadow traffic against a small device cohort; (6) cut over per platform, Android first (lower blast radius, simpler auth). Do not attempt a parallel-run of the old bundle — there is nothing running to run in parallel with.
Maintenance — total ownership, no upstream. Forking means the team absorbs every future change: PHP upgrades, vendor API revisions, credential format changes. Budget roughly one engineer-week per year of steady-state upkeep, plus unbounded cost at each platform API break. The alternative — an actively maintained dependency — transfers that cost to a vendor for free.
Support. None. No maintainer response, no CVE feed, no documented upgrade path. For a component that handles device identifiers and sits on the critical path of user-facing engagement, that is a governance problem, not just a convenience one. Security review will likely flag an unmaintained dependency with no patch stream.
Scaling. Expect the inherited design to be synchronous and blocking, with per-message HTTP calls and no batching or backoff. Modern APNs tolerates connection reuse well over HTTP/2, but FCM v1 has no batch endpoint — throughput comes from controlled concurrency, which the old design almost certainly lacks. Anything above modest volume requires re-architecting onto a queue with rate limiting, exponential backoff, and dead-letter handling. This is a design change, not a tuning exercise.
Failure modes to design against explicitly:
UNREGISTERED) must be parsed per-message and fed back into token cleanup, or the token table rots and delivery rates quietly decay..p8 keys and FCM service-account JSON both expire or get rotated; a push outage from an expired key is a classic 2 a.m. page. Alert on auth failures as a distinct error class.Ramp-up. A new engineer needs both Laravel queue/notification fluency and hands-on familiarity with APNs and FCM authentication — two distinct credential models, two error taxonomies. The bundle offers no help here and actively misleads: its patterns describe an architecture that no longer exists, so onboarding time is spent unlearning. Estimate two to three weeks to first confident production change on a clean reimplementation, versus open-ended archaeology if the team tries to work within the fork.
Recommendation. Close the evaluation with a "do not adopt" decision, retain the extracted domain notes as reference, and fund a small replacement built on maintained transports behind a Laravel notification channel. The only scenario that reverses this is a hard constraint requiring the original binary protocols — and no such constraint can exist, because Apple and Google no longer serve them.
How can I help you explore Laravel packages today?