超大群

超大群功能概述

v6.5.5版本及之后的SDK提供了超大群(superTeam)功能,适用于大规模群聊场景,目前的人数上限为5000。

超大群和普通群功能相似,但支持更高的人数上限,支持分页获取群成员,拥有自己的会话类型、消息类型;但群管理功能较弱,只有群主和普通群成员两种身份,群主可以增加或剔除群成员,编辑群资料,编辑自己的群信息,普通群成员可以编辑自己的群信息、主动退群;两者的底层协议不同,提供的api也不同,因此开发者在使用的过程中,请切记不要将两者混为一谈。

注:

初始化参数

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

示例代码

var nim = NIM.getInstance({
  syncSuperTeams: true, // 是否同步超大群列表,默认为true
  onSuperTeams: onSuperTeams, // 同步超大群列表的回调, 会传入超大群数组
  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 () {

}

超大群对象

群对象有如下字段

超大群群成员对象

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

超大群加入方式

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

发送超大群群消息

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

接收超大群群消息

参考接收消息

更新群

nim.updateSuperTeam({
  teamId: 123,
  name: '群名字',
  avatar: 'avatar.png',
  intro: '群简介',
  announcement: '群公告',
  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的值为被拉的群成员信息列表。

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

踢人出群

nim.removeSuperTeamMembers({
  teamId: 123,
  accounts: ['a3', 'a4'],
  done: removeSuperTeamMembersDone
});
function removeSuperTeamMembersDone(error, obj) {
  console.log(error, obj);
  console.log('踢人出群' + (!error?'成功':'失败'));
}

主动退群

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

修改自己的群属性

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

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

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

获取超大群列表

nim.getSuperTeams({
  done: getSuperTeamsDone
});
function getSuperTeamsDone(error, teams) {
  console.log(error, teams);
  console.log('获取超大群列表' + (!error?'成功':'失败'));
  if (!error) {
    onSuperTeams(teams);
  }
}

根据群ID获取超大群资料

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

获取超大群群成员

 nim.getSuperTeamMembers({
    teamId: '123',
    needPaging: true, // 选填
    pagingParams: { size: 100, current: 0 }, // 选填
    done: getSuperTeamMembersDone
});
function getSuperTeamMembersDone(error, obj) {
    console.log(error);
    console.log('获取群成员' + (!error?'成功':'失败'));
    console.log('群成员::群成员总数量::每页大小::当前页数', obj.members, obj.total, obj.size, obj.current)
}