Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Jpush Notification Channel Laravel Package

medz/laravel-jpush-notification-channel

A Laravel notification channel for JPush (JiGuang Push). Send push notifications to Android, iOS, and other clients through Laravel's built-in notification system with a simple, fluent API and full support for JPush audience targeting and payload options.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. The package is a Laravel notification channel driver, which is a well-defined extension point in the framework. It plugs into the existing Notification::send() / via() / toJpush() contract rather than introducing a parallel dispatch mechanism, so it composes cleanly with queues, ShouldQueue, and notifiable models. That is architecturally the right seam: the channel is a thin translation layer between a Laravel notification DTO and JPush's HTTP API. The domain driver (JPush / 极光推送) is also a defensible choice if the product targets mainland China, where FCM/GCM is not viable and JPush remains a common, mature provider.

Integration feasibility. Mechanically trivial: composer require, package auto-discovery (the 5.5+ baseline implies it), publish config for app key/master secret, add a toJpush() method and a via() entry to one or more notification classes. A competent Laravel engineer can complete a working spike in under a day. The real feasibility question is version compatibility, not effort.

Technical risk. This is where the package fails as a default choice:

  • Abandoned upstream. Archived repo, last release December 2019. No security patches, no PHP 8.x or Laravel 9/10/11 compatibility work, no response to issues. Anything we build on it is effectively a fork from day one.
  • Transitive dependency risk. The channel almost certainly wraps a JPush PHP SDK. That SDK's maintenance state, API version (v3 push API), and PHP 8 compatibility must be verified independently — the archived wrapper may be pinning an equally stale dependency, which is the harder thing to replace.
  • Low community validation. 44 stars means essentially no peer review, no third-party battle testing, and no ecosystem of forks to draw on. The 0.14 health score is consistent with this.
  • Thin surface, low intrinsic complexity. The mitigating factor: a notification channel is typically a few hundred lines. The cost of owning the code is low; the cost of owning the JPush SDK beneath it is the actual liability.

Key questions.

  1. Which JPush PHP SDK does it depend on, at what version, and is that SDK PHP 8.1+/8.2+ compatible?
  2. Does it target the current JPush v3 push API, and does it support registration ID, alias, and tag audience targeting?
  3. What is the minimum/maximum Laravel and PHP version actually tested, versus merely declared?
  4. Is there any test suite or CI signal in the repo, or is it untested sample code?
  5. Does it emit Laravel's NotificationFailed event on dispatch errors, or swallow them?
  6. Is JPush still the right provider for our market, or does our cloud vendor (Aliyun/Tencent) already offer a push service we are paying for?
  7. Who internally would own a fork, and for how long?

Integration Approach

Stack fit. Only viable on legacy Laravel 5.5–6.x (possibly 7) with PHP 7.x. On any newer Laravel, treat it as reference source, not as a dependency. If the product is greenfield on Laravel 10/11, this package is out of scope.

Migration path. Three options, in order of preference:

  1. In-house the channel. Copy the driver's logic into app/Notifications/Channels/JpushChannel.php (or a small first-party package), depending directly on a maintained JPush SDK or a thin Guzzle client against the JPush REST API. Roughly one to three days of work, MIT license permits it, and it eliminates the abandoned-wrapper layer while keeping the SDK decision explicit.
  2. Fork and pin. Fork the repo to our VCS, add PHP 8 and current-Laravel CI, tag an internal version, and reference it by VCS path in Composer. Justified only if we need the exact existing behavior with minimal change.
  3. Install as-is. Only acceptable for a short-lived spike or a legacy app that is already frozen on Laravel 5.5/6.

Compatibility. Before committing, produce a version matrix: Laravel version × PHP version × JPush SDK version × result of a real send to a test device on both Android and iOS. Verify that the channel method signature still satisfies the current Illuminate\Notifications\Channels\Channel expectations and that auto-discovery works on the target framework version.

Sequencing.

  1. Spike: send one real push end-to-end in a scratch app on our exact Laravel/PHP version.
  2. Decision gate: does the underlying JPush SDK work on our runtime? If no, stop and go straight to the in-house option.
  3. Abstract: define our own small interface (e.g. PushSender) with the channel as one implementation, so a provider swap (Getui, Umeng, cloud-vendor push) does not touch notification classes.
  4. Contract tests: mocked HTTP fixtures for success, auth failure, invalid registration ID, and rate-limit responses.
  5. Roll out behind a feature flag to one notification type before broadening.

Operational Impact

Maintenance. The package has no maintainer. Budget ongoing ownership from day one: dependency bumps, PHP upgrades, JPush API changes, and credential rotation all land on us. Realistically this is a low-single-digit percentage of one engineer's time if we in-house a small channel, and materially more if we fork and track upstream drift.

Support. No vendor support path, no security advisory feed, no issue triage. Internal documentation and an owner must be named explicitly, or this becomes orphaned code the first time the owning engineer leaves.

Scaling. The notification channel model sends per notifiable, which means one JPush API call per recipient unless we batch. At meaningful volume (tens of thousands of pushes per campaign) we need JPush's batch/audience API and a queued fan-out with rate limiting and retry/backoff — none of which this package provides. Plan for queue workers, per-provider concurrency limits, and idempotency keys to avoid duplicate pushes on retry. Delivery receipts and open/click analytics require JPush's separate reporting endpoints, not the send path.

Failure modes.

  • Silent failures: if errors are not surfaced as NotificationFailed, pushes vanish with no signal. Instrument explicitly.
  • Stale device tokens and registration IDs: expect a meaningful share of invalid targets; needs a cleanup job driven by JPush's invalid-ID responses.
  • Credential exposure: app master secret in config/env — enforce secret storage and rotation, since a compromised master secret allows pushes to our entire user base.
  • Network egress: calls to JPush endpoints from non-China regions can be slow or unreliable; watch timeouts and consider regional egress.
  • Regulatory: push content in China is subject to content and实名 compliance obligations. That is a product/legal dependency, not a package one, but it belongs in the risk register alongside this decision.
  • Provider lock-in: migrating off JPush later means re-collecting device tokens for the new provider; the abstraction in step 3 limits blast radius but does not remove it.

Ramp-up. Very low. Any Laravel developer can read the driver in under an hour; the learning curve is JPush's audience model and reporting API, not this package. Onboarding cost is not the concern — longevity is.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
ignibyte/aic-framework
glavweb/data-schema-bundle
glavweb/datagrid-bundle
tacticmedia/scim-server
uni-method/frame
neika-ai/sdk
adachsoft/php-code-style
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
adachsoft/api-version-bundle
cgv/localized-resource
noith/settings
kda/laravel-package
kda/filament-dynamic-navigation
bypersoft/signbox