超大群功能

更新时间: 2024/03/14 18:45:31

网易云信 NIM SDK 自 v6.5.5 起提供超大群功能。

超大群是针对大规模群聊场景的功能,目前支持不超过 10000 人的群聊。由于超大群场景较为特殊,并不能支持高级群提供的所有管理功能。

超大群功能为增值服务,如需使用该功能,可以在云信控制台自助开通,或者联系商务开通。

超大群概述

超大群和高级群功能相似,但部分功能存在差异。

  • 超大群支持更高的人数上限,最大可扩展至 10000 人/群。
  • 超大群支持分页获取群成员。
  • 超大群拥有自己的会话类型、消息类型。
  • 超大群管理功能较弱,无法在端侧创建和解散,只能在服务端处理。
  • 超大群的协议内容和 API 与高级群不同。

初始化参数

这里的参数并不是所有的初始化参数, 可以访问初始化SDK API查阅所有的初始化参数。

示例代码

javascriptvar nim = NIM.getInstance({
  syncSuperTeams: true, // 是否同步超大群列表,默认为true
  onSuperTeams: onSuperTeams, // 同步超大群列表的回调, 会传入超大群数组
  onMySuperTeamMembers: onMySuperTeamMembers, // 同步自己在所有超大群中的用户信息的回调
  onSyncCreateSuperTeam: onSyncCreateSuperTeam, // 当前登录者创建超大群后的回调
  onDismissSuperTeam: onDismissSuperTeam, // 超大群解散的回调, 所有群成员均会收到该回调
  onUpdateSuperTeamMember: onUpdateSuperTeamMember, // 群成员信息更新后的回调, 会传入超大群群成员对象, 不过此时的信息是不完整的, 只会包括被更新的字段。当前登录帐号在其它端修改自己在群里面的昵称时也会收到此回调
  onUpdateSuperTeam: onUpdateSuperTeam, // 更新超大群的回调
  onAddSuperTeamMembers: onAddSuperTeamMembers, // 新成员入超大群的回调
  onRemoveSuperTeamMembers: onRemoveSuperTeamMembers // 有人离开(被踢或主动离开)超大群的回调
})

function onSuperTeams (superTeams) {
  console.log('收到超大群列表', superTeams)
  data.superTeams = nim.mergeTeams(data.superTeams, superTeams)
  onInvalidSuperTeams(superTeams.invalid)
}
function onInvalidSuperTeams (teams) {
  data.superTeams = nim.cutTeams(data.superTeams, teams)
  data.invalidSuperTeams = nim.mergeTeams(data.invalidSuperTeams, teams)
  refreshSuperTeamsUI()
}

function onSyncCreateSuperTeam (team, owner) {
  console.log('创建了一个超大群 onSyncCreateSuperTeam ', team, owner)
  data.superTeams = nim.mergeTeams(data.superTeams, team)
  refreshSuperTeamsUI()
  onSuperTeamMembers({
    teamId: team.teamId,
    members: owner
  })
}

