Flutter

群消息管理

更新时间: 2024/03/07 11:28:17

网易云信 NIM SDK 支持群组中的消息收发,群组相关操作的通知消息的接收,以及群消息通知模式的设置。

群消息收发

群组中支持收发多种消息类型。

在创建/加入群组后,用户发送和接收消息的接口与单聊消息收发相同,区别在于会话类型(sessionType)的参数配置,选择 team 即可。

SessionTypeEnum参数说明

枚举常量 说明
p2p 单聊
team 高级群
superTeam 超大群
chatRoom 聊天室
system 系统通知

具体消息收发的流程,请参见消息收发

群组通知消息

NIM SDK 内置支持的会话消息类型(NIMMessageType)中的通知消息(notification)主要用于群组、聊天室和超大群的事件通知,由服务端下发,客户端无法发送事件通知消息。

目前支持触发群通知消息的事件如下:

NIMTeamNotificationTypes 附件类 事件说明
acceptInvite NIMMemberChangeAttachment 接受邀请后入群(需要被邀请人同意的模式)
inviteMember NIMMemberChangeAttachment 邀请成员入群(无需被邀请人同意的模式)
addTeamManager NIMMemberChangeAttachment 添加管理员
kickMember NIMMemberChangeAttachment 被踢出群
transferOwner NIMMemberChangeAttachment 转让群主
passTeamApply NIMMemberChangeAttachment 申请加入群成功
removeTeamManager NIMMemberChangeAttachment 移除管理员
dismissTeam NIMDismissAttachment 解散群
leaveTeam NIMLeaveTeamAttachment 退出群
muteTeamMember NIMMuteMemberAttachment 群内禁言/解禁
updateTeam NIMUpdateTeamAttachment 群信息更新

群通知消息解析步骤

  1. 通过 NIMMessage.messageType 方法获取消息类型,若为 notification ,则为通知消息。
  2. NIMMessage.messageAttachment 方法获取的附件对象强类型转换为 NIMTeamNotificationAttachment
  3. 通过 NIMTeamNotificationAttachment.type 方法获取具体的通知类型(TeamNotificationTypes)。
  4. 根据对应的 TeamNotificationTypesNIMMessage.messageAttachment 得到的附件对象强转为对应的附件类(见上方表格)。
  • 针对 NIMMemberChangeAttachment,通过 targets 方法可以获取该事件的承受者。如 B 被踢出群,则通过 targets 可以获取到 B 的用户账号。
  • 针对 NIMMuteMemberAttachment,其为 NIMMemberChangeAttachment 的子类,可通过 targets 可以获取该事件的承受者,可通过 mute 判断是禁言还是被解禁。
  • 针对 NIMUpdateTeamAttachment,需要解析到具体是哪个群信息被更新。群整体禁言属于此类型。

解析被更新的群信息,示例代码如下:

    NimCore.instance.messageService.onMessage.listen((event) {
      print('Test_Observer onMessage ${event.toString()}');
      for (NIMMessage m in event) {
        if(message.messageType = NIMMessageType.notification){
         if (type >= NIMTeamNotificationTypes.inviteMember &&
            type <= NIMTeamNotificationTypes.muteTeamMember) {
               ///TODO  参考支持触发群通知消息的事件
          }
        }
      }
    });

群消息免打扰

SDK 支持对群消息通知提醒模式的配置。群消息通知提醒模式(NIMTeamMessageNotifyTypeEnum)分为:

  • all:全部提醒(默认)
  • manager:仅群主/管理员消息提醒
  • mute:全部不提醒

以上通知提醒指的是云信体系内的推送与消息提醒

群消息的提醒模式不影响群消息的接收和未读数的变化。若将提醒模式设置为全部不提醒,仍然能接收到群消息接收,未读数仍会变化。

设置免打扰

通过调用 muteTeam 来设置指定群消息通知类型。

参数说明:

参数 说明
teamId 群ID
notifyType 通知类型枚举
all:全部提醒(默认)
manager:仅群主/管理员消息提醒
mute:全部不提醒

示例代码:

var result = await NimCore.instance.teamService.muteTeam(
    teamId,
    NIMTeamMessageNotifyTypeEnum.mute);

查询免打扰状态

可通过 NIMTeam.messageNotifyType 获取对应群的消息通知提醒模式。

群消息已读回执

群聊消息已读回执相关接口,请参见群聊消息已读回执

API 参考

API
说明
muteTeam 设置指定群消息通知类型
fetchTeamMessageReceiptDetail (群消息发送方)查询单条群组消息在指定用户中的已读、未读账号列表
queryTeamMessageReceiptDetail 从本地数据库查询单条群组消息在指定用户中的已读、未读账号列表(同步接口)
refreshTeamMessageReceipt (群消息发送方)批量刷新群组消息已读、未读的数量信息,没有异步回调
sendTeamMessageReceipt (群消息接收方)标记群组消息已读
此文档是否对你有帮助?
有帮助
去反馈
  • 群消息收发
  • 群组通知消息
  • 群通知消息解析步骤
  • 群消息免打扰
  • 设置免打扰
  • 查询免打扰状态
  • 群消息已读回执
  • API 参考