发件人已收到推文通知并仅在Chrome中工作。 Laravel 5.4和JQuery

问题描述 投票:13回答:3

我正在使用Pusher API在Laravel 5.4中使用JQuery发送通知。我发现每当我从Firefox或Safari发送通知时它都会成功到达Chrome浏览器,但反之则不然。另一个问题是,当我发送消息时,它正被我接收!虽然我用toOthers()方法

我的代码如下。如果您需要更多信息,请告诉我。

控制器代码

broadcast(new SendMessageEvent("hi", \Auth::user()))->toOthers();

$(function() {
    Pusher.logToConsole = true;
    var pusher = new Pusher('Pusher API key', {
        authEndpoint: 'broadcasting/auth',
        auth: {headers: {'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')}}
    });
    var channel = pusher.subscribe('private-user-channel.{!! \Auth::user()->UserID !!}');
    channel.bind('App\\Events\\SendMessageEvent', function(data) {
        console.log(data);
    });
});

事件

class SendMessageEvent implements ShouldBroadcast
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $msg;
    public $user;
    public $userid;

    public function __construct($msg, $user) {
        $this->msg = $msg;
        $this->user = $user;
        $this->userid = $this->user->UserID;
    }

    public function broadcastOn()
    {
        return new PrivateChannel('user-channel.1');
    }
}

渠道

Broadcast::channel('user-channel.{userid}', function ($user, $userid) {
    return (int) $user->UserID === (int) $userid;
});
laravel laravel-5.3 laravel-5.4 pusher
3个回答
0
投票

我在搜索时发现了这个问题,如果问题仍然存在:

您的事件将所有内容广播到userID 1

 return new PrivateChannel('user-channel.1');

但是您的其他用户使用自己的用户ID连接到自己的频道。更改为公共频道并使用您的代码再次测试,其余似乎是正确的。


0
投票

你应该使用Laravel Echo,它比原始推动器效果更好,并且可以使用私人频道以及从Laravel获得的任何推送通知:

    Echo.private('{{'App.User.'.Auth::id()}}')
                    .listen('.notify', (e) => {
                        ...
                    })                  
                .notification((notification) => {
                    ...
                });

0
投票

我不确定其他浏览器,但我知道toOthers()问题(For VueJs)

如果您使用的是Vue和Axios,套接字ID将自动作为X-Socket-ID标头附加到每个传出请求。然后,当你调用toOthers方法Only to others

如果你想手动设置X-Socket-ID Set request header

© www.soinside.com 2019 - 2024. All rights reserved.