我正在使用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;
});
答案 0 :(得分:0)
我在搜索时发现了这个问题,如果问题仍然存在:
您的活动会将所有内容广播到userID 1
return new PrivateChannel('user-channel.1');
但您的其他用户使用自己的用户ID连接到自己的频道。更改为公共频道并使用您的代码再次测试,其余的似乎是正确的。
答案 1 :(得分:0)
您可能应该使用Laravel Echo,它比原始pusher更好,并且可以与专用频道以及从Laravel获得的任何推送通知一起使用:
Echo.private('{{'App.User.'.Auth::id()}}')
.listen('.notify', (e) => {
...
})
.notification((notification) => {
...
});
答案 2 :(得分:0)
我不确定其他浏览器,但我知道toOthers()
问题(对于VueJ)
如果您使用的是Vue和Axios,则套接字ID将自动作为X-Socket-ID
标头附加到每个传出请求。然后,当您调用toOthers
方法Only to others
如果要手动设置X-Socket-ID
Set request header