网易云信 IM 提供了高级群和超大群形式的群组功能,支持用户创建、加入、退出、转让、修改、查询、解散群组,拥有完善的管理功能。
本文介绍如何通过 NetEase IM SDK(以下简称 NIM SDK)实现和管理群组。
技术原理
NIM SDK 的 V2NIMTeamService
类提供群组操作相关接口,帮助您快速实现和使用群组的管理功能。
群组相关事件监听
在进行群组操作前,您可以注册监听群相关事件。监听后,在进行群组管理相关操作时,会收到对应的通知。
-
相关回调
onSyncStarted
:群组数据同步开始回调。
onSyncFinished
:群组数据同步结束回调。请在收到该回调之后进行群组相关操作,否则可能导致数据不完整。
onSyncFailed
:群组数据同步失败回调。如果在收到该回调之后进行群组相关操作,群组数据可能不完整。相关错误恢复后,会逐步按需重建数据。
onTeamCreated
:群组成功创建回调,返回 V2NIMTeam
。当本地端或多端同步创建群组成功时会触发该回调。
onTeamDismissed
:群组解散回调,返回 V2NIMTeam
。当本地端或多端同步解散群组成功时会触发该回调。群组内所有成员均会收到该回调。
onTeamJoined
:加入群组回调,返回 V2NIMTeam
。当本地端或多端同步加入群组时会触发该回调。
onTeamLeft
:离开群组回调,返回 V2NIMTeam
。当本地端或多端主动离开群组或被踢出群组时会触发该回调。
onTeamInfoUpdated
:群组信息更新回调,返回 V2NIMTeam
。群组内所有成员均会收到该回调。
onTeamMemberJoined
:成员加入群组回调,返回 V2NIMTeamMember
。群组内所有成员均会收到该回调。
onTeamMemberKicked
:群成员被踢出群组回调,返回 V2NIMTeamMember
列表。群组内所有成员均会收到该回调。
onTeamMemberLeft
:群成员离开群组回调,返回 V2NIMTeamMember
列表。群组内所有成员均会收到该回调。
onTeamMemberInfoUpdated
:群成员信息变更回调,返回 V2NIMTeamMember
列表。群组内所有成员均会收到该回调。
onReceiveTeamJoinActionInfo
:收到入群操作信息回调,返回 V2NIMTeamJoinActionInfo
。
-
示例代码
Android/iOS/Windows/macOS
调用 addTeamListener
方法注册群组相关监听器,监听群组相关事件。
Android
javaV2NIMTeamService v2TeamService = NIMClient.getService(V2NIMTeamService.class);
V2NIMTeamListener listener = new V2NIMTeamListener() {
@Override
public void onSyncStarted() {
}
@Override
public void onSyncFinished() {
}
@Override
public void onSyncFailed(V2NIMError error) {
}
@Override
public void onTeamCreated(V2NIMTeam team) {
}
@Override
public void onTeamDismissed(V2NIMTeam team) {
}
@Override
public void onTeamJoined(V2NIMTeam team) {
}
@Override
public void onTeamLeft(V2NIMTeam team, boolean isKicked) {
}
@Override
public void onTeamInfoUpdated(V2NIMTeam team) {
}
@Override
public void onTeamMemberJoined(List<V2NIMTeamMember> teamMembers) {
}
@Override
public void onTeamMemberKicked(String operatorAccountId, List<V2NIMTeamMember> teamMembers) {
}
@Override
public void onTeamMemberLeft(List<V2NIMTeamMember> teamMembers) {
}
@Override
public void onTeamMemberInfoUpdated(List<V2NIMTeamMember> teamMembers) {
}
@Override
public void onReceiveTeamJoinActionInfo(V2NIMTeamJoinActionInfo joinActionInfo) {
}
};
v2TeamService.addTeamListener(listener);
iOS
objective-c[[[NIMSDK sharedSDK] v2TeamService] addTeamListener:self];
- (void)onSyncStarted{};
- (void)onSyncFinished{};
- (void)onSyncFailed:(V2NIMError *)error{};
- (void)onTeamCreated:(V2NIMTeam *)team{};
- (void)onTeamDismissed:(V2NIMTeam *)team{};
- (void)onTeamJoined:(V2NIMTeam *)team{};
- (void)onTeamLeft:(V2NIMTeam *)team
isKicked:(BOOL)isKicked{};
- (void)onTeamInfoUpdated:(V2NIMTeam *)team{};
- (void)onTeamMemberJoined:(NSArray<V2NIMTeamMember *> *)teamMembers{};
- (void)onTeamMemberKicked:(NSString *)operatorAccountId
teamMembers:(NSArray<V2NIMTeamMember *> *)teamMembers{};
- (void)onTeamMemberLeft:(NSArray<V2NIMTeamMember *> *)teamMembers{};
- (void)onTeamMemberInfoUpdated:(NSArray<V2NIMTeamMember *> *)teamMembers{};
- (void)onReceiveTeamJoinActionInfo:(V2NIMTeamJoinActionInfo *)joinActionInfo{};
macOS/Windows
cppV2NIMTeamListener listener;
listener.onSyncStarted = []() {
};
listener.onSyncFinished = []() {
};
listener.onSyncFailed = [](V2NIMError error) {
};
listener.onTeamCreated = [](V2NIMTeam team) {
};
listener.onTeamDismissed = [](nstd::vector<V2NIMTeam> teams) {
};
listener.onTeamJoined = [](V2NIMTeam team) {
};
listener.onTeamLeft = [](V2NIMTeam team, bool isKicked) {
};
listener.onTeamInfoUpdated = [](V2NIMTeam team) {
};
listener.onTeamMemberJoined = [](nstd::vector<V2NIMTeamMember> teamMembers) {
};
listener.onTeamMemberKicked = [](nstd::string operateAccountId, nstd::vector<V2NIMTeamMember> teamMembers) {
team member kicked
};
listener.onTeamMemberLeft = [](nstd::vector<V2NIMTeamMember> teamMembers) {
};
listener.onTeamMemberInfoUpdated = [](nstd::vector<V2NIMTeamMember> teamMembers) {
};
listener.onReceiveTeamJoinActionInfo = [](V2NIMTeamJoinActionInfo joinActionInfo) {
};
teamService.addTeamListener(listener);
Web/uni-app/小程序/Harmony
调用 on("EventName")
方法注册群组相关监听器,监听群组相关事件。
Web/uni-app/小程序
typescriptnim.V2NIMTeamService.on('onSyncStarted', () => { console.log("recv onSyncStarted") })
nim.V2NIMTeamService.on('onSyncFinished', () => { console.log("recv onSyncFinished") })
nim.V2NIMTeamService.on('onSyncFailed', (error) => { console.log("recv onSyncFailed", error) })
nim.V2NIMTeamService.on('onTeamCreated', (team) => { console.log("recv onTeamCreated", team) })
nim.V2NIMTeamService.on('onTeamJoined', (team) => { console.log("recv onTeamJoined", team) })
nim.V2NIMTeamService.on('onTeamLeft', (team, isKicked) => { console.log("recv onTeamLeft", team, isKicked) })
nim.V2NIMTeamService.on('onTeamInfoUpdated', (team) => { console.log("recv onTeamInfoUpdated", team) })
nim.V2NIMTeamService.on('onTeamMemberJoined', (teamMembers) => { console.log("recv onTeamMemberJoined", teamMembers) })
nim.V2NIMTeamService.on('onTeamMemberKicked', (operateAccountId, teamMembers) => { console.log("recv onTeamMemberKicked", operateAccountId, teamMembers) })
nim.V2NIMTeamService.on('onTeamMemberLeft', (teamMembers) => { console.log("recv onTeamMemberLeft", teamMembers) })
nim.V2NIMTeamService.on('onTeamMemberInfoUpdated', (teamMembers) => { console.log("recv onTeamMemberInfoUpdated", teamMembers) })
nim.V2NIMTeamService.on('onReceiveTeamJoinActionInfo', (joinActionInfo) => { console.log("recv onReceiveTeamJoinActionInfo", joinActionInfo) })
Harmony
typescriptnim.teamService.on('onSyncStarted', () => { console.log("recv onSyncStarted") })
nim.teamService.on('onSyncFinished', () => { console.log("recv onSyncFinished") })
nim.teamService.on('onSyncFailed', (error) => { console.log("recv onSyncFailed", error) })
nim.teamService.on('onTeamCreated', (team) => { console.log("recv onTeamCreated", team) })
nim.teamService.on('onTeamDismissed', (team) => { console.log("recv onTeamDismissed", team) })
nim.teamService.on('onTeamJoined', (team) => { console.log("recv onTeamJoined", team) })
nim.teamService.on('onTeamLeft', (team, isKicked) => { console.log("recv onTeamLeft", team, isKicked) })
nim.teamService.on('onTeamInfoUpdated', (team) => { console.log("recv onTeamInfoUpdated", team) })
nim.teamService.on('onTeamMemberJoined', (teamMembers) => { console.log("recv onTeamMemberJoined", teamMembers) })
nim.teamService.on('onTeamMemberKicked', (operateAccountId, teamMembers) => { console.log("recv onTeamMemberKicked", operateAccountId, teamMembers) })
nim.teamService.on('onTeamMemberLeft', (teamMembers) => { console.log("recv onTeamMemberLeft", teamMembers) })
nim.teamService.on('onTeamMemberInfoUpdated', (teamMembers) => { console.log("recv onTeamMemberInfoUpdated", teamMembers) })
nim.teamService.on('onReceiveTeamJoinActionInfo', (joinActionInfo) => { console.log("recv onReceiveTeamJoinActionInfo", joinActionInfo) })
由于获取群组信息和群成员信息需要跨进程异步调用,开发者最好能在第三方 APP 中做好群组和群成员信息缓存,查询群组和群成员信息时都从本地缓存中访问。在群组或者群成员信息有变化时,SDK 会告诉注册的观察者,此时,第三方 APP 可更新缓存,并刷新界面。
实现流程
本节通过群主、管理员、普通成员之间的交互为例,介绍群组管理的实现流程。
创建群组
通过调用 createTeam
方法创建一个群组,创建者即为该群群主。
iOS
参数名称 |
类型 |
是否必填 |
默认值 |
描述 |
createTeamParams |
V2NIMCreateTeamParams |
是 |
- |
群组创建配置参数 |
inviteeAccountIds |
NSArray<NSString *> * |
否 |
null |
被邀请加入群组的成员列表,单次调用不超过 50 人。 |
postscript |
NSString * |
否 |
null |
邀请入群附言 |
antispamConfig |
V2NIMAntispamConfig |
否 |
null |
易盾反垃圾相关配置。使用云信安全通无需配置该参数。 |
success |
V2NIMCreateTeamResultCallback |
是 |
- |
群组创建成功回调,可自定义设置。 |
failure |
V2NIMFailureCallback |
是 |
- |
群组创建失败回调,返回错误码。 |
Web/uni-app/小程序
参数名称 |
类型 |
是否必填 |
默认值 |
描述 |
createTeamParams |
V2NIMCreateTeamParams |
是 |
- |
群组创建配置参数 |
inviteeAccountIds |
string[] |
否 |
null |
被邀请加入群组的成员列表,单次调用不超过 50 人。 |
postscript |
string |
否 |
null |
邀请入群附言 |
antispamConfig |
V2NIMAntispamConfig |
否 |
null |
易盾反垃圾相关配置。使用云信安全通无需配置该参数。 |
Harmony
参数名称 |
类型 |
是否必填 |
默认值 |
描述 |
createTeamParams |
V2NIMCreateTeamParams |
是 |
- |
群组创建配置参数 |
inviteeAccountIds |
string[] |
否 |
null |
被邀请加入群组的成员列表,单次调用不超过 50 人。 |
postscript |
string |
否 |
null |
邀请入群附言 |
antispamConfig |
V2NIMAntispamConfig |
否 |
null |
易盾反垃圾相关配置。使用云信安全通无需配置该参数。 |
Android
javaV2NIMTeamService v2TeamService = NIMClient.getService(V2NIMTeamService.class);
V2NIMCreateTeamParams createTeamParams = new V2NIMCreateTeamParams();
createTeamParams.setName("test");
createTeamParams.setTeamType(V2NIMTeamType.V2NIM_TEAM_TYPE_NORMAL);
createTeamParams.setMemberLimit(100);
createTeamParams.setIntro("test");
createTeamParams.setAnnouncement("test");
createTeamParams.setAvatar("http://test.png");
createTeamParams.setServerExtension("test");
createTeamParams.setAgreeMode(V2NIMTeamAgreeMode.V2NIM_TEAM_AGREE_MODE_AUTH);
createTeamParams.setJoinMode(V2NIMTeamJoinMode.V2NIM_TEAM_JOIN_MODE_INVITE);
createTeamParams.setInviteMode(V2NIMTeamInviteMode.V2NIM_TEAM_INVITE_MODE_MANAGER);
createTeamParams.setUpdateInfoMode(V2NIMTeamUpdateInfoMode.V2NIM_TEAM_UPDATE_INFO_MODE_MANAGER);
createTeamParams.setUpdateExtensionMode(V2NIMTeamUpdateExtensionMode.V2NIM_TEAM_UPDATE_EXTENSION_MODE_MANAGER);
List<String> inviteeAccountIds = new ArrayList<>();
inviteeAccountIds.add("test1");
inviteeAccountIds.add("test2");
String postscript = "test";
V2NIMAntispamConfig antispamConfig = null;
v2TeamService.createTeam(createTeamParams, inviteeAccountIds, postscript, antispamConfig, result -> {
}, error -> {
});
iOS
objective-cV2NIMCreateTeamParams *teamParams = [V2NIMCreateTeamParams new];
teamParams.name = @"test";
teamParams.teamType = V2NIM_TEAM_TYPE_NORMAL;
teamParams.memberLimit = 100;
teamParams.intro = @"test";
teamParams.announcement = @"test";
teamParams.avatar = @"http://test.png";
teamParams.agreeMode = V2NIM_TEAM_AGREE_MODE_AUTH;
teamParams.joinMode = V2NIM_TEAM_JOIN_MODE_FREE;
teamParams.inviteMode = V2NIM_TEAM_INVITE_MODE_MANAGER;
teamParams.updateInfoMode = V2NIM_TEAM_UPDATE_INFO_MODE_MANAGER;
teamParams.updateExtensionMode = V2NIM_TEAM_UPDATE_EXTENSION_MODE_MANAGER;
V2NIMAntispamConfig *config = [V2NIMAntispamConfig new];
[[[NIMSDK sharedSDK] v2TeamService] createTeam:teamParams inviteeAccountIds:@[@"test1",@"test2"] postscript:@"test" antispamConfig:config success:^(V2NIMCreateTeamResult * _Nonnull result) {
// 群组创建成功
} failure:^(V2NIMError * _Nonnull error) {
// 群组创建失败
}];
macOS/Windows
cppV2NIMCreateTeamParams createTeamParams;
createTeamParams.name = "teamName";
nstd::vector<nstd::string> inviteeAccountIds;
inviteeAccountIds.push_back("account1");
V2NIMAntispamConfig antispamConfig;
teamService.createTeam(
createTeamParams,
inviteeAccountIds,
"postscript",
antispamConfig,
[](V2NIMCreateTeamResult result) {
},
[](V2NIMError error) {
});
Web/uni-app/小程序
typescriptawait nim.V2NIMTeamService.createTeam(
{
"name": "群名",
"teamType": 1,
"memberLimit": 200,
}
)
Harmony
typescripttry {
const params: V2NIMCreateTeamParams = {
name: this.name,
teamType: this.teamType,
memberLimit: this.memberLimit,
intro: this.intro,
announcement: this.announcement,
avatar: this.avatar,
serverExtension: this.serverExtension,
joinMode: this.joinMode,
agreeMode: this.agreeMode,
inviteMode: this.inviteMode,
updateInfoMode: this.updateInfoMode,
updateExtensionMode: this.updateExtensionMode,
chatBannedMode: this.chatBannedMode
}
const result:V2NIMCreateTeamResult = await nim.teamService.createTeam(params, [], '')
} catch (error) {
}
加入群组
加入群组可以通过以下两种方式:
邀请入群
通过调用 inviteMember
方法邀请用户进入群组。
本地端或多端同步邀请成功后,群组内其他成员收到一条通知类消息,类型为 V2NIMMessageNotificationType.V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_INVITE
。
- 如果被邀请用户中存在拥有群组数量已达上限的用户,则会返回邀请失败用户的账号列表。
- 邀请入群的权限可以通过
V2NIMTeam.inviteMode
来定义,设为 V2NIM_TEAM_INVITE_MODE_MANAGER
,那么仅限群主和管理员有邀请入群权限;设为 V2NIM_TEAM_INVITE_MODE_ALL
,那么群组内所有成员均有邀请入群权限。
Android
参数名称 |
类型 |
是否必填 |
默认值 |
描述 |
teamId |
String |
是 |
- |
群组 ID。如果为空、不合法、不存在则返回 191004 参数错误。 |
teamType |
V2NIMTeamType |
是 |
- |
群组类型,包括高级群和超大群。 |
inviteAccountIds |
List |
是 |
- |
被邀请入群的用户账号列表。不可为空,否则返回 191004 参数错误。 |
postscript |
String |
否 |
null |
邀请入群附言。 |
success |
V2NIMSuccessCallback |
|
- |
邀请入群成功回调,返回邀请失败的用户账号列表。 |
failure |
V2NIMFailureCallback |
是 |
- |
邀请入群失败回调,返回错误码。 |
iOS
参数名称 |
类型 |
是否必填 |
默认值 |
描述 |
teamId |
NSString * |
是 |
- |
群组 ID。如果为空、不合法、不存在则返回 191004 参数错误。 |
teamType |
V2NIMTeamType |
是 |
- |
群组类型,包括高级群和超大群。 |
inviteAccountIds |
NSArray<NSString *> * |
是 |
- |
被邀请入群的用户账号列表。不可为空,否则返回 191004 参数错误。 |
postscript |
NSString * |
否 |
null |
邀请入群附言。 |
success |
V2NIMTeamInviteMemberCallback |
|
- |
邀请入群成功回调,可自定义设置。 |
failure |
V2NIMFailureCallback |
是 |
- |
邀请入群失败回调,返回错误码。 |
macOS/Windows
参数名称 |
类型 |
是否必填 |
默认值 |
描述 |
teamId |
nstd::string |
是 |
- |
群组 ID。如果为空、不合法、不存在则返回 191004 参数错误。 |
teamType |
V2NIMTeamType |
是 |
- |
群组类型,包括高级群和超大群。 |
inviteAccountIds |
nstd::vectornstd::string |
是 |
- |
被邀请入群的用户账号列表。不可为空,否则返回 191004 参数错误。 |
postscript |
nstd::string |
否 |
null |
邀请入群附言。 |
success |
V2NIMSuccessCallback |
|
- |
邀请入群成功回调,返回邀请失败的用户账号列表。 |
failure |
V2NIMFailureCallback |
是 |
- |
邀请入群失败回调,返回错误码。 |
Web/uni-app/小程序
参数名称 |
类型 |
是否必填 |
默认值 |
描述 |
teamId |
string |
是 |
- |
群组 ID。如果为空、不合法、不存在则返回 191004 参数错误。 |
teamType |
V2NIMTeamType |
是 |
- |
群组类型,包括高级群和超大群。 |
inviteAccountIds |
string[] |
是 |
- |
被邀请入群的用户账号列表。不可为空,否则返回 191004 参数错误。 |
postscript |
string |
否 |
null |
邀请入群附言。 |
Harmony
参数名称 |
类型 |
是否必填 |
默认值 |
描述 |
teamId |
string |
是 |
- |
群组 ID。如果为空、不合法、不存在则返回 191004 参数错误。 |
teamType |
V2NIMTeamType |
是 |
- |
群组类型,包括高级群和超大群。 |
inviteAccountIds |
string[] |
是 |
- |
被邀请入群的用户账号列表。不可为空,否则返回 191004 参数错误。 |
postscript |
string |
否 |
null |
邀请入群附言。 |
Android
javaV2NIMTeamService v2TeamService = NIMClient.getService(V2NIMTeamService.class);
String teamId = "123456";
V2NIMTeamType teamType = V2NIMTeamType.V2NIM_TEAM_TYPE_NORMAL;
List<String> invitorAccountIds = new ArrayList<>();
invitorAccountIds.add("test1");
invitorAccountIds.add("test2");
String postscript = "test";
v2TeamService.inviteMember(teamId,teamType, invitorAccountIds, postscript, result -> {
}, error -> {
});
iOS
objective-c[[[NIMSDK sharedSDK] v2TeamService] inviteMember:@"teamId" teamType:V2NIM_TEAM_TYPE_NORMAL inviteeAccountIds:@[@"accountId1"] postscript:@"test" success:^(NSArray<NSString *> * _Nonnull failedList) {
// 邀请成员加入群组成功
} failure:^(V2NIMError * _Nonnull error) {
// 邀请成员加入群组失败
}]
macOS/Windows
cppnstd::vector<nstd::string> inviteeAccountIds;
inviteeAccountIds.push_back("account1");
teamService.inviteMember(
"teamId",
V2NIM_TEAM_TYPE_NORMAL,
inviteeAccountIds,
"postscript",
[](nstd::vector<nstd::string> failedList) {
},
[](V2NIMError error) {
});
Web/uni-app/小程序
typescriptawait nim.V2NIMTeamService.inviteMember("123456", 1, ["accountId1"])
Harmony
typescripttry {
const teamId: string = "123456"
const teamType: V2NIMTeamType = V2NIMTeamType.V2NIM_TEAM_TYPE_NORMAL
const inviteeAccountIds: string[] = ["acc1", "acc2"]
const postscript: string | undefined = "postscript"
const res = await teamService.inviteMember(teamId, teamType, inviteeAccountIds, postscript)
}
catch (err) {
}
接受入群邀请
收到邀请入群的通知消息后,可以调用 acceptInvitation
方法接受入群邀请。
Web/uni-app/小程序
参数名称 |
类型 |
是否必填 |
默认值 |
描述 |
invitationInfo |
V2NIMTeamJoinActionInfo |
是 |
- |
邀请入群信息。其中 actionType 必须为 V2NIM_TEAM_JOIN_ACTION_TYPE_INVITATION ,否则返回 191004 参数错误。 |
Harmony
参数名称 |
类型 |
是否必填 |
默认值 |
描述 |
invitationInfo |
V2NIMTeamJoinActionInfo |
是 |
- |
邀请入群信息。其中 actionType 必须为 V2NIM_TEAM_JOIN_ACTION_TYPE_INVITATION ,否则返回 191004 参数错误。 |
Android
javaV2NIMTeamService v2TeamService = NIMClient.getService(V2NIMTeamService.class);
V2NIMTeamJoinActionInfo invitationInfo = getInvitationInfo();
v2TeamService.acceptInvitation(invitationInfo, result -> {
}, error -> {
});
iOS
objective-c[[[NIMSDK sharedSDK] v2TeamService] acceptInvitation:invitationInfo success:^(V2NIMTeam * _Nonnull team) {
// 同意邀请入群成功
} failure:^(V2NIMError * _Nonnull error) {
// 同意邀请入群失败
}]
macOS/Windows
cppV2NIMTeamJoinActionInfo invitationInfo;
teamService.acceptInvitation(
invitationInfo,
[](V2NIMTeam team) {
},
[](V2NIMError error) {
});
Web/uni-app/小程序
typescriptawait nim.V2NIMTeamService.acceptInvitation(
{
"teamId": "123456",
"teamType": 1,
"operatorAccountId": "accountId1",
"actionType": 2
}
)
Harmony
typescripttry{
const invitationInfo: V2NIMTeamJoinActionInfo = {
actionType: V2NIMTeamJoinActionType.V2NIM_TEAM_JOIN_ACTION_TYPE_INVITATION,
teamId: "123456",
teamType: V2NIMTeamType.V2NIM_TEAM_TYPE_NORMAL,
operatorAccountId: "account1",
}
const team: V2NIMTeam = await nim.teamService.acceptInvitation(invitationInfo)
}
catch (err) {
}
拒绝入群邀请
收到邀请入群的通知消息后,可以调用 rejectInvitation
方法拒绝入群邀请。
Web/uni-app/小程序
参数名称 |
类型 |
是否必填 |
默认值 |
描述 |
invitationInfo |
V2NIMTeamJoinActionInfo |
是 |
- |
邀请入群信息。其中 actionType 必须为 V2NIM_TEAM_JOIN_ACTION_TYPE_INVITATION ,否则返回 191004 参数错误。 |
postscript |
string |
否 |
null |
拒绝邀请附言。 |
Harmony
参数名称 |
类型 |
是否必填 |
默认值 |
描述 |
invitationInfo |
V2NIMTeamJoinActionInfo |
是 |
- |
邀请入群信息。其中 actionType 必须为 V2NIM_TEAM_JOIN_ACTION_TYPE_INVITATION ,否则返回 191004 参数错误。 |
postscript |
string |
否 |
null |
拒绝邀请附言。 |
Android
javaV2NIMTeamService v2TeamService = NIMClient.getService(V2NIMTeamService.class);
V2NIMTeamJoinActionInfo invitationInfo = getInvitationInfo();
String postscript = "test";
v2TeamService.rejectInvitation(invitationInfo, postscript, result -> {
}, error -> {
});
iOS
objective-c[[[NIMSDK sharedSDK] v2TeamService] rejectInvitation:invitationInfo postscript:@"test" success: failure:^(V2NIMError * _Nonnull error) {
// 拒绝邀请入群失败
}]
macOS/Windows
cppV2NIMTeamJoinActionInfo invitationInfo;
teamService.rejectInvitation(
invitationInfo,
"postscript",
[]() {
},
[](V2NIMError error) {
});
Web/uni-app/小程序
typescriptawait nim.V2NIMTeamService.rejectInvitation(
{
"teamId": "123456",
"teamType": 1,
"operatorAccountId": "accountId1",
"actionType": 2
},
"test postscript"
)
Harmony
typescripttry{
const invitationInfo: V2NIMTeamJoinActionInfo = {
actionType: V2NIMTeamJoinActionType.V2NIM_TEAM_JOIN_ACTION_TYPE_INVITATION,
teamId: "123456",
teamType: V2NIMTeamType.V2NIM_TEAM_TYPE_NORMAL,
operatorAccountId: "account1",
}
await nim.teamService.rejectInvitation(invitationInfo)
}
catch (err) {
}
主动申请入群
通过调用 applyJoinTeam
方法申请加入群组。
- 若群组的加入模式
V2NIMTeam.joinMode
为 V2NIM_TEAM_JOIN_MODE_FREE
,那么无需验证,用户可直接加入群组。
- 若群组的加入模式
V2NIMTeam.joinMode
为 V2NIM_TEAM_JOIN_MODE_APPLY
,那么需要群主或者群管理员同意才能加入群组。
- 若群组的加入模式
V2NIMTeam.joinMode
为 V2NIM_TEAM_JOIN_MODE_INVITE
,那么该群组不接受入群申请,仅能通过邀请方式入群。
直接加入群组或者进入等待验证状态时,返回群组信息。
iOS
参数名称 |
类型 |
是否必填 |
默认值 |
描述 |
teamId |
NSString * |
是 |
- |
群组 ID。如果为空、不合法、不存在则返回 191004 参数错误。 |
teamType |
V2NIMTeamType |
是 |
- |
群组类型,包括高级群和超大群。 |
postscript |
NSString * |
否 |
null |
申请入群附言。 |
success |
V2NIMTeamInfoCallback |
|
- |
申请入群成功回调,包含 V2NIMTeam ,可自定义设置。 |
failure |
V2NIMFailureCallback |
是 |
- |
申请入群失败回调,返回错误码。 |
Web/uni-app/小程序
参数名称 |
类型 |
是否必填 |
默认值 |
描述 |
teamId |
string |
是 |
- |
群组 ID。如果为空、不合法、不存在则返回 191004 参数错误。 |
teamType |
V2NIMTeamType |
是 |
- |
群组类型,包括高级群和超大群。 |
postscript |
string |
否 |
null |
申请入群附言。 |
Harmony
参数名称 |
类型 |
是否必填 |
默认值 |
描述 |
teamId |
string |
是 |
- |
群组 ID。如果为空、不合法、不存在则返回 191004 参数错误。 |
teamType |
V2NIMTeamType |
是 |
- |
群组类型,包括高级群和超大群。 |
postscript |
string |
否 |
null |
申请入群附言。 |
Android
javaV2NIMTeamService v2TeamService = NIMClient.getService(V2NIMTeamService.class);
String teamId = "123456";
V2NIMTeamType teamType = V2NIMTeamType.V2NIM_TEAM_TYPE_NORMAL;
String postscript = "test";
v2TeamService.applyJoinTeam(teamId, teamType, postscript, result -> {
}, error -> {
});
iOS
objective-c[[[NIMSDK sharedSDK] v2TeamService] applyJoinTeam:@"teamId" teamType:V2NIM_TEAM_TYPE_NORMAL postscript:@"test" success:^(V2NIMTeam * _Nonnull team) {
// 申请加入群组成功
} failure:^(V2NIMError * _Nonnull error) {
// 申请加入群组失败
}]
macOS/Windows
cppteamService.applyJoinTeam(
"teamId",
V2NIM_TEAM_TYPE_NORMAL,
"postscript",
[](V2NIMTeam team) {
},
[](V2NIMError error) {
}
);
Web/uni-app/小程序
typescriptawait nim.V2NIMTeamService.applyJoinTeam("123456", 1, "test postscript")
Harmony
typescripttry{
const teamId = "123456",
const teamType = V2NIMTeamType.V2NIM_TEAM_TYPE_NORMAL,
const postscript = "postscript"
await nim.teamService.applyJoinTeam(teamId, teamType, postscript)
}
catch (err) {
}
接受入群申请
若群组的加入模式 V2NIMTeam.joinMode
为 V2NIM_TEAM_JOIN_MODE_APPLY
,那么需要群主或者群管理员同意才能加入群组。
群主或管理员收到入群申请通知后,可以调用 acceptJoinApplication
方法接受入群申请。
Android
javavoid acceptJoinApplication(V2NIMTeamJoinActionInfo applicationInfo,V2NIMSuccessCallback<Void> success, V2NIMFailureCallback failure);
iOS
objective-c- (void)acceptJoinApplication:(V2NIMTeamJoinActionInfo *)applicationInfo
success:(nullable V2NIMSuccessCallback)success
failure:(nullable V2NIMFailureCallback)failure;
macOS/Windows
cppvirtual void acceptJoinApplication(V2NIMTeamJoinActionInfo applicationInfo, V2NIMSuccessCallback<void> success, V2NIMFailureCallback failure) = 0;
Web/uni-app/小程序
typescriptacceptJoinApplication(applicationInfo: V2NIMTeamJoinActionInfo): Promise<void>
参数名称 |
类型 |
是否必填 |
默认值 |
描述 |
applicationInfo |
V2NIMTeamJoinActionInfo |
是 |
- |
申请入群信息。其中 actionType 必须为 V2NIM_TEAM_JOIN_ACTION_TYPE_APPLICATION ,否则返回 191004 参数错误。 |
Harmony
typescriptacceptJoinApplication(applicationInfo: V2NIMTeamJoinActionInfo): Promise<void>
参数名称 |
类型 |
是否必填 |
默认值 |
描述 |
applicationInfo |
V2NIMTeamJoinActionInfo |
是 |
- |
申请入群信息。其中 actionType 必须为 V2NIM_TEAM_JOIN_ACTION_TYPE_APPLICATION ,否则返回 191004 参数错误。 |
V2NIMTeamJoinActionInfo
参数说明:
如果您的应用平台为 Android,则需要调用对应的成员函数获取对应参数。
Android
javaV2NIMTeamService v2TeamService = NIMClient.getService(V2NIMTeamService.class);
V2NIMTeamJoinActionInfo applicationInfo = getApplicationInfo();
v2TeamService.acceptJoinApplication(applicationInfo, result -> {
}, error -> {
});
iOS
objective-c[[[NIMSDK sharedSDK] v2TeamService] acceptJoinApplication:info success: failure:^(V2NIMError * _Nonnull error) {
// 接受入群申请失败
}]
macOS/Windows
cppV2NIMTeamJoinActionInfo applicationInfo;
teamService.acceptJoinApplication(
applicationInfo,
[]() {
},
[](V2NIMError error) {
});
Web/uni-app/小程序
typescriptawait nim.V2NIMTeamService.acceptJoinApplication(
{
"teamId": "123456",
"teamType": 1,
"operatorAccountId": "accountId1",
"actionType": 0
}
)
Harmony
typescripttry{
const applicationInfo: V2NIMTeamJoinActionInfo = {
actionType: V2NIMTeamJoinActionType.V2NIM_TEAM_JOIN_ACTION_TYPE_APPLICATION,
teamId: "123456",
teamType: V2NIMTeamType.V2NIM_TEAM_TYPE_NORMAL,
operatorAccountId: "account1",
}
await nim.teamService.acceptJoinApplication(applicationInfo)
}
catch (err) {
}
拒绝入群申请
群主或管理员收到入群申请通知后,可以调用 rejectJoinApplication
方法拒绝入群申请。
Web/uni-app/小程序
参数名称 |
类型 |
是否必填 |
默认值 |
描述 |
applicationInfo |
V2NIMTeamJoinActionInfo |
是 |
- |
申请入群信息。其中 actionType 必须为 V2NIM_TEAM_JOIN_ACTION_TYPE_APPLICATION ,否则返回 191004 参数错误。 |
postscript |
string |
否 |
null |
拒绝入群申请附言。 |
Harmony
参数名称 |
类型 |
是否必填 |
默认值 |
描述 |
applicationInfo |
V2NIMTeamJoinActionInfo |
是 |
- |
申请入群信息。其中 actionType 必须为 V2NIM_TEAM_JOIN_ACTION_TYPE_APPLICATION ,否则返回 191004 参数错误。 |
postscript |
string |
否 |
null |
拒绝入群申请附言。 |
V2NIMTeamJoinActionInfo
参数说明请参见接受入群申请。
Android
javaV2NIMTeamService v2TeamService = NIMClient.getService(V2NIMTeamService.class);
V2NIMTeamJoinActionInfo applicationInfo = getApplicationInfo();
String postscript = "test";
v2TeamService.rejectInvitation(applicationInfo, postscript, result -> {
}, error -> {
});
iOS
objective-c[[[NIMSDK sharedSDK] v2TeamService] rejectJoinApplication:@"teamId"
teamType:V2NIM_TEAM_TYPE_NORMAL
applyAccountId:@"accountId"
postscript:@"test"
success:^{
}
failure:^(V2NIMError * _Nonnull error) {
}];
macOS/Windows
cppV2NIMTeamJoinActionInfo applicationInfo;
teamService.rejectJoinApplication(
applicationInfo,
"postscript",
[]() {
},
[](V2NIMError error) {
});
Web/uni-app/小程序
typescriptawait nim.V2NIMTeamService.rejectJoinApplication(
{
"teamId": "123456",
"teamType": 1,
"operatorAccountId": "accountId1",
"actionType": 0
},
"test postscript"
)
Harmony
typescripttry{
const applicationInfo: V2NIMTeamJoinActionInfo = {
actionType: V2NIMTeamJoinActionType.V2NIM_TEAM_JOIN_ACTION_TYPE_APPLICATION,
teamId: "123456",
teamType: V2NIMTeamType.V2NIM_TEAM_TYPE_NORMAL,
operatorAccountId: "account1",
}
const postscript = "postscript"
await nim.teamService.rejectJoinApplication(applicationInfo, postscript)
}
catch (err) {
}
转让群组
通过调用 transferTeamOwner
方法将群组转让给其他成员。
本地端或多端同步转让群主身份成功后:
- 群主身份转移,所有群成员会收到群组通知消息,通知消息类型为
V2NIMMessageNotificationType.V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_OWNER_TRANSFER(6)
;以及群信息更新回调 onTeamInfoUpdated
和群成员信息变更回调 onTeamMemberInfoUpdated
。
- 如果转让群的同时离开群,那么相当于同时调用
leaveTeam
主动退群。所有群成员会收到群组通知消息,通知消息类型为 V2NIMMessageNotificationType.V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_LAVE(2)
;以及群成员退出群组回调 onTeamMemberLeft
。
只有群主才有转让群组的权限。
Android
参数名称 |
类型 |
是否必填 |
默认值 |
描述 |
teamId |
String |
是 |
- |
群组 ID。如果为空、不合法、不存在则返回 191004 参数错误。 |
teamType |
V2NIMTeamType |
是 |
- |
群组类型,包括高级群和超大群。 |
accountId |
String |
是 |
- |
新群主账号,如果为空、不合法、不存在,或与操作者账号相同,则返回 191004 参数错误。 |
leave |
boolean |
否 |
false |
转让群主身份后,是否同时退出该群:true:转让群主身份后,同时退出该群。false:转让群主身份后留在群中,成员角色从群主转变为普通成员。 |
success |
V2NIMSuccessCallback |
是 |
- |
转让成功回调。 |
failure |
V2NIMFailureCallback |
是 |
- |
转让失败回调,返回错误码。 |
iOS
参数名称 |
类型 |
是否必填 |
默认值 |
描述 |
teamId |
NSString * |
是 |
- |
群组 ID。如果为空、不合法、不存在则返回 191004 参数错误。 |
teamType |
V2NIMTeamType |
是 |
- |
群组类型,包括高级群和超大群。 |
accountId |
NSString * |
是 |
- |
新群主账号,如果为空、不合法、不存在,或与操作者账号相同,则返回 191004 参数错误。 |
leave |
BOOL |
否 |
false |
转让群主身份后,是否同时退出该群:true:转让群主身份后,同时退出该群。false:转让群主身份后留在群中,成员角色从群主转变为普通成员。 |
success |
V2NIMSuccessCallback |
是 |
- |
转让成功回调。 |
failure |
V2NIMFailureCallback |
是 |
- |
转让失败回调,返回错误码。 |
macOS/Windows
参数名称 |
类型 |
是否必填 |
默认值 |
描述 |
teamId |
nstd::string |
是 |
- |
群组 ID。如果为空、不合法、不存在则返回 191004 参数错误。 |
teamType |
V2NIMTeamType |
是 |
- |
群组类型,包括高级群和超大群。 |
accountId |
nstd::string |
是 |
- |
新群主账号,如果为空、不合法、不存在,或与操作者账号相同,则返回 191004 参数错误。 |
leave |
bool |
否 |
false |
转让群主身份后,是否同时退出该群:true:转让群主身份后,同时退出该群。false:转让群主身份后留在群中,成员角色从群主转变为普通成员。 |
success |
V2NIMSuccessCallback |
是 |
- |
转让成功回调。 |
failure |
V2NIMFailureCallback |
是 |
- |
转让失败回调,返回错误码。 |
Web/uni-app/小程序
参数名称 |
类型 |
是否必填 |
默认值 |
描述 |
teamId |
string |
是 |
- |
群组 ID。如果为空、不合法、不存在则返回 191004 参数错误。 |
teamType |
V2NIMTeamType |
是 |
- |
群组类型,包括高级群和超大群。 |
accountId |
string |
是 |
- |
新群主账号,如果为空、不合法、不存在,或与操作者账号相同,则返回 191004 参数错误。 |
leave |
boolean |
否 |
false |
转让群主身份后,是否同时退出该群:true:转让群主身份后,同时退出该群。false:转让群主身份后留在群中,成员角色从群主转变为普通成员。 |
Harmony
参数名称 |
类型 |
是否必填 |
默认值 |
描述 |
teamId |
string |
是 |
- |
群组 ID。如果为空、不合法、不存在则返回 191004 参数错误。 |
teamType |
V2NIMTeamType |
是 |
- |
群组类型,包括高级群和超大群。 |
accountId |
string |
是 |
- |
新群主账号,如果为空、不合法、不存在,或与操作者账号相同,则返回 191004 参数错误。 |
leave |
boolean |
否 |
false |
转让群主身份后,是否同时退出该群:true:转让群主身份后,同时退出该群。false:转让群主身份后留在群中,成员角色从群主转变为普通成员。 |
Android
javaV2TeamService v2TeamService = NIMClient.getService(V2TeamService.class);
String teamId = "123456";
V2TeamType teamType = V2TeamType.NORMAL;
String account = "test";
boolean leave = false;
v2TeamService.transferTeamOwner(teamId, teamType, account, leave, result -> {
}, error -> {
});
iOS
objective-c[[[NIMSDK sharedSDK] v2TeamService] transferTeamOwner:@"teamId" teamType:V2NIM_TEAM_TYPE_NORMAL accountId:@"accountId" leave:YES success: failure:^(V2NIMError * _Nonnull error) {
// 转移群组群主失败
}]
macOS/Windows
cppteamService.transferTeamOwner(
"teamId",
V2NIM_TEAM_TYPE_NORMAL,
"accountId",
false,
[]() {
},
[](V2NIMError error) {
});
Web/uni-app/小程序
typescriptawait nim.V2NIMTeamService.transferTeamOwner("123456", 1, "accountId1", true)
Harmony
typescripttry {
const teamId: string = "123456"
const teamType: V2NIMTeamType = V2NIMTeamType.V2NIM_TEAM_TYPE_NORMAL
const newAccountId: string = "aaa"
const isLeave: boolean = true
await nim.teamService.transferTeamOwner(teamId, teamType, newAccountId, isLeave)
} catch (error) {
}
退出群组
退出群组可以通过以下两种方式:
- 群主或群组管理员将群成员踢出群组。
- 用户主动退出群组。
将群成员踢出群组
通过调用 kickMember
方法批量移除群成员。
本地端或多端同步踢出群组成员成功后:
- 只有群主和管理员才能将成员踢出群组。
- 管理员不能踢群主和其他管理员。
iOS
参数名称 |
类型 |
是否必填 |
默认值 |
描述 |
teamId |
NSString * |
是 |
- |
群组 ID。如果为空、不合法、不存在则返回 191004 参数错误。 |
teamType |
V2NIMTeamType |
是 |
- |
群组类型,包括高级群和超大群。 |
memberAccountIds |
NSArray<NSString *> * |
是 |
- |
踢出群组的成员账号(accountId)列表,不可为空,否则返回 191004 参数错误。 |
success |
V2NIMSuccessCallback |
是 |
- |
踢出成功回调。 |
failure |
V2NIMFailureCallback |
是 |
- |
踢出失败回调,返回错误码。 |
Web/uni-app/小程序
参数名称 |
类型 |
是否必填 |
默认值 |
描述 |
teamId |
string |
是 |
- |
群组 ID。如果为空、不合法、不存在则返回 191004 参数错误。 |
teamType |
V2NIMTeamType |
是 |
- |
群组类型,包括高级群和超大群。 |
memberAccountIds |
string[] |
是 |
- |
踢出群组的成员账号(accountId)列表,不可为空,否则返回 191004 参数错误。 |
Harmony
参数名称 |
类型 |
是否必填 |
默认值 |
描述 |
teamId |
string |
是 |
- |
群组 ID。如果为空、不合法、不存在则返回 191004 参数错误。 |
teamType |
V2NIMTeamType |
是 |
- |
群组类型,包括高级群和超大群。 |
memberAccountIds |
string[] |
是 |
- |
踢出群组的成员账号(accountId)列表,不可为空,否则返回 191004 参数错误。 |
Android
javaV2NIMTeamService v2TeamService = NIMClient.getService(V2NIMTeamService.class);
String teamId = "123456";
V2NIMTeamType teamType = V2NIMTeamType.V2NIM_TEAM_TYPE_NORMAL;
List<String> memberAccountIds = new ArrayList<>();
memberAccountIds.add("test1");
memberAccountIds.add("test2");
v2TeamService.kickMember(teamId,teamType, memberAccountIds, result -> {
}, error -> {
});
iOS
objective-c[[[NIMSDK sharedSDK] v2TeamService] kickMember:@"teamId" teamType:V2NIM_TEAM_TYPE_NORMAL memberAccountIds:@[@"accountId1"] success: failure:^(V2NIMError * _Nonnull error) {
// 踢出群组成员失败
}]
macOS/Windows
cppnstd::vector<nstd::string> memberAccountIds;
memberAccountIds.push_back("account1");
teamService.kickMember(
"teamId",
V2NIM_TEAM_TYPE_NORMAL,
memberAccountIds,
[]() {
},
[](V2NIMError error) {
});
Web/uni-app/小程序
typescriptawait nim.V2NIMTeamService.kickMember("123456", 1, ["accountId1"])
Harmony
typescripttry{
const teamId = "123456",
const teamType = V2NIMTeamType.V2NIM_TEAM_TYPE_NORMAL,
const accounts = ["aaa", "bbb"]
await nim.teamService.kickMember(teamId, teamType, accounts)
}
catch (err) {
}
主动退群
通过调用 leaveTeam
方法主动退出群组。
本地端或多端同步退出群组成功后:
- 本端 SDK 会触发退出群组回调
onTeamLeft
。
- 群组内所有成员会收到通知消息,通知消息类型为
V2NIMMessageNotificationType.V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_LAVE(2)
;以及 onTeamMemberLeft
回调。
除群主外,其他用户均可以直接主动退群,群主需先转让群主身份后才能退群。
Web/uni-app/小程序
参数名称 |
类型 |
是否必填 |
默认值 |
描述 |
teamId |
string |
是 |
- |
群组 ID。如果为空、不合法、不存在则返回 191004 参数错误。 |
teamType |
V2NIMTeamType |
是 |
- |
群组类型,包括高级群和超大群。 |
Harmony
参数名称 |
类型 |
是否必填 |
默认值 |
描述 |
teamId |
string |
是 |
- |
群组 ID。如果为空、不合法、不存在则返回 191004 参数错误。 |
teamType |
V2NIMTeamType |
是 |
- |
群组类型,包括高级群和超大群。 |
Android
javaV2NIMTeamService v2TeamService = NIMClient.getService(V2NIMTeamService.class);
String teamId = "123456";
V2NIMTeamType teamType = V2NIMTeamType.V2NIM_TEAM_TYPE_NORMAL;
v2TeamService.leaveTeam(teamId,teamType, result -> {
}, error -> {
});
iOS
objective-c[[[NIMSDK sharedSDK] v2TeamService] leaveTeam:@"teamId" teamType:V2NIM_TEAM_TYPE_NORMAL success: failure:^(V2NIMError * _Nonnull error) {
// 离开群组失败
}]
macOS/Windows
cppteamService.leaveTeam(
"teamId",
V2NIM_TEAM_TYPE_NORMAL,
[]() {
},
[](V2NIMError error) {
}
);
Web/uni-app/小程序
typescriptawait nim.V2NIMTeamService.leaveTeam("123456", 1)
Harmony
typescriptconst teamId = "123456"
const teamType: V2NIMTeamType = V2NIMTeamType.V2NIM_TEAM_TYPE_NORMAL
try {
await nim.teamService.leaveTeam(teamId, teamType)
} catch (error) {
}
解散群组
通过调用 dismissTeam
方法解散群组。
本地端或多端同步解散群组成功后:
- 本地端 SDK 会返回删除成功回调。
onTeamDismissed
。
- 群组内所有成员会收到通知消息,通知消息类型为
V2NIMMessageNotificationType.V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_DISMISS(4)
。
只有群主才能解散群组。
Web/uni-app/小程序
参数名称 |
类型 |
是否必填 |
默认值 |
描述 |
teamId |
string |
是 |
- |
群组 ID。如果为空、不合法、不存在则返回 191004 参数错误。 |
teamType |
V2NIMTeamType |
是 |
- |
群组类型,包括高级群和超大群。 |
Harmony
参数名称 |
类型 |
是否必填 |
默认值 |
描述 |
teamId |
string |
是 |
- |
群组 ID。如果为空、不合法、不存在则返回 191004 参数错误。 |
teamType |
V2NIMTeamType |
是 |
- |
群组类型,包括高级群和超大群。 |
Android
javaV2NIMTeamService v2TeamService = NIMClient.getService(V2NIMTeamService.class);
String teamId = "123456";
V2NIMTeamType teamType = V2NIMTeamType.V2NIM_TEAM_TYPE_NORMAL;
v2TeamService.dismissTeam(teamId,teamType, result -> {
}, error -> {
});
iOS
objective-c[[[NIMSDK sharedSDK] v2TeamService] dismissTeam:@"teamId" teamType:V2NIM_TEAM_TYPE_NORMAL success: failure:^(V2NIMError * _Nonnull error) {
// 解散群组失败
}]
macOS/Windows
cppteamService.dismissTeam(
"teamId",
V2NIM_TEAM_TYPE_NORMAL,
[]() {
},
[](V2NIMError error) {
});
Web/uni-app/小程序
typescriptawait nim.V2NIMTeamService.dismissTeam("123456", 1)
Harmony
typescriptconst teamId = "123456"
const teamType: V2NIMTeamType = V2NIMTeamType.V2NIM_TEAM_TYPE_NORMAL
try {
await nim.teamService.dismissTeam(teamId, teamType)
} catch (error) {
}
修改群组信息
通过调用 updateTeamInfo
方法修改群组信息。可更新的群组属性请参见 V2NIMUpdateTeamInfoParams
。
本地端或多端同步更新成功后,群组内所有成员会收到群组信息变更回调 onTeamInfoUpdated
,以及群组信息更新的通知消息,通知消息类型为 V2NIM_MESSAGE_NOTIFICATION_TYPE_TEAM_UPDATE_TINFO(3)
。
- 修改群组资料需要权限,通过
V2NIMTeamUpdateInfoMode
来控制权限,若为 V2NIM_TEAM_UPDATE_INFO_MODE_MANAGER(0)
,那么只有群主或管理员才能修改群组资料;若为 V2NIM_TEAM_UPDATE_INFO_MODE_ALL(1)
,则群组内所有成员都可以修改群组资料。
- 修改群组扩展字段也需要权限,通过
V2NIMTeamUpdateExtensionMode
来控制权限,若为 V2NIM_TEAM_UPDATE_EXTENSION_MODE_MANAGER(0)
,那么只有群主或管理员才能修改群组扩展字段;若为 V2NIM_TEAM_UPDATE_EXTENSION_MODE_ALL(1)
,则群组内所有成员都可以修改群组扩展字段。
Android
javaV2NIMTeamService v2TeamService = NIMClient.getService(V2NIMTeamService.class);
String teamId = "123456";
V2NIMTeamType teamType = V2NIMTeamType.V2NIM_TEAM_TYPE_NORMAL;
V2NIMUpdateTeamInfoParams updateTeamInfoParams = new V2NIMUpdateTeamInfoParams();
updateTeamInfoParams.setName("test_update");
updateTeamInfoParams.setMemberLimit(100);
updateTeamInfoParams.setIntro("test");
updateTeamInfoParams.setAnnouncement("test");
updateTeamInfoParams.setAvatar("http://test.png");
updateTeamInfoParams.setServerExtension("test");
updateTeamInfoParams.setAgreeMode(V2NIMTeamAgreeMode.V2NIM_TEAM_AGREE_MODE_AUTH);
updateTeamInfoParams.setJoinMode(V2NIMTeamJoinMode.V2NIM_TEAM_JOIN_MODE_INVITE);
updateTeamInfoParams.setInviteMode(V2NIMTeamInviteMode.V2NIM_TEAM_INVITE_MODE_MANAGER);
updateTeamInfoParams.setUpdateInfoMode(V2NIMTeamUpdateInfoMode.V2NIM_TEAM_UPDATE_INFO_MODE_MANAGER);
updateTeamInfoParams.setUpdateExtensionMode(V2NIMTeamUpdateExtensionMode.V2NIM_TEAM_UPDATE_EXTENSION_MODE_MANAGER);
V2NIMAntispamConfig antispamConfig = null;
v2TeamService.updateTeamInfo(teamId,teamType, updateTeamInfoParams, antispamConfig, result -> {
}, error -> {
});
iOS
objective-c[[[NIMSDK sharedSDK] v2TeamService] updateTeamInfo:@"teamId" teamType:V2NIM_TEAM_TYPE_NORMAL updateTeamInfoParams:infoParams antispamConfig:config success: failure:^(V2NIMError * _Nonnull error) {
// 修改群组信息失败
}]
macOS/Windows
cppV2NIMUpdateTeamInfoParams updateTeamInfoParams;
updateTeamInfoParams.name = "new team name";
V2NIMAntispamConfig antispamConfig;
teamService.updateTeamInfo(
"teamId",
V2NIM_TEAM_TYPE_NORMAL,
updateTeamInfoParams,
antispamConfig,
[]() {
},
[](V2NIMError error) {
});
Web/uni-app/小程序
typescriptawait nim.V2NIMTeamService.updateTeamInfo(
"123456",
1,
{
"name": "群名1",
"memberLimit": 200,
"joinMode": 0,
"agreeMode": 0,
"inviteMode": 0,
"updateInfoMode": 0,
"updateExtensionMode": 0,
"chatBannedMode": 0
}
)
Harmony
typescripttry {
console.info(`-----------update team----------- \n`)
const params: V2NIMUpdateTeamInfoParams = {
name: this.name,
memberLimit: this.memberLimit,
intro: this.intro,
announcement: this.announcement,
avatar: this.avatar,
serverExtension: this.serverExtension,
joinMode: this.joinMode,
agreeMode: this.agreeMode,
inviteMode: this.inviteMode,
updateInfoMode: this.updateInfoMode,
updateExtensionMode: this.updateExtensionMode,
}
await nim.teamService.updateTeamInfo(this.teamId, this.teamType, params )
} catch (error) {
}
获取群组信息
获取自己加入的所有群组
通过调用 getJoinedTeamList
方法获取自己加入的所有群组。
如果群组数据同步已开始,请在群组数据同步结束后进行该操作,否则可能获取不到完整数据。
示例代码如下:
Android
javaV2NIMTeamService v2TeamService = NIMClient.getService(V2NIMTeamService.class);
List<V2NIMTeamType> teamTypes = new ArrayList<>();
teamTypes.add(V2NIMTeamType.V2NIM_TEAM_TYPE_NORMAL);
teamTypes.add(V2NIMTeamType.V2NIM_TEAM_TYPE_SUPER);
v2TeamService.getJoinedTeamList(teamTypes, result -> {
}, error -> {
});
iOS
objective-c[[[NIMSDK sharedSDK] v2TeamService] getJoinedTeamList:nil success:^(NSArray<V2NIMTeam *> * _Nonnull teamList) {
// 获取当前已经加入的群组列表成功
} failure:^(V2NIMError * _Nonnull error) {
// 获取当前已经加入的群组列表失败
}]
macOS/Windows
cppnstd::vector<V2NIMTeamType> teamTypes;
teamTypes.push_back(V2NIM_TEAM_TYPE_NORMAL);
teamService.getJoinedTeamList(
teamTypes,
[](nstd::vector<V2NIMTeam> teamList) {
},
[](V2NIMError error) {
}
);
Web/uni-app/小程序
typescriptawait nim.V2NIMTeamService.getJoinedTeamList([1])
Harmony
typescripttry {
const teamTypes: V2NIMTeamType[] = [V2NIMTeamType.V2NIM_TEAM_TYPE_NORMAL, V2NIMTeamType.V2NIM_TEAM_TYPE_SUPER]
const teams: V2NIMTeam[] = await nim.teamService.getJoinedTeamList(this.teamType)
} catch (e) {
}
获取自己加入的群组数量
通过调用 getJoinedTeamCount
方法查询自己加入的群组数量。
- 该方法为同步。
- 如果群组数据同步已开始,请在群组数据同步结束后进行该操作,否则可能获取不到完整数据。
示例代码如下:
Android
javaV2NIMTeamService v2TeamService = NIMClient.getService(V2NIMTeamService.class);
List<V2NIMTeamType> teamTypes = new ArrayList<>();
teamTypes.add(V2NIMTeamType.V2NIM_TEAM_TYPE_NORMAL);
teamTypes.add(V2NIMTeamType.V2NIM_TEAM_TYPE_SUPER);
int joinedTeamCount = v2TeamService.getJoinedTeamCount(teamTypes);
iOS
objective-cNSInteger allJoinedTeamCount = ;
macOS/Windows
cppnstd::vector<V2NIMTeamType> teamTypes;
teamTypes.push_back(V2NIM_TEAM_TYPE_NORMAL);
auto count = teamService.getJoinedTeamCount(teamTypes);
Web/uni-app/小程序
typescriptnim.V2NIMTeamService.getJoinedTeamCount([1])
Harmony
typescripttry {
const teamTypes: V2NIMTeamType[] = [V2NIMTeamType.V2NIM_TEAM_TYPE_NORMAL, V2NIMTeamType.V2NIM_TEAM_TYPE_SUPER]
const count: number = await nim.teamService.getJoinedTeamCount(this.teamType)
} catch (e) {
}
获取单个群组信息
通过调用 getTeamInfo
方法获取指定群组信息。
如果群组数据同步已开始,请在群组数据同步结束后进行该操作,否则可能获取不到完整数据。
示例代码如下:
Android
javaV2NIMTeamService v2TeamService = NIMClient.getService(V2NIMTeamService.class);
String teamId = "123456";
V2NIMTeamType teamType = V2NIMTeamType.V2NIM_TEAM_TYPE_NORMAL;
v2TeamService.getTeamInfo(teamId,teamType, result -> {
}, error -> {
});
iOS
objective-c[[[NIMSDK sharedSDK] v2TeamService] getTeamInfo:@"teamId" teamType:V2NIM_TEAM_TYPE_NORMAL success:^(V2NIMTeam * _Nonnull team) {
// 获取群组信息成功
} failure:^(V2NIMError * _Nonnull error) {
// 获取群组信息失败
}]
macOS/Windows
cppteamService.getTeamInfo(
"teamId",
V2NIM_TEAM_TYPE_NORMAL,
[](V2NIMTeam team) {
},
[](V2NIMError error) {
});
Web/uni-app/小程序
typescriptawait nim.V2NIMTeamService.getTeamInfo("123456", 1)
Harmony
typescriptconst teamId = "123456"
const teamType: V2NIMTeamType = V2NIMTeamType.V2NIM_TEAM_TYPE_NORMAL
try {
const team: V2NIMTeam = await nim.teamService.getTeamInfo(teamId, teamType)
} catch (error) {
}
批量获取指定群组
通过调用 getTeamInfoByIds
方法,根据群组 ID 批量获取群组信息列表(包含已退出或已被解散的群组)。
SDK 获取策略如下:
如果群组数据同步已开始,请在群组数据同步结束后进行该操作,否则可能获取不到完整数据。
示例代码如下:
Android
javaV2NIMTeamService v2TeamService = NIMClient.getService(V2NIMTeamService.class);
List<String> teamIds = new ArrayList<>();
teamIds.add("123456");
teamIds.add("654321");
V2NIMTeamType teamType = V2NIMTeamType.V2NIM_TEAM_TYPE_NORMAL;
v2TeamService.getTeamInfoByIds(teamIds,teamType, result -> {
}, error -> {
});
iOS
objective-c[[[NIMSDK sharedSDK] v2TeamService]getTeamInfoByIds:@[@"teamId1",@"teamId2"] teamType:V2NIM_TEAM_TYPE_NORMAL success:^(NSArray<V2NIMTeam *> * _Nonnull teamList) {
// 根据群组ID获取群组信息成功
} failure:^(V2NIMError * _Nonnull error) {
// 根据群组ID获取群组信息失败
}]
macOS/Windows
cppnstd::vector<nstd::string> teamIds;
teamIds.push_back("teamId1");
teamIds.push_back("teamId2");
teamService.getTeamInfoByIds(
teamIds,
V2NIM_TEAM_TYPE_NORMAL,
[](nstd::vector<V2NIMTeam> teamList) {
},
[](V2NIMError error) {
});
Web/uni-app/小程序
typescriptawait nim.V2NIMTeamService.getTeamInfoByIds(["123456"], 1)
Harmony
typescriptconst teamIds = ["123456", "7890"]
const teamType: V2NIMTeamType = V2NIMTeamType.V2NIM_TEAM_TYPE_NORMAL
try {
const teams: V2NIMTeam[] = await nim.teamService.getTeamInfoByIds(teamIds, teamType)
} catch (error) {
}
根据关键字搜索群组
通过调用 searchTeamByKeyword
方法,根据关键词搜索群组信息。
- 关键词仅匹配群组名称。
- 不检验群组的有效性、是否加入。
- 仅查询本地数据。
如果群组数据同步已开始,请在群组数据同步结束后进行该操作,否则可能获取不到完整数据。
示例代码如下:
Android
JavaString keyword = "搜索关键字" ;
NIMClient.getService(V2NIMTeamService.class).searchTeamByKeyword(keyword,
new V2NIMSuccessCallback<List<V2NIMTeam>>() {
@Override
public void onSuccess(List<V2NIMTeam> v2NIMTeams) {
}
},
new V2NIMFailureCallback() {
@Override
public void onFailure(V2NIMError error) {
}
});
iOS
Objective-C- (void)searchTeam
{
[NIMSDK.sharedSDK.v2TeamService searchTeamByKeyword:@"keyword" success:^(NSArray<V2NIMTeam *> * _Nonnull teamList) {
} failure:^(V2NIMError * _Nonnull error) {
}];
}
Windows/macOS
c++teamService.searchTeamByKeyword(
"keyword",
[](nstd::vector<V2NIMTeam> teamList) {
},
[](V2NIMError error) {
});
Web/uni-app/小程序
TypeScriptconst teams = await nim.V2NIMTeamService.searchTeamByKeyword('keyword')
参考信息