Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions docs/document/android/message_receipt.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -100,7 +100,7 @@ try {
}
```

- 接收方在会话页面,接收到消息时,再根据消息类型发送单个消息已读回执。
- 接收方在聊天页面打开时,接收到消息时,再根据消息类型发送单个消息已读回执。

```java
EMClient.getInstance().chatManager().addMessageListener(new EMMessageListener() {
Expand Down Expand Up @@ -141,7 +141,7 @@ public void sendReadAck(EMMessage message) {

```

3. 消息发送方监听消息已读回调。
1. 消息发送方监听消息已读回调。

消息发送方可以通过 `EMMessageListener#onMessageRead` 事件监听指定消息是否已读,示例代码如下:

Expand Down Expand Up @@ -285,7 +285,7 @@ public void asyncFetchGroupReadAcks(

- 会话已读回执发送后,开发者需要调用 `EMConversation#markAllMessagesAsRead` 方法将该会话的所有消息置为已读,即会话的未读消息数清零。

- 消息已读回执发送后,开发者需要调用 `EMConversation#markMessageAsRead` 方法将该条消息置为已读,则消息未读数会有变化
- 消息已读回执发送后,开发者需要调用 `EMConversation#markMessageAsRead` 方法将该条消息置为已读,消息未读数会有变化



Expand Down
7 changes: 5 additions & 2 deletions docs/document/ios/message_receipt.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ options.enableDeliveryAck = YES;
```

2. 接收方收到消息后,SDK 自动向发送方送达回执。

3. 发送方监听 `EMChatManagerDelegate#messagesDidDeliver` 事件,收到接收方的送达回执。你可以在收到该通知时,显示消息的送达状态。

```objectivec
Expand All @@ -74,7 +75,7 @@ EMChatManagerDelegate

### 单聊消息已读回执

单聊既支持消息已读回执,也支持[会话已读回执](conversation_receipt.html)。我们建议你结合使用这两种回执
单聊既支持消息已读回执,也支持[会话已读回执](conversation_receipt.html)。我们建议你结合使用这两种回执,见实现步骤的描述。

- 聊天页面打开时,若收到消息,发送消息已读回执。
- 聊天页面未打开时,若有未读消息,进入聊天页面,发送会话已读回执。这种方式可避免发送多个消息已读回执。
Expand All @@ -94,12 +95,14 @@ options.enableRequireReadAck = YES;
2. 接收方发送消息已读回执。

- 消息接收方进入会话时,发送会话已读回执。

聊天页面未打开时,若有未读消息,进入聊天页面,发送会话已读回执。这种方式可避免发送多个消息已读回执。

```objectivec
[[EMClient sharedClient].chatManager ackConversationRead:conversationId completion:nil];
```

- 在会话页面,接收到消息时,根据消息类型发送消息已读回执。
- 接收方在聊天页面打开时,接收到消息时,再根据消息类型发送单个消息已读回执。

```objectivec
// 接收消息回调。
Expand Down
11 changes: 5 additions & 6 deletions docs/document/web/message_receipt.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,10 +80,7 @@ conn.addEventHandler("customEvent", {

### 单聊消息已读回执

单聊既支持消息已读回执,也支持[会话已读回执](conversation_receipt.html)。我们建议你结合使用这两种回执:

- 聊天页面打开时,若收到消息,发送消息已读回执。
- 聊天页面未打开时,若有未读消息,进入聊天页面,发送会话已读回执。这种方式可避免发送多个消息已读回执。
单聊既支持消息已读回执,也支持[会话已读回执](conversation_receipt.html)。我们建议你结合使用这两种回执,见实现步骤的描述。

单聊消息的已读回执有效期与消息在服务端的存储时间一致,即在服务器存储消息期间均可发送已读回执。消息在服务端的存储时间与你订阅的套餐包有关,详见[产品价格](/product/pricing.html#套餐包功能详情)。

Expand All @@ -93,6 +90,8 @@ conn.addEventHandler("customEvent", {

- 消息接收方进入会话时,发送会话已读回执。

聊天页面未打开时,若有未读消息,进入聊天页面,发送会话已读回执。这种方式可避免发送多个消息已读回执。

```javascript
let option = {
chatType: "singleChat", // 会话类型,设置为单聊。
Expand All @@ -103,7 +102,7 @@ let msg = WebIM.message.create(option);
conn.send(msg);
```

- 在会话页面,接收到消息时发送消息已读回执,如下所示:
- 聊天页面打开时,若收到消息,发送消息已读回执,如下所示:

```javascript
let option = {
Expand All @@ -116,7 +115,7 @@ let msg = WebIM.message.create(option);
conn.send(msg);
```

2. 消息发送方监听消息已读回调。
1. 消息发送方监听消息已读回调。

你可以调用接口监听指定消息是否已读,示例代码如下:

Expand Down
33 changes: 33 additions & 0 deletions docs/uikit/chatuikit/ios/chatuikit_custom_cell.md
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
6 changes: 6 additions & 0 deletions docs/uikit/chatuikit/ios/releasenote.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,12 @@

### 问题修复

修复了部分 `UIKit内ChatNavigationBar` 继承后需要调用内部指定初始化器,与系统的初始化方法同名导致递归的问题。

## 版本 4.11.0

### 问题修复

- 修复微信风格样式的发送附件消息菜单与表情键盘点击互相影响的问题。
- 修复了微信风格长按菜单多个扩展显示的问题。
- 修复了完全自定义消息文档缺失的问题,以及原来只能自定义一种自定义消息样式的问题。详见[实现新类型的自定义消息 Cell](chatuikit_custom_cell.html)。
Expand Down