许多群组操作前需要鉴别权限,包括当前用户是否在群里面,是否拥有管理员或者所有者权限。 建议用户登录成功后,调用EMClient.getInstance().groupManager().getJoinedGroupsFromServer(); 刷新本地群组列表,确保鉴别权限正常工作。
SDK3.3.0 release新增许多群组操作的API,请查看链接3.3.0api修改
收发消息及聊天记录相关等见消息。
/**
* 创建群组
* @param groupName 群组名称
* @param desc 群组简介
* @param allMembers 群组初始成员,如果只有自己传空数组即可
* @param reason 邀请成员加入的reason
* @param option 群组类型选项,可以设置群组最大用户数(默认200)及群组类型@see {@link EMGroupStyle}
* option.inviteNeedConfirm表示邀请对方进群是否需要对方同意,默认是需要用户同意才能加群的。
* option.extField创建群时可以为群组设定扩展字段,方便个性化订制。
* @return 创建好的group
* @throws HyphenateException
*/
EMGroupOptions option = new EMGroupOptions();
option.maxUsers = 200;
option.style = EMGroupStyle.EMGroupStylePrivateMemberCanInvite;
EMClient.getInstance().groupManager().createGroup(groupName, desc, allMembers, reason, option);
option里的GroupStyle分别为:
EMGroupStylePrivateOnlyOwnerInvite
——私有群,只有群主可以邀请人;EMGroupStylePrivateMemberCanInvite
——私有群,群成员也能邀请人进群;EMGroupStylePublicJoinNeedApproval
——公开群,加入此群除了群主邀请,只能通过申请加入此群;EMGroupStylePublicOpenJoin
——公开群,任何人都能加入此群。/**
* 增加群组管理员,需要owner权限
* @param groupId
* @param admin
* @return
* @throws HyphenateException
*/
EMClient.getInstance().groupManager().addGroupAdmin(final String groupId, final String admin);//需异部处理
/**
* 删除群组管理员,需要owner权限
* @param groupId
* @param admin
* @return
* @throws HyphenateException
*/
EMClient.getInstance().groupManager().removeGroupAdmin(String groupId, String admin);//需异部处理
/**
* 群组所有权给他人
* @param groupId
* @param newOwner
* @return
* @throws HyphenateException
*/
EMClient.getInstance().groupManager().changeOwner(String groupId, String newOwner);//需异部处理
//群主加人调用此方法
EMClient.getInstance().groupManager().addUsersToGroup(groupId, newmembers);//需异步处理
//私有群里,如果开放了群成员邀请,群成员邀请调用下面方法
EMClient.getInstance().groupManager().inviteUser(groupId, newmembers, null);//需异步处理
//把username从群组里删除
EMClient.getInstance().groupManager().removeUserFromGroup(groupId, username);//需异步处理
只能用于加入公开群。
//如果群开群是自由加入的,即group.isMembersOnly()为false,直接join
EMClient.getInstance().groupManager().joinGroup(groupid);//需异步处理
//需要申请和验证才能加入的,即group.isMembersOnly()为true,调用下面方法
EMClient.getInstance().groupManager().applyJoinToGroup(groupid, "求加入");//需异步处理
EMClient.getInstance().groupManager().leaveGroup(groupId);//需异步处理
EMClient.getInstance().groupManager().destroyGroup(groupId);//需异步处理
//如果群成员较多,需要多次从服务器获取完成
List<String> memberList = new ArrayList<>;
EMCursorResult<String> result = null;
final int pageSize = 20;
do {
result = EMClient.getInstance().groupManager().fetchGroupMembers(groupId,
result != null ? result.getCursor() : "", pageSize);
memberList.addAll(result.getData());
} while (!TextUtils.isEmpty(result.getCursor()) && result.getData().size() == pageSize);
//从服务器获取自己加入的和创建的群组列表,此api获取的群组sdk会自动保存到内存和db。
List<EMGroup> grouplist = EMClient.getInstance().groupManager().getJoinedGroupsFromServer();//需异步处理
//从本地加载群组列表
List<EMGroup> grouplist = EMClient.getInstance().groupManager().getAllGroups();
//获取公开群列表
//pageSize为要取到的群组的数量,cursor用于告诉服务器从哪里开始取
EMCursorResult<EMGroupInfo> result = EMClient.getInstance().groupManager().getPublicGroupsFromServer(pageSize, cursor);//需异步处理
List<EMGroupInfo> groupsList = List<EMGroupInfo> returnGroups = result.getData();
String cursor = result.getCursor();
//修改群名称
EMClient.getInstance().groupManager().changeGroupName(groupId,changedGroupName);//需异步处理
//修改群描述
EMClient.getInstance().groupManager().changeGroupDescription(groupId, description);//需异步处理
获取单个群组信息。getGroupFromServer(groupId)返回结果包含群组名称,群描述,群主,管理员列表,不包含群成员。
getGroupFromServer(String groupId, boolean fetchMembers),如果fetchMembers为true,取群组信息的时候也会获取群成员,最大数200人。
//根据群组ID从本地获取群组基本信息
EMGroup group = EMClient.getInstance().groupManager().getGroup(groupId);
//根据群组ID从服务器获取群组基本信息
EMGroup group = EMClient.getInstance().groupManager().getGroupFromServer(groupId);
group.getOwner();//获取群主
List<String> members = group.getMembers();//获取内存中的群成员
List<String> adminList = group.getAdminList();//获取管理员列表
...
其它方法详见环信接口文档。
不允许 Owner 权限的调用。
/**
* 屏蔽群消息后,就不能接收到此群的消息(还是群里面的成员,但不再接收消息)
* @param groupId, 群ID
* @throws EasemobException
*/
EMClient.getInstance().groupManager().blockGroupMessage(groupId);//需异步处理
/**
* 取消屏蔽群消息,就可以正常收到群的所有消息
* @param groupId
* @throws EaseMobException
*/
EMClient.getInstance().groupManager().unblockGroupMessage(groupId);//需异步处理
/**
* 将用户加到群组的黑名单,被加入黑名单的用户无法加入群,无法收发此群的消息
* (只有群主才能设置群的黑名单)
* @param groupId, 群组的ID
* @param username, 待屏蔽的用户名
* @exception EaseMobException 出错会抛出
*/
EMClient.getInstance().groupManager().blockUser(groupId, username);//需异步处理
/**
* 将用户从群组的黑名单移除(只有群主才能调用此函数)
* @param groupId, 群组的ID
* @param username, 待解除屏蔽的用户名
*/
EMClient.getInstance().groupManager().unblockUser(groupId, username);//需异步处理
/**
* 获取群组的黑名单用户列表
* (只有群主才能调用此函数)
* @return List<String>
* @throws EaseMobException 获取失败
*/
EMClient.getInstance().groupManager().getBlockedUsers(groupId);//需异步处理
/**
* 禁止某些群组成员发言, 需要群组拥有者或者管理员权限
* @param groupId
* @param muteMembers 禁言的用户列表
* @param duration 禁言的时间,单位是毫秒
* @return
* @throws HyphenateException
*/
EMClient.getInstance().groupManager().muteGroupMembers(String groupId, List<String> muteMembers, long duration);//需异步处理
目前duration参数不起作用,暂时只支持永久禁言和解除禁言两种操作, duration建议输入12*30*24*60*60*1000
/**
* 解除禁言, 需要群组拥有者或者管理员权限
* @param groupId
* @param members
* @return
* @throws HyphenateException
*/
EMClient.getInstance().groupManager().unMuteGroupMembers(String groupId, List<String> members);//需异步处理
/**
* 获取群组的禁言列表,需要群组拥有者或者管理员权限
* @param groupId
* @param pageNum
* @param pageSize
* @return Map.entry.key 是禁言的成员id,Map.entry.value是禁言动作存在的时间,单位是毫秒。
* @throws HyphenateException
*/
EMClient.getInstance().groupManager().fetchGroupMuteList(String groupId, int pageNum, int pageSize)
/**
* 更新群公告
* @param groupId 群id
* @param announcement 公告内容
* @throws HyphenateException
*/
EMClient.getInstance().groupManager().updateGroupAnnouncement(groupId, announcement);
EMClient.getInstance().groupManager().fetchGroupAnnouncement(groupId)
/**
* 上传共享文件至群组,注意callback只做进度回调用
* @param groupId 群id
* @param filePath 文件本地路径
* @param callBack 回调
*/
EMClient.getInstance().groupManager().uploadGroupSharedFile(groupId, filePath, callBack)
/**
* 从群组里删除这个共享文件
* @param groupId 群id
* @param fileId 文件id
*/
EMClient.getInstance().groupManager().deleteGroupSharedFile(groupId, fileId);
/**
* 从服务器获取群组的共享文件列表
* @param groupId 群id
* @param pageNum 分页号
* @param pageSize 分页大小
*
*/
EMClient.getInstance().groupManager().fetchGroupSharedFileList(groupId, pageNum, pageSize)
/**
* 下载群里的某个共享文件,注意callback只做进度回调用
* @param groupId 群id
* @param fileId 文件id
* @param savePath 文件保存路径
* @param callBack 回调
*/
EMClient.getInstance().groupManager().downloadGroupSharedFile(groupId, fileId, savePath, callBack);
EMClient.getInstance().groupManager().updateGroupExtension(groupId, extension);
EMClient.getInstance().groupManager().addGroupChangeListener(new EMGroupChangeListener() {
@Override
public void onInvitationReceived(String groupId, String groupName, String inviter, String reason) {
//接收到群组加入邀请
}
@Override
public void onRequestToJoinReceived(String groupId, String groupName, String applyer, String reason) {
//用户申请加入群
}
@Override
public void onRequestToJoinAccepted(String groupId, String groupName, String accepter) {
//加群申请被同意
}
@Override
public void onRequestToJoinDeclined(String groupId, String groupName, String decliner, String reason) {
//加群申请被拒绝
}
@Override
public void onInvitationAccepted(String groupId, String inviter, String reason) {
//群组邀请被同意
}
@Override
public void onInvitationDeclined(String groupId, String invitee, String reason) {
//群组邀请被拒绝
}
@Override
public void onAutoAcceptInvitationFromGroup(String groupId, String inviter, String inviteMessage) {
//接收邀请时自动加入到群组的通知
}
@Override
public void onMuteListAdded(String groupId, final List<String> mutes, final long muteExpire) {
//成员禁言的通知
}
@Override
public void onMuteListRemoved(String groupId, final List<String> mutes) {
//成员从禁言列表里移除通知
}
@Override
public void onAdminAdded(String groupId, String administrator) {
//增加管理员的通知
}
@Override
public void onAdminRemoved(String groupId, String administrator) {
//管理员移除的通知
}
@Override
public void onOwnerChanged(String groupId, String newOwner, String oldOwner) {
//群所有者变动通知
}
@Override
public void onMemberJoined(final String groupId, final String member){
//群组加入新成员通知
}
@Override
public void onMemberExited(final String groupId, final String member) {
//群成员退出通知
}
@Override
public void onAnnouncementChanged(String groupId, String announcement) {
//群公告变动通知
}
@Override
public void onSharedFileAdded(String groupId, EMMucSharedFile sharedFile) {
//增加共享文件的通知
}
@Override
public void onSharedFileDeleted(String groupId, String fileId) {
//群共享文件删除通知
}
});