Как работать с push уведомлениями в laravel?

Пользователь

от loyal , в категории: PHP , 2 года назад

Как работать с push уведомлениями в laravel?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от bernardo_nolan , 2 года назад

@loyal 

Для работы с push уведомлениями в Laravel можно использовать библиотеку laravel-notification-channels/webpush. Эта библиотека предоставляет удобный способ отправки push уведомлений на веб-страницы.


Для начала работы необходимо установить эту библиотеку через Composer:

1
composer require laravel-notification-channels/webpush


Далее, нужно добавить соответствующие настройки в файл config/services.php:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
'webpush' => [
    'vapid' => [
        'subject' => 'mailto:[email protected]',
        'public_key' => 'your-public-key',
        'private_key' => 'your-private-key',
        'pem_file' => '',
        'pem' => '',
        'ttl' => 60 * 60 * 24,
        'urgency' => 'normal',
        'topic' => null,
        'crypto_key_pair_id' => null,
    ],
    'gcm' => [
        'key' => 'your-gcm-api-key',
        'sender_id' => 'your-gcm-sender-id',
        'ttl' => 60 * 60 * 24,
        'topic' => null,
        'urgency' => 'normal',
    ],
],


Здесь нужно заменить your-public-key и your-private-key на свои ключи VAPID, которые можно получить на сайте https://tools.reactpwa.com/vapid.


После этого можно создать уведомление, которое будет отправлено на веб-страницу:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
use IlluminateNotificationsNotification;
use NotificationChannelsWebPushWebPushMessage;
use NotificationChannelsWebPushWebPushChannel;

class NewPostNotification extends Notification
{
    public function via($notifiable)
    {
        return [WebPushChannel::class];
    }

    public function toWebPush($notifiable, $notification)
    {
        return (new WebPushMessage)
            ->title('New Post')
            ->body('A new post has been published.')
            ->action('View post', 'view_post')
            ->data(['id' => $notification->post->id]);
    }
}


Здесь определен класс NewPostNotification, который реализует метод via(), который указывает, что уведомление должно быть отправлено через канал WebPushChannel. Также определен метод toWebPush(), который возвращает объект WebPushMessage, содержащий заголовок, текст, действие и данные уведомления.


Для отправки уведомления можно вызвать метод notify() на объекте уведомления:

1
$user->notify(new NewPostNotification($post));


Здесь $user - это объект, на который отправляется уведомление, а $post - это объект поста, которое содержит данные, передаваемые в уведомлении.


Если все настройки выполнены верно, уведомление должно успешно отправиться на веб-страницу, и пользователь должен получить соответствующее уведомление в браузере.

Пользователь

от kaleigh , 5 месяцев назад

@loyal 

Дополнительно, чтобы уведомления отображались на веб-странице, необходимо добавить соответствующий код на клиентской стороне. Для этого можно использовать JavaScript и сервис-воркеры.


Пример простого JavaScript-кода для регистрации сервис-воркера и обработки уведомлений на стороне клиента:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
// Регистрация сервис-воркера
if ('serviceWorker' in navigator) {
    window.addEventListener('load', function() {
        navigator.serviceWorker.register('/service-worker.js').then(function(registration) {
            console.log('ServiceWorker registration successful with scope: ', registration.scope);
        }, function(err) {
            console.error('ServiceWorker registration failed: ', err);
        });
    });
}

// Обработка уведомлений
navigator.serviceWorker.addEventListener('message', function(event) {
    const data = event.data;
    if (data.action === 'view_post') {
        window.location.href = '/posts/' + data.id;
    }
});


Этот код регистрирует сервис-воркер, который будет работать на веб-странице и обрабатывать уведомления. При получении уведомления с действием 'view_post', автоматически будет осуществлен переход на страницу поста с переданным идентификатором.


Примечание: Помните, что использование уведомлений на веб-странице требует согласия пользователя, поэтому необходимо убедиться, что пользователь дал разрешение на получение уведомлений.


Таким образом, для работы с push уведомлениями в Laravel, необходимо настроить библиотеку laravel-notification-channels/webpush, создать и отправить уведомление на сервере, а также добавить соответствующий JavaScript-код на клиентской стороне для обработки уведомлений.