社群成员管理
功能简介
ZIM SDK 提供了完整的社群成员管理能力,支持以下功能:
- 邀请用户加入社群
- 踢出社群成员
- 更新成员角色
- 转让社群所有权
- 查询社群成员列表
- 查询指定成员信息
- 设置成员禁言状态
- 监听成员状态与信息变更
前提条件
- 请参考 实现基本消息收发 完成 ZIM SDK 获取、初始化和用户登录。
- 请参考 使用 Token 鉴权 实现用户鉴权登录。
- 社群功能需要 ZIM SDK 3.0.0 及以上版本。
- 社群功能为旗舰版功能,使用前请联系 ZEGO 技术支持开通。
- 社群功能的 Token 生成方式与其他 ZIM 功能一致,无需额外权限声明。
邀请用户加入社群
调用 inviteUsersIntoCommunity 接口,批量邀请用户加入社群。邀请无需对方同意,被邀请用户直接成为社群成员。被邀请用户必须已在系统中注册。 单次调用接口最多一次邀请 100 名用户加入社群。
操作失败的用户信息将通过 errorUserList 返回。
示例代码
import im.zego.zim.ZIM;
import im.zego.zim.callback.ZIMCommunityUsersInvitedCallback;
import im.zego.zim.entity.ZIMError;
import im.zego.zim.entity.ZIMErrorUserInfo;
import im.zego.zim.enums.ZIMErrorCode;
ArrayList<String> userIDs = new ArrayList<>();
userIDs.add("user_1");
userIDs.add("user_2");
zim.inviteUsersIntoCommunity(userIDs, communityID, new ZIMCommunityUsersInvitedCallback() {
@Override
public void onCommunityUsersInvited(String communityID, ArrayList<ZIMErrorUserInfo> errorUserList, ZIMError errorInfo) {
if (errorInfo.code == ZIMErrorCode.SUCCESS) {
// 邀请完成,errorUserList 中列出邀请失败的用户信息
}
}
});import im.zego.zim.ZIM;
import im.zego.zim.callback.ZIMCommunityUsersInvitedCallback;
import im.zego.zim.entity.ZIMError;
import im.zego.zim.entity.ZIMErrorUserInfo;
import im.zego.zim.enums.ZIMErrorCode;
ArrayList<String> userIDs = new ArrayList<>();
userIDs.add("user_1");
userIDs.add("user_2");
zim.inviteUsersIntoCommunity(userIDs, communityID, new ZIMCommunityUsersInvitedCallback() {
@Override
public void onCommunityUsersInvited(String communityID, ArrayList<ZIMErrorUserInfo> errorUserList, ZIMError errorInfo) {
if (errorInfo.code == ZIMErrorCode.SUCCESS) {
// 邀请完成,errorUserList 中列出邀请失败的用户信息
}
}
});示例代码
NSArray<NSString *> *userIDs = @[@"user_1", @"user_2"];
[zim inviteUsersIntoCommunity:userIDs communityID:communityID callback:^(NSString * _Nonnull communityID, NSArray<ZIMErrorUserInfo *> * _Nonnull errorUserList, ZIMError * _Nonnull errorInfo) {
if (errorInfo.code == ZIMErrorCodenoneSuccess) {
// 邀请完成
}
}];NSArray<NSString *> *userIDs = @[@"user_1", @"user_2"];
[zim inviteUsersIntoCommunity:userIDs communityID:communityID callback:^(NSString * _Nonnull communityID, NSArray<ZIMErrorUserInfo *> * _Nonnull errorUserList, ZIMError * _Nonnull errorInfo) {
if (errorInfo.code == ZIMErrorCodenoneSuccess) {
// 邀请完成
}
}];示例代码
std::vector<std::string> userIDs = {"user_1", "user_2"};
zim_->inviteUsersIntoCommunity(userIDs, communityID,
[=](const std::string &communityID,
const std::vector<zim::ZIMErrorUserInfo> &errorUserList,
const zim::ZIMError &errorInfo) {
if (errorInfo.code == zim::ZIM_ERROR_CODE_SUCCESS) {
// 邀请完成
}
});std::vector<std::string> userIDs = {"user_1", "user_2"};
zim_->inviteUsersIntoCommunity(userIDs, communityID,
[=](const std::string &communityID,
const std::vector<zim::ZIMErrorUserInfo> &errorUserList,
const zim::ZIMError &errorInfo) {
if (errorInfo.code == zim::ZIM_ERROR_CODE_SUCCESS) {
// 邀请完成
}
});示例代码
const userIDs = ['user_1', 'user_2'];
zim.inviteUsersIntoCommunity(userIDs, communityID)
.then((result: ZIMCommunityUsersInvitedResult) => {
// result.errorUserList 列出邀请失败的用户
})
.catch((err: ZIMError) => {
// 操作失败
});const userIDs = ['user_1', 'user_2'];
zim.inviteUsersIntoCommunity(userIDs, communityID)
.then((result: ZIMCommunityUsersInvitedResult) => {
// result.errorUserList 列出邀请失败的用户
})
.catch((err: ZIMError) => {
// 操作失败
});示例代码
List<String> userIDs = ['user_1', 'user_2'];
try {
ZIMCommunityUsersInvitedResult result =
await ZIM.getInstance()!.inviteUsersIntoCommunity(userIDs, communityID);
// result.errorUserList 列出邀请失败的用户
} on PlatformException catch (onError) {
// 操作失败
}List<String> userIDs = ['user_1', 'user_2'];
try {
ZIMCommunityUsersInvitedResult result =
await ZIM.getInstance()!.inviteUsersIntoCommunity(userIDs, communityID);
// result.errorUserList 列出邀请失败的用户
} on PlatformException catch (onError) {
// 操作失败
}| 错误码 | 说明 | 处理建议 |
|---|---|---|
| 6001004 | 社群不存在 | 确认 communityID 是否正确 |
| 6001005 | 用户不在社群中 | 仅在特定场景出现,确认用户状态 |
| 6001007 | 社群权限错误 | 确认当前用户是否有邀请权限 |
踢出社群成员
调用 kickCommunityMembers 接口,批量将指定成员从社群中移除。 单次调用接口最多一次从社群踢出 100 名用户。
仅社群所有者和管理员可调用此接口。
示例代码
ArrayList<String> userIDs = new ArrayList<>();
userIDs.add("user_1");
userIDs.add("user_2");
zim.kickCommunityMembers(userIDs, communityID, new ZIMCommunityMembersKickedCallback() {
@Override
public void onCommunityMembersKicked(String communityID, ArrayList<ZIMErrorUserInfo> errorUserList, ZIMError errorInfo) {
if (errorInfo.code == ZIMErrorCode.SUCCESS) {
// 踢出完成,errorUserList 中列出操作失败的用户
}
}
});ArrayList<String> userIDs = new ArrayList<>();
userIDs.add("user_1");
userIDs.add("user_2");
zim.kickCommunityMembers(userIDs, communityID, new ZIMCommunityMembersKickedCallback() {
@Override
public void onCommunityMembersKicked(String communityID, ArrayList<ZIMErrorUserInfo> errorUserList, ZIMError errorInfo) {
if (errorInfo.code == ZIMErrorCode.SUCCESS) {
// 踢出完成,errorUserList 中列出操作失败的用户
}
}
});示例代码
NSArray<NSString *> *userIDs = @[@"user_1", @"user_2"];
[zim kickCommunityMembers:userIDs communityID:communityID callback:^(NSString * _Nonnull communityID, NSArray<ZIMErrorUserInfo *> * _Nonnull errorUserList, ZIMError * _Nonnull errorInfo) {
if (errorInfo.code == ZIMErrorCodenoneSuccess) {
// 踢出完成
}
}];NSArray<NSString *> *userIDs = @[@"user_1", @"user_2"];
[zim kickCommunityMembers:userIDs communityID:communityID callback:^(NSString * _Nonnull communityID, NSArray<ZIMErrorUserInfo *> * _Nonnull errorUserList, ZIMError * _Nonnull errorInfo) {
if (errorInfo.code == ZIMErrorCodenoneSuccess) {
// 踢出完成
}
}];示例代码
std::vector<std::string> userIDs = {"user_1", "user_2"};
zim_->kickCommunityMembers(userIDs, communityID,
[=](const std::string &communityID,
const std::vector<zim::ZIMErrorUserInfo> &errorUserList,
const zim::ZIMError &errorInfo) {
if (errorInfo.code == zim::ZIM_ERROR_CODE_SUCCESS) {
// 踢出完成
}
});std::vector<std::string> userIDs = {"user_1", "user_2"};
zim_->kickCommunityMembers(userIDs, communityID,
[=](const std::string &communityID,
const std::vector<zim::ZIMErrorUserInfo> &errorUserList,
const zim::ZIMError &errorInfo) {
if (errorInfo.code == zim::ZIM_ERROR_CODE_SUCCESS) {
// 踢出完成
}
});示例代码
const userIDs = ['user_1', 'user_2'];
zim.kickCommunityMembers(userIDs, communityID)
.then((result: ZIMCommunityMembersKickedResult) => {
// result.errorUserList 列出失败的用户
})
.catch((err: ZIMError) => {
// 操作失败
});const userIDs = ['user_1', 'user_2'];
zim.kickCommunityMembers(userIDs, communityID)
.then((result: ZIMCommunityMembersKickedResult) => {
// result.errorUserList 列出失败的用户
})
.catch((err: ZIMError) => {
// 操作失败
});示例代码
List<String> userIDs = ['user_1', 'user_2'];
try {
ZIMCommunityMembersKickedResult result =
await ZIM.getInstance()!.kickCommunityMembers(userIDs, communityID);
// result.errorUserList 列出失败的用户
} on PlatformException catch (onError) {
// 操作失败
}List<String> userIDs = ['user_1', 'user_2'];
try {
ZIMCommunityMembersKickedResult result =
await ZIM.getInstance()!.kickCommunityMembers(userIDs, communityID);
// result.errorUserList 列出失败的用户
} on PlatformException catch (onError) {
// 操作失败
}更新社群成员角色
调用 updateCommunityMemberRole 接口,修改指定成员在社群中的角色,如将普通成员设置为管理员。
仅社群所有者可调用此接口。
社群角色 1 为社群群主,2 为社群管理员,3 为社群普通成员。
示例代码
//ZIMCommunityMemberRole.OWNER = 社群群主,ZIMCommunityMemberRole.ADMIN = 社群管理员,ZIMCommunityMemberRole.MEMBER = 社群普通成员
zim.updateCommunityMemberRole(ZIMCommunityMemberRole.ADMIN, "target_user_id", communityID,
new ZIMCommunityMemberRoleUpdatedCallback() {
@Override
public void onCommunityMemberRoleUpdated(String communityID, String forUserID, ZIMCommunityMemberRole memberRole, ZIMError errorInfo) {
if (errorInfo.code == ZIMErrorCode.SUCCESS) {
// 角色更新成功
}
}
});//ZIMCommunityMemberRole.OWNER = 社群群主,ZIMCommunityMemberRole.ADMIN = 社群管理员,ZIMCommunityMemberRole.MEMBER = 社群普通成员
zim.updateCommunityMemberRole(ZIMCommunityMemberRole.ADMIN, "target_user_id", communityID,
new ZIMCommunityMemberRoleUpdatedCallback() {
@Override
public void onCommunityMemberRoleUpdated(String communityID, String forUserID, ZIMCommunityMemberRole memberRole, ZIMError errorInfo) {
if (errorInfo.code == ZIMErrorCode.SUCCESS) {
// 角色更新成功
}
}
});示例代码
// ZIMCommunityMemberRoleOwner = 群主(1)
// ZIMCommunityMemberRoleAdmin = 管理员(2)
// ZIMCommunityMemberRoleMember = 成员(3)
[zim updateCommunityMemberRole:ZIMCommunityMemberRoleAdmin forUserID:@"target_user_id" communityID:communityID callback:^(NSString * _Nonnull communityID, NSString * _Nonnull forUserID, ZIMCommunityMemberRole memberRole, ZIMError * _Nonnull errorInfo) {
if (errorInfo.code == ZIMErrorCodenoneSuccess) {
// 角色更新成功
}
}];// ZIMCommunityMemberRoleOwner = 群主(1)
// ZIMCommunityMemberRoleAdmin = 管理员(2)
// ZIMCommunityMemberRoleMember = 成员(3)
[zim updateCommunityMemberRole:ZIMCommunityMemberRoleAdmin forUserID:@"target_user_id" communityID:communityID callback:^(NSString * _Nonnull communityID, NSString * _Nonnull forUserID, ZIMCommunityMemberRole memberRole, ZIMError * _Nonnull errorInfo) {
if (errorInfo.code == ZIMErrorCodenoneSuccess) {
// 角色更新成功
}
}];示例代码
// ZIM_COMMUNITY_MEMBER_ROLE_ADMIN = 管理员
zim_->updateCommunityMemberRole(zim::ZIM_COMMUNITY_MEMBER_ROLE_ADMIN,
"target_user_id", communityID,
[=](const std::string &communityID,
const std::string &forUserID,
zim::ZIMCommunityMemberRole memberRole,
const zim::ZIMError &errorInfo) {
if (errorInfo.code == zim::ZIM_ERROR_CODE_SUCCESS) {
// 角色更新成功
}
});// ZIM_COMMUNITY_MEMBER_ROLE_ADMIN = 管理员
zim_->updateCommunityMemberRole(zim::ZIM_COMMUNITY_MEMBER_ROLE_ADMIN,
"target_user_id", communityID,
[=](const std::string &communityID,
const std::string &forUserID,
zim::ZIMCommunityMemberRole memberRole,
const zim::ZIMError &errorInfo) {
if (errorInfo.code == zim::ZIM_ERROR_CODE_SUCCESS) {
// 角色更新成功
}
});示例代码
// memberRole: 2 = 管理员,3 = 普通成员(具体取值参考枚举定义)
zim.updateCommunityMemberRole(2, 'target_user_id', communityID)
.then((result: ZIMCommunityMemberRoleUpdatedResult) => {
// 角色更新成功
})
.catch((err: ZIMError) => {
// 操作失败
});// memberRole: 2 = 管理员,3 = 普通成员(具体取值参考枚举定义)
zim.updateCommunityMemberRole(2, 'target_user_id', communityID)
.then((result: ZIMCommunityMemberRoleUpdatedResult) => {
// 角色更新成功
})
.catch((err: ZIMError) => {
// 操作失败
});示例代码
// ZIMCommunityMemberRole.manager = 管理员
try {
await ZIM.getInstance()!.updateCommunityMemberRole(
ZIMCommunityMemberRole.manager, 'target_user_id', communityID);
// 角色更新成功
} on PlatformException catch (onError) {
// 操作失败
}// ZIMCommunityMemberRole.manager = 管理员
try {
await ZIM.getInstance()!.updateCommunityMemberRole(
ZIMCommunityMemberRole.manager, 'target_user_id', communityID);
// 角色更新成功
} on PlatformException catch (onError) {
// 操作失败
}转让社群所有权
调用 transferCommunityOwner 接口,将当前社群的所有权转让给社群内的其他成员。转让后,原所有者将成为普通成员。
仅社群所有者可调用此接口。
示例代码
zim.transferCommunityOwner("new_owner_user_id", communityID,
new ZIMCommunityOwnerTransferredCallback() {
@Override
public void onCommunityOwnerTransferred(String communityID, String toUserID, ZIMError errorInfo) {
if (errorInfo.code == ZIMErrorCode.SUCCESS) {
// 转让成功
}
}
});zim.transferCommunityOwner("new_owner_user_id", communityID,
new ZIMCommunityOwnerTransferredCallback() {
@Override
public void onCommunityOwnerTransferred(String communityID, String toUserID, ZIMError errorInfo) {
if (errorInfo.code == ZIMErrorCode.SUCCESS) {
// 转让成功
}
}
});示例代码
[zim transferCommunityOwner:@"new_owner_user_id" communityID:communityID callback:^(NSString * _Nonnull communityID, NSString * _Nonnull toUserID, ZIMError * _Nonnull errorInfo) {
if (errorInfo.code == ZIMErrorCodenoneSuccess) {
// 转让成功
}
}];[zim transferCommunityOwner:@"new_owner_user_id" communityID:communityID callback:^(NSString * _Nonnull communityID, NSString * _Nonnull toUserID, ZIMError * _Nonnull errorInfo) {
if (errorInfo.code == ZIMErrorCodenoneSuccess) {
// 转让成功
}
}];示例代码
zim_->transferCommunityOwner("new_owner_user_id", communityID,
[=](const std::string &communityID,
const std::string &toUserID,
const zim::ZIMError &errorInfo) {
if (errorInfo.code == zim::ZIM_ERROR_CODE_SUCCESS) {
// 转让成功
}
});zim_->transferCommunityOwner("new_owner_user_id", communityID,
[=](const std::string &communityID,
const std::string &toUserID,
const zim::ZIMError &errorInfo) {
if (errorInfo.code == zim::ZIM_ERROR_CODE_SUCCESS) {
// 转让成功
}
});示例代码
zim.transferCommunityOwner('new_owner_user_id', communityID)
.then((result: ZIMCommunityOwnerTransferredResult) => {
// 转让成功
})
.catch((err: ZIMError) => {
// 转让失败
});zim.transferCommunityOwner('new_owner_user_id', communityID)
.then((result: ZIMCommunityOwnerTransferredResult) => {
// 转让成功
})
.catch((err: ZIMError) => {
// 转让失败
});示例代码
try {
await ZIM.getInstance()!
.transferCommunityOwner('new_owner_user_id', communityID);
// 转让成功
} on PlatformException catch (onError) {
// 转让失败
}try {
await ZIM.getInstance()!
.transferCommunityOwner('new_owner_user_id', communityID);
// 转让成功
} on PlatformException catch (onError) {
// 转让失败
}查询社群成员列表
调用 queryCommunityMemberList 接口,分页拉取指定社群的成员列表。
分页规则与查询社群列表一致:首次将 config.nextFlag 设为 0,后续将返回的 nextFlag 传入下次请求,直到 nextFlag 返回 0 为止。
示例代码
ZIMCommunityMemberListQueryConfig config = new ZIMCommunityMemberListQueryConfig();
config.setNextFlag(0); // 首次查询设为 0
zim.queryCommunityMemberList(communityID, 100, config, new ZIMCommunityMemberListQueriedCallback() {
@Override
public void onCommunityMemberListQueried(String communityID, ArrayList<ZIMCommunityMemberInfo> memberList, long nextFlag, ZIMError errorInfo) {
if (errorInfo.code == ZIMErrorCode.SUCCESS) {
// memberList 为当前页成员列表
}
}
});ZIMCommunityMemberListQueryConfig config = new ZIMCommunityMemberListQueryConfig();
config.setNextFlag(0); // 首次查询设为 0
zim.queryCommunityMemberList(communityID, 100, config, new ZIMCommunityMemberListQueriedCallback() {
@Override
public void onCommunityMemberListQueried(String communityID, ArrayList<ZIMCommunityMemberInfo> memberList, long nextFlag, ZIMError errorInfo) {
if (errorInfo.code == ZIMErrorCode.SUCCESS) {
// memberList 为当前页成员列表
}
}
});示例代码
ZIMCommunityMemberListQueryConfig *config = [[ZIMCommunityMemberListQueryConfig alloc] init];
config.nextFlag = 0;
[zim queryCommunityMemberListByCommunityID:communityID count:100 config:config callback:^(NSString * _Nonnull communityID, NSArray<ZIMCommunityMemberInfo *> * _Nonnull memberList, long long nextFlag, ZIMError * _Nonnull errorInfo) {
if (errorInfo.code == ZIMErrorCodenoneSuccess) {
// 查询成功
}
}];ZIMCommunityMemberListQueryConfig *config = [[ZIMCommunityMemberListQueryConfig alloc] init];
config.nextFlag = 0;
[zim queryCommunityMemberListByCommunityID:communityID count:100 config:config callback:^(NSString * _Nonnull communityID, NSArray<ZIMCommunityMemberInfo *> * _Nonnull memberList, long long nextFlag, ZIMError * _Nonnull errorInfo) {
if (errorInfo.code == ZIMErrorCodenoneSuccess) {
// 查询成功
}
}];示例代码
zim::ZIMCommunityMemberListQueryConfig config;
config.nextFlag = 0;
zim_->queryCommunityMemberList(communityID, 100, config,
[=](const std::string &communityID,
const std::vector<zim::ZIMCommunityMemberInfo> &memberList,
long long nextFlag,
const zim::ZIMError &errorInfo) {
if (errorInfo.code == zim::ZIM_ERROR_CODE_SUCCESS) {
// 查询成功
}
});zim::ZIMCommunityMemberListQueryConfig config;
config.nextFlag = 0;
zim_->queryCommunityMemberList(communityID, 100, config,
[=](const std::string &communityID,
const std::vector<zim::ZIMCommunityMemberInfo> &memberList,
long long nextFlag,
const zim::ZIMError &errorInfo) {
if (errorInfo.code == zim::ZIM_ERROR_CODE_SUCCESS) {
// 查询成功
}
});示例代码
const config: ZIMCommunityMemberListQueryConfig = { nextFlag: 0 };
zim.queryCommunityMemberList(communityID, 100, config)
.then((result: ZIMCommunityMemberListQueriedResult) => {
const { memberList, nextFlag } = result;
// nextFlag != 0 时继续分页拉取
})
.catch((err: ZIMError) => {
// 查询失败
});const config: ZIMCommunityMemberListQueryConfig = { nextFlag: 0 };
zim.queryCommunityMemberList(communityID, 100, config)
.then((result: ZIMCommunityMemberListQueriedResult) => {
const { memberList, nextFlag } = result;
// nextFlag != 0 时继续分页拉取
})
.catch((err: ZIMError) => {
// 查询失败
});示例代码
ZIMCommunityMemberListQueryConfig config =
ZIMCommunityMemberListQueryConfig()..nextFlag = 0;
try {
ZIMCommunityMemberListQueriedResult result =
await ZIM.getInstance()!.queryCommunityMemberList(communityID, 100, config);
// result.memberList 为成员列表
} on PlatformException catch (onError) {
// 查询失败
}ZIMCommunityMemberListQueryConfig config =
ZIMCommunityMemberListQueryConfig()..nextFlag = 0;
try {
ZIMCommunityMemberListQueriedResult result =
await ZIM.getInstance()!.queryCommunityMemberList(communityID, 100, config);
// result.memberList 为成员列表
} on PlatformException catch (onError) {
// 查询失败
}查询指定成员信息
调用 queryCommunityMembers 接口,批量查询指定用户在社群中的成员信息,包括角色、禁言状态等。
示例代码
ArrayList<String> userIDs = new ArrayList<>();
userIDs.add("user_1");
userIDs.add("user_2");
zim.queryCommunityMembers(userIDs, communityID, new ZIMCommunityMembersQueriedCallback() {
@Override
public void onCommunityMembersQueried(String communityID, ArrayList<ZIMCommunityMemberInfo> memberList, ArrayList<ZIMErrorUserInfo> errorUserList, ZIMError errorInfo) {
if (errorInfo.code == ZIMErrorCode.SUCCESS) {
// memberList 为查询到的成员信息
}
}
});ArrayList<String> userIDs = new ArrayList<>();
userIDs.add("user_1");
userIDs.add("user_2");
zim.queryCommunityMembers(userIDs, communityID, new ZIMCommunityMembersQueriedCallback() {
@Override
public void onCommunityMembersQueried(String communityID, ArrayList<ZIMCommunityMemberInfo> memberList, ArrayList<ZIMErrorUserInfo> errorUserList, ZIMError errorInfo) {
if (errorInfo.code == ZIMErrorCode.SUCCESS) {
// memberList 为查询到的成员信息
}
}
});示例代码
NSArray<NSString *> *userIDs = @[@"user_1", @"user_2"];
[zim queryCommunityMembersByUserIDs:userIDs communityID:communityID callback:^(NSString * _Nonnull communityID, NSArray<ZIMCommunityMemberInfo *> * _Nonnull memberList, NSArray<ZIMErrorUserInfo *> * _Nonnull errorUserList, ZIMError * _Nonnull errorInfo) {
if (errorInfo.code == ZIMErrorCodenoneSuccess) {
// 查询成功
}
}];NSArray<NSString *> *userIDs = @[@"user_1", @"user_2"];
[zim queryCommunityMembersByUserIDs:userIDs communityID:communityID callback:^(NSString * _Nonnull communityID, NSArray<ZIMCommunityMemberInfo *> * _Nonnull memberList, NSArray<ZIMErrorUserInfo *> * _Nonnull errorUserList, ZIMError * _Nonnull errorInfo) {
if (errorInfo.code == ZIMErrorCodenoneSuccess) {
// 查询成功
}
}];示例代码
std::vector<std::string> userIDs = {"user_1", "user_2"};
zim_->queryCommunityMembers(userIDs, communityID,
[=](const std::string &communityID,
const std::vector<zim::ZIMCommunityMemberInfo> &memberList,
const std::vector<zim::ZIMErrorUserInfo> &errorUserList,
const zim::ZIMError &errorInfo) {
if (errorInfo.code == zim::ZIM_ERROR_CODE_SUCCESS) {
// 查询成功
}
});std::vector<std::string> userIDs = {"user_1", "user_2"};
zim_->queryCommunityMembers(userIDs, communityID,
[=](const std::string &communityID,
const std::vector<zim::ZIMCommunityMemberInfo> &memberList,
const std::vector<zim::ZIMErrorUserInfo> &errorUserList,
const zim::ZIMError &errorInfo) {
if (errorInfo.code == zim::ZIM_ERROR_CODE_SUCCESS) {
// 查询成功
}
});示例代码
const userIDs = ['user_1', 'user_2'];
zim.queryCommunityMembers(userIDs, communityID)
.then((result: ZIMCommunityMembersQueriedResult) => {
// result.memberList 为查询到的成员信息
})
.catch((err: ZIMError) => {
// 查询失败
});const userIDs = ['user_1', 'user_2'];
zim.queryCommunityMembers(userIDs, communityID)
.then((result: ZIMCommunityMembersQueriedResult) => {
// result.memberList 为查询到的成员信息
})
.catch((err: ZIMError) => {
// 查询失败
});示例代码
List<String> userIDs = ['user_1', 'user_2'];
try {
ZIMCommunityMembersQueriedResult result =
await ZIM.getInstance()!.queryCommunityMembers(userIDs, communityID);
// result.memberList 为成员信息
} on PlatformException catch (onError) {
// 查询失败
}List<String> userIDs = ['user_1', 'user_2'];
try {
ZIMCommunityMembersQueriedResult result =
await ZIM.getInstance()!.queryCommunityMembers(userIDs, communityID);
// result.memberList 为成员信息
} on PlatformException catch (onError) {
// 查询失败
}设置成员禁言
调用 muteCommunityMembers 接口,批量设置指定成员在社群内指定频道中的禁言状态。禁言配置通过 ZIMCommunityMemberMuteConfig 传入。
| 配置字段 | 说明 |
|---|---|
channelID | 指定禁言生效的频道 ID。留空则对所有频道生效。 |
duration | 禁言时长(秒),取值范围 1-2592001(约 30 天),或 -1 表示永久禁言。 |
仅社群所有者和管理员可调用此接口。
示例代码
ArrayList<String> userIDs = new ArrayList<>();
userIDs.add("user_1");
userIDs.add("user_2");
ZIMCommunityMemberMuteConfig config = new ZIMCommunityMemberMuteConfig();
config.setDuration(3600); // 禁言 1 小时;-1 为永久禁言
config.setChannelID("channel_001"); // 指定频道;留空则对所有频道生效
// isMute = true 为禁言,false 为解除禁言
zim.muteCommunityMembers(true, userIDs, communityID, config,
new ZIMCommunityMembersMutedCallback() {
@Override
public void onCommunityMembersMuted(String communityID, String channelID, boolean isMute, ArrayList<ZIMErrorUserInfo> errorUserList, ZIMError errorInfo) {
if (errorInfo.code == ZIMErrorCode.SUCCESS) {
// 禁言设置成功
}
}
});ArrayList<String> userIDs = new ArrayList<>();
userIDs.add("user_1");
userIDs.add("user_2");
ZIMCommunityMemberMuteConfig config = new ZIMCommunityMemberMuteConfig();
config.setDuration(3600); // 禁言 1 小时;-1 为永久禁言
config.setChannelID("channel_001"); // 指定频道;留空则对所有频道生效
// isMute = true 为禁言,false 为解除禁言
zim.muteCommunityMembers(true, userIDs, communityID, config,
new ZIMCommunityMembersMutedCallback() {
@Override
public void onCommunityMembersMuted(String communityID, String channelID, boolean isMute, ArrayList<ZIMErrorUserInfo> errorUserList, ZIMError errorInfo) {
if (errorInfo.code == ZIMErrorCode.SUCCESS) {
// 禁言设置成功
}
}
});示例代码
NSArray<NSString *> *userIDs = @[@"user_1", @"user_2"];
ZIMCommunityMemberMuteConfig *config = [[ZIMCommunityMemberMuteConfig alloc] init];
config.duration = 3600;
config.channelID = @"channel_001";
[zim muteCommunityMembers:YES userIDs:userIDs communityID:communityID config:config callback:^(NSString * _Nonnull communityID, NSString * _Nonnull channelID, BOOL isMute, NSArray<ZIMErrorUserInfo *> * _Nonnull errorUserList, ZIMError * _Nonnull errorInfo) {
if (errorInfo.code == ZIMErrorCodenoneSuccess) {
// 禁言设置成功
}
}];NSArray<NSString *> *userIDs = @[@"user_1", @"user_2"];
ZIMCommunityMemberMuteConfig *config = [[ZIMCommunityMemberMuteConfig alloc] init];
config.duration = 3600;
config.channelID = @"channel_001";
[zim muteCommunityMembers:YES userIDs:userIDs communityID:communityID config:config callback:^(NSString * _Nonnull communityID, NSString * _Nonnull channelID, BOOL isMute, NSArray<ZIMErrorUserInfo *> * _Nonnull errorUserList, ZIMError * _Nonnull errorInfo) {
if (errorInfo.code == ZIMErrorCodenoneSuccess) {
// 禁言设置成功
}
}];示例代码
std::vector<std::string> userIDs = {"user_1", "user_2"};
zim::ZIMCommunityMemberMuteConfig config;
config.duration = 3600;
config.channelID = "channel_001";
zim_->muteCommunityMembers(true, userIDs, communityID, config,
[=](const std::string &communityID,
bool isMute,
const std::vector<std::string> &mutedUserIDs,
const zim::ZIMError &errorInfo) {
if (errorInfo.code == zim::ZIM_ERROR_CODE_SUCCESS) {
// 禁言设置成功
}
});std::vector<std::string> userIDs = {"user_1", "user_2"};
zim::ZIMCommunityMemberMuteConfig config;
config.duration = 3600;
config.channelID = "channel_001";
zim_->muteCommunityMembers(true, userIDs, communityID, config,
[=](const std::string &communityID,
bool isMute,
const std::vector<std::string> &mutedUserIDs,
const zim::ZIMError &errorInfo) {
if (errorInfo.code == zim::ZIM_ERROR_CODE_SUCCESS) {
// 禁言设置成功
}
});示例代码
const userIDs = ['user_1', 'user_2'];
const config: ZIMCommunityMemberMuteConfig = {
duration: 3600,
channelID: 'channel_001',
};
zim.muteCommunityMembers(true, userIDs, communityID, config)
.then((result: ZIMCommunityMembersMutedResult) => {
// 禁言设置成功
})
.catch((err: ZIMError) => {
// 操作失败
});const userIDs = ['user_1', 'user_2'];
const config: ZIMCommunityMemberMuteConfig = {
duration: 3600,
channelID: 'channel_001',
};
zim.muteCommunityMembers(true, userIDs, communityID, config)
.then((result: ZIMCommunityMembersMutedResult) => {
// 禁言设置成功
})
.catch((err: ZIMError) => {
// 操作失败
});示例代码
List<String> userIDs = ['user_1', 'user_2'];
ZIMCommunityMemberMuteConfig config = ZIMCommunityMemberMuteConfig()
..duration = 3600
..channelID = 'channel_001';
try {
await ZIM.getInstance()!
.muteCommunityMembers(true, userIDs, communityID, config);
// 禁言设置成功
} on PlatformException catch (onError) {
// 操作失败
}List<String> userIDs = ['user_1', 'user_2'];
ZIMCommunityMemberMuteConfig config = ZIMCommunityMemberMuteConfig()
..duration = 3600
..channelID = 'channel_001';
try {
await ZIM.getInstance()!
.muteCommunityMembers(true, userIDs, communityID, config);
// 禁言设置成功
} on PlatformException catch (onError) {
// 操作失败
}监听成员变更
成员状态变化
当成员加入或离开社群时,SDK 会触发 communityMemberStateChanged 回调。通过 updateInfo.getState() 可判断成员是进入(ENTERED)还是退出(EXITED)。
示例代码
zim.setEventHandler(new ZIMEventHandler() {
@Override
public void onCommunityMemberStateChanged(ZIM zim, ZIMCommunityMemberStateChangedEventResult result) {
for (ZIMCommunityMemberStateChangeInfo updateInfo : result.getUpdateInfoList()) {
if (updateInfo.getState() == ZIMCommunityMemberChangeState.ENTERED) {
// 成员加入社群
} else if (updateInfo.getState() == ZIMCommunityMemberChangeState.EXITED) {
// 成员离开社群
}
}
}
});zim.setEventHandler(new ZIMEventHandler() {
@Override
public void onCommunityMemberStateChanged(ZIM zim, ZIMCommunityMemberStateChangedEventResult result) {
for (ZIMCommunityMemberStateChangeInfo updateInfo : result.getUpdateInfoList()) {
if (updateInfo.getState() == ZIMCommunityMemberChangeState.ENTERED) {
// 成员加入社群
} else if (updateInfo.getState() == ZIMCommunityMemberChangeState.EXITED) {
// 成员离开社群
}
}
}
});示例代码
- (void)zim:(ZIM *)zim communityMemberStateChangedWithResult:(ZIMCommunityMemberStateChangedEventResult *)result {
for (ZIMCommunityMemberStateChangeInfo *updateInfo in result.updateInfoList) {
if (updateInfo.state == ZIMCommunityMemberChangeStateEntered) {
// 成员加入社群
} else if (updateInfo.state == ZIMCommunityMemberChangeStateExited) {
// 成员离开社群
}
}
}- (void)zim:(ZIM *)zim communityMemberStateChangedWithResult:(ZIMCommunityMemberStateChangedEventResult *)result {
for (ZIMCommunityMemberStateChangeInfo *updateInfo in result.updateInfoList) {
if (updateInfo.state == ZIMCommunityMemberChangeStateEntered) {
// 成员加入社群
} else if (updateInfo.state == ZIMCommunityMemberChangeStateExited) {
// 成员离开社群
}
}
}示例代码
void onCommunityMemberStateChanged(zim::ZIM *zim,
const zim::ZIMCommunityMemberStateChangedEventResult &result) override {
for (const auto &updateInfo : result.updateInfoList) {
if (updateInfo.state == zim::ZIM_COMMUNITY_MEMBER_CHANGE_STATE_ENTERED) {
// 成员加入社群
} else if (updateInfo.state == zim::ZIM_COMMUNITY_MEMBER_CHANGE_STATE_EXITED) {
// 成员离开社群
}
}
}void onCommunityMemberStateChanged(zim::ZIM *zim,
const zim::ZIMCommunityMemberStateChangedEventResult &result) override {
for (const auto &updateInfo : result.updateInfoList) {
if (updateInfo.state == zim::ZIM_COMMUNITY_MEMBER_CHANGE_STATE_ENTERED) {
// 成员加入社群
} else if (updateInfo.state == zim::ZIM_COMMUNITY_MEMBER_CHANGE_STATE_EXITED) {
// 成员离开社群
}
}
}示例代码
zim.on('communityMemberStateChanged', (zim, result) => {
for (const updateInfo of result.updateInfoList) {
if (updateInfo.state === ZIMCommunityMemberChangeState.Entered) {
// 成员加入社群
} else if (updateInfo.state === ZIMCommunityMemberChangeState.Exited) {
// 成员离开社群
}
}
});zim.on('communityMemberStateChanged', (zim, result) => {
for (const updateInfo of result.updateInfoList) {
if (updateInfo.state === ZIMCommunityMemberChangeState.Entered) {
// 成员加入社群
} else if (updateInfo.state === ZIMCommunityMemberChangeState.Exited) {
// 成员离开社群
}
}
});示例代码
ZIMEventHandler.onCommunityMemberStateChanged =
(ZIM zim, ZIMCommunityMemberStateChangedEventResult result) {
for (final updateInfo in result.updateInfoList) {
if (updateInfo.state == ZIMCommunityMemberChangeState.Entered) {
// 成员加入社群
} else if (updateInfo.state == ZIMCommunityMemberChangeState.Exited) {
// 成员离开社群
}
}
};ZIMEventHandler.onCommunityMemberStateChanged =
(ZIM zim, ZIMCommunityMemberStateChangedEventResult result) {
for (final updateInfo in result.updateInfoList) {
if (updateInfo.state == ZIMCommunityMemberChangeState.Entered) {
// 成员加入社群
} else if (updateInfo.state == ZIMCommunityMemberChangeState.Exited) {
// 成员离开社群
}
}
};成员信息更新
当社群成员的昵称、角色或禁言状态等信息发生变化时,SDK 会触发 communityMemberInfoUpdated 回调。
示例代码
zim.setEventHandler(new ZIMEventHandler() {
@Override
public void onCommunityMemberInfoUpdated(ZIM zim, ZIMCommunityMemberInfoUpdatedEventResult result) {
for (ZIMCommunityMemberInfoUpdateInfo updateInfo : result.getUpdateInfoList()) {
ZIMCommunityMemberInfo memberInfo = updateInfo.getMemberInfo();
// memberInfo.memberRole:成员角色
// memberInfo.muteInfo:禁言信息
// memberInfo.enterInfo:成员入群信息
}
}
});zim.setEventHandler(new ZIMEventHandler() {
@Override
public void onCommunityMemberInfoUpdated(ZIM zim, ZIMCommunityMemberInfoUpdatedEventResult result) {
for (ZIMCommunityMemberInfoUpdateInfo updateInfo : result.getUpdateInfoList()) {
ZIMCommunityMemberInfo memberInfo = updateInfo.getMemberInfo();
// memberInfo.memberRole:成员角色
// memberInfo.muteInfo:禁言信息
// memberInfo.enterInfo:成员入群信息
}
}
});示例代码
- (void)zim:(ZIM *)zim communityMemberInfoUpdatedWithResult:(ZIMCommunityMemberInfoUpdatedEventResult *)result {
for (ZIMCommunityMemberInfoUpdateInfo *updateInfo in result.updateInfoList) {
ZIMCommunityMemberInfo *memberInfo = updateInfo.memberInfo;
// memberInfo.memberRole:成员角色
// memberInfo.muteInfo:禁言信息
// memberInfo.enterInfo:成员入群信息
}
}- (void)zim:(ZIM *)zim communityMemberInfoUpdatedWithResult:(ZIMCommunityMemberInfoUpdatedEventResult *)result {
for (ZIMCommunityMemberInfoUpdateInfo *updateInfo in result.updateInfoList) {
ZIMCommunityMemberInfo *memberInfo = updateInfo.memberInfo;
// memberInfo.memberRole:成员角色
// memberInfo.muteInfo:禁言信息
// memberInfo.enterInfo:成员入群信息
}
}示例代码
void onCommunityMemberInfoUpdated(zim::ZIM *zim,
const zim::ZIMCommunityMemberInfoUpdatedEventResult &result) override {
for (const auto &updateInfo : result.updateInfoList) {
// updateInfo.memberInfo 包含更新后的成员信息
}
}void onCommunityMemberInfoUpdated(zim::ZIM *zim,
const zim::ZIMCommunityMemberInfoUpdatedEventResult &result) override {
for (const auto &updateInfo : result.updateInfoList) {
// updateInfo.memberInfo 包含更新后的成员信息
}
}示例代码
zim.on('communityMemberInfoUpdated', (zim, result) => {
for (const updateInfo of result.updateInfoList) {
const memberInfo = updateInfo.memberInfo;
// memberInfo.memberRole:成员角色
// memberInfo.muteInfo:禁言信息
}
});zim.on('communityMemberInfoUpdated', (zim, result) => {
for (const updateInfo of result.updateInfoList) {
const memberInfo = updateInfo.memberInfo;
// memberInfo.memberRole:成员角色
// memberInfo.muteInfo:禁言信息
}
});示例代码
ZIMEventHandler.onCommunityMemberInfoUpdated =
(ZIM zim, ZIMCommunityMemberInfoUpdatedEventResult result) {
for (final updateInfo in result.updateInfoList) {
final memberInfo = updateInfo.memberInfo;
// memberInfo.memberRole:成员角色
// memberInfo.muteInfo:禁言信息
}
};ZIMEventHandler.onCommunityMemberInfoUpdated =
(ZIM zim, ZIMCommunityMemberInfoUpdatedEventResult result) {
for (final updateInfo in result.updateInfoList) {
final memberInfo = updateInfo.memberInfo;
// memberInfo.memberRole:成员角色
// memberInfo.muteInfo:禁言信息
}
};