群组功能
功能概述
容联云通讯SDK 提供了群组和讨论组两种形式的群聊功能。群组拥有更多的权限操作,两种群聊形式在共有操作上保持了接口一致。
讨论组类似当前IM聊天应用内的快速多人会话,没有群组的权限操作,适用于快速创建多人会话的场景。每个讨论组只有一个管理员。管理员可以对讨论组进行增减员操作,普通成员也能对群进行增员操作。在添加新成员的时候,并不需要经过对方同意。
群组的功能更加完整和丰富,在权限上也拥有更多的限制(权限分为群主、管理员、以及群成员)。可以设定被邀请模式(是否需要对方同意)群组可以拥有讨论组的全部功能,推荐使用群组进行开发。
注意事项:
1、创建的群组的时候注意传入的scope参数,基础版默认可传TEMP,专业版可传NORMAL,若需更大人数群组,请联系专有云商务或在控制台吗管理页面进行拓展。
2、群组中有三种成员角色,分别是群主、管理员(默认10个,群人数超过10人),普通成员。
3、群主可以修改,群组信息,群名片,邀请人加入,踢人,解散群组,设置管理员,转让群主,设置群内禁言等。
4、管理员可以修改群组公告,群名片,邀请人加入,设置群内禁言。
群组和讨论组的详细功能差异对比如下:
功能 | 讨论组 | 群组 |
群容量 | IM 专业版 300人/群,最大可扩展至 500 人/群(增值功能) | IM 专业版 300人/群,最大可扩展至 2000 人/群(增值功能) |
创建 | 创建时指定群组类型 | 创建时指定群组类型 |
群资料属性 | 讨论组名,讨论组类型,讨论组公告,讨论组扩展字段,讨论组资料修改,讨论组扩展字段修改 | 群名,群公告,群扩展字段, 申请加入群组的验证模式,群邀请模式, 群资料修改,群资料扩展字段修改模式 |
邀请入群 | 创建时邀请 | 群主和管理员可以邀请 |
被邀请人同意模式 | 不需要被邀请人同意 | 支持配置: 需要被邀请人同意 不需要被邀请人同意 |
申请入群 | 不支持 | 支持 |
群成员类型 | 群主、普通成员 | 群主、管理员、普通成员 |
管理员设置 | 不支持设置管理员 | 群主可以增减管理员 |
群组资料修改权限 | 群主可以修改 | 群主,管理员可以设置 |
修改群成员昵称 | 管理修改任何人群昵称,普通群成员只能修改自己的昵称 | 群主、管理员可以修改所有人的群昵称。 普通成员只能修改普通群成员的群昵称。 |
修改自己的群昵称 | 支持 | 支持 |
消息类型支持 | 文本,图片,附件,语音等 | 文本,图片,附件,语音等 |
踢人 | 不支持 | 群主和管理员可以踢人,且管理员不能踢群主和其他管理员 |
主动退群 | 普通群所有人都可以退群; 若群主退群,该群第一个加入的人是群主 | 除群主外,其他用户均可以主动退群。 群主需先将群转让给其他群成员才可以进行退群操作 |
禁言 | 不支持 | 管理员对普通成员禁言、解除禁言 |
转让群 | 不支持 | 群主可以将群的拥有者权限转给群内的其他成员,转移后, 被转让者变为新的群主,原群主变为普通成员。 群主还可以选择在转让的同时,直接退出该群。 |
解散群 | 不支持 | 群主可以解散群 |
群组消息
群组聊天和单人聊天是相同的,请参考消息收发文档。
群组管理
创建群组
创建群包含创建群组和创建讨论组两种形式。二者的接口接口相同,传入不同的类型参数即可(Target)。
API介绍:
方法名:RL_YTX. createGroup(CreateGroupBuilder, callback, onError) 查看API
对象:CreateGroupBuilder
代码示例
我们假设Tony要创建一个名为"出彩中国人"(参考Demo中IM. EV_createGroup)
- //新建创建群组对象
- var obj = new RL_YTX.CreateGroupBuilder();
- //设置群组名称
- obj.setGroupName(“出彩中国人”);
- //设置群组公告
- obj. setDeclared(“欢迎体验云通讯群组功能”);
- //设置群组类型,如:1临时群组(100人)
- obj. setScope(1);
- //设置群组验证权限,如:需要身份验证2
- obj. setPermission(2);
- //设置为讨论组,该字段默认为2,表示群组,创建讨论组时设置为1
- obj.setTarget(1);
- RL_YTX.createGroup(obj, function(obj){
- //获取新建群组id
- var groupId = obj.data;
- //更新页面
- }, function(obj){
- //创建群组失败
- });
主动加入群组
只要知道群组id,就可以主动加入群组,讨论组不可以主动加入。
关于几种群组的解释:
公开群组:用户可以直接被允许加入群组,不需要群主或管理员进行验证;
验证群组:用户加入群组的时候需要群主或管理员同意才可以加入;
私有群组:只能群主或管理员邀请加入。
API介绍
方法名:RL_YTX. joinGroup(JoinGroupBuilder, callback, onError)查看API
对象:JoinGroupBuilder
代码示例
我们假设"出彩中国人"群组已经有Tony和John两位成员,现在Smith要加入"出彩中国人"群组。
- //新建加入群组对象
- var builder= new RL_YTX.JoinGroupBuilder();
- //设置申请群组id
- builder.setGroupId(“出彩中国人群组id”);
- //设置申请理由
- builder.setDeclared(“申请理由”);
- //发送请求
- RL_YTX.joinGroup(builder, function(){
- //操作成功
- },function(obj){
- //操作失败
- });
申请加入群组请求通知
注意:
如果群组"出彩中国人"是公开群组,则smith直接被允许加入。如果群组"出彩中国人"是私有群组,则smith加入需要群主Tony的的同意。
接收他人加入操作时,需要设置回调监听,参考文档:
代码示例
Tony首先收到Smith加入的请求(参考DEMO中IM. EV_noticeReceiveListener)
- //获取群组id
- var groupId = obj.groupId;
- //获取群组名称
- var groupName = obj.groupName;
- //获取申请者id
- var peopleId = obj.member;
- //获取申请者名称
- var people = (!!obj.memberName)?obj.memberName:obj.member;
- //1申请加入群组,2邀请加入群组,3直接加入群组,4解散群组,5退出群组,6踢出群组,7确认申请加入,8确认邀请结果,10管理员修改群组信息,11用户修改群组成员名片
- var auditType = obj.auditType;
- if(1 == auditType){
- //处理申请加入通知
- }
同意加入群组
群主或者管理员,可以进行同意他人进群的操作。
API介绍
方法名:RL_YTX. confirmJoinGroup(ConfirmJoinGroupBuilder, callback, onError)查看API
对象:ConfirmJoinGroupBuilder
代码示例
Tony同意Smith加入的请求(参考IM. EV_confirmJoinGroup)
- //新建同意加入请求对象
- var builder = new RL_YTX.ConfirmJoinGroupBuilder();
- //设置群组id
- builder.setGroupId(“出彩中国人群组id”);
- //设置申请者账号
- builder.setMemberId(“Smith账号”);
- //设置同意或拒绝 1拒绝 2同意
- builder.setConfirm(2);
- //发送请求
- RL_YTX.confirmJoinGroup(builder, function(){
- //处理成功
- }, function(obj){
- //处理失败
- });
成员加入通知
Smith加入成功后,群组中成员John收到的通知回调。(参考DEMO中IM. EV_noticeReceiveListener)
设置回调方法,参考文档:
- //获取群组id
- var groupId = obj.groupId;
- //获取群组名称
- var groupName = obj.groupName;
- //获取加入者id
- var peopleId = obj.member;
- //获取加入者名称
- var people = (!!obj.memberName)?obj.memberName:obj.member;
- //(1申请加入群组,2邀请加入群组,3直接加入群组,4解散群组,5退出群组,6踢出群组,7确认申请加入,8确认邀请结果,10管理员修改群组信息,11用户修改群组成员名片)
- var auditType = obj.auditType;
- if(7 == auditType){
- //处理某人加入群组通知
- }
邀请加入群组
群组里只能由群主或管理员邀请别人加入,讨论组里任意用户都可以邀请别人加入,且讨论组邀请时无需对方同意。
API介绍
方法名:RL_YTX. inviteJoinGroup(InviteJoinGroupBuilder, callback, onError)查看API
对象:InviteJoinGroupBuilder
代码示例
我们假设"出彩中国人"群组的创建者Tony邀请Smith加入群组(参考Demo中IM. EV_inviteGroupMember)
- //新建邀请加入请求对象
- var builder = new RL_YTX.InviteJoinGroupBuilder();
- //设置群组id
- builder. setGroupId(“出彩中国人群组id”);
- //设置邀请成员账号
- builder. setMembers([“Smith的账号”]);
- //是否需要对方确认(1不需要直接加入,2需要)
- var confirm = 2;
- builder.setConfirm(confirm);
- //发送邀请
- RL_YTX.inviteJoinGroup(builder,function(){
- //邀请成功
- if(confirm == 1){
- //更新页面群组成员列表
- },function(obj){
- //邀请成员失败
- })
用户验证管理员邀请加入群组
注意:
如果Tony邀请Smith加入的时候,接口参数指定不加入需要Smith确认,则Smith直接被邀请加入。如果指定需要Smith同意才能加入,则Smith收到如下通知回调,并在回调里面回复"同意"或"拒绝"加入。设置回调的方法,参考文档:
(参考DEMO中IM. EV_noticeReceiveListener)
- //获取群组id
- var groupId = obj.groupId;
- //获取群组名称
- var groupName = obj.groupName;
- //获取邀请者id
- var peopleId = obj.member;
- //获取邀请者名称
- var people = (!!obj.memberName)?obj.memberName:obj.member;
- //(1申请加入群组,2邀请加入群组,3直接加入群组,4解散群组,5退出群组,6踢出群组,7确认申请加入,8确认邀请结果,10管理员修改群组信息,11用户修改群组成员名片)
- var auditType = obj.auditType;
- if(2 == auditType){
- if(1 == obj.confirm){
- //直接加入群组,更新成员列表
- }else{
- //处理邀请加入群组请求通知
- var builder = new RL_YTX.ConfirmInviteJoinGroupBuilder();
- //设置邀请者id
- builder.setInvitor("邀请者id");
- //设置群组id
- builder.setGroupId(gruopId);
- //1 拒绝,2 同意
- builder.setConfirm(2);
- RL_YTX.confirmInviteJoinGroup(builder, function(e) {
- //处理成功
- }, function(obj){
- //处理失败
- });
邀请加入群组通知
Smith同意或拒绝加入群组,邀请者会收到的通知回调方法,设置回调参考文档:
(参考DEMO中IM. EV_noticeReceiveListener)
- //获取群组id
- var groupId = obj.groupId;
- //获取群组名称
- var groupName = obj.groupName;
- //获取加入成员id
- var peopleId = obj.member;
- //获取加入成员名称
- var people = (!!obj.memberName)?obj.memberName:obj.member;
- //(1申请加入群组,2邀请加入群组,3直接加入群组,4解散群组,5退出群组,6踢出群组,7确认申请加入,8确认邀请结果,10管理员修改群组信息,11用户修改群组成员名片)
- var auditType = obj.auditType;
- if(8 == auditType){
- if(2 != obj.confirm){
- //拒绝管理员邀请,通知页面
- }else{
- //同意管理员邀请,通知页面
- }
- }
退出群组
API介绍
方法名:RL_YTX. quitGroup(QuitGroupBuilder, callback, onError)查看API
对象:QuitGroupBuilder
代码示例
我们假设Smith要退出群组。(参考DEMO中IM. EV_quitGroup)
- //新建退出群组请求对象
- var builder = new RL_YTX.QuitGroupBuilder();
- //设置群组id
- builder.setGroupId(“出彩中国人群组id”);
- //发送请求
- RL_YTX.quitGroup(builder, function(){
- //退出群组成功
- //更新页面
- }, function(obj){
- //退出群组失败
- });
退出群组通知
Smith退出成功后,群组中成员Tony和John收到的通知回调方法,设置回调参考方法:
(参考Demo中的IM. EV_noticeReceiveListener)
- //获取群组id
- var groupId = obj.groupId;
- //获取群组名称
- var groupName = obj.groupName;
- //获取退出者id
- var peopleId = obj.member;
- //获取退出者名称
- var people = (!!obj.memberName)?obj.memberName:obj.member;
- //(1申请加入群组,2邀请加入群组,3直接加入群组,4解散群组,5退出群组,6踢出群组,7确认申请加入,8确认邀请结果,10管理员修改群组信息,11用户修改群组成员名片)
- var auditType = obj.auditType;
- if(5 == auditType){
- //有用户退出群组,更新列表
- }
群主踢人
只有群主可以进行踢人操作。
API介绍
方法名:RL_YTX. deleteGroupMember(DeleteGroupMemberBuilder, callback, onError)查看API
对象:DeleteGroupMemberBuilder
代码示例
我们假设群主Tony要把Smith要踢出群组”出彩中国人”(参考DEMO中IM. EV_deleteGroupMember)。
- //构建踢出用户请求对象
- var builder = new RL_YTX.DeleteGroupMemberBuilder(groupId,memberId);
- builder.setGroupId(“出彩中国人群组id”);
- builder.setMemberId(“Smith账号”);
- RL_YTX.deleteGroupMember(builder, function(){
- //踢出成功
- },function(obj){
- //踢出失败
- });
移除成员通知
群组中所有成员除管理员外都会收到的Smith被踢的消息,包括Smith自己,Smith判断被踢用户的id等于自己,则从本地删除群组。设置回调,参考文档:
(参考Demo中的IM. EV_noticeReceiveListener) :
- //获取群组id
- var groupId = obj.groupId;
- //获取群组名称
- var groupName = obj.groupName;
- //获取被踢出者id
- var peopleId = obj.member;
- //被踢出者名称
- var people = (!!obj.memberName)?obj.memberName:obj.member;
- //(1申请加入群组,2邀请加入群组,3直接加入群组,4解散群组,5退出群组,6踢出群组,7确认申请加入,8确认邀请结果,10管理员修改群组信息,11用户修改群组成员名片)
- var auditType = obj.auditType;
- if(6 == auditType){
- if(“Smith账号”.equals(“peopleId”)){
- //是自己,更新群组列表
- }else{
- //更新群组成员列表
- }}
解散群组
只有群主才能解散群组,讨论组不能被解散。
API介绍
方法名:RL_YTX. dismissGroup(DismissGroupBuilder, callback, onError)查看API
对象:DismissGroupBuilder
代码示例
我们假设群主Tony要解散"出彩中国人"
- //构建解散群组消息对象
- var obj = new RL_YTX.DismissGroupBuilder();
- //设置群组id
- obj.setGroupId(“出彩中国人群组id”);
- RL_YTX.dismissGroup(obj, function(){
- //解散成功,更新页面
- }, function(obj){
- //解散失败
- });
解散群组通知
群组中所有成员收到的通知回调。设置回调,参考文档:
(参考Demo中的IM. EV_noticeReceiveListener)
- //获取群组id
- var groupId = obj.groupId;
- //获取群组名称
- var groupName = obj.groupName;
- //获取操作者id
- var peopleId = obj.member;
- //获取操作者名称
- var people = (!!obj.memberName)?obj.memberName:obj.member;
- //(1申请加入群组,2邀请加入群组,3直接加入群组,4解散群组,5退出群组,6踢出群组,7确认申请加入,8确认邀请结果,10管理员修改群组信息,11用户修改群组成员名片)
- var auditType = obj.auditType;
- if(4 == auditType){
- //更新页面
- }
获取群组成员
API介绍
方法名:RL_YTX. getGroupMemberList(GetGroupMemberListBuilder, callback, onError)查看API
对象:GetGroupMemberListBuilder
代码示例
(参考Demo中的IM. EV_getGroupMemberList)
- //新建获取群组成员列表请求对象
- var obj = new RL_YTX.GetGroupMemberListBuilder();
- //设置群组id
- obj.setGroupId(“出彩中国人群组id”);
- //该接口为分页接口,如果要获取全部数据,设置pageSize为-1
- obj.setPageSize(-1);
- //发送请求
- RL_YTX.getGroupMemberList(obj, function(obj){
- //成功获取数据,更新页面
- }, function(obj){
- //获取数据失败
- });
群组搜索
可以根据群组名字或者群组ID来搜索群组,讨论组不可被搜索。
API介绍
方法名:RL_YTX. searchGroups(SearchGroupsBuilder, callback, onError)查看API
对象:SearchGroupsBuilder
代码示例
- //新建群组搜索请求对象
- var builder = new RL_YTX.SearchGroupsBuilder(type,key);
- //搜索类型 1 群组id精确查找 2 群组名称模糊搜索
- builder.setType(1);
- builder.setKeywords(“出彩中国人群组id”);
- RL_YTX.searchGroups(builder, function(obj){
- //检索成功
- },function(obj){
- //检索失败
- });
群组免打扰
群组免打扰功能是指群组收到消息的时候,是否震动手机或振铃(震动或振铃是在应用层处理,通过sdk可以设置此状态并保存在服务端,切换手机时,群组的状态也可同步)。
API介绍
方法名:RL_YTX. setGroupMessageRule(SetGroupMessageRuleBuilder, callback, onError)查看API
对象:SetGroupMessageRuleBuilder
代码示例
(参考DEMO中IM.EV_setGroupNotice)
- //新建设置群组个性化设置对象
- var builder = new RL_YTX.SetGroupMessageRuleBuilder();
- //设置群组id
- builder.setGroupId(“出彩中国人群组id”);
- //设置免打扰 1提醒 2免打扰
- builder.setIsNotice(2);
- RL_YTX.setGroupMessageRule(builder,function(){
- //设置免打扰成功
- },function(obj){
- //设置免打扰失败
- });
获取个人所在的群组
用户登录后,通常首先调取此接口获取自己所在群组,此接口会返回群组的id、名称、免打扰状态等信息。
API介绍
方法名:RL_YTX. getGroupList(GetGroupListBuilder, callback, onError)查看API
对象:GetGroupListBuilder
代码示例
(参考Demo中的IM. EV_getGroupList)
- //新建获取群组列表请求对象
- var obj = new RL_YTX.GetGroupListBuilder();
- //设置获取群组数量,该接口为分页接口,如果要获取全部数据,设置pageSize为-1
- obj.setPageSize(-1);
- obj.setTarget(2); //获取群组列表。默认为群组列表,如果要获取讨论组列表,该值传1。
- RL_YTX.getGroupList(obj, function(obj){
- //更新页面
- }, function(obj){
- //获取群组列表失败
- });
群主转让功能
API介绍
方法名:RL_YTX.setGroupMemberRole(SetGroupMemberRoleBuilder, callback, onError)查看API
对象:SetGroupMemberRoleBuilder
代码示例
- /*
- * 转让群组
- * @groupId 群组ID
- * @member 转让给的成员
- * @role 角色 1转让群主 2 设为管理员 3 取消管理员资格
- * */
- var roleBuilder = new RL_YTX.SetGroupMemberRoleBuilder();
- roleBuilder.setGroupId(groupId);
- roleBuilder.setMemberId(member);
- roleBuilder.setRole(role);
- RL_YTX.setGroupMemberRole(roleBuilder, function() {
- var trobj = $('#pop').find('tr[contact_you="' + member + '"]');
- var tdobj = trobj.children();
- var spanobj = tdobj.children();
- var deleobj = spanobj[3];
- $(deleobj).remove();
- console.log("修改成员角色成功");
- if (role == 1) {
- IM.HTML_pop_hide();
- } else if (role == 2) {
- $(spanobj).eq(0).children("span").text("[管理员]");
- $(spanobj).eq(2).after(' 取消管理员资格 ');
- } else {
- $(spanobj).eq(0).children("span").text("[成员]");
- $(spanobj).eq(2).after(' 设置为管理员 ');
- }
- }, function(obj) {
- alert("错误码: " + obj.code + "; 错误描述:" + obj.msg);
- });