IM 即时通讯
Windows/macOS
产品介绍
简介
主要功能
产品优势
海外数据中心
IM平滑迁移方案
接口及业务限制
功能介绍
帐号集成与登录
基础消息功能
群组功能
聊天室功能
聊天室标签功能
圈组功能
多端登录与互踢策略
质量数据监控台
更新日志
Demo 更新日志
NIM SDK 更新日志
快速开始
实现单聊消息收发(不含 UI)
实现圈组消息收发(不含 UI)
开发指南
概要介绍
集成方式(当前版本)
集成方式(Windows旧版本)
集成方式(macOS旧版本)
初始化
登录登出
消息收发
最近会话
历史记录
用户资料托管
好友关系托管
事件订阅
系统通知
系统通知概述
内置系统通知管理
内置系统通知未读数
自定义系统通知收发
群组功能
群组概述
群组管理
群成员管理
群消息管理
超大群功能
开通聊天室功能
聊天室
圈组功能
初始化
登录圈组
圈组服务器管理
圈组服务器成员管理
游客功能
频道相关
频道管理
频道分组
频道分组黑白名单
频道未读数管理
搜索服务器和频道
身份组相关
身份组概述
身份组应用场景
服务器身份组
频道身份组
频道分组身份组
频道用户定制权限
自定义权限项
成员权限判定
身份组相关查询
圈组订阅机制
圈组消息相关
圈组消息收发
圈组消息撤回
圈组消息更新
圈组消息删除
会话消息回复(Thread)
圈组快捷评论
获取频道最后一条消息
消息正在输入
圈组消息搜索
圈组消息查询
查询@我的消息
服务器未读数
圈组系统通知
圈组系统通知概述
圈组系统通知收发
圈组系统通知更新
圈组各端接口命名差异
语音录制与播放
NOS云存储服务
文档转换
反垃圾(内容审核)
API 参考
Windows/macOS API 参考
状态码
IM 控制台指南
创建应用
注册 IM 账号
升级服务
配置应用客户端标识
参考文档
升级指引
开发示例
UI库指南
Demo源码导读
打包发布
类与常量定义说明
常见问题
FAQ
服务协议

最近会话

更新时间: 2022/04/08 12:46:40

最近会话

最近会话记录了与用户最近有过会话的联系人信息,包括联系人帐号、联系人类型、最近一条消息的时间、消息状态、消息缩略和未读条数等信息。

获取最近会话列表

C++

void OnQuerySessionListCallback(int unread_count, const nim::SessionDataList& session_list)
{
	···
}

void foo()
{
	nim::Session::QueryAllRecentSessionAsync(&OnQuerySessionListCallback);
}

C#

void foo()
{
	NIM.Session.SessionAPI.QueryAllRecentSession((a, b) =>
	{
		if (b == null || b.SessionList == null) return;
		foreach (var item in b.SessionList)
		{
			···
		}
	});
}

C

void CallbackQuerySessionListCb(int total_unread_count, const char* session_list, const char *json_exten, const void *user_data)
{
	...
}

typedef void(*nim_session_query_all_recent_session_async)(const char *json_extension, nim_session_query_recent_session_cb_func cb, const void* user_data);

void foo()
{
	nim_session_query_all_recent_session_async func = (nim_session_query_all_recent_session_async) GetProcAddress(hInst, "nim_session_query_all_recent_session_async");
	func(nullptr, &CallbackQuerySessionListCb, nullptr);
}

监听最近会话变更

在收发消息的同时,SDK会更新对应聊天对象的最近联系人资料。当有消息收发时,SDK 会发出最近联系人更新通知,使用nim_session_reg_change_cb 注册通知回调函数。

删除最近会话列表

SDK 也提供了删除单个和删除全部最近联系人的接口。需要注意:删除会话项时本地和服务器会同步删除!

  • 删除单个

C++

void DeleteRecentSessionCb(nim::NIMResCode code, const nim::SessionData &result, int total_unread_counts)
{
	···
}

