服务端会话服务
更新时间: 2024/03/07 11:14:43
服务端会话服务
服务端会话服务与本地最近会话不同,其提供了新的会话列表获取服务,需要从云端拉取,不支持同步到本地最近会话列表。
-
服务器支持存储用户全量的会话历史列表以及保存最近一条消息;
-
客户端获取会话列表,支持按照需要指定获取的会话数,不与本地会话合并;
-
不支持未读数;
服务端最近会话对象原型为 RecentSession ,它记录了与用户最近有过会话的联系人信息,包括联系人帐号、最近一条消息的时间、扩展字段、消息内容等信息。
RecentSession 类型说明:
参数 | 类型 | 说明 |
---|---|---|
sessionId | String | 获取会话的 ID(好友帐号,群 ID 等) |
updateTime | int | 获取最近一条消息的时间戳 |
ext | String | 获取扩展字段 |
lastMsg | String | 获取最后一条消息的 Json 字符串 |
revokeNotification | RevokeMsgNotification | 最后一条消息为撤回通知时,返回不是 null 此时,可通过此接口获得一个 RevokeMsgNotification 实例,里面只有部分内容,或者为空 |
recentSession | NIMSession | 新建带有 RecentSession 信息的 NIMSession |
sessionTypePair | String | 从 session 中分离出会话类型(Windows 和 macOS 暂不支持) |
lastMsgType | int | 最近一条消息的类型,0 或者缺失表示普通消息,1 表示消息撤回通知 |
服务端会话列表 RecentSessionList,记录了一页 RecentSession 数据,和是否有更早消息的提示。
RecentSessionList 接口说明:
参数 | 类型 | 说明 |
---|---|---|
hasMore | bool | 是否有更早的消息 |
sessionList | List<RecentSession> |
拉到的一页会话列表 |
获取会话列表
- API 原型
dartclass MessageService {
///
/// 【会话服务】增量获取会话列表,增量+翻页
///
/// [minTimestamp] 最小时间戳,作为请求参数时表示增量获取Session列表,传0表示全量获取
/// [maxTimestamp] 最大时间戳,翻页时使用
/// [needLastMsg] 是否需要lastMsg,0或者1,默认1
/// [limit] 结果集limit,最大100,默认100
/// [hasMore] 结果集是否完整,0或者1(Windows和macOS暂不支持)
///
Future<NIMResult<RecentSessionList>> queryMySessionList(
int minTimestamp,int maxTimestamp,int needLastMsg,int limit,int hasMore)
}
- 参数说明
参数 | 类型 | 说明 |
---|---|---|
minTimestamp | int | 最小时间戳,增量获取 Session 列表,传 0 表示全量获取 |
maxTimestamp | int | 最大时间戳,翻页时使用 |
needLastMsg | int | 是否需要 lastMsg,0 或者 1,默认 1 |
limit | int | 结果集 limit,最大 100,默认 100 |
hasMore | int | 结果是否完整,0 或 1(Windows 和 macOS 暂不支持) |
获取指定会话
- API 原型
dart
class MessageService {
/// 【会话服务】获取某一个会话
/// [sessionId] 分为p2p/team/superTeam,格式分别是:p2p|accid、team|tid、 super_team|tid
///
Future<NIMResult<RecentSession>> queryMySession(String sessionId,NIMSessionType sessionType);
}
- 参数说明
参数 | 类型 | 说明 |
---|---|---|
sessionId | String | 分为 p2p/team/superTeam |
修改服务端会话扩展
- API 原型
dartclass MessageService {
///
/// 【会话服务】更新某一个会话,主要是设置会话的ext字段,如果会话不存在,则会创建出来,此时会话没有lastMsg
///
/// [sessionId] 分为p2p/team/superTeam,格式分别是:p2p|accid、team|tid、super_team|tid
/// [ext] 会话的扩展字段,仅自己可见
///
Future<NIMResult<void>> updateMySession(String sessionId,NIMSessionType sessionType,String ext);
}
- 参数说明
参数 | 类型 | 说明 |
---|---|---|
sessionId | String | 分为 p2p/team/superTeam |
ext | String | 会话的扩展字段,仅自己可见 |
删除服务端会话
- API 原型
dartclass MessageService {
///
/// 【会话服务】删除会话
///
/// [sessionList] 每一项的格式:分为p2p/team/superTeam,格式分别是:p2p|accid、team|tid、super_team|tid
///
Future<NIMResult<void>> deleteMySession(List<NIMMySessionKey> sessionList);
}
- 参数说明
参数 | 类型 | 说明 |
---|---|---|
sessionList | List |
每一项:分别为 p2p/team/superTeam |
监听服务端会话更新
- API 原型
dartclass MessageService {
///
/// 【会话服务】监听服务端会话更新
///
final StreamController<RecentSession> onMySessionUpdate =
StreamController<RecentSession>.broadcast();
}
- 示例
dart NimCore.instance.messageService.onMySessionUpdate.listen((RecentSession event) {
///当有服务端会话更新时,可以在这里获取到更新的服务端会话
});
此文档是否对你有帮助?