类 MessageApi
- java.lang.Object
-
- com.easemob.im.server.api.message.MessageApi
-
public class MessageApi extends java.lang.Object
消息API。
-
-
构造器概要
构造器 构造器 说明 MessageApi(Context context)
-
方法概要
所有方法 实例方法 具体方法 已过时的方法 修饰符和类型 方法 说明 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)
已过时。
-
-
-
构造器详细资料
-
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
- 要查看对消息IDtoUser
- 消息接收方的用户名- 返回:
- 是否送达或错误
- 另请参阅:
- 获取某条离线消息状态
-
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 为 BchannelName
- channelName 要删除的会话 IDchannelType
- 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
- 目标群idmessage
- 要导入的消息,EMTextMessage文本消息,EMImageMessage图片消息,EMVoiceMessage语音消息, EMVideoMessage视频消息,EMFileMessage文件消息,EMCommandMessage透传消息,EMCustomMessage自定义类型消息, 各种类型消息需要自己构造extensions
- 要导入的扩展内容,可以为空isAckRead
- 是否设置消息为已读msgTimestamp
- 导入的消息的时间戳needDownload
- 是否需要下载附件资源- 返回:
- 导入成功后消息的id
-
-