mrdanshur/awspushbundle
A Symfony bundle that integrates AWS Simple Notification Service (SNS) for sending mobile push notifications to iOS and Android devices. It wraps SNS client setup and push delivery in Symfony services and configuration, letting you dispatch device notifications from your application.
Architecture fit — high friction, unchanged. The package remains a Symfony Bundle, not a Laravel package. Laravel does not consume Symfony Bundles: there is no Bundle registration, no Extension::load() invocation, and no Configuration TreeBuilder processing in Laravel's container. The bundle's value (service definitions, config tree, autowired SNS client) is expressed in idioms Laravel will silently ignore. In practice, "leverage" means extracting the SNS wrapper/payload-builder classes and re-registering them via a Laravel service provider — the bundle scaffolding itself is dead weight in a Laravel app.
Integration feasibility — conditional, medium effort, unchanged by 1.0.1. The genuinely reusable asset is the cross-platform message composition for SNS mobile push (APNS / GCM / ADM payload envelopes) and endpoint-ARN handling. That logic is typically a thin SnsClient::publish() wrapper, portable in 1–2 days of spike work. Feasibility hinges on whether those classes are container-coupled (constructor-injected Symfony services, ContainerAwareInterface, config-tree-driven arguments) or plain objects. Release 1.0.1 does not touch the bundle scaffolding, so the extraction effort estimate stands.
Technical risk — still unacceptable as a direct dependency for a production push path.
aws/aws-sdk-php major bumps.symfony/framework-bundle / dependency-injection into a Laravel app, colliding with Laravel's own pinned symfony/* versions.Key questions for the spike
aws/aws-sdk-php constraint does it pin, and does it resolve against our current SDK?Stack fit. Targets Laravel 10/11 on PHP 8.1+. The bundle is not installable as-is; two viable paths:
| Path | Effort | Outcome |
|---|---|---|
| A — Vendor the core | 2–4 days | Copy the SNS payload/wrapper classes into app/Support/Push, wrap in a PushSender interface, register in AppServiceProvider. Keeps the cross-platform payload logic, drops the bundle. Now scoped: vendor APNS/ADM envelopes only; treat the GCM branch as dead code per 1.0.1. |
| B — Skip the package | 1–2 days | aws/aws-sdk-php SnsClient directly behind a Laravel NotificationChannel. Slightly more code, zero dormant-dependency risk. |
Recommendation: spike Path A, default to Path B — unchanged, and marginally strengthened. 1.0.1 removes the last argument for keeping the Android path, so Path A's value narrows to APNS/ADM payload variance (e.g. APNs aps sizing, mutable-content, ADM quirks), which is the only thing that would justify vendoring.
Migration path.
Resources/config/services.*, actual push classes) including the 1.0.1 diff to see whether the GCM fix touched shared payload code.SnsClient.App\Contracts\PushSender with send(DeviceToken $token, PushMessage $msg): Result.SnsPushSender (vendored or SDK-native) behind that interface; Android routes to FCM v1 or a managed provider, not the vendored GCM path.Compatibility. Verify composer why-not against our symfony/* and aws/aws-sdk-php pins before committing. Expect to add replace/exclude for symfony/framework-bundle. Confirm PHP 8.2/8.3 support — a 2023-03 baseline with a 1.0.1 patch is unlikely to have added 8.3 deprecation fixes; re-run the compatibility check against 1.0.1 specifically rather than assuming.
Sequencing. Audit (incl. 1.0.1 diff) → PoC (one platform) → abstraction + tests → build-vs-adopt decision → production rollout. Do not sequence this behind a release; treat the package as a reference implementation to mine, not a dependency to adopt. 1.0.1 does not change sequencing.
Maintenance. Adoption means we become the de facto maintainer of a fork. All bug fixes, SDK bumps, and security patches are ours. 1.0.1 is a data point that upstream can ship, but one patch release in ~24 months does not constitute a maintenance cadence. Budget ~1–2 days/quarter of stewardship, more on any aws-sdk-php major — and note that if we vendor, the GCM-era code we inherit is code we will be asked to fix, not upstream.
Support. No community, no issue-tracker track record, no SLA, one maintainer. Escalation path is "read the source." The 1.0.1 release raises confidence only from "no commits" to "occasional patches." Acceptable only because the surface area is small.
Scaling. Actual delivery scale is SNS's problem, not ours — SNS absorbs volume and fan-out. Our concerns are cost model (per-notification pricing at volume), the 256 KB payload cap, and per-platform payload differences. The package adds no scaling mechanism of its own; 1.0.1 adds no batching or rate-limit handling.
Failure modes to design for now:
MessageId absence.Ramp-up. Low for a team already fluent in SNS and Laravel notifications (~half a day). Medium otherwise: engineers must learn SNS mobile-push semantics (endpoint ARNs, platform applications, feedback) plus the internal wrapper — roughly 2–3 days including PoC. Add a half-day to establish internally that the Android/GCM path is out of scope, since 1.0.1 will otherwise read to a reviewer as "GCM is fixed."
Bottom line for the roadmap: 1.0.1 does not change the verdict. mrdanshur/awspushbundle remains reference material, not a dependency — the "Fix GCM issue" patch confirms the Android path is still GCM-era and therefore non-viable, narrowing the package's value to APNS/ADM payload reference. Worth 1–2 days of mining, not 2–4; the bundle itself still carries abandoned-dependency risk on a customer-facing critical path with no offsetting benefit.
How can I help you explore Laravel packages today?