Reputation: 10095
I am using Pusher API for sending notifications in Laravel 5.4 with JQuery. I found out that whenever I send notification from Firefox or Safari...it reaches chrome browser successfully but not vice versa. Another problem is that when I send message, it is being received by me!!! Although I used toOthers()
method
My Code is below. Please let me know if you need more info.
Controller Code
broadcast(new SendMessageEvent("hi", \Auth::user()))->toOthers();
Blade
$(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);
});
});
Event
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');
}
}
Channel
Broadcast::channel('user-channel.{userid}', function ($user, $userid) {
return (int) $user->UserID === (int) $userid;
});
Upvotes: 19
Views: 2401
Reputation: 1763
I'm not sure about other browser but I know toOthers()
issue (For VueJs)
If you are using Vue and Axios, the socket ID will automatically be attached to every outgoing request as a X-Socket-ID
header. Then, when you call the toOthers
method Only to others
If you want to set X-Socket-ID
manually Set request header
Upvotes: 1
Reputation: 916
you should probably use Laravel Echo, which works better than raw pusher, and works with private channels and whatever push notification you got from Laravel :
Echo.private('{{'App.User.'.Auth::id()}}')
.listen('.notify', (e) => {
...
})
.notification((notification) => {
...
});
Upvotes: 1
Reputation: 17
I found this while searching, if the question is still open :
your event broadcasts everything to userID 1
return new PrivateChannel('user-channel.1');
but your other users connect to their own channel with their own userID. Change to public channel and test again with your code, the rest seems to be correct.
Upvotes: 1