IM 即时通讯
Web
产品介绍
简介
主要功能
产品优势
海外数据中心
IM平滑迁移方案
接口及业务限制
功能介绍
帐号集成与登录
基础消息功能
群组功能
聊天室功能
聊天室标签功能
多端登录与互踢策略
质量数据监控台
体验 Demo
下载 SDK 与 Demo 源码
更新日志
IM UIKit 更新日志
NIM SDK 开发版更新日志
NIM SDK 稳定版更新日志
快速开始
跑通 IM Demo 源码
实现 IM 文本消息收发(不含 UI)
含 UI 集成
什么是 IM UIKit
IM UIKit 功能概览
快速集成 IM UIKit
非React框架集成 IM UIKit
组件导入
初始化
全局上下文
登录相关
实现消息收发及界面自定义
集成会话列表界面
集成会话消息界面
集成用户资料组件
集成通讯录界面
集成搜索组件
非 React 框架自定义渲染
主题样式设置
语言设置
初始化(兼容 NIM SDK)
不含 UI 集成
集成 SDK
浏览器环境集成
Node.js集成
初始化与登录相关
初始化与登录 IM
IM 连接相关
多端登录与互踢
消息相关
消息概述
消息收发
消息配置选项
广播消息收发
消息已读回执
消息撤回
消息重发与转发
本地消息
通知消息
群通知消息
超大群通知消息
历史消息
最近会话
用户资料托管
好友关系托管
用户关系托管
在线状态订阅
群组功能
群组概述
群组管理
群成员管理
群消息管理
超大群功能
系统通知
系统通知概述
内置系统通知管理
内置系统通知未读数
自定义系统通知收发
开通聊天室功能
聊天室
反垃圾(内容审核)
域名高可用
融合存储方案
扩展功能
工具方法
最佳实践
聊天室重要消息投递
API参考
SDK API (Web)
IM UIKit Store API
状态码
IM 控制台指南
创建应用
注册 IM 账号
升级服务
开通聊天室功能
配置应用客户端标识
常见问题
FAQ
服务协议

超大群功能

更新时间: 2022/11/28 11:30:12

超大群功能概述

v6.5.5版本及之后的SDK提供了超大群(superTeam)功能,适用于大规模群聊场景。

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

注:

  • 目前还没有超大群的DMEO,请开发者自行按需实现
  • 为了安全考虑,客户端SDK不支持创建和解散超大群,如有创建或解散超大群的需求,请使用对应的服务端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 () {

}

超大群对象

群对象有如下字段

  • 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 的值为被更新的超大群群信息
nim.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的值为被拉的群成员信息列表。

nim.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的值为被踢的人的帐号列表。
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?'成功':'失败'));
}

修改自己的群属性

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

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

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

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

获取超大群列表

  • 如果开发者在初始化SDK的时候设置了syncSuperTeamsfalse, 那么就收不到onSuperTeams回调, 可以调用此方法来获取超大群列表
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?'成功':'失败'));
}

获取超大群群成员

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

相关API:

其他

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

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