Flutter

聊天扩展

更新时间: 2024/03/12 15:08:07

聊天扩展

消息回复(thread)

Thread 指以一条消息作为根消息的消息回复树状结构,示例见下图。

上图中:

  • 消息 A 是消息 B 的父消息,消息 B1 是消息 C 的父消息
  • 消息 C 是消息 B1 的子消息
  • 消息 A 是消息 B 和消息 C 的根消息
  • 消息 A、B、C 统称为 Threaded Message(串联起来的消息)

一条 Threaded Message 必须有一条父消息或至少一条子消息。如果一条消息既没有父消息,也没有子消息,则为普通消息。

  • 消息回复能力需要单独在云信控制台开通。在控制台应用管理 > 产品功能 > IM 即时通讯 > 全局功能开通会话消息回复

  • 若未开通回复功能,回复时系统会自动将所发消息转换为一条普通消息。

消息回复

  • API 原型
dart  ///回复消息。<br>
  ///  [msg]    带发送的消息体,由{@link MessageBuilder}构造
  ///  [replyMsg] 被回复的消息
  ///  [resend] 如果是发送失败后重发,标记为true,否则填false(Windows和macOS暂不支持)
  ///  [Future] 可以设置回调函数。消息发送完成后才会调用,如果出错,会有具体的错误代码。
  ///
  Future<NIMResult<void>> replyMessage(
      {required NIMMessage msg,
      required NIMMessage replyMsg,
      required bool resend});
  • 参数说明
参数 类型 说明
msg NIMMessage 带发送的消息体,由{ MessageBuilder}构造
replyMsg NIMMessage 被回复的消息
resend bool 如果是发送失败后重发,标记为 true,否则填 false
  • 示例
dartNIMResult<NIMMessage> retCreateMsg =
        await MessageBuilder.createTextMessage(
            sessionId: inputParams['toAccount'] as String,
            sessionType: NIMSessionType.p2p,
            text: inputParams['text'] as String);
        var message = retCreateMsg.data;
  await NimCore.instance.messageService.replyMessage(
      {msg: message,
      message:message,
      resend:true});

注意:在超大群中,回复消息应使用 SuperTeamService

查询 thread 聊天云端历史

  • API 原型
dart  ///  查询thread聊天云端历史(支持p2p、群、超大群)
  ///
  ///  anchor 查找锚点,查找对象为此消息所在的thread中的消息
  ///  fromTime 起始时间
  ///  toTime 终止时间
  ///  limit 条数限制
  ///  direction 方向
  ///  persist 是否持久化(Windows和macOS暂不支持)
  Future<NIMResult<NIMThreadTalkHistory>> queryThreadTalkHistory(
      {required NIMMessage anchor,
      required int fromTime,
      required int toTime,
      required int limit,
      required QueryDirection direction,
      required bool persist});
  • 参数说明
参数 类型 说明
anchor NIMMessage 查找锚点,查找对象为此消息所在的 thread 中的消息
fromTime int 起始时间
toTime int 终止时间
limit int 条数限制
direction QueryDirection 方向
persist bool 是否持久化
  • 示例
dart  NIMResult<NIMMessage> retCreateMsg =
        await MessageBuilder.createTextMessage(
            sessionId: inputParams['toAccount'] as String,
            sessionType: NIMSessionType.p2p,
            text: inputParams['text'] as String);
        var message = retCreateMsg.data;
   await NimCore.instance.messageService.queryThreadTalkHistory(
      {anchor:message,
      fromTime:fromTime,
      toTime:toTime,
      limit:limit,
      directio:direction,
      persist:persist})

获取 thread 消息回复数

本地获取某 thread 消息的回复消息的条数。

  • API 原型
dart  /// 本地获取某thread消息的回复消息的条数,thread消息不被计入总数
  ///
  ///  msg thread中的某一条消息
  ///  回复消息数
  Future<NIMResult<int>> queryReplyCountInThreadTalkBlock(NIMMessage msg);

Web 不支持该接口。

  • 参数说明
参数 类型 说明
msg NIMMessage thread 中的某一条消息
  • 示例
dartint count =  await NimCore.instance.messageService.queryReplyCountInThreadTalkBlock(msg:message);

