diff --git a/docs/document/android/message_receipt.md b/docs/document/android/message_receipt.md index 54a8d6ba..8804e117 100644 --- a/docs/document/android/message_receipt.md +++ b/docs/document/android/message_receipt.md @@ -73,24 +73,24 @@ EMClient.getInstance().chatManager().removeMessageListener(msgListener); ### 单聊消息已读回执 -单聊既支持单条消息已读回执,也支持[会话已读回执](conversation_receipt.html)。我们建议你结合使用这两种回执: - -- 聊天页面打开时,若收到消息,发送单条消息已读回执。 -- 聊天页面未打开时,若有未读消息,进入聊天页面,发送会话已读回执。这种方式可避免发送多个消息已读回执。 +单聊既支持单条消息已读回执,也支持[会话已读回执](conversation_receipt.html)。我们建议你结合使用这两种回执,见实现步骤的描述。 单聊消息的已读回执有效期与消息在服务端的存储时间一致,即在服务器存储消息期间均可发送已读回执。消息在服务端的存储时间与你订阅的套餐包有关,详见[产品价格](/product/pricing.html#套餐包功能详情)。 参考如下步骤在单聊中实现消息已读回执。 1. App 开启已读回执功能,即 SDK 初始化时将 `EMOptions#setRequireAck` 设置为 `true`。 + ```java -// 设置是否需要接受方已读确认,默认为true +// 设置是否需要接收方已读确认,默认为 true options.setRequireAck(true); ``` 2. 接收方发送消息已读回执。 - 接收方进入会话时,发送会话已读回执。 + + 聊天页面未打开时,若有未读消息,进入聊天页面,发送会话已读回执。这种方式可避免发送多个消息已读回执。 ```java try { @@ -100,7 +100,7 @@ try { } ``` -- 接收方在会话页面,接收到消息时,再根据消息类型发送单个消息已读回执。 +- 接收方在聊天页面打开时,接收到消息时,再根据消息类型发送单个消息已读回执。 ```java EMClient.getInstance().chatManager().addMessageListener(new EMMessageListener() { @@ -141,7 +141,7 @@ public void sendReadAck(EMMessage message) { ``` -3. 消息发送方监听消息已读回调。 +1. 消息发送方监听消息已读回调。 消息发送方可以通过 `EMMessageListener#onMessageRead` 事件监听指定消息是否已读,示例代码如下: @@ -285,7 +285,7 @@ public void asyncFetchGroupReadAcks( - 会话已读回执发送后,开发者需要调用 `EMConversation#markAllMessagesAsRead` 方法将该会话的所有消息置为已读,即会话的未读消息数清零。 -- 消息已读回执发送后,开发者需要调用 `EMConversation#markMessageAsRead` 方法将该条消息置为已读,则消息未读数会有变化。 +- 消息已读回执发送后,开发者需要调用 `EMConversation#markMessageAsRead` 方法将该条消息置为已读,消息未读数会有变化。 diff --git a/docs/document/ios/message_receipt.md b/docs/document/ios/message_receipt.md index 3372ea15..a4a9a459 100644 --- a/docs/document/ios/message_receipt.md +++ b/docs/document/ios/message_receipt.md @@ -54,6 +54,7 @@ options.enableDeliveryAck = YES; ``` 2. 接收方收到消息后,SDK 自动向发送方送达回执。 + 3. 发送方监听 `EMChatManagerDelegate#messagesDidDeliver` 事件,收到接收方的送达回执。你可以在收到该通知时,显示消息的送达状态。 ```objectivec @@ -74,7 +75,7 @@ EMChatManagerDelegate ### 单聊消息已读回执 -单聊既支持消息已读回执,也支持[会话已读回执](conversation_receipt.html)。我们建议你结合使用这两种回执: +单聊既支持消息已读回执,也支持[会话已读回执](conversation_receipt.html)。我们建议你结合使用这两种回执,见实现步骤的描述。 - 聊天页面打开时,若收到消息,发送消息已读回执。 - 聊天页面未打开时,若有未读消息,进入聊天页面,发送会话已读回执。这种方式可避免发送多个消息已读回执。 @@ -94,12 +95,14 @@ options.enableRequireReadAck = YES; 2. 接收方发送消息已读回执。 - 消息接收方进入会话时,发送会话已读回执。 + + 聊天页面未打开时,若有未读消息,进入聊天页面,发送会话已读回执。这种方式可避免发送多个消息已读回执。 ```objectivec [[EMClient sharedClient].chatManager ackConversationRead:conversationId completion:nil]; ``` -- 在会话页面,接收到消息时,根据消息类型发送消息已读回执。 +- 接收方在聊天页面打开时,接收到消息时,再根据消息类型发送单个消息已读回执。 ```objectivec // 接收消息回调。 diff --git a/docs/document/web/message_receipt.md b/docs/document/web/message_receipt.md index 301c2dca..bb0aa327 100644 --- a/docs/document/web/message_receipt.md +++ b/docs/document/web/message_receipt.md @@ -80,10 +80,7 @@ conn.addEventHandler("customEvent", { ### 单聊消息已读回执 -单聊既支持消息已读回执,也支持[会话已读回执](conversation_receipt.html)。我们建议你结合使用这两种回执: - -- 聊天页面打开时,若收到消息,发送消息已读回执。 -- 聊天页面未打开时,若有未读消息,进入聊天页面,发送会话已读回执。这种方式可避免发送多个消息已读回执。 +单聊既支持消息已读回执,也支持[会话已读回执](conversation_receipt.html)。我们建议你结合使用这两种回执,见实现步骤的描述。 单聊消息的已读回执有效期与消息在服务端的存储时间一致,即在服务器存储消息期间均可发送已读回执。消息在服务端的存储时间与你订阅的套餐包有关,详见[产品价格](/product/pricing.html#套餐包功能详情)。 @@ -93,6 +90,8 @@ conn.addEventHandler("customEvent", { - 消息接收方进入会话时,发送会话已读回执。 +聊天页面未打开时,若有未读消息,进入聊天页面,发送会话已读回执。这种方式可避免发送多个消息已读回执。 + ```javascript let option = { chatType: "singleChat", // 会话类型,设置为单聊。 @@ -103,7 +102,7 @@ let msg = WebIM.message.create(option); conn.send(msg); ``` -- 在会话页面,接收到消息时发送消息已读回执,如下所示: +- 聊天页面打开时,若收到消息,发送消息已读回执,如下所示: ```javascript let option = { @@ -116,7 +115,7 @@ let msg = WebIM.message.create(option); conn.send(msg); ``` -2. 消息发送方监听消息已读回调。 +1. 消息发送方监听消息已读回调。 你可以调用接口监听指定消息是否已读,示例代码如下: diff --git a/docs/uikit/chatuikit/ios/chatuikit_custom_cell.md b/docs/uikit/chatuikit/ios/chatuikit_custom_cell.md index 5ae82619..c607545a 100644 --- a/docs/uikit/chatuikit/ios/chatuikit_custom_cell.md +++ b/docs/uikit/chatuikit/ios/chatuikit_custom_cell.md @@ -84,7 +84,40 @@ final class MineMessageEntity: MessageEntity { ```Swift class CustomMessageListController: MessageListController { + + //要实现微信样式(followInput),需要同时重载下面的方法以及仿系统 UIActionSheet 样式(ActionSheet)的方法 + override func processFollowInputAttachmentAction() { + if Appearance.chat.messageAttachmentMenuStyle == .followInput { + if let fileItem = Appearance.chat.inputExtendActions.first(where: { $0.tag == "File" }) { + fileItem.action = { [weak self] item,object in + self?.handleAttachmentAction(item: item) + } + } + if let photoItem = Appearance.chat.inputExtendActions.first(where: { $0.tag == "Photo" }) { + photoItem.action = { [weak self] item,object in + self?.handleAttachmentAction(item: item) + } + } + if let cameraItem = Appearance.chat.inputExtendActions.first(where: { $0.tag == "Camera" }) { + cameraItem.action = { [weak self] item,object in + self?.handleAttachmentAction(item: item) + } + } + if let contactItem = Appearance.chat.inputExtendActions.first(where: { $0.tag == "Contact" }) { + contactItem.action = { [weak self] item,object in + self?.handleAttachmentAction(item: item) + } + } + if let redPackageItem = Appearance.chat.inputExtendActions.first(where: { $0.tag == "Red" }) { + redPackageItem.action = { [weak self] item,object in + self?.handleAttachmentAction(item: item) + } + } + + } + } + //仿系统 UIActionSheet 样式(ActionSheet)只需要重载以下方法 override func handleAttachmentAction(item: any ActionSheetItemProtocol) { switch item.tag { case "File": self.selectFile() diff --git a/docs/uikit/chatuikit/ios/releasenote.md b/docs/uikit/chatuikit/ios/releasenote.md index d82591db..07f0918b 100644 --- a/docs/uikit/chatuikit/ios/releasenote.md +++ b/docs/uikit/chatuikit/ios/releasenote.md @@ -4,6 +4,12 @@ ### 问题修复 +修复了部分 `UIKit内ChatNavigationBar` 继承后需要调用内部指定初始化器,与系统的初始化方法同名导致递归的问题。 + +## 版本 4.11.0 + +### 问题修复 + - 修复微信风格样式的发送附件消息菜单与表情键盘点击互相影响的问题。 - 修复了微信风格长按菜单多个扩展显示的问题。 - 修复了完全自定义消息文档缺失的问题,以及原来只能自定义一种自定义消息样式的问题。详见[实现新类型的自定义消息 Cell](chatuikit_custom_cell.html)。