利用在线状态(Presence)功能,用户可以公开显示其在线状态并快速确定其他用户的状态。用户还可以自定义他们的在线状态,为实时聊天增添乐趣和多样性。
下图显示如何创建自定义在线状态以及好友列表中的各种在线状态:
本文介绍如何在即时通讯应用中发布、订阅和查询用户的在线状态。
即时通讯 IM SDK 提供在线状态接口,用于管理在线状态订阅,可实现如下功能:
下图展示了客户端订阅和发布在线状态的工作流程:
如上图所示,订阅用户在线状态的基本步骤如下:
使用在线状态功能前,请确保满足以下条件:
本节介绍如何使用即时通讯 IM SDK 提供的 API 实现上述功能。
默认情况下,你不关注任何其他用户的在线状态。你可以通过调用 subscribePresence
方法订阅指定用户的在线状态,示例代码如下:
let option = {
usernames: ['Alice','Bob'],
expiry: 7*24*3600 // 单位为秒
}
conn.subscribePresence(option).then(res => {console.log(res)})
在线状态变更时,订阅者会收到 onPresenceStatusChange
回调。
用户在线时,可调用 publishPresence
方法发布自定义在线状态,示例代码如下:
let option = {
description: 'custom presence'
}
conn.publishPresence(option).then(res => {console.log(res)})
在线状态发布后,发布者和订阅者均会收到 onPresenceStatusChange
回调。
参考如下代码,添加用户在线状态的监听器:
WebIM.conn.addEventHandler('MESSAGES',{
onPresenceStatusChange: => (msg) {
// 这里可以处理订阅用户状态更新后的逻辑。
console.log('状态更新',msg)
},
})
若取消指定用户的在线状态订阅,可调用 unsubscribePresence
方法,示例代码如下:
let option = {
usernames: ['Alice','Bob']
}
conn.unsubscribePresence(payload).then(res => {console.log(res)})
为方便用户管理订阅关系,SDK 提供 getSubscribedPresenceList
方法,可使用户分页查询自己订阅的用户列表,示例代码如下:
let option = {
pageNum: 0,
pageSize: 50
}
conn.getSubscribedPresenceList(payload).then(res => {console.log(res)})
如果不关注用户的在线状态变更,你可以调用 getPresenceStatus
获取用户当前的在线状态,而无需订阅状态。示例代码如下:
let option = {
usernames: ['Alice','Bob']
}
conn.getPresenceStatus(payload).then(res => {console.log(res)})