Web push notifications channel for Laravel
, (*1)
This package makes it easy to send web push notifications with Laravel., (*2)
Installation
You can install the package via composer:, (*3)
``` bash
composer require zupago/webpush, (*4)
First you must install the service provider (skip for Laravel>=5.5):
``` php
// config/app.php
'providers' => [
...
NotificationChannels\webpush\webpushServiceProvider::class,
],
Add the NotificationChannels\webpush\HasPushSubscriptions
trait to your User
model:, (*5)
``` php
use NotificationChannels\webpush\HasPushSubscriptions;, (*6)
class User extends Model
{
use HasPushSubscriptions;
}, (*7)
Next publish the migration with:
``` bash
php artisan vendor:publish --provider="NotificationChannels\webpush\webpushServiceProvider" --tag="migrations"
Run the migrate command to create the necessary table:, (*8)
``` bash
php artisan migrate, (*9)
You can also publish the config file with:
``` bash
php artisan vendor:publish --provider="NotificationChannels\webpush\webpushServiceProvider" --tag="config"
Generate the VAPID keys with (required for browser authentication) with:, (*10)
``` bash
php artisan webpush:vapid, (*11)
This command will set `VAPID_PUBLIC_KEY` and `VAPID_PRIVATE_KEY`in your `.env` file.
__These keys must be safely stored and should not change.__
If you still want support [Google Cloud Messaging](https://console.cloud.google.com) set the `GCM_KEY` and `GCM_SENDER_ID` in your `.env` file.
## Usage
Now you can use the channel in your `via()` method inside the notification as well as send a web push notification:
``` php
use Illuminate\Notifications\Notification;
use NotificationChannels\webpush\webpushMessage;
use NotificationChannels\webpush\webpushChannel;
class AccountApproved extends Notification
{
public function via($notifiable)
{
return [webpushChannel::class];
}
public function towebpush($notifiable, $notification)
{
return webpushMessage::create()
// ->id($notification->id)
->title('Approved!')
->icon('/approved-icon.png')
->body('Your account was approved!')
->action('View account', 'view_account');
}
}
Save/Update Subscriptions
To save or update a subscription use the updatePushSubscription($endpoint, $key = null, $token = null)
method on your user:, (*12)
``` php
$user = \App\User::find(1);, (*13)
$user->updatePushSubscription($endpoint, $key, $token);, (*14)
The `$key` and `$token` are optional and are used to encrypt your notifications. Only encrypted notifications can have a payload.
### Delete Subscriptions
To delete a subscription use the `deletePushSubscription($endpoint)` method on your user:
``` php
$user = \App\User::find(1);
$user->deletePushSubscription($endpoint);
Browser Compatibility
The Push API currently works on Chrome and Firefox., (*15)
Changelog
Please see CHANGELOG for more information what has changed recently., (*16)
Testing
bash
$ composer test
, (*17)