void DeleteSessionItem(const nim::SessionData& msg)
{
	nim::Session::DeleteRecentSession(msg.type_, msg.id_, &DeleteRecentSessionCb);
}

C#

void foo(SessionInfo info)
{
	NIM.Session.SessionAPI.DeleteRecentSession(info.SessionType, info.Id, (a, b, c) =>
	{
		···
	});
}

C

void CallbackNotifySession(int rescode, const char *result, int total_unread_counts, const char *json_extension, const void *user_data)
{
	// 解析result
}

typedef void(*nim_session_delete_recent_session_async)(NIMSessionType to_type, const char *id, const char *json_extension, nim_session_change_cb_func cb, const void *user_data);

void foo(nim::NIMSessionType to_type, const char *id)
{
	nim_session_delete_recent_session_async func = (nim_session_delete_recent_session_async) GetProcAddress(hInst, "nim_session_delete_recent_session_async");
	func(to_type, id, "", &CallbackNotifySession, nullptr);
}
  • 删除全部

C++

void DeleteAllRecentSessionCb(nim::NIMResCode code, const nim::SessionData &result, int total_unread_counts)
{
	···
}

void DeleteAllSessionItem()
{
	nim::Session::DeleteAllRecentSession(&DeleteAllRecentSessionCb);
}

C#

void foo()
{
	NIM.Session.SessionAPI.DeleteAllRecentSession((a, b, c) =>
	{
		···
	});
}

C

void CallbackNotifySession(int rescode, const char *result, int total_unread_counts, const char *json_extension, const void *user_data)
{
	// 解析result
}

typedef void(*nim_session_delete_all_recent_session_async)(const char *json_extension, nim_session_change_cb_func cb, const void *user_data);

void foo()
{
	nim_session_delete_all_recent_session_async func = (nim_session_delete_all_recent_session_async) GetProcAddress(hInst, "nim_session_delete_all_recent_session_async");
	func("", &CallbackNotifySession, nullptr);
}

未读数清零

C++

void ResetUnread(const std::string &id, nim::NIMSessionType type)
{
	nim::Session::SetUnreadCountZeroAsync(type, id, nim::Session::SetUnreadCountZeroCallback());
	nim::MsgLog::BatchStatusReadAsync(id, type, nim::MsgLog::BatchStatusReadCallback());
}

C#

void ResetUnread(SessionInfo info)
{
	NIM.Session.SessionAPI.SetUnreadCountZero(info.SessionType, info.Id, (a, b, c) =>
	{
		···
	});

	NIM.Messagelog.MessagelogAPI.MarkMessagesStatusRead(info.Id, info.SessionType, (a, b, c) =>
	{
		···
	});
}

C

void CallbackNotifySession(int rescode, const char *result, int total_unread_counts, const char *json_extension, const void *user_data)
{
	// 解析result
}

void CallbackModifyMultipleMsglog(int res_code
	, const char *uid
	, nim::NIMSessionType to_type
	, const char *json_extension
	, const void *callback)
{
	···
}

typedef void(*nim_session_set_unread_count_zero_async)(NIMSessionType to_type, const char *id, const char *json_extension, nim_session_change_cb_func cb, const void *user_data);
typedef void(*nim_msglog_batch_status_read_async)(const char* account_id, nim::NIMSessionType to_type, const char *json_extension, nim_msglog_res_ex_cb_func cb, const void* user_data);

void foo(nim::NIMSessionType type, const char *id)
{
	nim_msglog_batch_status_read_async batch_func = (nim_msglog_batch_status_read_async) GetProcAddress(hInst, "nim_msglog_batch_status_read_async");
	nim_session_set_unread_count_zero_async unread_func = (nim_session_set_unread_count_zero_async) GetProcAddress(hInst, "nim_session_set_unread_count_zero_async");

	unread_func(type, id, "", &CallbackNotifySession, nullptr);
	batch_func(id, type, "", &CallbackModifyMultipleMsglog, nullptr);
}
此文档是否对你有帮助?
有帮助
我要吐槽
  • 最近会话
  • 获取最近会话列表
  • 监听最近会话变更
  • 删除最近会话列表
  • 未读数清零