我的情景
我试图在没有使用laravel echo的情况下使用pusher工作,一切都在公共频道上工作,但是当我在前端的broadcastOn()
方法切换到私人频道时,前端没有'再挑选任何东西了。它作为私人频道记录在我的推送应用程序事件日志中,但是在前端只是按下了sais no。
我已经为这样的频道代码设置并返回true:
Broadcast::channel('application', function ($post, $username) {
if(true){
return true;
}
});
这是我的活动代码:
public function broadcastOn()
{
return new PrivateChannel('application');
}
该类实现ShouldBroadcast
,最后这是我的前端代码:
<script>
//instantiate a Pusher object with our Credential's key
var pusher = new Pusher('MY_KEY', {
cluster: 'en',
encrypted: true
});
//Subscribe to the channel we specified in our Laravel Event
var channel = pusher.subscribe('application');
//Bind a function to a Event (the full Laravel class)
channel.bind('App\\Events\\PostMessage', function(){
console.log('Event Logged');
});
</script>
我的问题
为什么我的推杆前端代码没有检测到我的私人广播?
答案 0 :(得分:1)
呵呵呵我觉得我找到了: https://pusher.com/docs/client_api_guide/client_private_channels
您需要在频道名称前添加'private-'
前缀。 Echo为您自动做的事情之一!
以下是其余的参考资料。最后的建议仍然存在,并且至少可以帮助您调试此问题; - )
在Laravel中使用Pusher 而不使用 Echo
时要检查的一些事项:
确保正确设置了群集。我刚检查了自己的
仪表板并将mt1
作为群集。它可能是默认值
过时。
Echo的设置是为了做很多看不见的事情。其中之一就是 将易于记忆的字符串转换为完整的命名空间 与Pusher沟通的同行。所以,如果你想跳过 Echo,你想确保你在1对1上模仿这种行为,或者 否则它会破裂。
在最后一点上,可能需要做这样的事情:
var channel = pusher.subscribe('App/Events/application');
PrivateChannel
需要一个唯一的参数,并且不起作用
无:像这样:
public function broadcastOn()
{
return new PrivateChannel('order.'.$this->update->order_id);
}
然后是你的频道:
Broadcast::channel('order.{orderId}', function ($user, $orderId) {
return $user->id === Order::findOrNew($orderId)->user_id;
});
首先尝试使用Echo
,让所有内容都按照文档运行。它提供了很大的便利。然后从那里分解。至少那种方式你知道你已经掌握了所有的基础知识,你的应用程序和Pusher之间的通信正在工作! : - )
这是我现在所能想到的,而不是自己编码!希望其中一个适合你。