即时通信 IM 群组分为以下类型:
每种群类型的功能特性及限制如下表所示:
功能项 | 好友工作群(Work) | 陌生人社交群(Public) | 临时会议群(Meeting) | 直播群(AVChatRoom) |
---|---|---|---|---|
可用群成员角色 | 群主、普通成员 | 群主、管理员、普通成员 | 群主、管理员、普通成员 | 群主、普通成员 |
是否支持申请加群 | 不支持 | 支持,但需要群主或管理员审批 | 支持,且无需审批 | 支持,且无需审批 |
是否支持成员邀请他人加群 | 支持 | 不支持 | 不支持 | 不支持 |
是否支持群主退群 | 支持 | 不支持 | 不支持 | 不支持 |
群组资料修改权限 | 任意群成员均可修改 | 群主和管理员 | 群主和管理员 | 群主 |
“踢人”权限 | 群主可踢人 | 群主和管理员可踢人,但管理员仅支持踢普通群成员 | 不支持踢人,可用“禁言”功能达到类似效果 | |
“禁言”权限 | 不支持禁言 | 群主和管理员可禁言, 但管理员仅支持禁言普通群成员 | 群主可禁言 | |
是否支持未读消息计数 | 支持 | 支持 | 不支持 | 不支持 |
是否支持查看入群前消息记录 | 不支持 | 不支持 | 支持 | 不支持 |
是否支持云端历史消息存储 |
|
不支持 | ||
群组数量 |
|
|
||
群成员数量 |
|
群成员人数无上限 |
说明:专业版或旗舰版 SDKAppID 下,所有群类型日净增群组数上限为1万个。免费峰值群组数为10万个/月,超出免费量将产生 套餐外超量费用。
调用 createGroup 接口,并指定需要的 groupType
、groupID
和 groupName
参数,即可简单创建一个群组。
如果您想在创建群组的同时初始化群的信息,例如群简介、群头像、以及最初的几个群成员等,可以调用 V2TIMGroupManager
管理类中的 createGroup 接口实现,其中 V2TIMGroupManager
管理类可以通过 V2TIMManager.getGroupManager
获取。
// 示例代码:使用高级版 createGroup 创建一个工作群
V2TIMGroupInfo v2TIMGroupInfo = new V2TIMGroupInfo();
v2TIMGroupInfo.setGroupName("testWork");
v2TIMGroupInfo.setGroupType("Work");
v2TIMGroupInfo.setIntroduction("this is a test Work group");
List<V2TIMCreateGroupMemberInfo> memberInfoList = new ArrayList<>();
V2TIMCreateGroupMemberInfo memberA = new V2TIMCreateGroupMemberInfo();
memberA.setUserID("vinson");
V2TIMCreateGroupMemberInfo memberB = new V2TIMCreateGroupMemberInfo();
memberB.setUserID("park");
memberInfoList.add(memberA);
memberInfoList.add(memberB);
V2TIMManager.getGroupManager().createGroup(
v2TIMGroupInfo, memberInfoList, new V2TIMValueCallback<String>() {
@Override
public void onError(int code, String desc) {
// 创建失败
}
@Override
public void onSuccess(String groupID) {
// 创建成功
}
});
groupType
是字符串类型,可以选择 “Work”、“Public”、“Meeting” 和 “AVChatRoom” 中的任何一个,各种不同类型之间的差异请参见 群类型介绍。groupID
用于指定群组 ID,它用于唯一标识一个群,请勿在同一个 SDKAppID 下创建相同 groupID
的群。如果您指定 groupID
为 null,系统会为您默认分配一个群 ID。groupName
用于指定群的描述信息,最长支持30个字节。不同类型的群,加群的方法不同, 下面根据加群流程从简单到复杂进行逐一介绍:
类型 | 好友工作群(Work) | 陌生人社交群(Public) | 临时会议群(Meeting) | 直播群(AVChatRoom) |
---|---|---|---|---|
加群方法 | 必须由其他群成员邀请 | 用户申请,群主或管理员审批 | 用户可随意加入 | 用户可随意加入 |
临时会议群(Meeting)和直播群(AVChatRoom)主要用于满足成员进进出出的交互场景,例如在线会议,秀场直播等。因此,这两种类型群的入群流程最为简单。
用户调用 joinGroup 即可加入该群,加群成功后,全体群成员(包括加群者)都会收到 onMemberEnter 回调。
好友工作群(Work)类似微信群和企业微信群,适用于工作交流,在交互设计上限制用户主动加入,只能由现有的群成员邀请才能加群。
现有的群成员调用 inviteUserToGroup 邀请另一个用户入群,全体群成员(包括邀请者自己)会收到 onMemberInvited 回调。
陌生人社交群(Public)类似 QQ 中的各种兴趣群和部落区,任何人都可以申请入群,但需要经过群主或管理员审批才能真正入群。陌生人社交群默认需要群主或管理员进行审批才能加群的,但群主或管理员也可以通过 setGroupInfo 接口调整加群选项(V2TIMGroupAddOpt
),可以设置为更严格的“禁止任何人加群”,也可以设置为更宽松的“放开审批流程”。
需要审批才能进入群的流程如下:
isAgreeJoin
为 true
表示同意加群,反之被拒绝。同意加群后,全员(包括请求者)收到 onMemberEnter 回调。调用 quitGroup 可以退出群组,退群者会收到 onQuitFromGroup 回调,群其他成员会收到 onMemberLeave 回调。
注意:对于陌生人社交群(Public)、临时会议群(Meeting)和直播群(AVChatRoom),群主不可以退群的,群主只能 解散群组。
调用 dismissGroup 可以解散群组,全员会收到 onGroupDismissed 回调。
注意:
- 对于陌生人社交群(Public)、临时会议群(Meeting)和直播群(AVChatRoom),群主随时可以解散群。
- 好友工作群(Work)的解散最为严格,即使群主也不能随意解散,只能由您的业务服务器调用 解散群组 REST API 解散。
调用 getJoinedGroupList 可以获取已加入的好友工作群(Work)、陌生人社交群(Public)、临时会议群(Meeting)列表,但直播群(AVChatRoom)不包含在此列表中。
调用 getGroupsInfo 可以获取群资料,该接口支持批量获取。您可以一次传入多个 groupID
获取多个群的群资料。
调用 setGroupInfo 可以修改群资料。群资料被修改后,全员会收到 onGroupInfoChanged 回调。
注意:
- 好友工作群(Work)所有群成员都可以修改群基础资料。
- 陌生人社交群(Public)、临时会议群(Meeting)只有群主或管理员可以修改群基础资料。
- 直播群(AVChatRoom)只有群主可以修改群基础资料。
// 示例代码:修改群资料
V2TIMGroupInfo v2TIMGroupInfo = new V2TIMGroupInfo();
v2TIMGroupInfo.setGroupID("需要修改的群 ID");
v2TIMGroupInfo.setFaceUrl("http://xxxx");
V2TIMManager.getGroupManager().setGroupInfo(v2TIMGroupInfo, new V2TIMCallback() {
@Override
public void onError(int code, String desc) {
// 失败
}
@Override
public void onSuccess() {
// 成功
}
});
任何群成员都可以调用 setReceiveMessageOpt 接口修改群消息接收选项。群消息接收选项包括:
根据群消息接收选择可以实现群消息免打扰:
V2TIMGroupInfo.V2TIM_GROUP_NOT_RECEIVE_MESSAGE
后,群内的任何消息都收不到,会话列表也不会更新。群消息接收选项设置为说明:此方式需使用未读计数功能,因此仅适用于好友工作群(Work)和陌生人社交群(Public)。
V2TIMGroupInfo.V2TIM_GROUP_RECEIVE_NOT_NOTIFY_MESSAGE
,当群内收到新消息,会话列表需要更新时,可以通过会话中的 getUnreadCount 获取到消息未读数。根据 getRecvOpt 判断获取到的群消息接收选项为 V2TIMGroupInfo.V2TIM_GROUP_RECEIVE_NOT_NOTIFY_MESSAGE
时显示小红点而非消息未读数。基于 API2.0 我们设计了全新的群自定义字段,我们称之为 "群属性",其特性如下:
基于群属性,我们可以做语聊房的麦位管理,当有人上麦的时候,可以设置一个群属性管理上麦人信息,当有人下麦的时候,可以删除对应群属性,其他成员可以通过获取群属性列表来展示麦位列表。
调用 initGroupAttributes 接口可以初始化群属性,如果该群之前有群属性,会先清空原来的群属性。
调用 setGroupAttributes 接口可以设置群属性,如果设置的群属性不存在,会自动添加该群属性。
调用 deleteGroupAttributes 接口可以删除指定群属性,如果 keys
字段填 null
,则会清空所有的群属性。
调用 getGroupAttributes 接口可以获取指定群属性,如果 keys
字段填 null
,则会获取所有的群属性。
群属性有任何的更新变化,都会通过 onGroupAttributeChanged 回调出来所有的群属性字段。
调用 getGroupMemberList 可以获取某个群的群成员列表,该列表中包含了各个群成员的资料信息,例如用户ID(userID
)、群名片(nameCard
)、头像(faceUrl
)、昵称(nickName
)、进群时间(joinTime
)等信息。
一个群中的成员人数可能很多(例如5000+),群成员列表的拉取接口支持过滤器(filter
)和分页拉取(nextSeq
)两个高级特性。
在调用 getGroupMemberList 接口时,您可以指定 filter
确定是否仅拉取特定角色的信息列表。
过滤器 | 过滤类型 |
---|---|
V2TIMGroupMemberFullInfo.V2TIM_GROUP_MEMBER_FILTER_ALL | 拉取所有群成员的信息列表 |
V2TIMGroupMemberFullInfo.V2TIM_GROUP_MEMBER_FILTER_OWNER | 仅拉取群主的信息列表 |
V2TIMGroupMemberFullInfo.V2TIM_GROUP_MEMBER_FILTER_ADMIN | 仅拉取群管理员的信息列表 |
V2TIMGroupMemberFullInfo.V2TIM_GROUP_MEMBER_FILTER_COMMON | 仅拉取普通群成员的信息列表 |
//示例代码:通过 filter 参数指定只拉取群主的资料
int role = V2TIMGroupMemberFullInfo.V2TIM_GROUP_MEMBER_FILTER_OWNER;
V2TIMManager.getGroupManager().getGroupMemberList("testGroup", role, 0,
new V2TIMValueCallback<V2TIMGroupMemberInfoResult>() {
@Override
public void onError(int code, String desc) {
// 拉取失败
}
@Override
public void onSuccess(V2TIMGroupMemberInfoResult v2TIMGroupMemberInfoResult) {
// 拉取成功
}
});
很多情况下,用户界面上并不需要展示全部的群成员信息,只需展示群成员列表的第一页即可,等用户单击“下一页”或在列表页下拉刷新时,才需要拉取更多的群成员。针对此类场景,您可以使用分页拉取。
在调用 getGroupMemberList 接口时,一次最多返回50个成员,您可以通过 nextSeq
参数分页拉取成员列表,nextSeq
参数为分页拉取标志,第一次拉取时请填0。当首次拉取群成员信息成功后,getGroupMemberList
的回调结果 V2TIMGroupMemberInfoResult 中会包含 getNextSeq() 接口。
V2TIMGroupMemberInfoResult
中的 getNextSeq() 作为参数,传入 getGroupMemberList 接口。//示例代码:通过 nextSeq 参数进行分页拉取
{
...
long nextSeq = 0;
getGroupMemberList(nextSeq);
...
}
public void getGroupMemberList(long nextSeq) {
int filterRole = V2TIMGroupMemberFullInfo.V2TIM_GROUP_MEMBER_FILTER_ALL;
V2TIMManager.getGroupManager().getGroupMemberList("testGroup", filterRole, nextSeq,
new V2TIMValueCallback<V2TIMGroupMemberInfoResult>() {
@Override
public void onError(int code, String desc) {
// 拉取失败
}
@Override
public void onSuccess(V2TIMGroupMemberInfoResult groupMemberInfoResult) {
if (groupMemberInfoResult.getNextSeq() != 0) {
// 继续分页拉取
getGroupMemberList(groupMemberInfoResult.getNextSeq());
...
} else {
// 拉取结束
}
}
});
}
调用 getGroupMembersInfo 可以获取群成员资料,该接口支持批量获取,您可以一次传入多个 userID
获取多个群成员的资料,从而提升网络传输效率。
群主或管理员可以调用 setGroupMemberInfo 接口修改群成员的群名片(nameCard
)、 群成员角色(role
)、禁言时间(muteUntil
)以及自定义字段等与群成员相关的资料。
群主或管理员可以通过 muteGroupMember 禁言某一个群成员并设置禁言时间,禁言时间单位为秒,禁言信息存储于群成员的 muteUtil 属性字段中。群成员被禁言后,全员(包括被禁言的群成员)都会收到 onMemberInfoChanged 事件回调。
群主或管理员也可以通过 setGroupInfo 接口对整个群进行禁言,将 allMuted 属性字段设置为 true
即可。全群禁言没有时间限制,需通过将群资料 setAllMuted(false)
解除禁言。
群主或管理员调用 kickGroupMember 接口可以实现踢人。由于直播群(AVChatRoom)对进群没有限制,因此直播群(AVChatRoom)没有支持踢人的接口,您可以使用 muteGroupMember 达到同样的目的。
成员被踢后,全员(包括被踢人)会收到 onMemberKicked 回调。
群主调用 setGroupMemberRole 可以对陌生人社交群(Public)或临时会议群(Meeting)中的群成员进行角色切换,可切换角色包括普通成员、管理员。
群主可以调用 transferGroupOwner 把群主转让给其他群成员。
群主转让后,全员会收到 onGroupInfoChanged 回调,其中 V2TIMGroupChangeInfo
的 type 为 V2TIMGroupChangeInfo.V2TIM_GROUP_INFO_CHANGE_TYPE_OWNER
,value 值为新群主的 UserID。
可以继续接收消息,但是直播群(AVChatRoom)中的消息不支持云端存储,因此无法拉取到掉线期间的消息。
请确认群组类型:
临时会议群(Meeting)和直播群(AVChatRoom)分别配合会议和直播的音视频场景,因此这两类群组均不支持未读消息计数。
作为企业的CEO,现在应该知道云计算技术在疫情结束之后可以为其业务带来什么,并...
做网站 域名 需要在哪里备案?做网站 域名备案 ,在网站的空间/主机服务商处进行...
是怎么不实名购买一个 域名 的?目前来说,在国内注册或者购买的大部分域名,比...
可读的代码是可维护的 在这篇短文中,我将介绍一些你可以用来改进你的代码的方法...
功能介绍 返回当前API所有可用的版本(仅针对OpenStack原生接口)。 URI GET / ...
9月25日,乐山大佛景区管委会与腾讯云达成战略合作,推动乐山大佛首次上云,双方...
视频网站 虚拟主机 多大才行?这得具体看网站有多少视频内容了。虽然虚拟主机可...
在无线通信系统中同步是非常关键的一个过程,这对信号正确的传输有着非常的重要...
共享带宽包(Bandwidth Package,BWP)是一种多 IP 聚合的计费模式,可大幅降低...
【51CTO.com快译】虽然大多数公司专注于培训员工并了解大数据技术,但大部分仍未...