快捷评论

可以对消息进行快捷评论。评论内容并非一条消息,而是一个 long 类型,由上层指定评论内容与界面展示之间的联系

增加评论

  • API 原型
dart ///
 /// 增加一条快捷评论
 ///
 /// [msg] 回复对象
 /// [replyType] 回复类型
 /// [ext] 自定义扩展字段,最大8字符
 /// [needPush] 是否需要推送
 /// [needBadge] 是否需要角标
 /// [pushTitle] 推送标题
 /// [pushContent] 推送内容
 /// [pushPayload] 第三方自定义的推送属性,限制json类型
Future<NIMResult<int>> addQuickComment(NIMMessage msg, int replyType, String ext, bool needPush, bool needBadge, String pushTitle, String pushContent, Map<String, Object> pushPayload);
  • 参数说明
参数 类型 说明
msg NIMMessage 回复对象
replyType int 回复类型
ext String 自定义扩展字段,最大 8 字符
needPush bool 是否需要推送
needBadge bool 是否需要角标
pushTitle String 推送标题
pushContent String 推送内容
pushPayload Map<String, Object> 第三方自定义的推送属性,限制 json 类型
  • 示例
dartawait NimCore.instance.messageService.addQuickComment(message, replytype, msgExt, needpush, needbadge,pushTitle, pushContent, pushPayload);

删除评论

  • API 原型
dart ///
 /// 删除一条快捷评论
 ///
 /// [msg] 回复对象
 /// [replyType] 回复类型
 /// [ext] 自定义扩展字段,最大8字符
 /// [needPush] 是否需要推送
 /// [needBadge] 是否需要角标
 /// [pushTitle] 推送标题
 /// [pushContent] 推送内容
 /// [pushPayload] 第三方自定义的推送属性,限制json类型
 Future<NIMResult<int>> removeQuickComment(NIMMessage msg, int replyType, String ext, bool needPush, bool needBadge, String pushTitle, String pushContent, Map<String, Object> pushPayload);
  • 参数说明
参数 类型 说明
msg NIMMessage 回复对象
replyType int 回复类型
ext String 自定义扩展字段,最大 8 字符
needPush bool 是否需要推送
needBadge bool 是否需要角标
pushTitle String 推送标题
pushContent String 推送内容
pushPayload Map<String, Object> 第三方自定义的推送属性,限制 json 类型
  • 示例
dartawait NimCore.instance.messageService.removeQuickComment(message, replytype, msgExt, needpush, needbadge,pushTitle, pushContent, pushPayload);

获取评论

  • API 原型
dart ///
 /// 获取快捷评论列表
 ///
 /// [msgList] 每个元素是被查询快捷评论的消息,数量不超过20
 ///
Future<NIMResult<List<NIMQuickCommentOptionWrapper>>> queryQuickComment(List<NIMMessage> msgList)
  • 参数说明
参数 类型 说明
msgList List 每个元素是被查询快捷评论的消息,数量不超过 20
  • 示例
dartawait NimCore.instance.messageService.queryQuickComment(msglist)

监听新增评论

  • API 原型
dart ///
 /// 监听新增评论
 ///
 /// 参数有两部分构成,一部分可以确定被评论的消息;另一部分是评论信息
 ///
  final StreamController<NIMHandleQuickCommentOption> onQuickCommentAdd =
  StreamController<NIMHandleQuickCommentOption>.broadcast();

NIMHandleQuickCommentOption 类型说明

参数 类型 说明
key NIMMessageKey 消息的关键信息,通过这些信息可以从服务端查询到该消息的完整部分
commentOption NIMQuickCommentOption 快速评论的信息
  • 示例
dart   NimCore.instance.messageService.onQuickCommentAdd.listen(( NIMHandleQuickCommentOption event) {

  });

监听移除评论

  • API 原型
dart ///
 /// 监听新增评论
 ///
 /// 参数有两部分构成,一部分可以确定被评论的消息;另一部分是评论信息
 ///
   final StreamController<NIMHandleQuickCommentOption> onQuickCommentRemove =
  StreamController<NIMHandleQuickCommentOption>.broadcast();

