类 MessageApi


  • public class MessageApi
    extends java.lang.Object
    消息API。
    • 方法概要

      所有方法 实例方法 具体方法 已过时的方法 
      修饰符和类型 方法 说明
      reactor.core.publisher.Flux<MissedMessageCount> countMissedMessages​(java.lang.String username)
      查询用户离线消息数。
      reactor.core.publisher.Mono<java.lang.Void> deleteChannel​(java.lang.String username, java.lang.String channelName, java.lang.String channelType, java.lang.Boolean deleteRoam)
      服务端单向删除会话。
      reactor.core.publisher.Mono<java.nio.file.Path> getHistoryAsLocalFile​(java.time.Instant instant, java.nio.file.Path dir, java.lang.String filename)
      下载消息历史文件到本地。
      reactor.core.publisher.Mono<java.lang.String> getHistoryAsUri​(java.time.Instant instant)
      获取消息历史文件的下载地址。
      reactor.core.publisher.Mono<java.lang.String> importChatGroupMessage​(java.lang.String from, java.lang.String to, EMMessage message, java.util.Set<EMKeyValue> extensions, java.lang.Boolean isAckRead, java.lang.Long msgTimestamp, java.lang.Boolean needDownload)
      导入群聊消息 API使用示例:
      reactor.core.publisher.Mono<java.lang.String> importChatMessage​(java.lang.String from, java.lang.String to, EMMessage message, java.util.Set<EMKeyValue> extensions, java.lang.Boolean isAckRead, java.lang.Long msgTimestamp, java.lang.Boolean needDownload)
      导入单聊消息 API使用示例:
      ImportMessage importMessage()
      构造消息并导入。
      reactor.core.publisher.Mono<java.lang.Boolean> isMessageDeliveredToUser​(java.lang.String messageId, java.lang.String toUser)
      查询某条离线消息的状态,如是否已经传达。
      reactor.core.publisher.Mono<java.lang.Void> recallMessage​(java.util.List<RecallMessageSource> messageSources)
      已过时。
      reactor.core.publisher.Mono<java.lang.Void> recallMsg​(RecallMessageSource recallMessage)
      消息撤回。
      SendMessage send()
      已过时。
      reactor.core.publisher.Mono<EMSentMessageIds> send​(java.lang.String from, java.lang.String toType, java.util.Set<java.lang.String> tos, EMMessage message, java.util.Set<EMKeyValue> extensions)
      已过时。
      reactor.core.publisher.Mono<EMSentMessageIds> send​(java.lang.String from, java.lang.String toType, java.util.Set<java.lang.String> tos, EMMessage message, java.util.Set<EMKeyValue> extensions, java.lang.Boolean syncDevice)
      已过时。
      reactor.core.publisher.Mono<EMSentMessageIds> send​(java.lang.String from, java.lang.String toType, java.util.Set<java.lang.String> tos, EMMessage message, java.util.Set<EMKeyValue> extensions, java.lang.String routeType)
      已过时。
      reactor.core.publisher.Mono<EMSentMessageIds> send​(java.lang.String from, java.lang.String toType, java.util.Set<java.lang.String> tos, EMMessage message, java.util.Set<EMKeyValue> extensions, java.lang.String routeType, java.lang.Boolean syncDevice)
      已过时。
      reactor.core.publisher.Mono<EMSentMessageIds> sendMessageToLargeChatroom​(java.lang.String from, java.util.Set<java.lang.String> tos, EMMessage message, java.util.Set<EMKeyValue> extensions)
      向大型聊天室发送消息
      reactor.core.publisher.Mono<EMSentMessageIds> sendMessageToSmallChatroom​(java.lang.String from, java.util.Set<java.lang.String> tos, EMMessage message, java.util.Set<EMKeyValue> extensions)
      向小型聊天室发送消息
      MessageSend sendMsg()
      构造消息并发送。
      reactor.core.publisher.Mono<EMSentMessageIds> sendMsg​(java.lang.String from, java.lang.String toType, java.util.Set<java.lang.String> tos, EMMessage message, java.util.Set<EMKeyValue> extensions)
      发送消息。
      reactor.core.publisher.Mono<EMSentMessageIds> sendMsg​(java.lang.String from, java.lang.String toType, java.util.Set<java.lang.String> tos, EMMessage message, java.util.Set<EMKeyValue> extensions, java.lang.Boolean syncDevice)
      发送消息。
      reactor.core.publisher.Mono<EMSentMessageIds> sendMsg​(java.lang.String from, java.lang.String toType, java.util.Set<java.lang.String> tos, EMMessage message, java.util.Set<EMKeyValue> extensions, java.lang.String routeType)
      发送消息(只投递在线消息)。
      reactor.core.publisher.Mono<EMSentMessageIds> sendMsg​(java.lang.String from, java.lang.String toType, java.util.Set<java.lang.String> tos, EMMessage message, java.util.Set<EMKeyValue> extensions, java.lang.String routeType, java.lang.Boolean syncDevice)
      发送消息。
      reactor.core.publisher.Mono<EMSentMessageIds> sendMsg​(java.lang.String from, java.lang.String toType, java.util.Set<java.lang.String> tos, EMMessage message, java.util.Set<EMKeyValue> extensions, java.lang.String routeType, java.lang.Boolean syncDevice, ChatroomMsgLevel chatroomMsgLevel)
      发送消息,支持设置聊天室消息优先级。
      reactor.core.publisher.Mono<EMSentMessageResults> sendWithoutMsgId​(java.lang.String from, java.lang.String toType, java.util.Set<java.lang.String> tos, EMMessage message, java.util.Set<EMKeyValue> extensions)
      已过时。
      reactor.core.publisher.Mono<EMSentMessageResults> sendWithoutMsgId​(java.lang.String from, java.lang.String toType, java.util.Set<java.lang.String> tos, EMMessage message, java.util.Set<EMKeyValue> extensions, java.lang.Boolean syncDevice)
      已过时。
      reactor.core.publisher.Mono<EMSentMessageResults> sendWithoutMsgId​(java.lang.String from, java.lang.String toType, java.util.Set<java.lang.String> tos, EMMessage message, java.util.Set<EMKeyValue> extensions, java.lang.String routeType)
      已过时。
      reactor.core.publisher.Mono<EMSentMessageResults> sendWithoutMsgId​(java.lang.String from, java.lang.String toType, java.util.Set<java.lang.String> tos, EMMessage message, java.util.Set<EMKeyValue> extensions, java.lang.String routeType, java.lang.Boolean syncDevice)
      已过时。
      • 从类继承的方法 java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • 构造器详细资料

      • MessageApi

        public MessageApi​(Context context)
    • 方法详细资料

      • countMissedMessages

        public reactor.core.publisher.Flux<MissedMessageCount> countMissedMessages​(java.lang.String username)
        查询用户离线消息数。

        API使用示例:

         
         EMService service;
         try {
             List<MissedMessageCount> messages = service.message().countMissedMessages("username").collectList().block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
         
        参数:
        username - 用户名
        返回:
        每个对话的离线消息数
        另请参阅:
        获取用户离线消息数
      • isMessageDeliveredToUser

        public reactor.core.publisher.Mono<java.lang.Boolean> isMessageDeliveredToUser​(java.lang.String messageId,
                                                                                       java.lang.String toUser)
        查询某条离线消息的状态,如是否已经传达。

        API使用示例:

         
         EMService service;
         try {
             Boolean isDelivered = service.message().isMessageDeliveredToUser("messageId", "toUser").block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
         
        参数:
        messageId - 要查看对消息ID
        toUser - 消息接收方的用户名
        返回:
        是否送达或错误
        另请参阅:
        获取某条离线消息状态
      • send

        @Deprecated
        public SendMessage send()
        已过时。
        构造消息并发送。将在后续版本中移除,请使用sendMsg方法。

        例如,向用户发送一条带有扩展字段的文本消息:

        
         EMService service;
         try {
             service.message().send()
                              .fromUser("alice").toUser("rabbit")
                              .text(msg -> msg.text("hello"))
                              .extension(exts -> exts.add(EMKeyValue.of("timeout", 1)))
                              .send()
                              .block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
         

        如果需要向一个群组或聊天室发消息,将示例中的 toUser 改成 toGroup 或 toRoom,并传入对应的群组或聊天室id

        如果需要向多个用户或群组或聊天室发消息,将示例中的 toUser 改成 toUsers 或 toGroups 或 toRooms,并传入对应的用户或群组或聊天室id

        将上述发送文本消息示例中的 `.text(...) `替换掉,来发送其他类型消息示例:

        发送图片消息:.image(msg -> msg.uri(URI.create("http://example/image.png")).secret("secret").displayName("image.png"))

        发送语音消息:.voice(msg -> msg.uri(URI.create("http://example/voice.amr")).duration(3).secret("secret").displayName("voice.amr"))

        发送视频消息:.video(msg -> msg.uri(URI.create("http://example/video.mp4")).duration(3).secret("secret").displayName("video.mp4").thumb("http://example/videoThumbnail").thumbSecret("thumbSecret"))

        发送文件消息:.file(msg -> msg.uri(URI.create("http://example/file.txt")).secret("secret").displayName("file.txt"))

        发送位置消息:.location(msg -> msg.latitude(1.234567).longitude(1.234567).address("some where"))

        发送自定义类型消息:.custom(msg -> msg.customEvent("liked").customExtension("name", "forest"))

        返回:
        发送消息的构造器
        另请参阅:
        发送消息
      • sendMsg

        public MessageSend sendMsg()
        构造消息并发送。

        例如,向用户发送一条带有扩展字段的文本消息:

        
         EMService service;
         try {
             service.message().sendMsg()
                              .fromUser("alice").toUser("rabbit")
                              .text(msg -> msg.text("hello"))
                              .extension(exts -> exts.add(EMKeyValue.of("timeout", 1)))
                              .send()
                              .block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
         

        如果需要向一个群组或聊天室发消息,将示例中的 toUser 改成 toGroup 或 toRoom,并传入对应的群组或聊天室id

        如果需要向多个用户或群组或聊天室发消息,将示例中的 toUser 改成 toUsers 或 toGroups 或 toRooms,并传入对应的用户或群组或聊天室id

        将上述发送文本消息示例中的 `.text(...) `替换掉,来发送其他类型消息示例:

        发送图片消息:.image(msg -> msg.uri(URI.create("http://example/image.png")).secret("secret").displayName("image.png"))

        发送语音消息:.voice(msg -> msg.uri(URI.create("http://example/voice.amr")).duration(3).secret("secret").displayName("voice.amr"))

        发送视频消息:.video(msg -> msg.uri(URI.create("http://example/video.mp4")).duration(3).secret("secret").displayName("video.mp4").thumb("http://example/videoThumbnail").thumbSecret("thumbSecret"))

        发送文件消息:.file(msg -> msg.uri(URI.create("http://example/file.txt")).secret("secret").displayName("file.txt"))

        发送位置消息:.location(msg -> msg.latitude(1.234567).longitude(1.234567).address("some where"))

        发送自定义类型消息:.custom(msg -> msg.customEvent("liked").customExtension("name", "forest"))

        返回:
        发送消息的构造器
        另请参阅:
        发送消息
      • send

        @Deprecated
        public reactor.core.publisher.Mono<EMSentMessageIds> send​(java.lang.String from,
                                                                  java.lang.String toType,
                                                                  java.util.Set<java.lang.String> tos,
                                                                  EMMessage message,
                                                                  java.util.Set<EMKeyValue> extensions)
        已过时。
        发送消息。将在后续版本中移除,请使用sendMsg方法。

        API使用示例:

         
         EMService service;
        
         例如,向用户发送一条带有扩展字段的文本消息
         Set<String> toUsers = new HashSet<>();
         toUsers.add("toUserName");
        
         EMTextMessage textMessage = new EMTextMessage().text("hello");
        
         Set<EMKeyValue> exts = new HashSet<>();
         exts.add(EMKeyValue.of("key", "value"));
        
         try {
             EMSentMessageIds messageIds = service.message().send("fromUserName", "users", toUsers, textMessage, exts).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         例如,向群组发送一条带有扩展字段的图片消息
         Set<String> toGroups = new HashSet<>();
         toGroups.add("toGroupId");
        
         EMImageMessage imageMessage =
                 new EMImageMessage().uri(URI.create("http://example/image.png")).secret("secret")
                         .displayName("image.png");
        
         Set<EMKeyValue> exts1 = new HashSet<>();
         exts1.add(EMKeyValue.of("key", "value"));
         exts1.add(EMKeyValue.of("key1", 10));
         exts1.add(EMKeyValue.of("key2", new HashMap<String, String>() {
             {
                 put("mkey1", "mvalue1");
                 put("mkey2", "mvalue2");
             }
         }));
        
         try {
             EMSentMessageIds messageIds = service.message().send("fromUserName", "chatgroups", toGroups, imageMessage, exts1).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         
        参数:
        from - 发送者用户名
        toType - 目标类型,可以是 `users`, `chatgroups`, `chatrooms`
        tos - 目标id列表
        message - 要发送的消息,EMTextMessage文本消息,EMImageMessage图片消息,EMVoiceMessage语音消息, EMVideoMessage视频消息,EMFileMessage文件消息,EMCommandMessage透传消息,EMCustomMessage自定义类型消息, 各种类型消息需要自己构造
        extensions - 要发送的扩展,可以为空
        返回:
        发消息响应或错误
        另请参阅:
        发送消息
      • sendMsg

        public reactor.core.publisher.Mono<EMSentMessageIds> sendMsg​(java.lang.String from,
                                                                     java.lang.String toType,
                                                                     java.util.Set<java.lang.String> tos,
                                                                     EMMessage message,
                                                                     java.util.Set<EMKeyValue> extensions)
        发送消息。

        API使用示例:

         
         EMService service;
        
         例如,向用户发送一条带有扩展字段的文本消息
         Set<String> toUsers = new HashSet<>();
         toUsers.add("toUserName");
        
         EMTextMessage textMessage = new EMTextMessage().text("hello");
        
         Set<EMKeyValue> exts = new HashSet<>();
         exts.add(EMKeyValue.of("key", "value"));
        
         try {
             EMSentMessageIds messageIds = service.message().sendMsg("fromUserName", "users", toUsers, textMessage, exts).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         例如,向群组发送一条带有扩展字段的图片消息
         Set<String> toGroups = new HashSet<>();
         toGroups.add("toGroupId");
        
         EMImageMessage imageMessage =
                 new EMImageMessage().uri(URI.create("http://example/image.png")).secret("secret")
                         .displayName("image.png");
        
         Set<EMKeyValue> exts1 = new HashSet<>();
         exts1.add(EMKeyValue.of("key", "value"));
         exts1.add(EMKeyValue.of("key1", 10));
         exts1.add(EMKeyValue.of("key2", new HashMap<String, String>() {
             {
                 put("mkey1", "mvalue1");
                 put("mkey2", "mvalue2");
             }
         }));
        
         try {
             EMSentMessageIds messageIds = service.message().sendMsg("fromUserName", "chatgroups", toGroups, imageMessage, exts1).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         
        参数:
        from - 发送者用户名
        toType - 目标类型,可以是 `users`, `chatgroups`, `chatrooms`
        tos - 目标id列表
        message - 要发送的消息,EMTextMessage文本消息,EMImageMessage图片消息,EMVoiceMessage语音消息, EMVideoMessage视频消息,EMFileMessage文件消息,EMCommandMessage透传消息,EMCustomMessage自定义类型消息, 各种类型消息需要自己构造
        extensions - 要发送的扩展,可以为空
        返回:
        发消息响应或错误
        另请参阅:
        发送消息
      • sendWithoutMsgId

        @Deprecated
        public reactor.core.publisher.Mono<EMSentMessageResults> sendWithoutMsgId​(java.lang.String from,
                                                                                  java.lang.String toType,
                                                                                  java.util.Set<java.lang.String> tos,
                                                                                  EMMessage message,
                                                                                  java.util.Set<EMKeyValue> extensions)
        已过时。
        发送消息,不返回消息 ID。将在后续版本中移除。

        API使用示例:

         
         EMService service;
        
         例如,向用户发送一条带有扩展字段的文本消息
         Set<String> toUsers = new HashSet<>();
         toUsers.add("toUserName");
        
         EMTextMessage textMessage = new EMTextMessage().text("hello");
        
         Set<EMKeyValue> exts = new HashSet<>();
         exts.add(EMKeyValue.of("key", "value"));
        
         try {
             EMSentMessageIds messageIds = service.message().sendWithoutMsgId("fromUserName", "users", toUsers, textMessage, exts).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         例如,向群组发送一条带有扩展字段的图片消息
         Set<String> toGroups = new HashSet<>();
         toGroups.add("toGroupId");
        
         EMImageMessage imageMessage =
                 new EMImageMessage().uri(URI.create("http://example/image.png")).secret("secret")
                         .displayName("image.png");
        
         Set<EMKeyValue> exts1 = new HashSet<>();
         exts1.add(EMKeyValue.of("key", "value"));
         exts1.add(EMKeyValue.of("key1", 10));
         exts1.add(EMKeyValue.of("key2", new HashMap<String, String>() {
             {
                 put("mkey1", "mvalue1");
                 put("mkey2", "mvalue2");
             }
         }));
        
         try {
             EMSentMessageIds messageIds = service.message().sendWithoutMsgId("fromUserName", "chatgroups", toGroups, imageMessage, exts1).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         
        参数:
        from - 发送者用户名
        toType - 目标类型,可以是 `users`, `chatgroups`, `chatrooms`
        tos - 目标id列表
        message - 要发送的消息,EMTextMessage文本消息,EMImageMessage图片消息,EMVoiceMessage语音消息, EMVideoMessage视频消息,EMFileMessage文件消息,EMCommandMessage透传消息,EMCustomMessage自定义类型消息, 各种类型消息需要自己构造
        extensions - 要发送的扩展,可以为空
        返回:
        发消息响应或错误
        另请参阅:
        发送消息
      • sendMessageToLargeChatroom

        public reactor.core.publisher.Mono<EMSentMessageIds> sendMessageToLargeChatroom​(java.lang.String from,
                                                                                        java.util.Set<java.lang.String> tos,
                                                                                        EMMessage message,
                                                                                        java.util.Set<EMKeyValue> extensions)
        向大型聊天室发送消息
        参数:
        from - 发送者用户名
        tos - 目标聊天室id列表
        message - 要发送的消息,EMTextMessage文本消息,EMImageMessage图片消息,EMVoiceMessage语音消息, EMVideoMessage视频消息,EMFileMessage文件消息,EMCommandMessage透传消息,EMCustomMessage自定义类型消息, 各种类型消息需要自己构造
        extensions - 要发送的扩展,可以为空
        返回:
        发消息响应或错误
      • sendMessageToSmallChatroom

        public reactor.core.publisher.Mono<EMSentMessageIds> sendMessageToSmallChatroom​(java.lang.String from,
                                                                                        java.util.Set<java.lang.String> tos,
                                                                                        EMMessage message,
                                                                                        java.util.Set<EMKeyValue> extensions)
        向小型聊天室发送消息
        参数:
        from - 发送者用户名
        tos - 目标聊天室id列表
        message - 要发送的消息,EMTextMessage文本消息,EMImageMessage图片消息,EMVoiceMessage语音消息, EMVideoMessage视频消息,EMFileMessage文件消息,EMCommandMessage透传消息,EMCustomMessage自定义类型消息, 各种类型消息需要自己构造
        extensions - 要发送的扩展,可以为空
        返回:
        发消息响应或错误
      • send

        @Deprecated
        public reactor.core.publisher.Mono<EMSentMessageIds> send​(java.lang.String from,
                                                                  java.lang.String toType,
                                                                  java.util.Set<java.lang.String> tos,
                                                                  EMMessage message,
                                                                  java.util.Set<EMKeyValue> extensions,
                                                                  java.lang.String routeType)
        已过时。
        发送消息(只投递在线消息)。将在后续版本中移除,请使用sendMsg方法。

        API使用示例:

         
         EMService service;
        
         例如,向用户发送一条带有扩展字段的文本消息
         Set<String> toUsers = new HashSet<>();
         toUsers.add("toUserName");
        
         EMTextMessage textMessage = new EMTextMessage().text("hello");
        
         Set<EMKeyValue> exts = new HashSet<>();
         exts.add(EMKeyValue.of("key", "value"));
        
         try {
             EMSentMessageIds messageIds = service.message().send("fromUserName", "users", toUsers, textMessage, exts, "ROUTE_ONLINE").block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         例如,向群组发送一条带有扩展字段的图片消息
         Set<String> toGroups = new HashSet<>();
         toGroups.add("toGroupId");
        
         EMImageMessage imageMessage =
                 new EMImageMessage().uri(URI.create("http://example/image.png")).secret("secret")
                         .displayName("image.png");
        
         Set<EMKeyValue> exts1 = new HashSet<>();
         exts1.add(EMKeyValue.of("key", "value"));
         exts1.add(EMKeyValue.of("key1", 10));
         exts1.add(EMKeyValue.of("key2", new HashMap<String, String>() {
             {
                 put("mkey1", "mvalue1");
                 put("mkey2", "mvalue2");
             }
         }));
        
         try {
             EMSentMessageIds messageIds = service.message().send("fromUserName", "chatgroups", toGroups, imageMessage, exts1, "ROUTE_ONLINE").block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         
        参数:
        from - 发送者用户名
        toType - 目标类型,可以是 `users`, `chatgroups`, `chatrooms`
        tos - 目标id列表
        message - 要发送的消息
        extensions - 要发送的扩展,可以为空
        routeType - 只投递在线消息,请传入 `ROUTE_ONLINE`
        返回:
        发消息响应或错误
        另请参阅:
        发送消息
      • sendMsg

        public reactor.core.publisher.Mono<EMSentMessageIds> sendMsg​(java.lang.String from,
                                                                     java.lang.String toType,
                                                                     java.util.Set<java.lang.String> tos,
                                                                     EMMessage message,
                                                                     java.util.Set<EMKeyValue> extensions,
                                                                     java.lang.String routeType)
        发送消息(只投递在线消息)。

        API使用示例:

         
         EMService service;
        
         例如,向用户发送一条带有扩展字段的文本消息
         Set<String> toUsers = new HashSet<>();
         toUsers.add("toUserName");
        
         EMTextMessage textMessage = new EMTextMessage().text("hello");
        
         Set<EMKeyValue> exts = new HashSet<>();
         exts.add(EMKeyValue.of("key", "value"));
        
         try {
             EMSentMessageIds messageIds = service.message().sendMsg("fromUserName", "users", toUsers, textMessage, exts, "ROUTE_ONLINE").block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         例如,向群组发送一条带有扩展字段的图片消息
         Set<String> toGroups = new HashSet<>();
         toGroups.add("toGroupId");
        
         EMImageMessage imageMessage =
                 new EMImageMessage().uri(URI.create("http://example/image.png")).secret("secret")
                         .displayName("image.png");
        
         Set<EMKeyValue> exts1 = new HashSet<>();
         exts1.add(EMKeyValue.of("key", "value"));
         exts1.add(EMKeyValue.of("key1", 10));
         exts1.add(EMKeyValue.of("key2", new HashMap<String, String>() {
             {
                 put("mkey1", "mvalue1");
                 put("mkey2", "mvalue2");
             }
         }));
        
         try {
             EMSentMessageIds messageIds = service.message().sendMsg("fromUserName", "chatgroups", toGroups, imageMessage, exts1, "ROUTE_ONLINE").block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         
        参数:
        from - 发送者用户名
        toType - 目标类型,可以是 `users`, `chatgroups`, `chatrooms`
        tos - 目标id列表
        message - 要发送的消息
        extensions - 要发送的扩展,可以为空
        routeType - 只投递在线消息,请传入 `ROUTE_ONLINE`
        返回:
        发消息响应或错误
        另请参阅:
        发送消息
      • sendWithoutMsgId

        @Deprecated
        public reactor.core.publisher.Mono<EMSentMessageResults> sendWithoutMsgId​(java.lang.String from,
                                                                                  java.lang.String toType,
                                                                                  java.util.Set<java.lang.String> tos,
                                                                                  EMMessage message,
                                                                                  java.util.Set<EMKeyValue> extensions,
                                                                                  java.lang.String routeType)
        已过时。
        发送消息(只投递在线消息),不返回消息 ID。将在后续版本中移除。

        API使用示例:

         
         EMService service;
        
         例如,向用户发送一条带有扩展字段的文本消息
         Set<String> toUsers = new HashSet<>();
         toUsers.add("toUserName");
        
         EMTextMessage textMessage = new EMTextMessage().text("hello");
        
         Set<EMKeyValue> exts = new HashSet<>();
         exts.add(EMKeyValue.of("key", "value"));
        
         try {
             EMSentMessageResults messageResults = service.message().send("fromUserName", "users", toUsers, textMessage, exts, "ROUTE_ONLINE").block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         例如,向群组发送一条带有扩展字段的图片消息
         Set<String> toGroups = new HashSet<>();
         toGroups.add("toGroupId");
        
         EMImageMessage imageMessage =
                 new EMImageMessage().uri(URI.create("http://example/image.png")).secret("secret")
                         .displayName("image.png");
        
         Set<EMKeyValue> exts1 = new HashSet<>();
         exts1.add(EMKeyValue.of("key", "value"));
         exts1.add(EMKeyValue.of("key1", 10));
         exts1.add(EMKeyValue.of("key2", new HashMap<String, String>() {
             {
                 put("mkey1", "mvalue1");
                 put("mkey2", "mvalue2");
             }
         }));
        
         try {
             EMSentMessageResults messageResults = service.message().send("fromUserName", "chatgroups", toGroups, imageMessage, exts1, "ROUTE_ONLINE").block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         
        参数:
        from - 发送者用户名
        toType - 目标类型,可以是 `users`, `chatgroups`, `chatrooms`
        tos - 目标id列表
        message - 要发送的消息
        extensions - 要发送的扩展,可以为空
        routeType - 只投递在线消息,请传入 `ROUTE_ONLINE`
        返回:
        发消息响应或错误
        另请参阅:
        发送消息
      • send

        @Deprecated
        public reactor.core.publisher.Mono<EMSentMessageIds> send​(java.lang.String from,
                                                                  java.lang.String toType,
                                                                  java.util.Set<java.lang.String> tos,
                                                                  EMMessage message,
                                                                  java.util.Set<EMKeyValue> extensions,
                                                                  java.lang.Boolean syncDevice)
        已过时。
        发送消息。将在后续版本中移除,请使用sendMsg方法。

        API使用示例:

         
         EMService service;
        
         例如,向用户发送一条带有扩展字段的文本消息
         Set<String> toUsers = new HashSet<>();
         toUsers.add("toUserName");
        
         EMTextMessage textMessage = new EMTextMessage().text("hello");
        
         Set<EMKeyValue> exts = new HashSet<>();
         exts.add(EMKeyValue.of("key", "value"));
        
         try {
             EMSentMessageIds messageIds = service.message().send("fromUserName", "users", toUsers, textMessage, exts, true).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         例如,向群组发送一条带有扩展字段的图片消息
         Set<String> toGroups = new HashSet<>();
         toGroups.add("toGroupId");
        
         EMImageMessage imageMessage =
                 new EMImageMessage().uri(URI.create("http://example/image.png")).secret("secret")
                         .displayName("image.png");
        
         Set<EMKeyValue> exts1 = new HashSet<>();
         exts1.add(EMKeyValue.of("key", "value"));
         exts1.add(EMKeyValue.of("key1", 10));
         exts1.add(EMKeyValue.of("key2", new HashMap<String, String>() {
             {
                 put("mkey1", "mvalue1");
                 put("mkey2", "mvalue2");
             }
         }));
        
         try {
             EMSentMessageIds messageIds = service.message().send("fromUserName", "chatgroups", toGroups, imageMessage, exts1, true).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         
        参数:
        from - 发送者用户名
        toType - 目标类型,可以是 `users`, `chatgroups`, `chatrooms`
        tos - 目标id列表
        message - 要发送的消息
        extensions - 要发送的扩展,可以为空
        syncDevice - 消息发送成功后,是否将消息同步到发送方,true:是同步给发送方,false:是不同给发送方
        返回:
        发消息响应或错误
        另请参阅:
        发送消息
      • sendMsg

        public reactor.core.publisher.Mono<EMSentMessageIds> sendMsg​(java.lang.String from,
                                                                     java.lang.String toType,
                                                                     java.util.Set<java.lang.String> tos,
                                                                     EMMessage message,
                                                                     java.util.Set<EMKeyValue> extensions,
                                                                     java.lang.Boolean syncDevice)
        发送消息。

        API使用示例:

         
         EMService service;
        
         例如,向用户发送一条带有扩展字段的文本消息
         Set<String> toUsers = new HashSet<>();
         toUsers.add("toUserName");
        
         EMTextMessage textMessage = new EMTextMessage().text("hello");
        
         Set<EMKeyValue> exts = new HashSet<>();
         exts.add(EMKeyValue.of("key", "value"));
        
         try {
             EMSentMessageIds messageIds = service.message().sendMsg("fromUserName", "users", toUsers, textMessage, exts, true).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         例如,向群组发送一条带有扩展字段的图片消息
         Set<String> toGroups = new HashSet<>();
         toGroups.add("toGroupId");
        
         EMImageMessage imageMessage =
                 new EMImageMessage().uri(URI.create("http://example/image.png")).secret("secret")
                         .displayName("image.png");
        
         Set<EMKeyValue> exts1 = new HashSet<>();
         exts1.add(EMKeyValue.of("key", "value"));
         exts1.add(EMKeyValue.of("key1", 10));
         exts1.add(EMKeyValue.of("key2", new HashMap<String, String>() {
             {
                 put("mkey1", "mvalue1");
                 put("mkey2", "mvalue2");
             }
         }));
        
         try {
             EMSentMessageIds messageIds = service.message().sendMsg("fromUserName", "chatgroups", toGroups, imageMessage, exts1, true).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         
        参数:
        from - 发送者用户名
        toType - 目标类型,可以是 `users`, `chatgroups`, `chatrooms`
        tos - 目标id列表
        message - 要发送的消息
        extensions - 要发送的扩展,可以为空
        syncDevice - 消息发送成功后,是否将消息同步到发送方,true:是同步给发送方,false:是不同给发送方
        返回:
        发消息响应或错误
        另请参阅:
        发送消息
      • sendWithoutMsgId

        @Deprecated
        public reactor.core.publisher.Mono<EMSentMessageResults> sendWithoutMsgId​(java.lang.String from,
                                                                                  java.lang.String toType,
                                                                                  java.util.Set<java.lang.String> tos,
                                                                                  EMMessage message,
                                                                                  java.util.Set<EMKeyValue> extensions,
                                                                                  java.lang.Boolean syncDevice)
        已过时。
        发送消息,不返回消息 ID。将在后续版本中移除。

        API使用示例:

         
         EMService service;
        
         例如,向用户发送一条带有扩展字段的文本消息
         Set<String> toUsers = new HashSet<>();
         toUsers.add("toUserName");
        
         EMTextMessage textMessage = new EMTextMessage().text("hello");
        
         Set<EMKeyValue> exts = new HashSet<>();
         exts.add(EMKeyValue.of("key", "value"));
        
         try {
             EMSentMessageResults messageResults = service.message().sendWithoutMsgId("fromUserName", "users", toUsers, textMessage, exts, true).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         例如,向群组发送一条带有扩展字段的图片消息
         Set<String> toGroups = new HashSet<>();
         toGroups.add("toGroupId");
        
         EMImageMessage imageMessage =
                 new EMImageMessage().uri(URI.create("http://example/image.png")).secret("secret")
                         .displayName("image.png");
        
         Set<EMKeyValue> exts1 = new HashSet<>();
         exts1.add(EMKeyValue.of("key", "value"));
         exts1.add(EMKeyValue.of("key1", 10));
         exts1.add(EMKeyValue.of("key2", new HashMap<String, String>() {
             {
                 put("mkey1", "mvalue1");
                 put("mkey2", "mvalue2");
             }
         }));
        
         try {
             EMSentMessageResults messageResults = service.message().sendWithoutMsgId("fromUserName", "chatgroups", toGroups, imageMessage, exts1, true).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         
        参数:
        from - 发送者用户名
        toType - 目标类型,可以是 `users`, `chatgroups`, `chatrooms`
        tos - 目标id列表
        message - 要发送的消息
        extensions - 要发送的扩展,可以为空
        syncDevice - 消息发送成功后,是否将消息同步到发送方,true:是同步给发送方,false:是不同给发送方
        返回:
        发消息响应或错误
        另请参阅:
        发送消息
      • send

        @Deprecated
        public reactor.core.publisher.Mono<EMSentMessageIds> send​(java.lang.String from,
                                                                  java.lang.String toType,
                                                                  java.util.Set<java.lang.String> tos,
                                                                  EMMessage message,
                                                                  java.util.Set<EMKeyValue> extensions,
                                                                  java.lang.String routeType,
                                                                  java.lang.Boolean syncDevice)
        已过时。
        发送消息。将在后续版本中移除,请使用sendMsg方法。

        API使用示例:

         
         EMService service;
        
         例如,向用户发送一条带有扩展字段的文本消息
         Set<String> toUsers = new HashSet<>();
         toUsers.add("toUserName");
        
         EMTextMessage textMessage = new EMTextMessage().text("hello");
        
         Set<EMKeyValue> exts = new HashSet<>();
         exts.add(EMKeyValue.of("key", "value"));
        
         try {
             EMSentMessageIds messageIds = service.message().send("fromUserName", "users", toUsers, textMessage, exts, "ROUTE_ONLINE", true).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         例如,向群组发送一条带有扩展字段的图片消息
         Set<String> toGroups = new HashSet<>();
         toGroups.add("toGroupId");
        
         EMImageMessage imageMessage =
                 new EMImageMessage().uri(URI.create("http://example/image.png")).secret("secret")
                         .displayName("image.png");
        
         Set<EMKeyValue> exts1 = new HashSet<>();
         exts1.add(EMKeyValue.of("key", "value"));
         exts1.add(EMKeyValue.of("key1", 10));
         exts1.add(EMKeyValue.of("key2", new HashMap<String, String>() {
             {
                 put("mkey1", "mvalue1");
                 put("mkey2", "mvalue2");
             }
         }));
        
         try {
             EMSentMessageIds messageIds = service.message().send("fromUserName", "chatgroups", toGroups, imageMessage, exts1, "ROUTE_ONLINE", true).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         
        参数:
        from - 发送者用户名
        toType - 目标类型,可以是 `users`, `chatgroups`, `chatrooms`
        tos - 目标id列表
        message - 要发送的消息
        extensions - 要发送的扩展,可以为空
        routeType - 只投递在线消息,请传入 `ROUTE_ONLINE`
        syncDevice - 消息发送成功后,是否将消息同步到发送方,true:是同步给发送方,false:是不同给发送方
        返回:
        发消息响应或错误
        另请参阅:
        发送消息
      • sendMsg

        public reactor.core.publisher.Mono<EMSentMessageIds> sendMsg​(java.lang.String from,
                                                                     java.lang.String toType,
                                                                     java.util.Set<java.lang.String> tos,
                                                                     EMMessage message,
                                                                     java.util.Set<EMKeyValue> extensions,
                                                                     java.lang.String routeType,
                                                                     java.lang.Boolean syncDevice)
        发送消息。

        API使用示例:

         
         EMService service;
        
         例如,向用户发送一条带有扩展字段的文本消息
         Set<String> toUsers = new HashSet<>();
         toUsers.add("toUserName");
        
         EMTextMessage textMessage = new EMTextMessage().text("hello");
        
         Set<EMKeyValue> exts = new HashSet<>();
         exts.add(EMKeyValue.of("key", "value"));
        
         try {
             EMSentMessageIds messageIds = service.message().sendMsg("fromUserName", "users", toUsers, textMessage, exts, "ROUTE_ONLINE", true).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         例如,向群组发送一条带有扩展字段的图片消息
         Set<String> toGroups = new HashSet<>();
         toGroups.add("toGroupId");
        
         EMImageMessage imageMessage =
                 new EMImageMessage().uri(URI.create("http://example/image.png")).secret("secret")
                         .displayName("image.png");
        
         Set<EMKeyValue> exts1 = new HashSet<>();
         exts1.add(EMKeyValue.of("key", "value"));
         exts1.add(EMKeyValue.of("key1", 10));
         exts1.add(EMKeyValue.of("key2", new HashMap<String, String>() {
             {
                 put("mkey1", "mvalue1");
                 put("mkey2", "mvalue2");
             }
         }));
        
         try {
             EMSentMessageIds messageIds = service.message().sendMsg("fromUserName", "chatgroups", toGroups, imageMessage, exts1, "ROUTE_ONLINE", true).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         
        参数:
        from - 发送者用户名
        toType - 目标类型,可以是 `users`, `chatgroups`, `chatrooms`
        tos - 目标id列表
        message - 要发送的消息
        extensions - 要发送的扩展,可以为空
        routeType - 只投递在线消息,请传入 `ROUTE_ONLINE`
        syncDevice - 消息发送成功后,是否将消息同步到发送方,true:是同步给发送方,false:是不同给发送方
        返回:
        发消息响应或错误
        另请参阅:
        发送消息
      • sendMsg

        public reactor.core.publisher.Mono<EMSentMessageIds> sendMsg​(java.lang.String from,
                                                                     java.lang.String toType,
                                                                     java.util.Set<java.lang.String> tos,
                                                                     EMMessage message,
                                                                     java.util.Set<EMKeyValue> extensions,
                                                                     java.lang.String routeType,
                                                                     java.lang.Boolean syncDevice,
                                                                     ChatroomMsgLevel chatroomMsgLevel)
        发送消息,支持设置聊天室消息优先级。

        API使用示例:

         
         EMService service;
        
         例如,向聊天室发送一条带有扩展字段的图片消息
         Set<String> toChatRooms = new HashSet<>();
         toChatRooms.add("toChatroomId");
        
         EMImageMessage imageMessage =
                 new EMImageMessage().uri(URI.create("http://example/image.png")).secret("secret")
                         .displayName("image.png");
        
         Set<EMKeyValue> exts = new HashSet<>();
         exts.add(EMKeyValue.of("key", "value"));
         exts.add(EMKeyValue.of("key1", 10));
         exts.add(EMKeyValue.of("key2", new HashMap<String, String>() {
             {
                 put("mkey1", "mvalue1");
                 put("mkey2", "mvalue2");
             }
         }));
        
         try {
             EMSentMessageIds messageIds = service.message().sendMsg("fromUserName", "chatrooms", toChatRooms, imageMessage, exts, "ROUTE_ONLINE", true, ChatroomMsgLevel.NORMAL).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         
        参数:
        from - 发送者用户名
        toType - 目标类型,可以是 `users`, `chatgroups`, `chatrooms`
        tos - 目标id列表
        message - 要发送的消息
        extensions - 要发送的扩展,可以为空
        routeType - 只投递在线消息,请传入 `ROUTE_ONLINE`
        syncDevice - 消息发送成功后,是否将消息同步到发送方,true:是同步给发送方,false:是不同给发送方
        chatroomMsgLevel - 聊天室消息优先级: LOW-低优先级,NORMAL-普通优先级,HIGH-高优先级
        返回:
        发消息响应或错误
        另请参阅:
        发送消息
      • sendWithoutMsgId

        @Deprecated
        public reactor.core.publisher.Mono<EMSentMessageResults> sendWithoutMsgId​(java.lang.String from,
                                                                                  java.lang.String toType,
                                                                                  java.util.Set<java.lang.String> tos,
                                                                                  EMMessage message,
                                                                                  java.util.Set<EMKeyValue> extensions,
                                                                                  java.lang.String routeType,
                                                                                  java.lang.Boolean syncDevice)
        已过时。
        发送消息,不返回消息 ID。将在后续版本中移除。

        API使用示例:

         
         EMService service;
        
         例如,向用户发送一条带有扩展字段的文本消息
         Set<String> toUsers = new HashSet<>();
         toUsers.add("toUserName");
        
         EMTextMessage textMessage = new EMTextMessage().text("hello");
        
         Set<EMKeyValue> exts = new HashSet<>();
         exts.add(EMKeyValue.of("key", "value"));
        
         try {
             EMSentMessageResults messageResults = service.message().sendWithoutMsgId("fromUserName", "users", toUsers, textMessage, exts, true).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         例如,向群组发送一条带有扩展字段的图片消息
         Set<String> toGroups = new HashSet<>();
         toGroups.add("toGroupId");
        
         EMImageMessage imageMessage =
                 new EMImageMessage().uri(URI.create("http://example/image.png")).secret("secret")
                         .displayName("image.png");
        
         Set<EMKeyValue> exts1 = new HashSet<>();
         exts1.add(EMKeyValue.of("key", "value"));
         exts1.add(EMKeyValue.of("key1", 10));
         exts1.add(EMKeyValue.of("key2", new HashMap<String, String>() {
             {
                 put("mkey1", "mvalue1");
                 put("mkey2", "mvalue2");
             }
         }));
        
         try {
             EMSentMessageResults messageResults = service.message().sendWithoutMsgId("fromUserName", "chatgroups", toGroups, imageMessage, exts1, "ROUTE_ONLINE", true).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         
        参数:
        from - 发送者用户名
        toType - 目标类型,可以是 `users`, `chatgroups`, `chatrooms`
        tos - 目标id列表
        message - 要发送的消息
        extensions - 要发送的扩展,可以为空
        routeType - 只投递在线消息,请传入 `ROUTE_ONLINE`
        syncDevice - 消息发送成功后,是否将消息同步到发送方,true:是同步给发送方,false:是不同给发送方
        返回:
        发消息响应或错误
        另请参阅:
        发送消息
      • getHistoryAsUri

        public reactor.core.publisher.Mono<java.lang.String> getHistoryAsUri​(java.time.Instant instant)
        获取消息历史文件的下载地址。

        历史文件是每小时一个文件,比如指定12:10,则返回12点的历史文件。

        API使用示例:

         
         EMService service;
         try {
             Instant now = Instant.parse("2021-05-20T18:00:00.631Z").minusMillis((TimeUnit.HOURS.toMillis(8)));
             String historyUrl = service.message().getHistoryAsUri(now).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
         
        参数:
        instant - 时间点
        返回:
        下载地址或错误
        另请参阅:
        获取历史消息文件
      • getHistoryAsLocalFile

        public reactor.core.publisher.Mono<java.nio.file.Path> getHistoryAsLocalFile​(java.time.Instant instant,
                                                                                     java.nio.file.Path dir,
                                                                                     java.lang.String filename)
        下载消息历史文件到本地。

        消息历史文件是gz压缩的。

        API使用示例:

         
         EMService service;
         Instant now = Instant.parse("2021-05-20T18:00:00.631Z").minusMillis((TimeUnit.HOURS.toMillis(8)));
         Path dir = Paths.get("/local/path/...");
         try {
             Path path = service.message().getHistoryAsLocalFile(now, dir, "filename.gz").block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
         
        参数:
        instant - 时间点
        dir - 下载目录
        filename - 文件名,如果为空,则默认为YYYYMMDD.gz
        返回:
        下载文件的路径或错误
        另请参阅:
        获取历史消息文件
      • recallMessage

        @Deprecated
        public reactor.core.publisher.Mono<java.lang.Void> recallMessage​(java.util.List<RecallMessageSource> messageSources)
        已过时。
        消息撤回。将在后续版本中移除,请使用recallMsg方法。

        API使用示例:

         
         EMService service;
         try {
             List<RecallMessageSource> messageSources = new ArrayList<>();
             messageSources.add(new RecallMessageSource("messageId", "chat", "u1", "u2", true));
             service.message().recallMessage(messageSources).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
         
        参数:
        messageSources - messageSources
        返回:
        消息撤回响应或错误
        另请参阅:
        发送消息
      • recallMsg

        public reactor.core.publisher.Mono<java.lang.Void> recallMsg​(RecallMessageSource recallMessage)
        消息撤回。

        API使用示例:

         
         EMService service;
         try {
             RecallMessageSource recallMessage = new RecallMessageSource("messageId", "chat", "u1", "u2", true);
             service.message().recallMessage(recallMessage).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
         
        参数:
        recallMessage - recallMessage
        返回:
        消息撤回响应或错误
        另请参阅:
        发送消息
      • deleteChannel

        public reactor.core.publisher.Mono<java.lang.Void> deleteChannel​(java.lang.String username,
                                                                         java.lang.String channelName,
                                                                         java.lang.String channelType,
                                                                         java.lang.Boolean deleteRoam)
        服务端单向删除会话。

        API使用示例:

         
         EMService service;
         try {
             service.message().deleteChannel("u1", "u2", "chat", false).block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
         
        参数:
        username - username 删除会话方,例如 A 要将与 B 的单聊会话删除,username 为 A,channelName 为 B
        channelName - channelName 要删除的会话 ID
        channelType - channelType 会话类型。chat:单聊会话;groupchat:群聊会话
        deleteRoam - deleteRoam 是否删除服务端消息,不允许为空。true:是;false:否
        返回:
        消息撤回响应或错误
        另请参阅:
        服务端单向删除会话
      • importMessage

        public ImportMessage importMessage()
        构造消息并导入。

        例如,导入一条带有扩展字段的单聊文本消息:

        
         EMService service;
         try {
             service.message().importMessage()
                              .from("alice")
                              .toUser("rabbit")
                              .text(msg -> msg.text("hello"))
                              .extension(exts -> exts.add(EMKeyValue.of("timeout", 1)))
                              .isAckRead(true)
                              .msgTimestamp(Instant.now().toEpochMilli())
                              .needDownload(true)
                              .importChatMessage()
                              .block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
         

        如果需要向一个群组导入消息,将示例中的 toUser 改成 toGroup,并传入对应的群组或聊天室id

        将上述发送文本消息示例中的 `.text(...) `替换掉,来发送其他类型消息示例:

        导入图片消息:.image(msg -> msg.uri(URI.create("http://example/image.png")).secret("secret").displayName("image.png"))

        导入语音消息:.voice(msg -> msg.uri(URI.create("http://example/voice.amr")).duration(3).secret("secret").displayName("voice.amr"))

        导入视频消息:.video(msg -> msg.uri(URI.create("http://example/video.mp4")).duration(3).secret("secret").displayName("video.mp4").thumb("http://example/videoThumbnail").thumbSecret("thumbSecret"))

        导入文件消息:.file(msg -> msg.uri(URI.create("http://example/file.txt")).secret("secret").displayName("file.txt"))

        导入位置消息:.location(msg -> msg.latitude(1.234567).longitude(1.234567).address("some where"))

        导入自定义类型消息:.custom(msg -> msg.customEvent("liked").customExtension("name", "forest"))

        返回:
        导入消息的构造器
      • importChatMessage

        public reactor.core.publisher.Mono<java.lang.String> importChatMessage​(java.lang.String from,
                                                                               java.lang.String to,
                                                                               EMMessage message,
                                                                               java.util.Set<EMKeyValue> extensions,
                                                                               java.lang.Boolean isAckRead,
                                                                               java.lang.Long msgTimestamp,
                                                                               java.lang.Boolean needDownload)
        导入单聊消息 API使用示例:
         
        
         例如,导入带扩展字段的文本消息
        
         EMTextMessage textMessage = new EMTextMessage().text("hello");
        
         Set<EMKeyValue> exts = new HashSet<>();
         exts.add(EMKeyValue.of("key", "value"));
        
         try {
             Instant time = Instant.parse("2021-05-20T18:00:00.631Z").minusMillis((TimeUnit.HOURS.toMillis(8)));
             Long msgTimestamp = time.toEpochMilli();
             String messageId = service.message()
                                       .importChatMessage("fromUserName", "toUserName",
                                          textMessage, exts, true, msgTimestamp, false)
                                       .block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
        
         
        参数:
        from - 发送者用户名
        to - 目标用户名
        message - 要导入的消息,EMTextMessage文本消息,EMImageMessage图片消息,EMVoiceMessage语音消息, EMVideoMessage视频消息,EMFileMessage文件消息,EMCommandMessage透传消息,EMCustomMessage自定义类型消息, 各种类型消息需要自己构造
        extensions - 要导入的扩展内容,可以为空
        isAckRead - 是否设置消息为已读
        msgTimestamp - 导入的消息的时间戳
        needDownload - 是否需要下载附件资源
        返回:
        导入成功后消息的id
      • importChatGroupMessage

        public reactor.core.publisher.Mono<java.lang.String> importChatGroupMessage​(java.lang.String from,
                                                                                    java.lang.String to,
                                                                                    EMMessage message,
                                                                                    java.util.Set<EMKeyValue> extensions,
                                                                                    java.lang.Boolean isAckRead,
                                                                                    java.lang.Long msgTimestamp,
                                                                                    java.lang.Boolean needDownload)
        导入群聊消息 API使用示例:
         
        
         例如,导入带扩展字段的文本消息
        
         EMTextMessage textMessage = new EMTextMessage().text("hello");
        
         Set<EMKeyValue> exts = new HashSet<>();
         exts.add(EMKeyValue.of("key", "value"));
        
         try {
             Instant time = Instant.parse("2021-05-20T18:00:00.631Z").minusMillis((TimeUnit.HOURS.toMillis(8)));
             Long msgTimestamp = time.toEpochMilli();
             String groupId = "18273849454"
             String messageId = service.message()
                                       .importChatGroupMessage("fromUserName", groupId,
                                          textMessage, exts, true, msgTimestamp, false)
                                       .block();
         } catch (EMException e) {
             e.getErrorCode();
             e.getMessage();
         }
         
        参数:
        from - 发送者用户名
        to - 目标群id
        message - 要导入的消息,EMTextMessage文本消息,EMImageMessage图片消息,EMVoiceMessage语音消息, EMVideoMessage视频消息,EMFileMessage文件消息,EMCommandMessage透传消息,EMCustomMessage自定义类型消息, 各种类型消息需要自己构造
        extensions - 要导入的扩展内容,可以为空
        isAckRead - 是否设置消息为已读
        msgTimestamp - 导入的消息的时间戳
        needDownload - 是否需要下载附件资源
        返回:
        导入成功后消息的id