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

Laravel Echo无法接收Pusher通知,无日志输出问题排查

排查Laravel Echo + Pusher无法接收通知的问题

以下是针对你遇到的问题的具体排查步骤和解决方案:

1. 确认后端广播与队列配置

  • 检查.env文件,确保广播驱动设置为Pusher:
    BROADCAST_DRIVER=pusher
    
  • 你的Notification类使用了Queueable trait,需确保队列驱动正常运行:
    • 若用同步队列(QUEUE_CONNECTION=sync)无需额外操作;若用database/redis等队列驱动,必须启动队列worker:
      php artisan queue:work
      
    队列未运行会导致通知无法推送到Pusher。

2. 验证Pusher配置一致性

  • 确保.env中的Pusher参数与Pusher后台完全一致:
    PUSHER_APP_ID=你的应用ID
    PUSHER_APP_KEY=你的应用Key
    PUSHER_APP_SECRET=你的应用Secret
    PUSHER_APP_CLUSTER=你的集群(如ap1)
    
  • 前端VITE变量需同步配置:
    VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
    VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
    
  • 检查resources/js/bootstrap.js中的Echo初始化代码,确保参数正确:
    import Echo from 'laravel-echo';
    import Pusher from 'pusher-js';
    
    window.Pusher = Pusher;
    
    window.Echo = new Echo({
        broadcaster: 'pusher',
        key: import.meta.env.VITE_PUSHER_APP_KEY,
        cluster: import.meta.env.VITE_PUSHER_APP_CLUSTER,
        forceTLS: true
    });
    
    编译前端资源后测试:npm run dev

3. 修正通知广播频道匹配问题

你的前端订阅的是App.Models.Admin.1频道,但Laravel默认会将广播通知发送到private-notifications.App.Models.Admin.{adminId}频道,二者不匹配导致收不到消息。解决方法二选一:

方法一:修改前端订阅默认通知频道

将前端代码改为订阅默认的通知私有频道:

<script type="module">
    Echo.private('notifications.App.Models.Admin.1')
        .notification((notification) => {
            console.log(notification.message);
        });
</script>

方法二:在Notification类中自定义广播频道

在RegisterNewNotification类中添加broadcastOn方法,指定通知发送到你定义的频道:

public function broadcastOn()
{
    return new \Illuminate\Broadcasting\PrivateChannel('App.Models.Admin.'.$this->notifiable->id);
}

这样前端当前的订阅代码即可生效。

4. 确认频道授权通过

  • 前端订阅私有频道需要后端授权,确保当前登录的Admin用户ID为1(你订阅的是App.Models.Admin.1),否则授权会失败。
  • 打开浏览器开发者工具,查看Network中的/broadcasting/auth请求:
    • 返回200状态码说明授权成功;
    • 返回403说明当前用户无权限订阅该频道,检查登录用户ID是否匹配。

5. 验证通知是否已发送到Pusher

  • 访问/noti路由触发通知后,登录Pusher后台的Debug Console,查看是否有消息推送记录:
    • 有消息记录则问题出在前端;
    • 无消息记录则检查后端代码是否正确触发通知,或队列是否正常运行。

6. 检查Echo初始化状态

在浏览器控制台输入window.Echo,若返回undefined,说明Echo未正确加载:

  • 确保resources/js/app.js中导入了./bootstrap;
  • 确认页面已引入编译后的JS文件(如<script src="{{ asset('js/app.js') }}" type="module"></script>)。

内容的提问来源于stack exchange,提问作者Hussien-m

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 19:15:37