NIMHandleQuickCommentOption 类型说明

参数 类型 说明
key NIMMessageKey 消息的关键信息,通过这些信息可以从服务端查询到该消息的完整部分
commentOption NIMQuickCommentOption 快速评论的信息
  • 示例
dart   NimCore.instance.messageService.onQuickCommentRemove.listen(( NIMHandleQuickCommentOption event) {

  });

收藏夹

允许用户添加一个 20k 以内的字符串作为收藏

添加一条收藏

  • API 原型
dart  /// 添加一条收藏
  ///
  /// [type] 收藏类型
  /// [date] 收藏内容,最大20k
  /// [ext] 扩展字段,最大1k
  /// [uniqueId] 去重唯一ID
 Future<NIMResult<NIMCollectInfo>> addCollect({
    required int type,
    required String data,
    String? ext,
    String? uniqueId,
  }) ;
  • 参数说明
参数 类型 说明
type int 收藏类型
data String 收藏内容,最大 20k
ext String 扩展字段,最大 1k
uniqueId String 去重唯一 ID
  • 示例
javaawait NimCore.instance.messageService.addCollect(type, data, ext, uniqueId);

批量移除收藏

  • API 原型
dart  /// 批量移除收藏
  ///
  /// [collects] 要移除的收藏的请求
  /// [NIMCollectInfo] 中 [id] 和 [createTime] 为必填字段
  ///
 Future<NIMResult<int>> removeCollect(List<NIMCollectInfo> collects);
  • 参数说明
参数 类型 说明
collects List 要移除的收藏的关键信息组成的列表,每一项为一个 Pair,其中第一项为收藏的 ID,第二项为收藏的创建时间
  • 示例
dartawait NimCore.instance.messageService.removeCollect(collects);

更新收藏的扩展字段

  • API 原型
dart ///
 /// 更新一个收藏的扩展字段
 /// [info] 要更新的收藏对象
 /// 如果 [info.ext] 为空,表示删除ext字段
 ///
 Future<NIMResult<NIMCollectInfo>> updateCollect(NIMCollectInfo info);
  • 参数说明
参数 类型 说明
info NIMCollectInfo 要更新的收藏对象
  • 示例
dartNIMCollectInfo info = ...; // 获取收藏对象
collectInfo.ext = 'update collect ext';  // 修改 ext 字段
await NimCore.instance.messageService.updateCollect(collectInfo);

分页查询收藏列表

  • API 原型
dart  ///
  /// 从服务端分页查询收藏列表
  ///
  /// [anchor] 结束查询的最后一条收藏(不包含在查询结果中)
  /// [type] 查询类型,如果为空则返回所有类型
  /// [toTime] 结束时间点单位毫秒
  /// [limit] 本次查询的消息条数上限(最多100条)
  /// [direction] 查询方向
  ///
  Future<NIMResult<List<NIMCollectInfo>>> queryCollect({
    NIMCollectInfo? anchor,
    int toTime = 0,
    int? type,
    int limit = 100,
    QueryDirection direction = QueryDirection.QUERY_OLD,
  });
  • 参数说明
参数 类型 说明
anchor NIMCollectInfo 结束查询的最后一条收藏(不包含在查询结果中)
toTime int 结束时间点单位毫秒
limit int 本次查询的消息条数上限(最多 100 条)
direction QueryDirection 查询方向
  • 示例
dartawait NimCore.instance.messageService.queryCollect(anchor,toTime,limit,direction);

PIN 标记

一条消息可以被所在会话的所有用户 PIN,取消 PIN 和查询 PIN,以及更新扩展字段。一条消息只能有一个 PIN,多个用户 PIN 同一条消息时,较晚的 PIN 会覆盖较早的 PIN

PIN 一条消息

  • API 原型
dart  ///
  /// PIN一条消息
  ///
  /// [message] 被PIN的消息
  /// [ext] 扩展字段
  ///
  Future<NIMResult<void>> addMessagePin(NIMMessage message, String? ext) ;
  • 参数说明
参数 类型 说明
message NIMMessage 被 PIN 的消息
ext String 扩展字段
  • 示例
dartawait NimCore.instance.messageService.addMessagePin(message, ext);

