You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel项目中使用minishlink/web-push批量发送通知?

minishlink/web-push包原生支持批量发送通知,你可以用sendNotifications()方法替代当前的sendOneNotification(),该方法接收订阅对象数组和通知内容(支持统一内容或个性化内容)。

实现示例代码

Route::post("/admin/sendBulkNotif", function(Request $request){
    // 1. 获取所有有效订阅记录(可根据业务需求添加筛选条件,比如排除过期/无效订阅)
    $subscriptions = PushSubscription::all();

    // 2. 转换为Subscription对象数组
    $subscriptionList = [];
    foreach ($subscriptions as $sub) {
        $subscriptionList[] = Subscription::create(json_decode($sub->data, true));
    }

    // 3. 初始化WebPush实例(保持原有VAPID配置)
    $webPush = new WebPush([
        "VAPID" => [
            "publicKey" => "BNbqX8M5NJJ...",
            "privateKey" => "i4I89hSrn-MGvp...",
            "subject" => "https://example.com"
        ]
    ]);

    // 4. 批量发送通知
    $notificationContent = json_encode($request->input());
    $webPush->sendNotifications($subscriptionList, $notificationContent);

    // 可选:处理推送结果,记录失败的订阅
    foreach ($webPush->flush() as $report) {
        $subscription = $report->getSubscription();
        if (!$report->isSuccess()) {
            \Log::error("推送失败:{$report->getReason()}", ['endpoint' => $subscription->getEndpoint()]);
            // 可额外逻辑:标记该订阅为无效,后续不再推送
        }
    }

    return redirect("/");
});

关键细节说明

  • 若需给不同订阅发送个性化内容,可将sendNotifications()的第二个参数改为内容数组,确保数组元素顺序和订阅数组一一对应
  • flush()方法会返回每条推送的结果报告,便于排查失败原因、清理无效订阅
  • 批量推送可能耗时较长,建议结合Laravel队列异步执行,避免阻塞请求

内容的提问来源于stack exchange,提问作者MMD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 17:22:44