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