更新一条消息的 PIN

  • API 原型
dart  ///
  /// 更新一条消息的PIN
  ///
  /// [message] 被PIN的消息
  /// [ext] 扩展字段
  ///
  Future<NIMResult<void>> updateMessagePin(NIMMessage message, String? ext);
  • 参数说明
参数 类型 说明
message NIMMessage 被 PIN 的消息
ext String 扩展字段
  • 示例
dartawait NimCore.instance.messageService.updateMessagePin(message, ext);

移除一条消息的 PIN

  • API 原型
dart  ///
  /// 删除一条消息的PIN
  ///
  /// [message] 被PIN的消息
  /// [ext] 扩展字段
  ///
  Future<NIMResult<void>> removeMessagePin(NIMMessage message, String? ext);
  • 参数说明
参数 类型 说明
message NIMMessage 被 PIN 的消息
ext String 扩展字段
  • 示例
dartawait NimCore.instance.messageService.removeMessagePin(message, ext);

获取 PIN 消息列表

  • API 原型
dart  /// 查询会话所有的 PIN
  ///
  /// [sessionId] 会话ID
  /// [sessionType] 会话类型
  ///
  Future<NIMResult<List<NIMMessagePin>>> queryMessagePinForSession( String sessionId, NIMSessionType sessionType);
  • 参数说明
参数 类型 说明
sessionId String 会话 ID
sessionType NIMSessionType 会话类型
  • 示例
dartawait NimCore.instance.messageService.queryMessagePinForSession(sessionId, sessionType);

1caa590e5-28e2-4b79-b6fd-a64ff09c5bec 1caa590e5-28e2-4b79-b6fd-a64ff09c5bec

消息 PIN 事件监听

消息 PIN 事件包括添加事件、更新事件、删除事件;事件封装基类为 NIMMessagePinEvent,派生类包括添加事件 NIMMessagePinAddedEvent、更新事件 NIMMessagePinUpdatedEvent、删除事件 NIMMessagePinRemovedEvent

  • API 原型
dartclass MessageService {
  /// 消息PIN事件通知
  Stream<NIMMessagePinEvent> get onMessagePinNotify;
}
  • NIMMessagePinEvent 参数说明
参数 类型 说明
pin NIMMessagePin 消息 PIN 对象
  • 示例
dartawait NimCore.instance.messageService.onMessagePinNotify.listen(
    (messagePinEvent) {
        if (messagePinEvent is NIMMessagePinAddedEvent) {
            /// 消息 PIN 添加事件
        } else if (messagePinEvent is NIMMessagePinUpdatedEvent) {
            /// 消息 PIN 更新事件
        } else if (messagePinEvent is NIMMessagePinRemovedEvent) {
            /// 消息 PIN 删除事件
        }
    }
);

会话置顶

云信提供会话置顶功能,支持多端同步,并且支持最多 100 个会话置顶。

添加一个置顶会话

  • API 原型
dart  ///
  /// 添加一个置顶会话
  ///
  /// [sessionId]   会话ID
  /// [sessionType] 会话类型
  /// [ext] 扩展字段,最大512字符
  ///
  Future<NIMResult<NIMStickTopSessionInfo>> addStickTopSession(String sessionId, NIMSessionType sessionType, String ext);
  • 参数说明
参数 类型 说明
sessionId String 会话 ID
sessionType NIMSessionType 会话类型
ext String 扩展字段,最大 512 字符
  • 示例
dartNimCore.instance.messageService.addStickTopSession(sessionId, sessionType, ext);

删除一个置顶会话

  • API 原型
dart  ///
  /// 删除一个置顶会话
  ///
  /// [sessionId]   会话ID
  /// [sessionType] 会话类型
  /// [ext] 扩展字段,最大512字符(Windows 和 macOS 暂不支持)
  ///
  Future<NIMResult<void>> removeStickTopSession(String sessionId, NIMSessionType sessionType, String ext);
  • 参数说明
参数 类型 说明
sessionId String 会话 ID
sessionType NIMSessionType 会话类型
ext String 扩展字段,最大 512 字符(Windows 和 macOS 暂不支持)
  • 示例
