推送聊天套件 - 房间和房间订阅 - 如何检测新消息



最近我在 Vue 项目中实现了 Pusher ChatKit。

我已经浏览了js文档,但我对启动应用程序的流程感到困惑,以便我有新消息的活跃侦听器。

我有5个房间,currentUser是其中的一部分。

当我这样做时

chatManager
.connect()
.then(currentUser => {
})

我得到了当前用户,我可以访问他的roomsroomSubscriptions

1( 有什么区别?用户所属的任何房间也应该是他订阅的房间,不是吗?

文档说我需要订阅每个用户房间才能设置onNewMessage()钩子。

所以我是这样做的:

chatManager
.connect()
.then(currentUser => {
this.initiateNewChatState(currentUser)
})
initiateNewChatState(currentUser){
for(let room of currentUser.rooms){
currentUser.subscribeToRoom({
roomId: room.id,
hooks: {
onNewMessage: message => {
console.log(`Received new message ${message.text}`)
this.$store.commit('CHATKIT_message', message)
}
},
messageLimit: 10
})
}
}

2(但是现在当我只收到一个房间的新消息时,每个房间钩子都会触发钩子(5次(。

现在,一旦我完成了订阅循环,下次运行时就不需要这样做chatManager.connect()因为currentUser.roomSubscriptions已经填满了我上次订阅的房间,甚至在调用this.initiateNewChatState()之前。

3(这就引出了一个问题,订阅用户已经参与的用户房间的正确流程是什么,以及如何检测新消息和新房间创建(当有人开始与您聊天时(?

该文档确实简化了,无法在实际案例中实现。有人有这方面的经验吗?

谢谢!

不幸的是,这是目前唯一的方法。在Pusher ChatKit中,每个操作都取决于当前用户和用户对房间的订阅。用户不一定订阅他/她是其成员的聊天室。 它既有利也有弊。 但是现在我可以说,您可以设置messageLimit: 0.这不会在您首次加载页面时提取所有消息。 而是在用户单击房间以查看消息时使用以下方法提取消息:

currentUser.subscribeToRoom({
roomId: room.id,
hooks: {
onNewMessage: (message) => {
// do something with the message
},
onUserStartedTyping : (user) => {
// do something with the user
},
onUserStoppedTyping : (user) => {
// do something with the user
},
},
messageLimit: 10
});

最新更新