alexlisenkov / laravel-web-push
通过 Web Push 协议从后端发送推送通知
Requires
- php: ^7.3 | ^8.0
- ext-gmp: *
- ext-json: *
- ext-mbstring: *
- ext-openssl: *
- guzzlehttp/guzzle: ^7.2
- simplito/elliptic-php: ^1.0
- spomky-labs/base64url: ^2.0
- web-token/jwt-framework: ^2.2
Requires (Dev)
- orchestra/testbench: ~4.6
- phpunit/phpunit: ^9.0
- roave/security-advisories: dev-master
README
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 而不是使用问题跟踪器。
贡献
欢迎贡献。
- PSR-2 编码标准
- 保持项目测试通过
- 保持您的拉取请求小而有限
致谢
许可协议
MIT 许可协议 (MIT)。有关更多信息,请参阅许可文件。