如何通過Laravel實現Web推送通知?使用Composer可以輕松搞定!

可以通過以下地址學習 composer學習地址

在開發一個需要實時通知用戶的應用時,我遇到了一個問題:如何在不打擾用戶的前提下,及時將重要信息推送給他們?經過一番研究和嘗試,我發現使用 laravel 結合 web 推送通知是一個理想的解決方案。然而,實現這一功能并不簡單,直到我找到了 laravel-notification-channels/webpush 這個包,它通過 composer 輕松地解決了我的困擾。

首先,我通過 Composer 安裝了這個包:

composer require laravel-notification-channels/webpush

安裝后,我按照文檔的指引,對我的 User 模型進行了修改,添加了 HasPushSubscriptions trait:

use NotificationChannelsWebPushHasPushSubscriptions;  class User extends Model {     use HasPushSubscriptions; }

接著,我發布了遷移文件和配置文件,并運行了遷移命令來創建必要的表:

php artisan vendor:publish --provider="NotificationChannelsWebPushWebPushServiceProvider" --tag="migrations" php artisan migrate php artisan vendor:publish --provider="NotificationChannelsWebPushWebPushServiceProvider" --tag="config"

為了確保瀏覽器能夠正確認證,我生成了 VAPID 密鑰:

php artisan webpush:vapid

這個命令會在 .env 文件中設置 VAPID_PUBLIC_KEY 和 VAPID_PRIVATE_KEY,這些密鑰對于使用 Push API 是必需的。需要注意的是,如果你的應用面向 safariios 2023 年后的版本,還需要設置 VAPID_SUBJECT 變量,否則會收到 BadJwtToken 錯誤。

接下來,我在通知類中使用了 WebPushChannel 發送推送通知:

use IlluminateNotificationsNotification; use NotificationChannelsWebPushWebPushMessage; use NotificationChannelsWebPushWebPushChannel;  class AccountApproved extends Notification {     public function via($notifiable)     {         return [WebPushChannel::class];     }      public function toWebPush($notifiable, $notification)     {         return (new WebPushMessage)             ->title('Approved!')             ->icon('/approved-icon.png')             ->body('Your account was approved!')             ->action('View account', 'view_account')             ->options(['TTL' => 1000]);     } }

為了管理用戶的推送訂閱,我使用了 updatePushSubscription 和 deletePushSubscription 方法:

$user = AppUser::find(1);  $user->updatePushSubscription($endpoint, $key, $token, $contentEncoding); $user->deletePushSubscription($endpoint);

通過這些步驟,我成功地實現了 Web 推送通知的功能。使用 Composer 安裝 laravel-notification-channels/webpush 包不僅簡化了整個過程,還確保了代碼的可維護性和可擴展性。它的優勢在于:

  • 易于集成:通過 Composer 安裝,快速上手。
  • 高效管理:提供了簡單的方法來管理用戶的推送訂閱。
  • 瀏覽器兼容:支持多種瀏覽器,確保用戶體驗的一致性。

總的來說,使用 Composer 和 laravel-notification-channels/webpush 包讓我在 Laravel 項目中輕松實現了 Web 推送通知的功能,大大提升了用戶體驗和應用的實時性。

? 版權聲明
THE END
喜歡就支持一下吧
點贊9 分享