我有一个 React Web 应用程序订阅了一个 Pusher 通道,该通道接收由 API 触发的事件 - 在这种情况下,一切正常。但是,我现在想从 React Web 应用程序本身而不是 API 触发事件,并且我通过状态通道来执行此操作,因为我曾经收到警告说只允许在私有或状态通道上。但是,当我从 React Web 应用程序触发事件时,什么都没有发生。而且我在仪表板上看不到正在订阅的频道。
AccountPage.js
const videoPusherChannel = useRef<any>();
useEffect(() => {
var pusher = new Pusher('<PUSHER_KEY>', {
cluster: 'eu',
});
const videoChannel = pusher.subscribe(`presence-video-starting.${authState.userId}`);
videoChannel.bind('client-video-10-mins', function (data: any) {
alert("test");
return true;
});
videoPusherChannel.current = videoChannel;
}, []);
useEffect(() => {
videoPusherChannel.current.trigger("client-video-10-mins", {
type: 'video-starting',
user: authenticatedUser,
data: []
});
}, [videoPusherChannel.current]);
- 首先渲染,创建推送器实例并订阅频道。通道被分配给 refs 以确保在钩子之外访问
- 一旦 ref 有一个值,即订阅频道,触发
client-video-10-mins
事件
什么都没有发生 - 没有错误。Pusher 仪表板未显示频道的订阅事件,并且我在浏览器上看不到警报“测试”。
我哪里错了??
***更新***
来自开发控制台的屏幕截图:
从我的 API 验证函数(使用用户的硬编码值进行测试):
public function authenticate(Request $request)
{
$socketId = $request->socket_id;
$channelName = $request->channel_name;
$pusher = new Pusher(<PUSHER_KEY>, <PUSHER_INFO>, <PUSHER_INFO>, [
'cluster' => 'eu',
'encrypted' => true
]);
$presence_data = ['name' => "Tom Tom"];
$key = $pusher->presence_auth($channelName, $socketId, 6, $presence_data);
return response($key);
}