超大群功能
更新时间: 2024/10/09 15:51:27
网易云信 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
: 群Idname
: 群名字avatar
: 群头像intro
: 群简介announcement
: 群公告owner
: 群主memberNum
: 群成员数量level
: 群人数上限memberUpdateTime
: 群成员最后更新时间updateTime
: 群最后更新时间createTime
: 群创建时间valid
: 是否有效validToCurrentUser
: 对当前群成员是否有效
超大群群成员对象
超大群成员对象有如下字段
teamId
: 群IDaccount
: 帐号type
: 超大群群成员类型,'owner'
群主、'normal'
普通成员和'manager'
管理员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?'成功':'失败'));
}
主动退群
- 主动退群后, 所有超大群群成员会收到一条类型为
'leaveSuperTeam'
的群通知消息。此类群通知消息的from
字段的值为退群的人的帐号,to
字段的值为对应的群ID,attach
有一个字段team
的值为对应的超大群对象。
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的时候设置了
syncSuperTeams
为false
, 那么就收不到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及其文档连接如下
此文档是否对你有帮助?