创建和管理群组 WEB

更新时间:2022-05-16

群组是支持多人沟通的即时通讯系统,本文介绍如何使用环信即时通讯 IM SDK 在实时互动 app 中创建和管理群组,并实现群组相关功能。

环信即时通讯 IM web SDK 如下主要方法:

  • createGroup 创建群组;
  • destroyGroup 解散群组;
  • joinGroup 加入群组;
  • quitGroup 退出群组;
  • getGroupInfo 获取群组详情信息;
  • listGroupMembers 获取群成员列表;
  • getJoinedGroups 获取已加入的群组列表;
  • listGroups 获取公开群列表。

开始前,请确保满足以下条件:

  • 完成 SDK 初始化,详见 快速开始
  • 了解环信即时通讯 IM API 的接口调用频率限制,详见 详见 使用限制
  • 了解群组和群成员数量限制,详见 使用限制

新建群组

1、群组分为私有群和公开群。

私有群无法搜索到,公开群可通过群 ID 搜索到。目前支持以下配置:

  • groupname: string–群组名称;
  • desc: string–群组描述;
  • members: string[]–群成员, 用户 ID 组成的数组;
  • approval: boolean–是否为公开群;
  • approval: boolean–加群是否需要审批;
  • allowinvites: boolean–是否允许群成员邀请人加入此群,false:只有群主和管理员才可以向群组添加用户。若为公开群(public:true), 则不允许群成员邀请其他用户入群;
  • inviteNeedConfirm: boolean–邀请加群时,受邀用户是否需确认。true:受邀用户需同意才会加入群组;false:受邀用户不需要确认直接加入群组;
  • maxusers: number-群组最大成员数。

2、新建群组并加入用户,群主和用户根据设置不同会收到不同的群组事件回调。分为需要用户确认和无需确认两种情况:

第一种:加群需用户确认。

- 用户将会收到 `invite` 监听事件;
- 用户同意加入群组后,群主会收到 `invite_accept` 和 `memberJoinPublicGroupSuccess` 监听事件;其他群成员将会收到 `memberJoinPublicGroupSuccess` 监听事件。
  

流程如下:

第二种:加群无需用户确认。

- 用户会收到 `direct_joined` 监听事件;
- 群主会收到每个已加入成员对应的 `memberJoinPublicGroupSuccess` 监听事件;
- 先加入的群成员会收到 `memberJoinPublicGroupSuccess` 监听事件。
  

3、用户加入群组后,将可以收到群消息。

示例代码如下:

let option = {
    groupname: "groupName",
    desc: "A description of a group",
    members: ["user1", "user2"],
    public: true,
    approval: true,
    allowinvites: true,
    inviteNeedConfirm: true
    maxusers: 500
}
conn.createGroup(option).then(res => console.log(res))

解散群组

注意

此操作只能由群主进行。

示例代码如下:

// 群成员将会收到 `deleteGroupChat` 监听事件。
let option = {
    groupId: "groupId"
};
conn.destroyGroup(option).then(res => console.log(res))

用户申请入群

  • 用户只能申请加入公开群;
  • 如果公开群类 approvalfalse 时,用户直接加入群组;其他群成员会收到 memberJoinPublicGroupSuccess 监听事件;
  • 如果公开群类 approvaltrue 时, 群主和管理员会收到 joinGroupNotifications 监听事件。

用户可以选择同意或者拒绝入群申请。

群主和群管理员同意了入群申请,申请人会收到 joinPublicGroupSuccess 监听事件,其他群成员会收到 memberJoinPublicGroupSuccess 监听事件。

用户加群步骤如下:

1、从服务器获取公开群列表 获取到想要加入的群组 ID。

2、根据群组 ID 申请加入群组。

示例代码如下:

let options = {
    groupId: "groupId",
    message: "I am Tom"
};
conn.joinGroup(options).then(res => console.log(res))

退出群组

群成员可主动调用此方法退出群组。退出群组的成员不会再收到群消息。其他成员会收到 leaveGroup 监听事件。

示例代码如下:

let option = {
    groupId: "groupId"
};
conn.quitGroup(option).then(res => console.log(res))

获取群组详情信息

调用 getGroupInfo 根据群组 ID 获取群组详情,包括群组ID、群组名称、群组描述、群组基本属性、群主、群组管理员列表,示例如下:

let options = {
    // 群组 ID。
    groupId: 'groupId'    
};
conn.getGroupInfo(options).then((res) => {
    console.log(res)
})

获取群成员列表

获取群成员列表,具体如下:

  • 可以通过分页获取群成员:
let pageNum = 1,
    pageSize = 1000;
let options = {
    pageNum: pageNum,
    pageSize: pageSize,
    groupId: "groupId"
};
conn.listGroupMembers(options).then(res => console.log(res))

获取群组列表

  • 用户可以获取自己加入和创建的群组列表:
conn.getJoinedGroups({
  * 		pageNum: 1,
  * 		pageSize: 20
  * }).then(res => console.log(res))
  • 用户还可以分页获取公开群列表:
let limit = 20,
    cursor = globalCursor;
let option = {
    limit: limit,
    cursor: cursor, 
};
conn.listGroups(option).then(res => console.log(res))

群组事件监听

SDK 提供 addEventHandler 方法用于注册监听事件。开发者可以通过设置此监听,获取群组中的事件。

示例代码如下:

conn.addEventHandler('groupEvent', {
   onGroupChange: (msg) => { 
     switch(msg.type){
       case 'rmGroupMute':
         // 解除群组一键禁言。
         break;
       case 'muteGroup':
         // 设置群组一键禁言。
         break;
       case 'rmUserFromGroupWhiteList':
         // 删除群白名单成员。
         break;
       case 'addUserToGroupWhiteList':
         // 添加群白名单成员。
         break;
       case 'deleteFile':
         // 删除群文件
         break;
       case 'uploadFile':
         // 上传群文件。
         break;
       case 'deleteAnnouncement':
         // 删除群公告。
         break;
       case 'updateAnnouncement':
         // 更新群公告。
         break;
       case 'removeMute':
         // 解除禁言。
         break;
       case 'addMute':
         // 禁言用户。
         break;
       case 'removeAdmin':
         // 移除管理员。
         break;
       case 'addAdmin':
         // 添加管理员。
         break;
       case 'changeOwner':
         // 转让群组。
         break;
       case 'direct_joined':
         // 用户直接被拉进群。
         break;
       case 'leaveGroup':
         // 退群。
         break;
       case 'memberJoinPublicGroupSuccess':
         // 加入公开群成功。
         break;
       case 'removedFromGroup':
         // 从群组移除。
         break;
       case 'invite_decline':
         // 拒绝加群邀请。
         break;
       case 'invite_accept':
         // 接收加群邀请(群含权限情况)。
         break;
       case 'invite':
         // 加群邀请。
         break;
       case 'joinPublicGroupDeclined':
         // 拒绝入群申请。
         break;
       case 'joinPublicGroupSuccess':
         // 同意入群申请。
         break;
       case 'joinGroupNotifications':
         // 申请入群。
         break;
       case 'leave':
         // 退出群。
         break;
       case 'join':
         // 加入群。
         break;
       case 'deleteGroupChat':
         // 解散群。
         break;
       default:
         break;
     }
   }
 })