WuKongIM Docs

HarmonyOS 频道与资料

理解频道标识,并接入用户、群组和群成员资料。

编辑此页报告文档问题

频道表示“消息要发给谁”。channelIdchannelType 必须一起使用:个人频道的 ID 通常是对方 UID,群频道的 ID 是群 ID。

const personal = new WKChannel('bob', WKChannelType.personal)
const group = new WKChannel('team-1', WKChannelType.group)

创建 WKChannel 不会创建用户或群组,也不会绕过服务端权限。

提供用户和群资料

在应用初始化时安装资料 Provider:

WKIM.shared.config.provider.channelInfoCallback = async (
  channelId: string,
  channelType: number
): Promise<WKChannel | undefined> => {
  const profile = await channelApi.get(channelId, channelType)
  if (profile === undefined) return undefined

  const channel = new WKChannel(channelId, channelType)
  channel.channelName = profile.name
  channel.channelRemark = profile.remark ?? ''
  channel.avatar = profile.avatar ?? ''
  return channel
}

需要资料时先读取本地缓存,不存在或需要刷新时再发起请求:

const manager = WKIM.shared.channelManager()
const local = manager.getChannel('team-1', WKChannelType.group)

if (local === undefined) {
  manager.fetchChannelInfo('team-1', WKChannelType.group)
}

监听刷新:

const refreshListener = (channel: WKChannel) => {
  updateTitleAndAvatar(channel)
}

manager.addRefreshListener(refreshListener)
// 页面销毁时
manager.removeRefreshListener(refreshListener)

群成员

成员资料由 channelMemberManager() 管理。增量同步 Provider 接收当前最大版本:

WKIM.shared.config.provider.channelMemberCallback = async (
  channelId: string,
  channelType: number,
  maxVersion: number
): Promise<WKChannelMember[]> => {
  return memberApi.sync(channelId, channelType, maxVersion)
}

WKIM.shared.channelMemberManager().sync(
  'team-1',
  WKChannelType.group
)

读取成员:

const member = WKIM.shared.channelMemberManager().getMember(
  'team-1',
  WKChannelType.group,
  'alice'
)

大群不要一次返回全部成员。使用 channelMemberWithPageCallbackgetWithPageOrSearch 做服务端分页或搜索,并限制单页数量。

本页内容