diff --git a/docs/document/android/message_send_receive.md b/docs/document/android/message_send_receive.md index 0b1551778..22e906e70 100644 --- a/docs/document/android/message_send_receive.md +++ b/docs/document/android/message_send_receive.md @@ -53,8 +53,11 @@ 示例代码: ```java -// 创建一条文本消息,`content` 为消息文字内容,`conversationId` 为会话 ID,在单聊时为对端用户 ID、群聊时为群组 ID,聊天室时为聊天室 ID。 +// 创建一条文本消息,`content` 为消息文字内容。 +// `conversationId` 为消息接收方,单聊时为对端用户 ID、群聊时为群组 ID,聊天室时为聊天室 ID。 EMMessage message = EMMessage.createTextSendMessage(content, conversationId); +// 会话类型:单聊为 EMMessage.ChatType.Chat,群聊为 EMMessage.ChatType.GroupChat, 聊天室为EMMessage.ChatType.ChatRoom,默认为单聊。 +message.setChatType(EMMessage.ChatType.Chat); // 发送消息。 EMClient.getInstance().chatManager().sendMessage(message); ``` diff --git a/docs/document/android/releasenote.md b/docs/document/android/releasenote.md index cae5ca651..5b84d4048 100644 --- a/docs/document/android/releasenote.md +++ b/docs/document/android/releasenote.md @@ -2,6 +2,12 @@ +## 版本 V4.1.3 Dev 2023-9-25(开发版) + +### 修复 + +- [IM SDK] 特殊场景下,SDK 退出后再登录会丢失聊天室监听事件问题。 + ## 版本 V4.1.2 Dev 2023-9-5(开发版) ### 优化 diff --git a/docs/document/flutter/message_send_receive.md b/docs/document/flutter/message_send_receive.md index b4eafcdf1..8f522e0c8 100644 --- a/docs/document/flutter/message_send_receive.md +++ b/docs/document/flutter/message_send_receive.md @@ -51,10 +51,14 @@ 示例代码: ```dart -// 创建一条文本消息,`content` 为消息文字内容,`conversationId` 为会话 ID,在单聊时为对端用户 ID、群聊时为群组 ID,聊天室时为聊天室 ID。 +// 创建一条文本消息。 final msg = EMMessage.createTxtSendMessage( + // `targetId` 为接收方,单聊为对端用户 ID、群聊为群组 ID,聊天室为聊天室 ID。 targetId: conversationId, + // `content` 为消息文字内容。 content: 'hello', + // 会话类型:单聊为 `Chat`,群聊为 `GroupChat`, 聊天室为 `ChatRoom`,默认为单聊。 + chatType: ChatType.Chat, ); // 发送消息。 diff --git a/docs/document/ios/message_send_receive.md b/docs/document/ios/message_send_receive.md index 8485f4305..7bbcdb88e 100644 --- a/docs/document/ios/message_send_receive.md +++ b/docs/document/ios/message_send_receive.md @@ -50,22 +50,21 @@ 示例代码: -```objectivec -// 创建一条文本消息,`content` 为消息文字内容,`toChatUsername` 为对方用户或者群聊的 ID,`fromChatUsername` 为发送方用户或群聊的 ID,`textMessageBody` 为消息体,`messageExt` 为消息扩展,后文皆是如此。 -EMTextMessageBody *textMessageBody = [[TextMessageBody alloc] initWithText:content]; -EMChatMessage *message = [[EMChatMessage alloc] initWithConversationID:toChatUsername from:fromChatUsername to:toChatUsername body:textMessageBody ext:messageExt]; -// 构造消息时需设置 `EMChatMessage` 类的 `ChatType` 属性,可设置为 `EMChatTypeChat`、`EMChatTypeGroupChat` 和 `EMChatTypeChatRoom`,即单聊、群聊或聊天室消息,默认为单聊。 -message.chatType = EMChatTypeChat; -// 发送消息,异步方法。 -[[EMClient sharedClient].chatManager sendMessage:message progress:nil completion:nil]; -// 发送消息时可以设置发送回调,获得消息发送状态。可以在该回调中更新消息的显示状态。例如消息发送失败后的提示等等。 -[[EMClient sharedClient].chatManager sendMessage:message progress:nil completion:^(EMChatMessage *message, EMError *error) { - if (!error) { - // 发送消息成功! - } else { - // 发送消息失败! - } -}]; +```objective-c +// 调用 initWithText 创建文本消息。`content` 为文本消息的内容。 +EMTextMessageBody *textMessageBody = [[EMTextMessageBody alloc] initWithText:content]; +// 消息接收方,单聊为对端用户的 ID,群聊为群组 ID,聊天室为聊天室 ID。 +NSString* conversationId = @"remoteUserId"; +EMChatMessage *message = [[EMChatMessage alloc] initWithConversationID:conversationId + body:textMessageBody + ext:messageExt]; +// 会话类型,单聊为 `EMChatTypeChat`,群聊为 `EMChatTypeGroupChat`,聊天室为 `EMChatTypeChatRoom`,默认为单聊。 +message.chatType = EMChatTypeChatRoom; +// 发送消息。 +[[EMClient sharedClient].chatManager sendMessage:message + progress:nil + completion:nil]; + ``` 对于聊天室消息,可设置消息优先级。示例代码如下: @@ -196,7 +195,7 @@ EMImageMessageBody *body = [[EMImageMessageBody alloc] initWithData:imageData di EMChatMessage *message = [[EMChatMessage alloc] initWithConversationID:toChatUsername from:fromChatUsername to:toChatUsername body:body ext:messageExt]; // 设置 `EMChatMessage` 类的 `ChatType` 属性,可设置为 `EMChatTypeChat`、`EMChatTypeGroupChat` 和 `EMChatTypeChatRoom`,即单聊、群聊或聊天室消息,默认为单聊。 -message.chatType = EMChatTypeGroupChat; +message.chatType = EMChatTypeGroupChat; // 发送消息。 [[EMClient sharedClient].chatManager sendMessage:message progress:nil completion:nil]; ``` @@ -222,17 +221,14 @@ SDK 默认自动下载缩略图,即 `[EMClient sharedClient].options.isAutoDow 下载完成后,在回调里调用相应消息 `body` 的 `thumbnailLocalPath` 获取缩略图路径。 - ```objectivec EMImageMessageBody *imageBody = (EMImageMessageBody *)message.body; // 图片文件的本地缩略图资源路径。 NSString *thumbnailLocalPath = imageBody.thumbnailLocalPath; ``` - 4. 获取图片消息的附件。 - ```objectivec [[EMClient sharedClient].chatManager downloadMessageAttachment:message progress:nil completion:^(EMChatMessage *message, EMError *error) { if (!error) { @@ -242,7 +238,6 @@ NSString *thumbnailLocalPath = imageBody.thumbnailLocalPath; }]; ``` - #### 发送和接收视频消息 发送和接收视频消息的流程如下: @@ -258,7 +253,7 @@ body.duration = duration;// 视频时长。 EMChatMessage *message = [[EMChatMessage alloc] initWithConversationID:toChatUsername from:fromChatUsername to:toChatUsername body:body ext:messageExt]; // 设置 `EMChatMessage` 类的 `ChatType` 属性,可设置为 `EMChatTypeChat`、`EMChatTypeGroupChat` 和 `EMChatTypeChatRoom`,即单聊、群聊或聊天室消息,默认为单聊。 -message.chatType = EMChatTypeGroupChat; +message.chatType = EMChatTypeGroupChat; // 发送消息。 [[EMClient sharedClient].chatManager sendMessage:message progress:nil completion:nil]; ``` @@ -495,18 +490,19 @@ message.chatType = EMChatTypeGroupChat; 创建合并消息体时,需要设置以下参数: -| 属性 | 类型 | 描述 -| :-------------- | :-------------------- | :-------------------- | -| `title` | String | 合并消息的标题。 | -| `summary` | String | 合并消息的概要。 | -| `compatibleText` | String | 合并消息的兼容文本。
兼容文本起向下兼容不支持消息合并转发的版本的作用。当支持合并消息的 SDK 向不支持合并消息的低版本 SDK 发送消息时,低版本的 SDK 会将该属性解析为文本消息的消息内容。 | -| `messageIdList` | List | 合并消息的原始消息 ID 列表。该列表最多包含 300 个消息 ID。 | - +| 属性 | 类型 | 描述 | +| :--------------- | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `title` | String | 合并消息的标题。 | +| `summary` | String | 合并消息的概要。 | +| `compatibleText` | String | 合并消息的兼容文本。
兼容文本起向下兼容不支持消息合并转发的版本的作用。当支持合并消息的 SDK 向不支持合并消息的低版本 SDK 发送消息时,低版本的 SDK 会将该属性解析为文本消息的消息内容。 | +| `messageIdList` | List | 合并消息的原始消息 ID 列表。该列表最多包含 300 个消息 ID。 | + :::notice + 1. 合并转发支持嵌套,最多支持 10 层嵌套,每层最多 300 条消息。 2. 只有成功发送或接收的消息才能合并转发。 3. 不论 `EMOptions#isAutoTransferMessageAttachments` 设置为 `false` 或 `true`,SDK 都会将合并消息附件上传到环信服务器。 -::: + ::: 示例代码如下: @@ -534,12 +530,12 @@ EMChatMessage* msg = [[EMChatMessage alloc] initWithConversationID:@"conversatio ```Objective-C - (void)messagesDidReceive:(NSArray *)aMessages { - + for (EMChatMessage* msg in aMessages) { if (msg.body.type == EMMessageBodyTypeCombine) { // 合并消息类型,解析合并消息 [EMClient.sharedClient.chatManager downloadAndParseCombineMessage:msg completion:^(NSArray * _Nullable messages, EMError * _Nullable error) { - + }]; } } @@ -553,14 +549,15 @@ EMChatMessage* msg = [[EMChatMessage alloc] initWithConversationID:@"conversatio 该功能适用于文本消息、图片消息和音视频消息等全类型消息,最多可向群组或聊天室的 20 个成员发送定向消息。 :::notice + 1. 仅 SDK 4.0.3 及以上版本支持。 2. 定向消息不计入群组会话或聊天室会话的未读计数。 -::: + ::: 发送定向消息的流程与发送普通消息相似,唯一区别是需要设置消息的接收方,具体操作如下: 1. 创建一条群组或聊天室消息。 -2. 设置消息的接收方。 +2. 设置消息的接收方。 3. 发送定向消息。 下面以文本消息为例介绍如何发送定向消息,示例代码如下: @@ -569,13 +566,13 @@ EMChatMessage* msg = [[EMChatMessage alloc] initWithConversationID:@"conversatio // 创建一条文本消息。 EMTextMessageBody* textBody = [[EMTextMessageBody alloc] initWithText:@"hello"]; EMChatMessage* msg = [[EMChatMessage alloc] initWithConversationID:@"groupId" body:textBody ext:nil]; -// 会话类型:群组和聊天室聊天,分别为 `EMChatTypeGroupChat` 和 `EMChatTypeChatRoom`。 +// 会话类型:群组和聊天室聊天,分别为 `EMChatTypeGroupChat` 和 `EMChatTypeChatRoom`。 msg.chatType = EMChatTypeGroupChat; -// 设置消息接收方列表。最多可传 20 个接收方的用户 ID。若传入 `nil`,则消息发送给群组或聊天室的所有成员。 +// 设置消息接收方列表。最多可传 20 个接收方的用户 ID。若传入 `nil`,则消息发送给群组或聊天室的所有成员。 msg.receiverList = @[@"A",@"B"]; // 发送消息。 [EMClient.sharedClient.chatManager sendMessage:msg progress:nil completion:^(EMChatMessage * _Nullable message, EMError * _Nullable error) { - + }]; ``` diff --git a/docs/document/react-native/message_send_receive.md b/docs/document/react-native/message_send_receive.md index a947c2f99..7c2ea2594 100644 --- a/docs/document/react-native/message_send_receive.md +++ b/docs/document/react-native/message_send_receive.md @@ -53,11 +53,11 @@ ```typescript // 设置发送的消息类型。消息类型共支持 8 种。具体详见 `ChatMessageType` 枚举类型。 -// 通过指定该值,可以发送不同类型的消息。 const messageType = ChatMessageType.TXT; -// 设置消息接收对象 ID。 +// 设置消息接收对象。单聊时为对端用户 ID、群聊时为群组 ID,聊天室时为聊天室 ID。 const targetId = "john"; -// 设置消息接收对象类型。 消息接收对象类型包括单个用户、群组和聊天室。具体详见 `ChatMessageChatType` 枚举类型 +// 设置会话类型。单聊为 `PeerChat`,群聊为 `GroupChat`,聊天室为 `ChatRoom`,默认为单聊。 +// 具体详见 `ChatMessageChatType` 枚举类型。 const chatType = ChatMessageChatType.PeerChat; let msg: ChatMessage; // 构建文本消息。只需要消息文本内容。 diff --git a/docs/document/unity/message_send_receive.md b/docs/document/unity/message_send_receive.md index 2e888bc58..feb13a848 100644 --- a/docs/document/unity/message_send_receive.md +++ b/docs/document/unity/message_send_receive.md @@ -44,21 +44,21 @@ 示例代码: ```csharp -//创建一条文本消息,`content` 为消息文字内容,`toChatUsername` 为对方用户或者群聊的 ID,后文皆是如此。 -Message msg = Message.CreateTextSendMessage(toChatUsername, content); +//创建一条文本消息,`content` 为消息文字内容。 +// `conversationId` 为消息接收方,单聊为对端用户的 ID,群聊为群组 ID,聊天室时为聊天室 ID。 +Message msg = Message.CreateTextSendMessage(conversationId, content); -//设置消息类型,即设置 `Message` 类的 `MessageType` 属性。 -//该属性的值为 `Chat`、`Group` 和 `Room`,表明该消息是单聊,群聊或聊天室消息,默认为单聊。 -//若为群聊,设置 `MessageType` 为 `Group`。 +//设置会话类型,即 `Message` 类的 `MessageType` 属性。 +//单聊、群聊和聊天室分别为 `Chat`、`Group` 和 `Room`,默认为单聊。 msg.MessageType = MessageType.Group; //对于聊天室消息,可设置消息优先级。 -msg.MessageType = MessageType.Room; -//聊天室消息的优先级。如果不设置,默认值为`RoomMessagePriority.Normal`,即“普通”优先级。 -msg.SetRoomMessagePriority(RoomMessagePriority.High); +//msg.MessageType = MessageType.Room; +//聊天室消息的优先级。如果不设置,默认值为 `RoomMessagePriority.Normal`,即“普通”优先级。 +//msg.SetRoomMessagePriority(RoomMessagePriority.High); //发送消息。 -//发送消息时可以设置 `CallBack` 的实例,获得消息发送的状态。可以在该回调中更新消息的显示状态。例如消息发送失败后的提示等等。 +//发送消息时可设置 `CallBack` 的实例,获得消息发送状态。可在该回调中更新消息的显示状态。例如消息发送失败后的提示等。 SDKClient.Instance.ChatManager.SendMessage(ref msg, new CallBack( onSuccess: () => { Debug.Log($"{msg.MsgId}发送成功"); diff --git a/docs/document/web/message_send_receive.md b/docs/document/web/message_send_receive.md index 1cf34f818..e27188017 100644 --- a/docs/document/web/message_send_receive.md +++ b/docs/document/web/message_send_receive.md @@ -62,7 +62,7 @@ function sendTextMessage() { msg: "message content", // 消息接收方:单聊为对方用户 ID,群聊和聊天室分别为群组 ID 和聊天室 ID。 to: "username", - // 会话类型:单聊、群聊和聊天室分别为 `singleChat`、`groupChat` 和 `chatRoom`。 + // 会话类型:单聊、群聊和聊天室分别为 `singleChat`、`groupChat` 和 `chatRoom`,默认为单聊。 chatType: "singleChat", }; // 创建文本消息。 diff --git a/docs/document/windows/message_send_receive.md b/docs/document/windows/message_send_receive.md index 91a9f94ed..7a5b661ff 100644 --- a/docs/document/windows/message_send_receive.md +++ b/docs/document/windows/message_send_receive.md @@ -44,21 +44,21 @@ 示例代码: ```csharp -//创建一条文本消息,`content` 为消息文字内容,`toChatUsername` 为对方用户或者群聊的 ID,后文皆是如此。 -Message msg = Message.CreateTextSendMessage(toChatUsername, content); +//创建一条文本消息,`content` 为消息文字内容。 +// `conversationId` 为消息接收方,单聊为对端用户的 ID,群聊为群组 ID,聊天室时为聊天室 ID。 +Message msg = Message.CreateTextSendMessage(conversationId, content); -//设置消息类型,即设置 `Message` 类的 `MessageType` 属性。 -//该属性的值为 `Chat`、`Group` 和 `Room`,表明该消息是单聊,群聊或聊天室消息,默认为单聊。 -//若为群聊,设置 `MessageType` 为 `Group`。 +//设置会话类型,即 `Message` 类的 `MessageType` 属性。 +//单聊、群聊和聊天室分别设置为 `Chat`、`Group` 和 `Room`,默认为单聊。 msg.MessageType = MessageType.Group; //对于聊天室消息,可设置消息优先级。 -msg.MessageType = MessageType.Room; -//聊天室消息的优先级。如果不设置,默认值为`RoomMessagePriority.Normal`,即“普通”优先级。 -msg.SetRoomMessagePriority(RoomMessagePriority.High); +//msg.MessageType = MessageType.Room; +//聊天室消息的优先级。如果不设置,默认值为 `RoomMessagePriority.Normal`,即“普通”优先级。 +//msg.SetRoomMessagePriority(RoomMessagePriority.High); //发送消息。 -//发送消息时可以设置 `CallBack` 的实例,获得消息发送的状态。可以在该回调中更新消息的显示状态。例如消息发送失败后的提示等等。 +//发送消息时可设置 `CallBack` 的实例,获得消息发送状态。可在该回调中更新消息的显示状态。例如消息发送失败后的提示等。 SDKClient.Instance.ChatManager.SendMessage(ref msg, new CallBack( onSuccess: () => { Debug.Log($"{msg.MsgId}发送成功");