2017-04-07 49 views
12

我使用Pusher API在Laravel 5.4中使用JQuery發送通知。我發現,無論何時我從Firefox或Safari發送通知...它都能成功訪問Chrome瀏覽器,但反之亦然。另一個問題是,當我發送消息時,它正在被我接收!雖然我用toOthers()方法發件人收到的推送通知僅在Chrome中使用。 Laravel 5.4和JQuery

我的代碼如下。如果您需要更多信息,請告訴我。

控制器代碼

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; 
}); 
+3

從文檔:「在Laravel 5.3中,由於中間件尚未運行,因此無法訪問控制器構造函數中的會話或已驗證用戶。」更多信息:https://laravel.com/docs/5.3/升級#升級-5.3.0 –

+2

我想你的'SendMessageEvent'類方法'broadcastOn',你需要像這樣改變它:'返回新的PrivateChannel('user-channel。'。$ this-> userid);' – elegisandi

+0

問題仍然存在? – mimo

回答

0

我發現這個搜索時,如果這個問題仍然是開放的:

的事件廣播一切用戶ID 1

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

,但你的其他用戶連接到自己的渠道與他們自己的用戶ID。更改爲公共頻道並使用您的代碼再次測試,其餘部分似乎是正確的。

相關問題