4

我正在尝试使用 Laravel 和 Vue JS 实现通知系统。我实现了一切,它需要工作,但通知类没有广播。

.env 文件

BROADCAST_DRIVER=pusher
PUSHER_APP_ID=40xxxx
PUSHER_KEY=5a6axxxxxx
PUSHER_SECRET=b35xxxxxx

已经在下面运行这些命令:

npm install --save laravel-echo pusher-js
composer require pusher/pusher-php-server "~2.6"

在 app.js 中(未注释)

App\Providers\BroadcastServiceProvider::class,

广播服务提供者.php

Broadcast::channel('App.User.*', function ($user, $userID) {
            return (int) $user->id === (int) $userID;
        });

引导程序.js

import Echo from "laravel-echo"
 window.Pusher = require('pusher-js');
 window.Echo = new Echo({
    broadcaster: 'pusher',
    key: '5a6axxxxxx',
    cluster: 'eu',
    encrypted: true,
    authEndpoint: "/broadcasting/auth"
 });
 window.Pusher.log = function(message){
    window.console.log(message);
 }
 window.Echo.private('App.User.1')
    .notification((notification) => {
        console.log(notification.type);
 });

Laravel 日志中没有错误。同时,我正在检查 Pusher 的调试控制台,仅在此处连接和断开请求。为什么它没有推送任何类型的错误以及为什么它不能正常工作?

4

1 回答 1

2

我有同样的问题。就我而言,问题的原因是User模型按命名空间放置App\Models\User。解决此问题的第一种方法是:

在 BroadcastServiceProvider.php 或 routes/channels.php (如果 laravel 5.7+)

Broadcast::channel('App.Models.User.*', function ($user, $userID) {
    return (int) $user->id === (int) $userID;
});

解决这个问题的第二种方法是:

User模型中添加方法

public function receivesBroadcastNotificationsOn() {
    return 'users.'.$this->id;
}

并在 BroadcastServiceProvider.php 或 routes/channels.php (如果 laravel 5.7+)

Broadcast::channel('users.{user_id}', function ($user, $id) {
    return (int) $user->id === (int) $id;
});
于 2019-06-12T11:25:45.217 回答