群组管理
本文档旨在指导开发者如何使用融云即时通讯 Android IMLib SDK 实现创建群组、群组资料设置、踢出群组、退出群组、解散群组、转让群组等功能。
提示
- 此功能从 5.12.0 版本开始支持。
- 针对已经通过原群组功能接口
/group/create.json创建的群组,默认不支持调用群托管的相关功能接口,需要调用导入群托管数据接口,设置群组所有者(群主)及群组的默认权限后才能使用。
开通服务
信息托管服务已默认开通,您可以直接使用此功能。
群事件监听
群事件定义在 GroupEventListener 中,包含群操作、群信息群成员信息变更、加群申请相关通知、群备注名多端同步、群特别关注多端同步等。
您可以调用 setGroupEventListener 设置群事件监听器,如果不想再接收群事件,接口传 null 即可。
提示
信息托管服务中,群组操作产生的 SDK 通知回调也是一种状态通知行为,不管应用中是否实现 SDK 的事件监听,服务端都会对 SDK 进行状态同步,确保本地为最新的数据信息,所以会计入消息的分发、下行数据统计中。
代 码示例
Java
GroupEventListener groupEventListener = new GroupEventListener() {
@Override
public void onGroupOperation(String groupId, GroupMemberInfo operatorInfo, GroupInfo groupInfo, GroupOperation operation, List<GroupMemberInfo> memberInfos, long operationTime) {
// 执行群操作后的回调:包括创建群、加入群、踢出、退出、解散、添加管理员、移除管理员、转让群主,具体参照 [GroupOperation]
}
@Deprecated
@Override
public void onGroupInfoChanged(GroupMemberInfo operatorInfo, GroupInfo groupInfo, List<GroupInfoKeys> updateKeys, long operationTime) {
// 群组资料变更回调。注意:只有包含在 updateKeys 中的属性值有效
}
/**
* 群组资料变更回调
*
* @param operatorInfo 操作人用户信息
* @param fullGroupInfo 群组信息
* @param changeGroupInfo 变更的群组信息
* @param updateKeys 群组信息本次更新有变化的 Key 列表。
* @param operationTime 操作时间。
*/
default void onGroupInfoChanged(GroupMemberInfo operatorInfo,GroupInfo fullGroupInfo,GroupInfo changeGroupInfo,List<GroupInfoKeys> updateKeys,long operationTime) {
// 群组资料变更回调。注意:只有包含在 updateKeys 中的属性值有效
}
@Override
public void onGroupMemberInfoChanged(String groupId, GroupMemberInfo operatorInfo, GroupMemberInfo memberInfo, long operationTime) {
// 群成员资料变更回调
}
@Override
public void onGroupApplicationEvent(GroupApplicationInfo info) {
// 群请求事件回调。包含以下事件:
// 1,用户申请加入群组的 "申请" 或 "结果"
// 2,邀请加入群组的 "申请" 或 "结果"
}
@Override
public void onGroupRemarkChangedSync(String groupId, GroupOperationType operationType, String groupRemark, long operationTime) {
// 群名称备注名更新多端同步回调事件。
}
@Override
public void onGroupFollowsChangedSync(String groupId, GroupOperationType operationType, List<String> userIds, long operationTime) {
// 群成员特别关注变更多端回调事件。
}
};
RongCoreClient.getInstance().setGroupEventListener(groupEventListener);
群组管理
群组管理包含:创建群组、群组资料设置、踢出群组、退出群组、解散群组、群组转让。
创建群组
您可以调用 createGroup 方法创建一个新群组。
5.46.0 接口变更
从 5.46.0 版本开始,创建群组接口使用 CreateGroupResultCallback 返回结构化失败详情。接收 CreateGroupCallback 或 ExamineCreateGroupCallback 的旧重载仍可兼容使用,但已标记为废弃,建议使用新接口。
接口
Java
public abstract void createGroup(
GroupInfo groupInfo,
List<String> inviteeUserIds,
IRongCoreCallback.CreateGroupResultCallback callback);
群资料 GroupInfo 参数介绍:
| 属性名 | 类型 | 必填 | 描述 |
|---|---|---|---|
groupId | String | 是 | 群组 ID:最大长度 64 个字符。支持大小写英文字母与数字的组合。 |
groupName | String | 是 | 群组名称:最大长度 64 个字符。 |
portraitUri | String | 否 | 群头像地址:长度不超过 128 个字符 |
introduction | String | 否 | 群简介:最大长度不超过 512 个字符 |
notice | String | 否 | 群公告:最大长度不超过 1024 个字符 |
extProfile | Map<String, String> | 否 | 扩展信息:在现在群信息基础上,开发者可根据自身业务需求添加自定义扩展属性(Key、Value),最多可设置 10 个扩展信息。 自定义属性需要通过内嵌控制台 群组自定义属性 设置后才能使用,否则返回设置失败 |
joinPermission | GroupJoinPermission | 否 | 加入群组的权限:不用验证、需要群主验证(默认)、需要群管理员及群主验证、不允许任何人加入,不设置按默认值处理 |
removeMemberPermission | GroupOperationPermission | 否 | 将群成员移出群组的权限:群主(默认)、群主+群管理员、所有人,不设置按默认值处理 |
invitePermission | GroupOperationPermission | 否 | 邀请他人加入群组的权限:群主(默认)、群主+群管理员、所有人,不设置按默认值处理 |
inviteHandlePermission | GroupInviteHandlePermission | 否 | 被邀请加入群组处理的权限:不需要被邀请人同意(默认)、需要被邀请人同意,不设置按默认值处理 |
groupInfoEditPermission | GroupOperationPermission | 否 | 修改群资料的权限:群主(默认)、群主+群管理员、所有人,不设置按默认值处理。此权限只有群主可以修改 |
memberInfoEditPermission | GroupMemberInfoEditPermission | 否 | 设置群成员资料的权限:仅自已、群主+自已、群主+群管理员+自已(默认),不设置按默认值处理 |
inviteeUserIds 参数介绍
您可以选择在创建群的同时,邀请用户加入群组。一次最多允许 30 个用户加入。
邀请的结果受群组的被邀请人处理权限 inviteHandlePermission 参数影响:
- 需要被邀请人验证 (
InviteeVerify) 时,创建群组成功后,成功回调的IRongCoreEnum.CoreErrorCode会返回RC_GROUP_NEED_INVITEE_ACCEPT(25427),被邀请人会收到onGroupApplicationEvent事件,需要调用acceptGroupInvite接口同意后才能加入群组。 - 无需被邀请人验证 (
Free) 时,创建群组成功后,成功回调的IRongCoreEnum.CoreErrorCode会返回SUCCESS(0), 表示被邀请人已加入群组。
提示
- 群组创建的结果不受
IRongCoreEnum.CoreErrorCode的影响,只要回调了onSuccess就表示群组创建成功。 - 创建群组成功,群主会收到
onGroupOperation回调,GroupOperation类型Create。
示例代码
Java
GroupInfo groupInfo = new GroupInfo();
// 群Id。必填,否则创建失败返回错误码
groupInfo.setGroupId("groupId");
// 群名称。必填,否则创建失败返回错误码
groupInfo.setGroupName("groupName");
// 设置加入群组的用户Id。非必填
List<String> inviteeUserIds = new ArrayList<>();
inviteeUserIds.add("userId1");
inviteeUserIds.add("userId2");
inviteeUserIds.add("userId3");
RongCoreClient.getInstance().createGroup(groupInfo, inviteeUserIds, new IRongCoreCallback.CreateGroupResultCallback() {
@Override
public void onSuccess(IRongCoreEnum.CoreErrorCode processCode) {
// 创建群组请求成功。processCode 表示后续业务流程
}
@Override
public void onError(IRongCoreEnum.CoreErrorCode errorCode, CreateGroupErrorInfo errorInfo) {
// errorInfo 可能为 null
if (errorInfo != null) {
// 未通过内容审核的群资料字段
List<String> censorFailedFields = errorInfo.getCensorFailedFields();
}
}
});
CreateGroupErrorInfo 中的两个列表始终不为 null 且不能增删元素。如果服务端没有返回结构化详情,errorInfo 为 null。