消息正在输入
更新时间: 2024/03/14 19:21:11
网易云信圈组 QChat Web SDK 中的QChatMsgServiceInterface
模块提供sendTypingEvent
方法发送“正在输入事件”。接收方只有在监听该事件且订阅消息所在频道后,才能在消息输入方发送该事件后,接收到该事件。
实现方法
我们以用户A 和用户B 在频道内的消息交互为例,介绍“消息正在输入”在频道显示的实现方法。
前提条件
用户A 和用户B 都在频道内,即频道对两者都可见, 且用户B 拥有发送频道消息权限(即QChatRoleAuth
枚举中的sendMsg
)。
- 要实现频道对用户A 和用户B 都可见,需确保两者都在私密频道的白名单内,或者都没有被加入公开频道的黑名单。
- 可通过将用户B 加入某身份组,并授予该身份组发送频道消息权限,让用户B 拥有发送频道消息的权限。也可为用户B 在频道内定制发送频道消息的权限。
实现流程
-
用户A 调用
recvTypingEvent
方法监听正在输入事件。 -
用户A 调用
subscribeChannel
方法,调用时将入参type
设为5
,实现对正在输入事件的订阅。如果断线重连,SDK 会自动再次订阅正在输入事件。但如果用户调用
logout
方法切断与圈组服务端的连接,或调用destroy
方法销毁 SDK 实例后重建实例,那么用户需要再度调用subscribeChannel
方法重新订阅该事件。 -
用户B 调用
sendTypingEvent
方法发送正在输入事件。发送该事件后,SDK 触发用户A在
recTypingEvent
方法中设置的回调,将正在输入事件系统通知投递至用户A。该方法有调用频率上限,目前为 3,000 ms 一次。
API 调用时序图
示例代码
用户A
qchat.on('recvTypingEvent', function (event) {
console.log(event)
// {
// serverId: 'YOUR_SERVER_ID',
// channelId: 'YOUR_CHANNEL_ID',
// fromAccount: 'ACCOUNT_B'
// time: 1652755487745
// }
// TODO: show event on your views
})
// Subscribing to typing events for channel
await qchat.qchatChannel.subscribeChannel({
"type": 5,
"opeType": 1,
"channels": [
{
"serverId": "YOUR_SERVER_ID",
"channelId": "YOUR_CHANNEL_ID"
}
]
})
用户B
// example button
// <button id="button">example button for send typing event</button>
document.getElementById("button").addEventListener('click', async function() {
// send typing event
// Note: API sendTypingEvent has done throttling, so you can send it directly
await qchat.qchatMsg.sendTypingEvent({
"serverId": "YOUR_SERVER_ID",
"channelId": "YOUR_CHANNEL_ID"
})
})
API 参考
API |
说明 |
---|---|
recvTypingEvent |
监听正在输入事件 |
sendTypingEvent |
发送正在输入事件系统通知 |
此文档是否对你有帮助?