function onAddSuperTeamMembers (team, accounts, members) {
  console.log('添加群成员 onAddSuperTeamMembers ', team, accounts, members)
  if (!accounts && !members) {
    accounts = team.accounts || []
    members = team.members || []
    team = team.team || {}
  }
  var teamId = team.teamId
  /*
   * 如果是别人被拉进来了,那么拼接群成员列表
   * 如果是自己被拉进来了,那么同步一次群成员列表
   */
  if (accounts.indexOf(data.account) === -1) {
    onSuperTeamMembers({
      teamId: teamId,
      members: members
    })
  } else {
    //
  }
  onSuperTeams(team)
}
function onDismissSuperTeam(obj) {
  console.log('解散超大群 onDismissSuperTeam', obj);
  var teamId = obj.teamId
  removeAllSuperTeamMembers(teamId)
  data.superTeams = nim.cutTeams(data.superTeams, obj)
  refreshSuperTeamsUI()
  refreshSuperTeamMembersUI()
}
function onRemoveSuperTeamMembers (obj) {
  console.log('移除了群成员 onRemoveSuperTeamMembers ', obj.accounts, obj)
  var teamId = obj.team.teamId
  var accounts = obj.accounts
  var team
  if (!teamId && !accounts) {
    accounts = obj.accounts || []
    team = obj.team || {}
  }
  /*
   * 如果是别人被踢了,那么移除群成员
   * 如果是自己被踢了,那么离开该群
   */
  if (accounts.indexOf(data.account) === -1) {
    if (team) {
      onSuperTeams(team)
    }
    if (!data.superTeamMembers) {
      data.superTeamMembers = {}
    }
    data.superTeamMembers[teamId] = nim.cutTeamMembersByAccounts(
      data.superTeamMembers[teamId],
      teamId,
      accounts
    )
    refreshSuperTeamMembersUI()
  } else {
    leaveSuperTeam(teamId)
  }
}
function onUpdateSuperTeam(err, msg) {
  console.log('更新了超大群 teamId', err, msg)
}
function onUpdateSuperTeamMember (member) {
  console.log('群成员信息更新了', member) 
}
function leaveSuperTeam (teamId) {
  onInvalidSuperTeams({
    teamId: teamId
  })
  removeAllSuperTeamMembers(teamId)
}

function refreshSuperTeamsUI () {
  
}
function refreshSuperTeamMembersUI () {

}
function removeAllSuperTeamMembers () {

}

超大群对象

群对象有如下字段

  • teamId: 群Id
  • name: 群名字
  • avatar: 群头像
  • intro: 群简介
  • announcement: 群公告
  • owner: 群主
  • memberNum: 群成员数量
  • level: 群人数上限
  • memberUpdateTime: 群成员最后更新时间
  • updateTime: 群最后更新时间
  • createTime: 群创建时间
  • valid: 是否有效
  • validToCurrentUser: 对当前群成员是否有效

超大群群成员对象

超大群成员对象有如下字段

  • teamId: 群ID
  • account: 帐号
  • type: 超大群群成员类型,有两种可能的值,'owner' 群主和 'normal' 普通成员
  • nickInTeam: 在群里面的昵称
  • active: 激活状态
  • joinTime: 入群时间
  • updateTime: 更新时间
  • custom: 第三方扩展字段, 开发者可以自行扩展, 建议封装成JSON格式字符串
  • custom: 第三方扩展字段, 开发者可以自行扩展, 建议封装成JSON格式字符串

超大群加入方式

超大群只能由群主邀请加入,无需被邀请者同意。

发送超大群群消息

发送超大群群消息时只需将各个发送消息接口的scene替换为'superTeam', 将to替换为超大群ID即可。

接收超大群群消息

参考接收消息

更新群

  • 超大群只支持更新群名称、群头像、群介绍、群公告、自定义字段。
  • 更新群后所有群成员都会收到一条类型为 updateSuperTeam 的超大群群通知消息。此类群通知消息的 from 字段的值为更新群的人的帐号, to 字段的值为对应的群ID, attach 有一个字段 team 的值为被更新的超大群群信息
javascriptnim.updateSuperTeam({
  teamId: 123,
  name: '群名字',
  avatar: 'avatar.png',
  intro: '群简介',
  announcement: '群公告',
  joinMode: 'noVerify',
  beInviteMode: 'needVerify',
  custom: '自定义字段',
  done: updateSuperTeamDone
});
function updateSuperTeamDone(error, team) {
  console.log(error);
  console.log(team);
  console.log('更新群' + (!error?'成功':'失败'));
}

拉人入群

拉人入群后, 所有群成员会收到一条类型为'addSuperTeamMembers'群通知消息。此类群通知消息的from字段的值为拉人的人的帐号, to字段的值为对应的群ID, attach有一个字段team的值为对应的超大群对象, attach有一个字段accounts的值为被拉的人的帐号列表, attach有一个字段members的值为被拉的群成员信息列表。

