alexlisenkov/laravel-web-push

通过 Web Push 协议从后端发送推送通知

1.1.0 2020-12-02 12:10 UTC

This package is auto-updated.

Last update: 2024-09-07 20:50:52 UTC


README

Total Downloads Coverage Status CI

More info

alexlisenkov/laravel-web-push 包是一个用于发送推送通知的包。作为一个独立的包发送推送消息。如果您不使用 Laravel 通知通道,请使用此包。

如果您对 Web Push 协议不熟悉,请了解基础知识

安装

composer require alexlisenkov/laravel-web-push
php artisan vendor:publish --provider="AlexLisenkov\LaravelWebPush\LaravelWebPushServiceProvider"

配置

要发送 Web Push 通知,您需要自己生成一个身份。最简单的方法是访问 https://web-push-codelab.glitch.me

打开 config/laravel-web-push.php

将公钥和私钥复制到您的配置中。请注意,此公钥与您在 JavaScript pushManager api 中使用的 applicationServerKey 相同。

<?php
/*
 * To generate a application server keys
 * Visit: https://web-push-codelab.glitch.me/
 */

return [
    'public_key' => '',
    'private_key' => '',
    'subject' => config('APP_URL', 'mailto:me@website.com'),
    'expiration' => 43200,
    'TTL' => 2419200,
];

发送 Web Push

快速指南

可以通过创建一个新的 AlexLisenkov\LaravelWebPush\PushMessage 类来创建一条消息。

请参阅 此 MDN 文档Living Standards 了解所有可用选项。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Response;
use AlexLisenkov\LaravelWebPush\PushMessage;
use AlexLisenkov\LaravelWebPush\PushSubscription;

class PushMessageController
{
    public function sendPushMessage(): Response
    {
        // Create a subscription
        $subscription = new PushSubscription(
            "endpoint",
            "p256dh",
            "auth"
        );
        
        // Create a message
        $message = new PushMessage();
        $message->setTitle('Hello World');
        $message->setBody('This message is sent using web push');
        $message->setIcon('https://placekitten.com/75/75');
        
        // We can either use the message to send it to a subscription
        $message->sendTo($subscription)->wait();
        
        // Or send the subscription a message
        $subscription->sendMessage($message)->wait();
        
        return response('ok');
    }
}

创建消息对象

可以通过创建一个新的类来创建消息,该类扩展了 AlexLisenkov\LaravelWebPush\PushMessage 类。请参阅 此 MDN 文档Living Standards 了解所有可用选项。

<?php

namespace App\Http\Controllers;

use AlexLisenkov\LaravelWebPush\PushMessage;

class ExampleMessage extends PushMessage
{
    protected $title = 'Hello world';

    protected $body = 'This message is sent using web push';

    protected $icon = 'https://placekitten.com/75/75';
    
    // Or override a getter
    public function getData()
    {
        return User()->name;
    }
}

创建订阅

使用 AlexLisenkov\LaravelWebPush\PushSubscription 创建新的订阅。

<?php
use AlexLisenkov\LaravelWebPush\PushSubscription;

new PushSubscription(
        "endpoint",
        "p256dh",
        "auth"
    );

您也可以将 AlexLisenlov\LaravelWebPush\Contracts\PushSubscriptionContract 实现到任何类中。例如,在一个模型上。

发送通知

现在我们有了订阅者和消息,我们可以发送它。

<?php
use AlexLisenkov\LaravelWebPush\PushSubscription;

// Create a new message
$message = new ExampleMessage();

// Create a new subscription
$subscription = new PushSubscription(
        "endpoint",
        "p256dh",
        "auth"
    );

// We can either use the message to send it to a subscription
$message->sendTo($subscription);

// Or send the subscription a message
$subscription->sendMessage($message);

服务工作者

通过在您的服务工作者中添加事件监听器向订阅者显示通知。

self.addEventListener('push', function(e) {
    let data = e.data.json();
    
    self.registration.showNotification(data.title, data.options);
});

测试

$ composer test

安全性

如果您发现任何安全相关的问题,请通过电子邮件 alex@create.nl 而不是使用问题跟踪器。

贡献

欢迎贡献。

致谢

许可协议

MIT 许可协议 (MIT)。有关更多信息,请参阅许可文件