aporat/laravel-push-notifications
A Laravel package for sending push notifications to mobile devices. It offers a simple API for composing and dispatching notifications, helping you add iOS and Android push delivery to your app without building the underlying integration yourself.
Architecture fit. This is a thin, idiomatically Laravel integration layer over aporat/push-notifications, not a reimplementation of APNs/FCM transport. The design maps well to common Laravel deployments: per-app configuration entries line up with multi-brand/multi-tenant product structures, via() channel support means push slots into the existing notification pipeline rather than running alongside it, and process-lifetime clients align with how queue workers actually behave (connection reuse across jobs instead of a TLS handshake per send). The abstraction boundary — Push::app('name') resolving to a platform-aware sender — is the right seam; it keeps provider-specific concerns out of application code and makes multi-provider routing a config decision rather than a code branch.
Integration feasibility. Two blockers gate adoption and both are logistics, not architecture:
composer.json resolves the core from a sibling checkout via a path repository. The notes state consumers' Composer ignores that entry, which means the integration package is effectively unpublishable/uninstallable in a normal CI or production pipeline today. This must be confirmed as resolved before any sprint commitment.Technical risk.
0.1.0 and ^0.1.2 carry no semver stability guarantee. Any minor bump can break the API. Pin exact versions and treat upgrades as deliberate change requests.config:cache artifacts, log context, or VCS. The claim that secrets-manager values "work as-is" needs verification of exactly where the value is dereferenced and whether it ever lands in a cached config file.Key questions.
^12.0|^13.0 or narrower?Stack fit. Best fit is a Laravel 12 application already on PHP 8.4 with queue workers and a shared cache backend (Redis is the natural choice given the token-cache requirement). It is a poor fit for anything mid-way through a PHP or Laravel major upgrade, and it is not usable at all until Packagist distribution is confirmed.
Migration path. Assume an existing laravel-notification-channels/apn + FCM setup or a homegrown sender:
DeviceTokenUnregistered should be wired to the existing cleanup job so token hygiene behavior is unchanged during the transition.Compatibility. Pin exact versions (0.1.0 / core 0.1.2). Record the PHP and Laravel constraint in the dependency policy so the Laravel 13 upgrade is not accidentally blocked by this package. Verify against the exact Laravel minor in production, not just the major.
Sequencing.
composer require from a clean environment (including CI).php artisan push:test against both APNs and FCM with real credentials — this validates the credential-resolution path end to end and is the single highest-value 30-minute check.config:cache output contains no secret material.NotificationSent/NotificationFailed/DeviceTokenUnregistered and point them at existing telemetry and token-cleanup jobs.Push::fake() assertions to that feature's tests so the pattern is established.Maintenance. Two 0.x dependencies to track, both single-vendor. Budget for reading release notes on every bump and for occasional forced upgrades. Because the surface is small and pure PHP, a one-time code read to establish internal ownership is cheap insurance against maintainer disappearance; decide explicitly whether the fallback is fork-and-vendor or rewrite.
Support. No commercial support. Your team owns debugging provider edge cases — APNs 410s, FCM UNREGISTERED noise, bad-token vs. bad-credential disambiguation. push:test is a genuine operational win here and should be documented in the runbook as the first diagnostic step for "pushes stopped."
Scaling. Three things scale with the app, not linearly with traffic:
Failure modes to instrument.
DeviceTokenUnregistered events and wipe live tokens. Rate-limit the listener and alert on anomalous volume before it acts.config:cache is the most likely place a secret leaks into a build artifact; add a CI check.Ramp-up. Small, well-shaped API surface: a config block, a channel, three events, a fake, and one artisan command. A Laravel-fluent engineer is productive in a day and confident in a week. The learning curve is not the package — it is provider semantics (APNs token-vs-certificate auth, sandbox vs. production gateways, FCM registration-token lifecycle). Allocate the ramp-up budget to that, and have the migrating engineer own the token-cleanup listener work so the provider knowledge stays in one head at first.
Recommendation. Architecturally sound and a clean fit for Laravel's notification pipeline; the risk is entirely in distribution readiness, version floors, and 0.x volatility. Gate on Packagist availability and a passed push:test spike, pin versions, and adopt behind a flag — do not commit to it as a hard dependency while both packages are pre-1.0 and unpublished.
How can I help you explore Laravel packages today?