最近会话
更新时间: 2021/07/22 11:55:24
最近会话列表由 SDK 维护并提供查询、监听变化的接口,只要与某个用户或者群组有产生聊天(自己发送消息或者收到消息), SDK 会自动更新最近会话列表并通知上层,开发者无需手动更新。
最近会话 SessionInfo
,也可称作会话列表或者最近联系人列表,它记录了与用户最近有过会话的联系人信息,包括联系人帐号、联系人类型、最近一条消息的时间、消息状态、消息内容、未读条数等信息。
SessionInfo
重要参数说明:
参数类型 | SessionInfo 字段 | 说明 |
---|---|---|
String | Id | 最近联系人的 ID(好友帐号,群 ID 等) |
NIMSessionType | SessionType | 会话的类型(群会话、点对点消息) |
int | UnreadCount | 当前会话的消息未读数 |
NIMSessionCommand | Command | 当前会话的修改操作类型(增加、更新、删除等,详见NIMSessionCommand) |
String | MsgId | 当前会话的最新一条消息的唯一Id |
String | Sender | 当前会话最新一条消息发送方的ID |
long | TimeTag | 当前会话最新一条消息时间戳(毫秒) |
NIMMessageType | MsgType | 最近一条消息的消息类型 (如文本、图片、视频、语音消息等等 详见NIMMessageType) |
String | Content | 当前会话最近一条消息内容 |
String | Attach | 当前会话最近一条消息的附件内容 |
object | Attachment | 当前会话最近一条消息的附件内容,从Attach 字段解析而来 |
NIMMsgLogStatus | Status | 当前会话最近一条消息状态(已读、未读等状态,详见消息状态) |
NIMMsgLogSubStatus | SubStatus) | 当前会话最近一条消息子状态(已播放、未播放等状态,详见消息子状态) |
bool | IsLast | 在批量消息通知时,消息变更或增加时是否是最后一条变更的信息 |
bool | IsPinnedOnTop | 是否会话置顶(暂不支持) |
bool | IsRobot | 是否是机器人消息(暂不支持) |
String | ExtendString | 本地扩展字段, 限4096(暂不支持) |
NIMSessionType
枚举值说明:
枚举 | 值 | 说明 |
---|---|---|
kNIMSessionTypeP2P | 0 | 个人,即点对点会话 |
kNIMSessionTypeTeam | 1 | 群组会话 |
NIMSessionCommand
枚举值说明:
枚举 | 值 | 说明 |
---|---|---|
kNIMSessionCommandAdd | 0 | 添加会话项 |
kNIMSessionCommandRemove | 1 | 删除单个会话项 |
kNIMSessionCommandRemoveAll | 2 | 删除所有会话项 |
kNIMSessionCommandRemoveAllP2P | 3 | 删除所有点对点的会话项 |
kNIMSessionCommandRemoveAllTeam | 4 | 删除所有群的会话项 |
kNIMSessionCommandMsgDeleted | 5 | 单个会话项的消息已删除 |
kNIMSessionCommandAllMsgDeleted | 6 | 所有会话项的消息已删除 |
kNIMSessionCommandAllP2PMsgDeleted | 7 | 所有点对点会话项的消息已删除 |
kNIMSessionCommandAllTeamMsgDeleted | 8 | 所有群会话项的消息已删除 |
kNIMSessionCommandUpdate | 9 | 更新会话项 |
注意:最近会话是本地的,不会漫游。漫游与消息相关,与最近会话无关。多端同时登录时,最新版本调用设置会话清零接口时会同步其他端的同一个会话为0.
获取最近会话列表
- API 介绍
获取最近的会话列表数据。
- API 原型
public static void QueryAllRecentSession(QueryRecentHandler handler);
- 参数说明
参数 | 说明 |
---|---|
handler | 通知查询结果的异步回调函数 |
- 示例
NIM.Session.SessionAPI.QueryAllRecentSession((a, b) =>
{
if (b == null || b.SessionList == null) return;
foreach (var item in b.SessionList)
{
···
}
});
监听最近会话变更
- API 介绍
在收发消息的同时,SDK 会更新对应聊天对象的最近联系人资料。当有消息收发时,SDK 会发出最近联系人更新通知,通过注册该事件来监听会话项变化。
- API 原型
public static EventHandler<SessionChangedEventArgs> RecentSessionChangedHandler;
SessionChangedEventArgs 参数说明:
参数类型 | SessionChangedEventArgs 字段 | 说明 |
---|---|---|
ResponseCode | ResCode | 错误码(详见ResponseCode ) |
SessionInfo | Info | 会话信息,详见SessionInfo |
int | TotalUnreadCount | 所有会话的未读数计数总和 |
- 示例
void OnRecentSessionChangedHandler(object sender,SessionChangedEventArgs args)
{
if (args != null)
{
...
}
}
//监听事件通知
SessionAPI.RecentSessionChangedHandler += OnRecentSessionChangedHandler;
//如果不再需要,则注销事件监听
SessionAPI.RecentSessionChangedHandler -= OnRecentSessionChangedHandler;
未读数清零
- API 介绍
如果需要将当前会话的未读数清零,则需要调用SetUnreadCountZero
接口来设置,在较老的版本中,在调用SetUnreadCountZero
接口之后还需要调用 MarkMessagesStatusRead
接口来设置消息数据库的已读状态。
- API 原型
public static void SetUnreadCountZero(Session.NIMSessionType toType, string id, SessionChangeHandler handler)
- 参数说明
参数 | 说明 |
---|---|
toType | 会话类型 |
id | 会话id(对方账号或者群id) |
handler | 异步通知回调 |
- 示例
//指定需要设置已读的会话类型和会话id;
NIMSessionType sessionType = NIMSessionType.kNIMSessionTypeP2P;
string sessionId = "test1";
//设置会话未读计数清零
NIM.Session.SessionAPI.SetUnreadCountZero(sessionType, sessionId, (a, b, c) =>
{
···
});
//最新版本已经不再需要调用NIM.Messagelog.MessagelogAPI.MarkMessagesStatusRead接口
NIM.Messagelog.MessagelogAPI.MarkMessagesStatusRead(sessionId, sessionType, (a, b, c) =>
{
···
});
删除指定最近联系人
删除会话项时本地和服务器会同步删除!
- API 原型
public static void DeleteRecentSession(Session.NIMSessionType toType, string id, SessionChangeHandler handler)
- 参数说明
参数 | 说明 |
---|---|
toType | 会话类型 |
id | 最近联系人的 ID(好友帐号,群 ID 等) |
handler | 当前操作的回调函数 |
- 示例
NIMSessionType toType = NIMSessionType.kNIMSessionTypeP2P; //个人类型
string id = "test_account";//会话id
NIM.Session.SessionAPI.DeleteRecentSession(toType, id, (a, b, c) =>
{
···
});
删除全部最近联系人
- API 介绍
删除所有会话列表项,但是不会将消息数据库设置为已读状态,如果同时需要更新消息数据库的已读状态,请使用删除所有历史记录接口
- API 原型
public static void DeleteAllRecentSession(SessionChangeHandler handler)
- 示例
java
SessionAPI.DeleteAllRecentSession((rescode, result, totalUnreadCounts)=>
{
...
});
此文档是否对你有帮助?