IM 即时通讯
Windows/macOS
开发指南

群消息管理

更新时间: 2022/11/30 16:14:08

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

群消息收发

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

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

NIMSessionType参数说明

枚举常量 说明
kNIMSessionTypeP2P 个人单聊,即点对点
kNIMSessionTypeTeam 高级群
kNIMSessionTypeSuperTeam 超大群

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

群组通知消息

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

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

NIMNotificationId 事件说明
kNIMNotificationIdTeamSyncCreate 创建群
kNIMNotificationIdTeamInviteAccept 接受邀请后入群(需要被邀请人同意的模式)
kNIMNotificationIdTeamInvite 邀请入群(无需被邀请人同意的模式)
kNIMNotificationIdTeamMemberChanged 群成员变更
kNIMNotificationIdTeamAddManager 添加管理员
kNIMNotificationIdTeamKick 被踢出群
kNIMNotificationIdTeamOwnerTransfer 转让群主
kNIMNotificationIdTeamApplyPass 申请加入群成功
kNIMNotificationIdTeamRemoveManager 移除管理员
kNIMNotificationIdTeamDismiss 解散群
kNIMNotificationIdTeamLeave 退出群
kNIMNotificationIdTeamMuteMember 群内禁言/解禁
kNIMNotificationIdTeamUpdate 群信息更新
kNIMNotificationIdTeamSyncUpdateMemberProperty 群成员信息更新
kNIMNotificationIdLocalGetTeamMsgUnreadCount 获取群消息未读数
kNIMNotificationIdLocalGetTeamMsgUnreadList 获取群消息未读列表

群消息免打扰

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

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

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

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

设置免打扰

C++

通过调用 UpdateMyPropertyAsync 来设置指定群消息提醒类型。

接口原型:

static bool nim::Team::UpdateMyPropertyAsync	(const TeamMemberProperty & 	prop,
                                                 const TeamEventCallback & 	cb,
                                                 const std::string & 	json_extension = "" 
)	

参数说明:

参数 说明
prop 群成员属性,具体请参见TeamMemberProperty
json_extension 自定义扩展字段
cb 修改群成员信息的回调函数

示例代码:

long long new_bits = 0;
if (全部提醒)
	new_bits &= ~nim::kNIMTeamBitsConfigMaskMuteNotify;
else if (不提醒)
	new_bits |= nim::kNIMTeamBitsConfigMaskMuteNotify;
else//只提醒管理员消息
	new_bits |= nim::kNIMTeamBitsConfigMaskOnlyAdmin;
nim::TeamMemberProperty values(群id, 自己的account id, 自己的群成员类型);
values.SetBits(new_bits);
nim::Team::UpdateMyPropertyAsync(values, nbase::Bind(&TeamCallback::OnTeamEventCallback, std::placeholders::_1));

void TeamCallback::OnTeamEventCallback(const nim::TeamEvent& result)
{
	...
}

错误码:

状态码 说明
200 成功
803 群组不存在
804 用户不在群组中
805 群类型错误
C

通过调用 nim_team_update_my_property_async 来设置指定群消息提醒类型。

示例代码:

static CallbackFunc(int res_code,
    int notification_id,
    const char* tid,
    const char* result,
    const char* json_extension,
    const void* user_data){
	printf("res_code %d", res_code);
};

// const char* team_info_json = ......
nim_team_update_my_property_async(team_info_json, "", &CallbackFunc, NULL);
C#

通过调用 UpdateMyTeamProperty 来设置指定群消息提醒类型。

查询免打扰状态

C++

可通过TeamMemberPropertyGetBits 方法获取对应群的消息通知提醒模式。

示例代码

TeamMemberProperty prop{};
// ...
int64_t bits = prop.GetBits();
if ( bits & kNIMTeamBitsConfigMaskMuteNotify ) {
	std::cout << "关闭提醒";
} elseif ( bits & kNIMTeamBitsConfigMaskOnlyAdmin ) {
	std::cout << "只接收管理员消息";
}
C

可通过查询 NIMTeamMemberInfobits 值获取对应群的消息通知提醒模式。

示例代码

// team_member_prop_json
int64_t bits = team_member_prop_json[nim::kNIMTeamUserKeyBits].asInt64();
if ( bits & kNIMTeamBitsConfigMaskMuteNotify ) {
  printf("关闭提醒");
} elseif ( bits & kNIMTeamBitsConfigMaskOnlyAdmin ) {
  printf("只接收管理员消息");
}
C#

可通过查询 NIMTeamMemberInfoConfigBits 值获取对应群的消息通知提醒模式。

群消息已读回执

群聊消息已读回执相关接口和群聊消息已读/未读数查询相关操作,请参见群聊消息已读回执

API 参考

C++
API
说明
UpdateMyPropertyAsync 设置指定群消息提醒模式(免打扰)
GetBits 获取对应群的消息通知提醒模式
TeamMsgAckReadEx 群消息回执
TeamMsgQueryUnreadList 获取群消息未读成员列表
TeamMsgQueryUnreadList 根据指定 ID 获取群组消息已读未读情况
C
API
说明
nim_team_update_my_property_async 设置指定群消息提醒模式(免打扰)
nim_team_msg_ack_read_ex 群消息回执
nim_team_msg_query_unread_list 获取群消息未读成员列表
C#
API
说明
UpdateMyTeamProperty 设置指定群消息提醒模式(免打扰)
MsgAckRead 群消息回执
QueryMsgUnreadList 获取群消息未读成员列表
此文档是否对你有帮助?
有帮助
去反馈
  • 群消息收发
  • 群组通知消息
  • 群消息免打扰
  • 设置免打扰
  • 查询免打扰状态
  • 群消息已读回执
  • API 参考