javascriptnim.addSuperTeamMembers({
  teamId: 123,
  accounts: ['a3', 'a4'],
  ps: '加入我们的群吧',
  done: addSuperTeamMembersDone
});
function addSuperTeamMembersDone(error, obj) {
  console.log(error, obj);
  console.log('拉人入群' + (!error?'成功':'失败'));
}

踢人出群

  • 踢人出群后, 所有群成员会收到一条类型为'removeTeamMembers'群通知消息。此类群通知消息的from字段的值为踢人的人的帐号, to字段的值为对应的群ID, attach有一个字段team的值为对应的超大群对象, attach有一个字段accounts的值为被踢的人的帐号列表。
javascriptnim.removeSuperTeamMembers({
  teamId: 123,
  accounts: ['a3', 'a4'],
  done: removeSuperTeamMembersDone
});
function removeSuperTeamMembersDone(error, obj) {
  console.log(error, obj);
  console.log('踢人出群' + (!error?'成功':'失败'));
}

主动退群

javascriptnim.leaveSuperTeam({
  teamId: 123,
  done: leaveSuperTeamDone
});
function leaveSuperTeamDone(error, obj) {
  console.log(error, obj);
  console.log('主动退群' + (!error?'成功':'失败'));
}

修改自己的群属性

目前支持修改的属性有这些

  • nickInTeam: 自己在群里面的群昵称。更新昵称后, 所有其它在线的超大群群成员会收到初始化SDK时传入的onUpdateSuperTeamMember回调
  • muteTeam: 是否关闭此群的消息提醒, true表示关闭提醒, 但是SDK仍然会收到这个群的消息, SDK只是记录这个设置, 具体根据这个设置要执行的操作由第三方APP决定
  • custom: 第三方扩展字段, 开发者可以自行扩展, 建议封装成JSON格式字符串

修改自己的群属性后,所有群成员会收到SDK初始化时设置的onUpdateSuperTeamMember回调

javascriptnim.updateInfoInSuperTeam({
  teamId: 123,
  // 此参数为可选参数
  // nickInTeam: '群昵称',
  // 静音群, 此参数为可选参数
  // muteTeam: true,
  // 第三方扩展字段
  // custom: '{}'
  done: updateInfoInSuperTeamDone
});
function updateInfoInSuperTeamDone(error, obj) {
  console.log('修改自己的群属性' + (!error?'成功':'失败'), error, obj);
}

获取超大群列表

  • 如果开发者在初始化SDK的时候设置了syncSuperTeamsfalse, 那么就收不到onSuperTeams回调, 可以调用此方法来获取超大群列表
javascriptnim.getSuperTeams({
  done: getSuperTeamsDone
});
function getSuperTeamsDone(error, teams) {
  console.log(error, teams);
  console.log('获取超大群列表' + (!error?'成功':'失败'));
  if (!error) {
    onSuperTeams(teams);
  }
}

根据群ID获取超大群资料

javascriptnim.getSuperTeam({
    teamId: '123',
    done: getSuperTeamDone
});
function getSuperTeamDone(error, obj) {
    console.log(error, obj);
    console.log('获取超大群' + (!error?'成功':'失败'));
}

获取超大群群成员

  • 超大群人数较多,考虑到性能,SDK在初始化时不会同步超大群群成员
  • 使用超大群功能时,建议开发者启用db,提升响应速度。启用数据库后,数据会被缓存到数据库中,之后的更新都是增量更新。

相关API:

其他

超大群的其他API及其文档连接如下

此文档是否对你有帮助?
有帮助
去反馈
  • 超大群概述
  • 初始化参数
  • 超大群对象
  • 超大群群成员对象
  • 超大群加入方式
  • 发送超大群群消息
  • 接收超大群群消息
  • 更新群
  • 拉人入群
  • 踢人出群
  • 主动退群
  • 修改自己的群属性
  • 获取超大群列表
  • 根据群ID获取超大群资料
  • 获取超大群群成员
  • 其他