dartNimCore.instance.messageService.removeStickTopSession(sessionId, sessionType, ext);

更新扩展字段

  • API 原型
dart  ///
  /// 更新一个会话在置顶上的扩展字段
  ///
  /// [sessionId]   会话ID
  /// [sessionType] 会话类型
  /// [ext]  扩展字段,最大512字符
  ///
  Future<NIMResult<void>> updateStickTopSession(String sessionId, NIMSessionType sessionType, String ext);
  • 参数说明
参数 类型 说明
sessionId String 会话 ID
sessionType NIMSessionType 会话类型
ext String 扩展字段,最大 512 字符
  • 示例
dartNimCore.instance.messageService.updateStickTopSession(sessionId, sessionType, ext);

获取置顶会话列表

注意:需要先设置初始化参数 SDKOptions 的 notifyStickTopSession 为 true,开启置顶会话列表的同步,方可通过以下接口查询到准确的置顶会话列表,否则查询到的列表不包含离线期间的改动。

  • API 原型
dart  ///
  /// 获取置顶会话信息的列表
  ///
  Future<NIMResult<List<NIMStickTopSessionInfo>>> queryStickTopSession()
  • 示例
dart  NimCore.instance.messageService.queryStickTopSession();

监听同步置顶会话

  • API 原型
dart  ///
  /// 同步置顶会话的多端同步回包,参数为会话的置顶信息(Windows 和 macOS 暂不支持)
  ///
  final StreamController<List<NIMStickTopSessionInfo>> onSyncStickTopSession =
  StreamController<List<NIMStickTopSessionInfo>>.broadcast();

Web 不支持该接口。

  • 示例
dart  NimCore.instance.messageService.onSyncStickTopSession.listen((List<NIMStickTopSessionInfo> event) {
          });

监听新增置顶会话

  • API 原型
dart  ///
  /// 增加一条置顶会话的多端同步回包,参数为会话的置顶信息
  ///
  final StreamController<NIMStickTopSessionInfo> onStickTopSessionAdd =
  StreamController<NIMStickTopSessionInfo>.broadcast();

Web 不支持该接口。

  • 示例
dart  NimCore.instance.messageService.onStickTopSessionAdd.listen((NIMStickTopSessionInfo event) {
          });

监听移除置顶会话

  • API 原型
dart  ///
  /// 移除一条置顶会话的多端同步回包,参数为会话的置顶信息
  ///
  final StreamController<NIMStickTopSessionInfo> onStickTopSessionRemove =
  StreamController<NIMStickTopSessionInfo>.broadcast();

Web 不支持该接口。

  • 示例
dart  NimCore.instance.messageService.onStickTopSessionRemove.listen((NIMStickTopSessionInfo event) {
          });

监听更新置顶会话

  • API 原型
dart  ///
  /// 更新一条置顶会话的扩展字段的多端同步回包,参数为会话的置顶信息
  ///
  final StreamController<NIMStickTopSessionInfo> onStickTopSessionUpdate =
  StreamController<NIMStickTopSessionInfo>.broadcast();

Web 不支持该接口。

  • 示例
dart  NimCore.instance.messageService.onStickTopSessionUpdate.listen((NIMStickTopSessionInfo event) {
          });
此文档是否对你有帮助?
有帮助
去反馈
  • 消息回复(thread)
  • 消息回复
  • 查询 thread 聊天云端历史
  • 获取 thread 消息回复数
  • 快捷评论
  • 增加评论
  • 删除评论
  • 获取评论
  • 监听新增评论
  • 监听移除评论
  • 收藏夹
  • 添加一条收藏
  • 批量移除收藏
  • 更新收藏的扩展字段
  • 分页查询收藏列表
  • PIN 标记
  • PIN 一条消息
  • 更新一条消息的 PIN
  • 移除一条消息的 PIN
  • 获取 PIN 消息列表
  • 消息 PIN 事件监听
  • 会话置顶
  • 添加一个置顶会话
  • 删除一个置顶会话
  • 更新扩展字段
  • 获取置顶会话列表
  • 监听同步置顶会话
  • 监听新增置顶会话
  • 监听移除置顶会话
  • 监听更新置顶会话