diff --git a/docs/document/android/message_delete.md b/docs/document/android/message_delete.md
index a10377312..33775c054 100644
--- a/docs/document/android/message_delete.md
+++ b/docs/document/android/message_delete.md
@@ -2,13 +2,16 @@
-本文介绍用户如何单向删除服务端的历史消息。
+本文介绍用户如何单向删除服务端以及本地的历史消息。
## 技术原理
-使用环信即时通讯 IM Android SDK 可以通过 `EMConversation` 类从服务器单向删除历史消息,主要方法如下:
+使用环信即时通讯 IM Android SDK 可以通过 `EMConversation` 和 `EMChatManager` 类从服务器单向删除历史消息,主要方法如下:
- `EMConversation#removeMessagesFromServer`:单向删除服务端的历史消息。
+- `EMChatManager#clearAllMessages`:删除本地指定会话的所有消息。
+- `EMChatManager#removeMessages(startTime, endTime)`:删除指定时间段的本地消息。
+- `EMChatManager#removeMessage(targetMessageId)`:删除本地单个会话的指定消息。
## 前提条件
@@ -57,3 +60,38 @@ conversation.removeMessagesFromServer(time, new EMCallBack() {
}
});
```
+
+### 删除本地指定会话的所有消息
+
+你可以删除本地指定会话的所有消息,示例代码如下:
+
+```java
+EMConversation conversation = EMClient.getInstance().chatManager().getConversation(conversationId);
+if(conversation != null) {
+ conversation.clearAllMessages();
+}
+```
+
+### 删除指定时间段的本地消息
+
+你可以删除本地指定会话在一段时间内的本地消息,示例代码如下:
+
+```java
+EMConversation conversation = EMClient.getInstance().chatManager().getConversation(conversationId);
+if(conversation != null) {
+ conversation.removeMessages(startTime, endTime);
+}
+```
+
+### 删除本地单个会话的指定消息
+
+你可以删除本地单个会话的指定消息,示例代码如下:
+
+```java
+EMConversation conversation = EMClient.getInstance().chatManager().getConversation(conversationId);
+if(conversation != null) {
+ conversation.removeMessage(targetMessageId);
+}
+```
+
+
diff --git a/docs/document/android/moderation.md b/docs/document/android/moderation.md
index c9a7e1677..eb7d852fe 100644
--- a/docs/document/android/moderation.md
+++ b/docs/document/android/moderation.md
@@ -23,7 +23,7 @@
```java
// msgid:要举报的消息 ID。
// tag:非法消息的标签。你需要自定义标签,例如`涉政`或`广告`。该字段对应环信即时通讯云控制台的消息举报记录页面的`词条标记`字段。
-// reason:举报原因。你需要自行填写举报原因。该字段对应环信即时通讯云控制台的消息举报记录页面的`举报原因`字段。
+// reason:举报原因。你需要自行填写举报原因,最长不能超过 512 字节。该字段对应环信即时通讯云控制台的消息举报记录页面的`举报原因`字段。
EMClient.getInstance().chatManager().asyncReportMessage(msgid, tag, reason, new EMCallBack() {
@Override
public void onSuccess() {
diff --git a/docs/document/android/push.md b/docs/document/android/push.md
index c0946103b..98b1468bf 100644
--- a/docs/document/android/push.md
+++ b/docs/document/android/push.md
@@ -1275,37 +1275,107 @@ EMClient.getInstance().pushManager().setPreferredNotificationLanguage("en", new
EMClient.getInstance().pushManager().getPreferredNotificationLanguage(new EMValueCallBack(){});
```
-#### 4.4 设置推送模板
+#### 4.4 使用推送模板
-环信 IM 支持自定义推送通知模板。使用前,你可参考以下步骤在环信即时通讯云管理后台上创建推送模板:
+你可以使用推送模板设置推送标题和内容。推送模板包括默认推送模板 `default` 和自定义推送模板,你可以通过以下两种方式设置:
-1. 登录环信 IM Console,进入首页。
-2. 在 **应用列表** 区域中,点击对应 app 的 **操作** 一栏中的 **查看** 按钮。
-3. 在环信 IM 配置页面的左侧导航栏,选择 **即时通讯 > 功能配置 > 消息推送 > 模板管理**,进入推送模板管理页面。
- ![image](@static/images/android/push/push_android_template_mgmt.png)
-4. 点击 **添加推送模板**。弹出以下页面,进行参数配置。
- ![image](@static/images/android/push/push_android_template_add.png)
+- [调用 REST API 配置](/document/server-side/push.html#使用推送模板)。
+- 在[环信即时通讯云控制台](https://console.easemob.com/user/login)设置推送模板,详见[控制台文档](/document/product/enable_and_configure_IM.html#配置推送模板)。
-在环信即时通讯云管理后台中完成模板创建后,用户可以在发送消息时选择此推送模板作为默认布局,如下代码示例所示:
+使用推送模板有以下优势:
+
+1. 自定义修改环信服务端默认推送内容。
+
+2. 接收方可以决定使用哪个模板。
+
+3. 按优先级选择模板使用方式。
+
+**推送通知栏内容设置的使用优先级**
+
+通知栏中显示的推送标题和内容可通过以下方式设置,优先级为由低到高:
+
+1. 发送消息时使用默认的推送标题和内容:设置推送通知的展示方式 `DisplayStyle`。推送标题为“您有一条新消息”,推送内容为“请点击查看”。
+2. 发送消息时使用默认模板:若有默认模板 `default`,发消息时无需指定。
+3. 发送消息时使用扩展字段自定义要显示的推送标题和推送内容,即 `em_push_title` 和 `em_push_content`。
+4. 接收方设置了推送模板。
+5. 发送消息时通过消息扩展字段指定模板名称。
+
+##### **发送消息时使用推送模板**
+
+创建模板后,你可以在发送消息时选择此推送模板,分为以下三种情况:
+
+:::tip
+若使用默认模板 **default**,消息推送时自动使用默认模板,创建消息时无需传入模板名称。
+:::
+
+1. 使用固定内容的推送模板,通过 `ext` 扩展字段指定推送模板名称。
+
+这种情况下,创建消息时无需传入 `titleArgs` 和 `contentArgs` 参数。
+
+```java
+// 下面以文本消息为例,其他类型的消息设置方法相同。
+EMMessage message = EMMessage.createSendMessage(EMMessage.Type.TXT);
+EMTextMessageBody txtBody = new EMTextMessageBody("消息内容");
+message.setTo("6006");
+// 设置推送模板。
+JSONObject pushObject = new JSONObject();
+try {
+ // 设置推送模板名称。设置前需在环信即时通讯云管理后台或调用 REST 接口创建推送模板。
+ //若为默认模板 `default`,无需传入模板名称。
+ //若为自定义模板,需传入模板名称。
+ pushObject.put("name", "test7");
+
+} catch (JSONException e) {
+ e.printStackTrace();
+}
+// 将推送扩展设置到消息中。
+message.setAttribute("em_push_template", pushObject);
+// 设置消息状态回调。
+message.setMessageStatusCallback(new EMCallBack() {...});
+// 发送消息。
+EMClient.getInstance().chatManager().sendMessage(message);
+```
+
+2. 使用自定义或者默认推送模板,模板中的推送标题和推送内容使用以下内置参数:
+- `{$dynamicFrom}`:服务器按优先级从高到底的顺序填充备注、群昵称(仅限群消息)和推送昵称。
+- `{$fromNickname}`:推送昵称。
+- `{$msg}`:消息内容。
+
+内置参数的介绍,详见[环信即时通讯控制台文档](/product/enable_and-configure_IM.html#使用默认推送模板)。
+
+这种方式的示例代码与“使用固定内容的推送模板”的相同。
+
+3. 使用自定义推送模板,而且推送标题和推送内容为自定义参数:
+
+例如,推送模板的设置如下图所示:
+
+![img](@static/images/android/push_template_custom.png)
+
+使用下面的示例代码后,通知栏中弹出的推送通知为:
+
+您收到了一条消息
+请及时查看
```java
// 下面以文本消息为例,其他类型的消息设置方法相同。
EMMessage message = EMMessage.createSendMessage(EMMessage.Type.TXT);
EMTextMessageBody txtBody = new EMTextMessageBody("消息内容");
message.setTo("6006");
-// 设置推送模板。设置前需在环信即时通讯云管理后台上创建推送模板。
+// 设置推送模板。设置前需在环信即时通讯云管理后台或调用 REST 接口创建推送模板。
JSONObject pushObject = new JSONObject();
JSONArray titleArgs = new JSONArray();
JSONArray contentArgs = new JSONArray();
try {
- // 设置推送模板名称。
- pushObject.put("name", "test7");
+ // 设置推送模板名称。若不指定,设置默认推送模板的信息。
+ pushObject.put("name", "push");
// 设置填写模板标题的 value 数组。
- titleArgs.put("value1");
+ titleArgs.put("您");
+ titleArgs.put("消息,");
//...
pushObject.put("title_args", titleArgs);
// 设置填写模板内容的 value 数组。
- contentArgs.put("value1");
+ contentArgs.put("请");
+ contentArgs.put("查看");
//...
pushObject.put("content_args", contentArgs);
} catch (JSONException e) {
@@ -1319,6 +1389,28 @@ message.setMessageStatusCallback(new EMCallBack() {...});
EMClient.getInstance().chatManager().sendMessage(message);
```
+##### **消息接收方使用推送模板**
+
+消息接收方可以调用 `setPushTemplate` 方法传入推送模板名称,选择要使用的模板。
+
+:::tip
+若发送方在发送消息时使用了推送模板,则推送通知栏中的显示内容以发送方的推送模板为准。
+:::
+
+```java
+EMClient.getInstance().pushManager().setPushTemplate("Template Name", new EMCallBack() {
+ @Override
+ public void onSuccess() {
+
+ }
+
+ @Override
+ public void onError(int code, String error) {
+
+ }
+});
+```
+
### 5. 解析收到的推送字段
#### 收到的推送字段解释
diff --git a/docs/document/android/user_relationship.md b/docs/document/android/user_relationship.md
index 6314cf4cc..95003d272 100644
--- a/docs/document/android/user_relationship.md
+++ b/docs/document/android/user_relationship.md
@@ -32,9 +32,7 @@ SDK 提供用户关系管理功能,包括好友列表管理和黑名单管理
本节展示如何在项目中管理好友的添加移除和黑名单的添加移除。
-### 管理好友列表
-
-#### 添加好友
+### 添加好友
添加好友部分主要功能是发送好友请求、接收好友请求、处理好友请求和好友请求处理结果回调等。
@@ -89,7 +87,7 @@ EMClient.getInstance().contactManager().declineInvitation(username);
当你同意或者拒绝后,对方会通过好友事件回调,收到 `onContactAgreed` 或者 `onContactRefused`。
-#### 删除好友
+### 删除好友
删除联系人时会同时删除对方联系人列表中的该用户,建议执行双重确认,以免发生误删操作。删除操作不需要对方同意或者拒绝。
@@ -103,7 +101,7 @@ EMClient.getInstance().contactManager().deleteContact(username);
调用 `deleteContact` 删除好友后,对方会收到 `onContactDeleted` 回调。
-#### 设置好友备注
+### 设置好友备注
自 4.2.1 版本开始,你可以调用 `asyncSetContactRemark` 方法设置单个好友的备注。
@@ -123,7 +121,7 @@ EMClient.getInstance().contactManager().asyncSetContactRemark(userId, remark, ne
});
```
-#### 从服务端获取好友列表
+### 从服务端获取好友列表
自 4.2.1 版本开始,你可以调用 `asyncFetchAllContactsFromServer` 方法从服务器一次性或分页获取好友列表,其中每个好友对象包含好友的用户 ID 和好友备注。
@@ -180,9 +178,9 @@ private void doAsyncFetchAllContactsFromServer(List contacts, String
List usernames = EMClient.getInstance().contactManager().getAllContactsFromServer();
```
-#### 从本地获取好友列表
+### 从本地获取好友列表
-自 4.2.1 版本开始,你可以调用 `fetchContactFromLocal` 方法从本地获取单个好友的用户 ID 和好友备注;你也可以调用 `asyncFetchAllContactsFromLocal` 方法一次性获取整个好友列表,其中每个好友对象包含好友的用户 ID 和好友备注。
+自 4.2.1 版本开始,你可以调用 `fetchContactFromLocal` 方法从本地获取单个好友的用户 ID 和好友备注。你也可以调用 `asyncFetchAllContactsFromLocal` 方法一次性获取整个好友列表,其中每个好友对象包含好友的用户 ID 和好友备注。
:::tip
需要从服务器获取好友列表之后,才能从本地获取到好友列表。
@@ -225,14 +223,12 @@ EMClient.getInstance().contactManager().asyncFetchAllContactsFromLocal(new EMVal
List usernames = EMClient.getInstance().contactManager().getContactsFromLocal();
```
-### 管理黑名单
+### 添加用户到黑名单
黑名单是与好友无任何关系的独立体系。可以将任何用户加入黑名单,不论该用户与你是否是好友关系。
黑名单功能包括加入黑名单,从黑名单移出用户和获取黑名单列表。对于获取黑名单,你可从服务器获取黑名单列表,也可从本地数据库获取已保存的黑名单列表。
-#### 添加用户到黑名单
-
你可以调用 `addUserToBlackList` 添加用户到黑名单。用户被加入黑名单后,无法向你发送消息,也无法发送好友申请。
用户可以将任何其他用户添加到黑名单列表,无论该用户是否是好友。好友被加入黑名单后仍在好友列表上显示。
@@ -243,7 +239,7 @@ List usernames = EMClient.getInstance().contactManager().getContactsFrom
EMClient.getInstance().contactManager().addUserToBlackList(username,true);
```
-#### 将用户从黑名单移除
+### 将用户从黑名单移除
你可以调用 `removeUserFromBlackList` 将用户从黑名单移除,用户发送消息等行为将恢复。
@@ -253,7 +249,7 @@ EMClient.getInstance().contactManager().addUserToBlackList(username,true);
EMClient.getInstance().contactManager().removeUserFromBlackList(username);
```
-#### 从服务器获取黑名单列表
+### 从服务器获取黑名单列表
你可以调用 `getBlackListFromServer` 从服务端获取黑名单列表。示例代码如下:
@@ -263,7 +259,7 @@ EMClient.getInstance().contactManager().removeUserFromBlackList(username);
EMClient.getInstance().contactManager().getBlackListFromServer();
```
-#### 从本地数据库获取黑名单列表
+### 从本地数据库获取黑名单列表
从服务器获取黑名单列表之后,才能从本地数据库获取到黑名单列表。
diff --git a/docs/document/flutter/message_delete.md b/docs/document/flutter/message_delete.md
index 84f7e47f5..a5b2c5d45 100644
--- a/docs/document/flutter/message_delete.md
+++ b/docs/document/flutter/message_delete.md
@@ -2,13 +2,16 @@
-本文介绍用户如何单向删除服务端的历史消息。
+本文介绍用户如何单向删除服务端和本地的历史消息。
## 技术原理
-使用环信即时通讯 IM Flutter SDK 可以通过 `EMChatManager` 类从服务器单向删除历史消息,主要方法如下:
+使用环信即时通讯 IM Flutter SDK 可以通过 `EMChatManager` 类单向删除服务端和本地的历史消息,主要方法如下:
- `EMChatManager#deleteRemoteMessagesBefore`/`EMChatManager#deleteRemoteMessagesWithIds`:根据消息时间或消息 ID 单向删除服务端的历史消息。
+- `EMChatManager#deleteAllMessages`:删除本地指定会话的所有消息。
+- `EMChatManager#deleteMessagesWithTs`:删除指定时间段的本地消息。
+- `EMChatManager#deleteMessage`:删除本地单个会话的指定消息。
## 前提条件
@@ -45,4 +48,34 @@ try {
msgIds: msgIds,
);
} on EMError catch (e) {}
+```
+
+### 删除本地指定会话的所有消息
+
+你可以删除本地指定会话的所有消息,示例代码如下:
+
+```dart
+EMConversation? conversation = await EMClient.getInstance.chatManager
+ .getConversation(conversationId);
+await conversation?.deleteAllMessages();
+```
+
+### 删除单个本地会话指定时间段的消息
+
+你可以删除本地指定会话在一段时间内的本地消息,示例代码如下:
+
+```dart
+EMConversation? conversation = await EMClient.getInstance.chatManager
+ .getConversation(conversationId);
+await conversation?.deleteMessagesWithTs(startTs, endTs);
+```
+
+### 删除本地单个会话的指定消息
+
+你可以删除本地单个会话的指定消息,示例代码如下:
+
+```dart
+EMConversation? conversation = await EMClient.getInstance.chatManager
+ .getConversation(conversationId);
+await conversation?.deleteMessage(messageId);
```
\ No newline at end of file
diff --git a/docs/document/flutter/moderation.md b/docs/document/flutter/moderation.md
index 8b9d6d4dc..38376172d 100644
--- a/docs/document/flutter/moderation.md
+++ b/docs/document/flutter/moderation.md
@@ -23,7 +23,7 @@
```typescript
// messageId:要举报的消息 ID。
// tag:非法消息的标签。你需要自定义标签,例如`涉政`或`广告`。该字段对应环信即时通讯云控制台的消息举报记录页面的`词条标记`字段。
-// reason:举报原因。你需要自行填写举报原因。该字段对应环信即时通讯云控制台的消息举报记录页面的`举报原因`字段。
+// reason:举报原因。你需要自行填写举报原因,最长不能超过 512 字节。该字段对应环信即时通讯云控制台的消息举报记录页面的`举报原因`字段。
try {
await EMClient.getInstance.chatManager.reportMessage(
messageId: messageId,
diff --git a/docs/document/flutter/user_relationship.md b/docs/document/flutter/user_relationship.md
index a8ad3751d..2abe776f4 100644
--- a/docs/document/flutter/user_relationship.md
+++ b/docs/document/flutter/user_relationship.md
@@ -38,9 +38,7 @@ SDK 提供用户关系管理功能,包括好友列表管理和黑名单管理
## 实现方法
-### 管理好友列表
-
-#### 添加好友
+### 添加好友
1. 用户添加指定用户为好友
@@ -109,7 +107,7 @@ EMClient.getInstance.contactManager.removeEventHandler("UNIQUE_HANDLER_ID");
EMClient.getInstance.contactManager.removeEventHandler("UNIQUE_HANDLER_ID");
```
-#### 删除好友
+### 删除好友
删除联系人时会同时删除对方联系人列表中的该用户,建议执行双重确认,以免发生误删操作。删除操作不需要对方同意或者拒绝。
@@ -129,7 +127,7 @@ try {
}
```
-#### 设置好友备注
+### 设置好友备注
自 4.2.0 版本开始,你可以调用 `asyncSetContactRemark` 方法设置单个好友的备注。
@@ -148,7 +146,7 @@ void updateRemark(String userId, String newRemark) async {
}
```
-#### 从服务端获取好友列表
+### 从服务端获取好友列表
自 4.2.0 版本开始,你可以调用 `fetchAllContactsFromServer` 方法从服务器一次性或分页获取好友列表,其中每个好友对象包含好友的用户 ID 和好友备注。
@@ -194,7 +192,7 @@ void fetchAllContactIds() async {
}
```
-#### 从本地获取好友列表
+### 从本地获取好友列表
自 4.2.0 版本开始,你可以调用 `getContact` 方法从本地获取单个好友的用户 ID 和好友备注;你也可以调用 `getAllContacts` 方法一次性获取整个好友列表,其中每个好友对象包含好友的用户 ID 和好友备注。
@@ -243,14 +241,12 @@ void getAllLocalContactIds() async {
}
```
-### 管理黑名单
+#### 将用户加入黑名单
黑名单是与好友无任何关系的独立体系。可以将任何用户加入黑名单,不论该用户与你是否是好友关系。
黑名单功能包括加入黑名单,从黑名单移出用户和获取黑名单列表。对于获取黑名单,你可从服务器获取黑名单列表,也可从本地数据库获取已保存的黑名单列表。
-#### 将用户加入黑名单
-
你可以调用 `addUserToBlockList` 将指定用户加入黑名单。用户被加入黑名单后将无法向你发送消息,也无法发送好友申请。
用户可以将任何其他用户添加到黑名单列表,无论该用户是否是好友。好友被加入黑名单后仍在好友列表上显示。
@@ -264,7 +260,7 @@ try {
}
```
-#### 查看当前用户黑名单列表
+### 查看当前用户黑名单列表
1. 通过服务器获取黑名单列表
@@ -288,7 +284,7 @@ try {
}
```
-#### 将用户从黑名单移除
+### 将用户从黑名单移除
你可以调用 `removeUserFromBlockList` 将用户从黑名单移除,用户发送消息等行为将恢复。
diff --git a/docs/document/ios/message_delete.md b/docs/document/ios/message_delete.md
index 956c1b721..30e51d50e 100644
--- a/docs/document/ios/message_delete.md
+++ b/docs/document/ios/message_delete.md
@@ -2,13 +2,16 @@
-本文介绍用户如何删除本地和服务端的历史消息。
+本文介绍用户如何单向删除服务端和本地的历史消息。
## 技术原理
-使用环信即时通讯 IM iOS SDK 可以从服务器删除历史消息,主要方法如下:
+使用环信即时通讯 IM iOS SDK 可以通过 `EMConversation` 类单向删除服务端和本地的历史消息,主要方法如下:
-- `removeMessagesFromServerWithTimeStamp`/`removeMessagesFromServerMessageIds`:按消息时间或消息 ID 单向删除服务端的历史消息;
+- `EMConversation#removeMessagesFromServerWithTimeStamp`/`removeMessagesFromServerMessageIds`:按消息时间或消息 ID 单向删除服务端的历史消息。
+- `EMConversation#deleteAllMessages`:删除本地指定会话的所有消息。
+- `EMConversation#removeMessagesStart`:删除本地单个会话在指定时间段的消息。
+- `EMConversation#deleteMessage`:删除本地单个会话的指定消息。
## 前提条件
@@ -40,3 +43,47 @@
}];
```
+
+### 删除本地指定会话的所有消息
+
+你可以删除本地指定会话的所有消息,示例代码如下:
+
+```swift
+if let conversation = EMClient.shared().chatManager?.getConversationWithConvId("conversationId") {
+ var err: EMError? = nil
+ conversation.deleteAllMessages(&err)
+ if let err = err {
+ // 删除消息失败
+ } else {
+ // 成功删除消息
+ }
+}
+```
+
+### 删除本地单个会话在指定时间段的消息
+
+你可以删除本地指定会话在一段时间内的本地消息,示例代码如下:
+
+```swift
+if let conversation = EMClient.shared().chatManager?.getConversationWithConvId("conversationId") {
+ conversation.removeMessagesStart(startTime, to: endTime)
+}
+```
+
+### 删除本地单个会话的指定消息
+
+你可以删除本地单个会话的指定消息,示例代码如下:
+
+```swift
+if let conversation = EMClient.shared().chatManager?.getConversationWithConvId("conversationId") {
+ var err: EMError? = nil
+ conversation.deleteMessage(withId: "messageId", error:&err)
+ if let err = err {
+ // 删除消息失败
+ } else {
+ // 成功删除消息
+ }
+}
+```
+
+
diff --git a/docs/document/ios/moderation.md b/docs/document/ios/moderation.md
index 5bce9758a..6c0d0f193 100644
--- a/docs/document/ios/moderation.md
+++ b/docs/document/ios/moderation.md
@@ -24,7 +24,7 @@
// 异步方法
// msgId:要举报的消息 ID。
// tag:非法消息的标签。你需要自定义标签,例如`涉政`或`广告`。该字段对应环信即时通讯云控制台的消息举报记录页面的`词条标记`字段。
-// reason:举报原因。你需要自行填写举报原因。该字段对应环信即时通讯云控制台的消息举报记录页面的`举报原因`字段。
+// reason:举报原因。你需要自行填写举报原因,最长不能超过 512 字节。该字段对应环信即时通讯云控制台的消息举报记录页面的`举报原因`字段。
[EMClient.sharedClient.chatManager reportMessageWithId:msgId
tag:tag
reason:reason
diff --git a/docs/document/ios/push.md b/docs/document/ios/push.md
index 0c7f348cb..dc67f7ff1 100644
--- a/docs/document/ios/push.md
+++ b/docs/document/ios/push.md
@@ -474,19 +474,77 @@ NSArray *conversations = @[conversation1,conversation2];
#### 4.4 设置推送模板
-环信 IM 支持自定义推送通知模板。使用前,你可参考以下步骤在环信即时通讯云管理后台上创建推送模板:
+你可以使用推送模板设置推送标题和内容。推送模板包括默认推送模板 `default` 和自定义推送模板,你可以通过以下两种方式设置:
-1. 登录环信 IM Console,进入首页。
-2. 在 **应用列表** 区域中,点击对应 app 的 **操作** 一栏中的 **查看** 按钮。
-3. 在环信 IM 配置页面的左侧导航栏,选择 **即时通讯 > 功能配置 > 消息推送 > 模板管理**,进入推送模板管理页面。
+- [调用 REST API 配置](/document/server-side/push.html#使用推送模板)。
+- 在[环信即时通讯云控制台](https://console.easemob.com/user/login)设置推送模板,详见[控制台文档](/document/product/enable_and_configure_IM.html#配置推送模板)。
-![image](@static/images/ios/push/push_ios_28_template_mgmt.png)
+使用推送模板有以下优势:
-4. 点击 **添加推送模板**。弹出以下页面,进行参数配置。
+1. 自定义修改环信服务端默认推送内容。
-![image](@static/images/ios/push/push_ios_29_template_add.png)
+2. 接收方可以决定使用哪个模板。
-在环信即时通讯云管理后台中完成模板创建后,用户可以在发送消息时选择此推送模板作为默认布局,如下代码示例所示:
+3. 按优先级选择模板使用方式。
+
+**推送通知栏内容设置的使用优先级**
+
+通知栏中显示的推送标题和内容可通过以下方式设置,优先级为由低到高:
+
+1. 发送消息时使用默认的推送标题和内容:设置推送通知的展示方式 `DisplayStyle`。推送标题为“您有一条新消息”,推送内容为“请点击查看”。
+2. 发送消息时使用默认模板:若有默认模板 `default`,发消息时无需指定。
+3. 发送消息时使用扩展字段自定义要显示的推送标题和推送内容,即 `em_push_title` 和 `em_push_content`。
+4. 接收方设置了推送模板。
+5. 发送消息时通过消息扩展字段指定模板名称。
+
+##### **发送消息时使用推送模板**
+
+创建模板后,你可以在发送消息时选择此推送模板,分为以下三种情况:
+
+:::tip
+若使用默认模板 **default**,消息推送时自动使用默认模板,创建消息时无需传入模板名称。
+:::
+
+1. 使用固定内容的推送模板,通过 `ext` 扩展字段指定推送模板名称。
+
+这种情况下,创建消息时无需传入 `title_args` 和 `content_args` 参数。
+
+```objectivec
+//下面以文本消息为例,其他类型的消息设置方法相同。
+EMTextMessageBody *body = [[EMTextMessageBody alloc]initWithText:@"test"];
+EMChatMessage *message = [[EMChatMessage alloc]initWithConversationID:@"conversationId" from:@"currentUsername" to:@"conversationId" body:body ext:nil];
+//设置推送模板。设置前需在环信即时通讯云管理后台或调用 REST 接口创建推送模板。
+NSDictionary *pushObject = @{
+ //设置推送模板名称。
+ //若为默认模板 `default`,无需传入模板名称。若为自定义模板,需传入模板名称。
+ @"name":@"templateName",
+};
+message.ext = @{
+ @"em_push_template":pushObject,
+};
+message.chatType = EMChatTypeChat;
+[[EMClient sharedClient].chatManager sendMessage:message progress:nil completion:nil];
+```
+
+2. 使用自定义或者默认推送模板,模板中的推送标题和推送内容使用以下内置参数:
+- `{$dynamicFrom}`:服务器按优先级从高到底的顺序填充备注、群昵称(仅限群消息)和推送昵称。
+- `{$fromNickname}`:推送昵称。
+- `{$msg}`:消息内容。
+
+内置参数的介绍,详见[环信即时通讯控制台文档](/product/enable_and-configure_IM.html#使用默认推送模板)。
+
+这种方式的示例代码与“使用固定内容的推送模板”的相同。
+
+3. 使用自定义推送模板,而且推送标题和推送内容为自定义参数:
+
+例如,推送模板的设置如下图所示:
+
+![img](@static/images/android/push_template_custom.png)
+
+使用下面的示例代码后,通知栏中弹出的推送通知为:
+
+您收到了一条消息
+请及时查看
```objectivec
//下面以文本消息为例,其他类型的消息设置方法相同。
@@ -494,9 +552,11 @@ EMTextMessageBody *body = [[EMTextMessageBody alloc]initWithText:@"test"];
EMChatMessage *message = [[EMChatMessage alloc]initWithConversationID:@"conversationId" from:@"currentUsername" to:@"conversationId" body:body ext:nil];
//设置推送模板。设置前需在环信即时通讯云管理后台上创建推送模板。
NSDictionary *pushObject = @{
- @"name":@"templateName",//设置推送模板名称。
- @"title_args":@[@"titleValue1"],//设置填写模板标题的 value 数组。
- @"content_args":@[@"contentValue1"]//设置填写模板内容的 value 数组。
+ //设置推送模板名称。若不指定,设置默认推送模板的信息。
+ //设置前需在环信即时通讯云管理后台或调用 REST 接口创建推送模板。
+ @"name":@"templateName",
+ @"title_args":@[@"您",@"消息"],//设置填写模板标题的 value 数组。
+ @"content_args":@[@"请",@"查看"]//设置填写模板内容的 value 数组。
};
message.ext = @{
@"em_push_template":pushObject,
@@ -505,6 +565,20 @@ message.chatType = EMChatTypeChat;
[[EMClient sharedClient].chatManager sendMessage:message progress:nil completion:nil];
```
+##### **消息接收方使用推送模板**
+
+消息接收方可以调用 `setPushTemplate` 方法传入推送模板名称,选择要使用的模板。
+
+:::tip
+若发送方在发送消息时使用了推送模板,则推送通知栏中的显示内容以发送方的推送模板为准。
+:::
+
+```objective-C
+[EMClient.sharedClient.pushManager setPushTemplate:@"templateName" completion:^(EMError * _Nullable aError) {
+
+}];
+```
+
### 5. 解析收到的推送字段
当设备收到推送通知并点击时,iOS 系统会将推送通知中的自定义推送内容(JSON)传递给 app,这样你就可以根据推送内容自定义点击推送通知触发的行为,例如,页面跳转等。当收到推送通知并点击时,app 获取推送内容的方式如下:
diff --git a/docs/document/ios/user_relationship.md b/docs/document/ios/user_relationship.md
index 98c1bc6f0..683ecedfe 100644
--- a/docs/document/ios/user_relationship.md
+++ b/docs/document/ios/user_relationship.md
@@ -35,9 +35,7 @@ SDK 提供用户关系管理功能,包括好友列表管理和黑名单管理
本节展示如何在项目中管理好友的添加移除和黑名单的添加移除。
-### 管理好友列表
-
-#### 添加好友
+### 添加好友
添加好友部分主要功能是发送好友请求、接收好友请求、处理好友请求和好友请求处理结果回调等。
@@ -112,7 +110,7 @@ if (!aError) {
{ }
```
-#### 删除好友
+### 删除好友
删除联系人时会同时删除对方联系人列表中的该用户,建议执行双重确认,以免发生误删操作。删除操作不需要对方同意或者拒绝。
@@ -138,7 +136,7 @@ if (!aError) {
{ }
```
-#### 设置好友备注
+### 设置好友备注
自 4.2.0 版本开始,你可以调用 `setContactRemark` 方法设置好友备注。
@@ -150,12 +148,10 @@ if (!aError) {
}];
```
-#### 获取好友列表
+### 从服务端获取好友列表
你可以从服务器获取好友列表,也可以从本地获取已保存的好友列表。
-#### 从服务端获取好友列表
-
自 4.2.0 版本开始,你可以调用 `getAllContactsFromServerWithCompletion` 或 `getContactsFromServerWithCursor` 方法从服务器一次性或分页获取好友列表,其中每个好友对象包含好友的用户 ID 和好友备注。
- 一次性获取服务端的好友列表。
@@ -188,7 +184,7 @@ if (!aError) {
}];
```
-#### 从本地获取好友列表
+### 从本地获取好友列表
:::tip
需要从服务器获取好友列表之后,才能从本地获取到好友列表。
@@ -216,14 +212,12 @@ NSArray* contacts = [EMClient.sharedClient.contactManager getAllCont
NSArray *userlist = [[EMClient sharedClient].contactManager getContacts];
```
-### 管理黑名单
+### 查看当前用户黑名单列表
黑名单是与好友无任何关系的独立体系。可以将任何用户加入黑名单,不论该用户与你是否是好友关系。
黑名单功能包括加入黑名单,从黑名单移出用户和获取黑名单列表。对于获取黑名单,你可从服务器获取黑名单列表,也可从本地数据库获取已保存的黑名单列表。
-#### 查看当前用户黑名单列表
-
1. 通过服务器获取黑名单列表
从服务器获取黑名单列表之后,才能从本地数据库获取到黑名单列表。
@@ -247,7 +241,7 @@ NSArray *userlist = [[EMClient sharedClient].contactManager getContacts];
NSArray *blockList = [[EMClient sharedClient].contactManager getBlackList];
```
-#### 将用户加入黑名单
+### 将用户加入黑名单
你可以调用 `addUserToBlackList` 将指定用户加入黑名单。用户被加入黑名单后将无法向你发送消息,也无法发送好友申请。
@@ -266,7 +260,7 @@ NSArray *blockList = [[EMClient sharedClient].contactManager getBlackList];
}];
```
-#### 将用户移出黑名单
+### 将用户移出黑名单
你可以调用 `removeUserFromBlackList` 将用户从黑名单移除,用户发送消息等行为将恢复。
diff --git a/docs/document/react-native/message_delete.md b/docs/document/react-native/message_delete.md
index 0edfbb497..f4e432925 100644
--- a/docs/document/react-native/message_delete.md
+++ b/docs/document/react-native/message_delete.md
@@ -6,12 +6,12 @@
## 技术原理
-环信即时通讯 IM React Native SDK 通过 `ChatManager` 和 `ChatConversation` 类实现单向删除服务端以及删除本地的历史消息,主要方法如下:
+环信即时通讯 IM React Native SDK 通过 `ChatManager` 类实现单向删除服务端以及本地的历史消息,主要方法如下:
-- `removeMessagesFromServerWithTimestamp`/`removeMessagesFromServerWithMsgIds` :单向删除服务端的历史消息;
-- `deleteMessage`:删除本地单个会话的指定消息;
-- `deleteAllMessages`:删除指定会话的所有消息;
-- `deleteMessagesWithTimestamp`:删除指定时间段的本地消息。
+- `ChatManager#removeMessagesFromServerWithTimestamp`/`removeMessagesFromServerWithMsgIds` :单向删除服务端的历史消息;
+- `ChatManager#deleteAllMessages`:删除本地指定会话的所有消息;
+- `ChatManager#deleteMessagesWithTimestamp`:删除本地单个会话在指定时间段的消息。
+- `ChatManager#deleteMessage`:删除本地单个会话的指定消息;
## 前提条件
@@ -57,16 +57,15 @@ ChatClient.getInstance()
});
```
-### 删除本地单个会话的指定消息
+### 删除本地指定会话的所有消息
-你可以调用 `deleteMessage` 方法删除本地单个会话的指定消息。
+你可以调用 `deleteAllMessages` 方法删除指定会话的所有消息。
```typescript
// convId:会话 ID
-// convType: 会话类型
-// msgId:消息 ID
+// convType:会话类型
ChatClient.getInstance()
- .chatManager.deleteMessage(convId, convType, msgId)
+ .chatManager.deleteAllMessages(convId, convType)
.then(() => {
console.log("delete message success");
})
@@ -75,15 +74,15 @@ ChatClient.getInstance()
});
```
-### 删除本地指定会话的所有消息
+### 删除本地单个会话在指定时间段的消息
-你可以调用 `deleteAllMessages` 方法删除指定会话的所有消息。
+你可以调用 `deleteMessagesWithTimestamp` 方法删除指定时间段的本地消息。
```typescript
-// convId:会话 ID
-// convType:会话类型
+// startTs: 开始点的时间戳
+// endTs: 结束点的时间戳
ChatClient.getInstance()
- .chatManager.deleteAllMessages(convId, convType)
+ .chatManager.deleteMessagesWithTimestamp({ startTs, endTs })
.then(() => {
console.log("delete message success");
})
@@ -92,19 +91,20 @@ ChatClient.getInstance()
});
```
-### 删除指定时间段的本地消息
+### 删除本地单个会话的指定消息
-你可以调用 `deleteMessagesWithTimestamp` 方法删除指定时间段的本地消息。
+你可以调用 `deleteMessage` 方法删除本地单个会话的指定消息。
```typescript
-// startTs: 开始点的时间戳
-// endTs: 结束点的时间戳
+// convId:会话 ID
+// convType: 会话类型
+// msgId:消息 ID
ChatClient.getInstance()
- .chatManager.deleteMessagesWithTimestamp({ startTs, endTs })
+ .chatManager.deleteMessage(convId, convType, msgId)
.then(() => {
console.log("delete message success");
})
.catch((reason) => {
console.log("delete message fail.", reason);
});
-```
+```
\ No newline at end of file
diff --git a/docs/document/react-native/moderation.md b/docs/document/react-native/moderation.md
index 5f47cf11e..b2da0dbfc 100644
--- a/docs/document/react-native/moderation.md
+++ b/docs/document/react-native/moderation.md
@@ -23,7 +23,7 @@
```typescript
// msgId:要举报的消息 ID。
// tag:非法消息的标签。你需要自定义标签,例如`涉政`或`广告`。该字段对应环信即时通讯云控制台的消息举报记录页面的`词条标记`字段。
-// reason:举报原因。你需要自行填写举报原因。该字段对应环信即时通讯云控制台的消息举报记录页面的`举报原因`字段。
+// reason:举报原因。你需要自行填写举报原因,最长不能超过 512 字节。该字段对应环信即时通讯云控制台的消息举报记录页面的`举报原因`字段。
ChatClient.getInstance()
.chatManager.reportMessage(msgId, tag, reason)
.then((result) => {
diff --git a/docs/document/server-side/account_system.md b/docs/document/server-side/account_system.md
index 044184247..1f4dcfb7f 100644
--- a/docs/document/server-side/account_system.md
+++ b/docs/document/server-side/account_system.md
@@ -648,9 +648,13 @@ curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer - 26 个小写英文字母 a-z;
- 26 个大写英文字母 A-Z;
- 10 个数字 0-9。 | 是 |
| `title_pattern` | String | 自定义推送标题,例如: 标题 {0}。 | 是 |
| `content_pattern` | String | 自定义推送内容,例如:内容 {0}, {1}。 | 是 |
-### HTTP 响应
-
-#### 响应 body
+`title_pattern` 和 `content_pattern` 的设置方式如下:
+- 输入固定的内容,例如,标题为 “您好”,内容为“您有一条新消息”。
+- 内置参数填充:
+ - `{$dynamicFrom}`:按优先级从高到底的顺序填充好友备注、群昵称(仅限群消息)和推送昵称。
+ - `{$fromNickname}`:推送昵称。
+ - `{$msg}`:消息内容。
+- 自定义参数填充:模板输入数组索引占位符,格式为: {0} {1} {2} ... {n}
+
+ 对于推送标题和内容来说,前两种设置方式在创建消息时无需传入该参数,服务器自动获取,第三种设置方式则需要通过扩展字段 `ext.em_push_template` 传入,JSON 结构如下:
+
+ ```json
+ {
+ "ext":{
+ "em_push_template":{
+ "title_args":[
+ "环信"
+ ],
+ "content_args":[
+ "欢迎使用im-push",
+ "加油"
+ ]
+ }
+ }
+ }
+
+ # title: {0} = "环信"
+ # content: {0} = "欢迎使用im-push" {1} = "加油"
+ ```
+
+#### HTTP 响应
+
+##### 响应 body
如果返回的 HTTP 状态码为 200,表示请求成功,响应包体中包含以下字段:
@@ -844,22 +897,22 @@ POST https://{host}/{org_name}/{app_name}/notification/template
如果返回的 HTTP 状态码非 200,表示请求失败。你可以参考 [错误码](error.html) 了解可能的原因。
-### 示例
+#### 示例
-#### 请求示例
+##### 请求示例
```bash
curl -X POST '{url}/{org}/{app}/notification/template' \
-H 'Authorization: Bearer ' \
-H 'Content-Type: application/json' \
---data-raw '{
+-d '{
"name": "test7",
"title_pattern": "你好,{0}",
"content_pattern": "推送测试,{0}"
}'
```
-#### 响应示例
+##### 响应示例
```json
{
@@ -880,17 +933,17 @@ curl -X POST '{url}/{org}/{app}/notification/template' \
}
```
-## 查询离线推送模板
+### 查询离线推送模板
查询离线推送消息使用的模板。
-### HTTP 请求
+#### HTTP 请求
```http
GET https://{host}/{org_name}/{app_name}/notification/template/{name}
```
-#### 路径参数
+##### 路径参数
| 参数 | 类型 | 描述 | 是否必需 |
| :----- | :----- | :----------------------- | :------- |
@@ -898,16 +951,16 @@ GET https://{host}/{org_name}/{app_name}/notification/template/{name}
其他参数及说明详见 [公共参数](#公共参数)。
-#### 请求 header
+##### 请求 header
| 参数 | 类型 | 描述 | 是否必需 |
| :-------------- | :----- | :------------------------------------------------------------------------------------------------------------------- | :------- |
| `Content-Type` | String | 内容类型。请填 `application/json`。 | 是 |
| `Authorization` | String | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | 是 |
-### HTTP 响应
+#### HTTP 响应
-#### 响应 body
+##### 响应 body
如果返回的 HTTP 状态码为 200,表示请求成功,响应包体中包含以下字段:
@@ -922,16 +975,16 @@ GET https://{host}/{org_name}/{app_name}/notification/template/{name}
如果返回的 HTTP 状态码非 200,表示请求失败。你可以参考 [错误码](error.html) 了解可能的原因。
-### 示例
+#### 示例
-#### 请求示例
+##### 请求示例
```bash
curl -X GET '{url}/{org}/{app}/notification/template/{name}' \
-H 'Authorization: Bearer '
```
-#### 响应示例
+##### 响应示例
```json
{
@@ -952,17 +1005,146 @@ curl -X GET '{url}/{org}/{app}/notification/template/{name}' \
}
```
-## 删除离线推送模板
+### 接收方配置模板名称
+
+接收方可以调用该 API 设置推送模板。
+
+#### HTTP 请求
+
+```
+PUT https://{host}/{org_name}/{app_name}/users/{username}/notification/template
+```
+
+##### 请求 Header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :------- | :----------------------------------------------------------- |
+| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App User 鉴权 token,格式为 `Bearer YourUserToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 user token。 |
+
+其他参数及说明详见 [公共参数](#公共参数)。
+
+##### 请求 body
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :--------- | :----- | :------- | :-------------------------------------------- |
+| `templateName` | String | 是 | 模板名称。|
+
+#### HTTP 响应
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应 body 包含如下字段:
+
+| 参数 | 类型 | 描述 |
+| :----- | :--- | :------------------------------------------------------ |
+| `data` | JSON | 响应中的数据详情。`templateName` 为设置成功后的模板名称。 |
+
+其他参数及说明详见 [公共参数](#公共参数)。
+
+#### 示例
+
+##### 请求示例
+
+```shell
+curl -X PUT '{host}/{org}/{app}/users/{username}/notification/template' \
+ -H 'Content-Type: application/json' \
+ -H 'Authorization: Bearer ' \
+ -d '{
+ "templateName": "hxtest"
+ }
+```
+
+##### 响应示例
+
+```json
+{
+ "path": "/users",
+ "uri": "http://XXX/XXX/XXX/users/XXX/notification/template",
+ "timestamp": 1705470003984,
+ "organization": "XXX",
+ "application": "cc7380d5-099c-4d11-a93e-51d6d590b475",
+ "action": "put",
+ "data": {
+ "templateName": "hxtest"
+ },
+ "duration": 43,
+ "applicationName": "XXX"
+}
+```
+
+### 发消息时配置模板名称
+
+发送消息时,可使用消息扩展参数 `ext.em_push_template.name` 指定推送模板名称。
+
+若使用默认模板 **default**,消息推送时自动使用默认模板,创建消息时无需传入模板名称。
+
+该扩展参数的 JSON 结构如下:
+
+```json
+{
+ "ext":{
+ "em_push_template":{
+ "name":"hxtest"
+ }
+ }
+}
+```
+
+下面以发送单聊文本消息时使用自定义推送模板为例进行介绍:
+
+#### 请求示例
+
+```shell
+curl -L -X POST 'https://XXXX/XXXX/XXXX/messages/users' \
+-H 'Content-Type: application/json' \
+-H 'Authorization: Bearer ' \
+-d '{
+ "from": "user1",
+ "to": [
+ "user2"
+ ],
+ "type": "txt",
+ "body": {
+ "msg": "testmessages"
+ },
+ "ext": {
+ "em_push_template": {
+ "name": "hxtest"
+ }
+ }
+}'
+```
+
+#### 响应示例
+
+```json
+{
+ "path": "/messages/users",
+ "uri": "https://XXXX/XXXX/XXXX/messages/users",
+ "timestamp": 1657254052191,
+ "organization": "XXXX",
+ "application": "e82bcc5f-XXXX-XXXX-a7c1-92de917ea2b0",
+ "action": "post",
+ "data": {
+ "user2": "1029457500870543736"
+ },
+ "duration": 0,
+ "applicationName": "XXXX"
+}
+```
+
+接口详情,请参见[发送文本消息](https://docs-im-beta.easemob.com/document/server-side/message_single.html#发送文本消息)。
+### 删除离线推送模板
+
删除离线消息推送模板。
-### HTTP 请求
+#### HTTP 请求
```http
DELETE https://{host}/{org_name}/{app_name}/notification/template/{name}
```
-#### 路径参数
+##### 路径参数
| 参数 | 类型 | 描述 | 是否必需 |
| :----- | :----- | :----------------------- | :------- |
@@ -970,16 +1152,16 @@ DELETE https://{host}/{org_name}/{app_name}/notification/template/{name}
其他参数及说明详见 [公共参数](#公共参数)。
-#### 请求 header
+##### 请求 header
| 参数 | 类型 | 描述 | 是否必需 |
| :-------------- | :----- | :------------------------------------------------------------------------------------------------------------------- | :------- |
| `Content-Type` | String | 内容类型。请填 `application/json`。 | 是 |
| `Authorization` | String | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | 是 |
-### HTTP 响应
+#### HTTP 响应
-#### 响应 body
+##### 响应 body
如果返回的 HTTP 状态码为 200,表示请求成功,响应包体中包含以下字段:
@@ -994,16 +1176,16 @@ DELETE https://{host}/{org_name}/{app_name}/notification/template/{name}
如果返回的 HTTP 状态码非 200,表示请求失败。你可以参考 [错误码](error.html) 了解可能的原因。
-### 示例
+#### 示例
-#### 请求示例
+##### 请求示例
```bash
curl -X DELETE '{url}/{org}/{app}/notification/template/{name}' \
-H 'Authorization: Bearer {YourAppToken}'
```
-#### 响应示例
+##### 响应示例
```json
{
@@ -1023,3 +1205,5 @@ curl -X DELETE '{url}/{org}/{app}/notification/template/{name}' \
"applicationName": "hxdemo"
}
```
+
+
diff --git a/docs/document/server-side/user_relationship.md b/docs/document/server-side/user_relationship.md
index 6cb6ebf20..2fdcf132f 100644
--- a/docs/document/server-side/user_relationship.md
+++ b/docs/document/server-side/user_relationship.md
@@ -24,7 +24,7 @@
### 请求参数
| 参数 | 类型 | 是否必需 | 描述 |
-| :--------- | :----- | :------- | :---------------------------------------------------------------------------------------------------------------------------------------------- |
+| :--------- | :----- | :------- | :------------------------------------ |
| `host` | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
| `org_name` | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
| `app_name` | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 |
@@ -299,9 +299,95 @@ curl -X PUT 'https://{host}/{org_name}/{app_name}/user/{owner_username}/contacts
}
```
-## 获取好友列表
+## 分页获取好友列表
-获取指定用户的好友列表。
+分页获取指定用户的好友列表。
+
+### HTTP 请求
+
+```http
+GET https://{host}/{org_name}/{app_name}/user/{username}/contacts?pageSize={N}&cursor={cursor}&needReturnRemark={true/false}
+```
+
+#### 路径参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :---------------- | :----- | :------- |:-------------|
+| `username` | String | 是 | 当前用户的用户 ID。 |
+
+其他参数及描述详见 [公共参数](#公共参数)。
+
+#### 查询参数
+
+| 参数 | 类型 | 是否必需 | 描述 |
+|:--------|:--------|:-----|:-------------------------------------------------|
+| `limit` | Int | 否 | 每次期望返回的好友的数量。取值范围为 [1,50]。该参数仅在分页获取时为必需,默认为 `10`。 |
+| `cursor` | String | 否 | 数据查询的起始位置。该参数仅在分页获取时为必需。第一次调用该接口不传 `cursor`,获取 `limit` 指定的好友数量。|
+| `needReturnRemark` | Boolean | 否 | 是否需要返回好友备注:
- `true`:返回;
- (默认)`false`:不返回。|
+
+
+#### 请求 header
+
+| 参数 | 类型 | 是否必需 | 描述 |
+| :-------------- | :----- | :--------------- | :-------------------- |
+| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Accept` | String | 是 | 内容类型。请填 `application/json`。 |
+| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 |
+
+### HTTP 响应
+
+#### 响应 body
+
+如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段:
+
+| 字段 | 类型 | 描述 |
+|:-------------------------|:-------|:---------------|
+| `count` | Int | 当前用户的好友数量。 |
+| `data` | Object | 返回的好友列表对象。 |
+| `data.contacts` | Array | 返回的好友列表数据。 |
+| `data.contacts.remark` | String | 好友备注。 |
+| `data.contacts.username` | String | 好友的用户 ID。 |
+
+其他字段及描述详见 [公共参数](#公共参数)。
+
+如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [响应状态码](error.html) 了解可能的原因。
+
+### 示例
+
+#### 请求示例
+
+```shell
+# 将 替换为你在服务端生成的 App Token
+curl --location 'https://{host}/{org_name}/{app_name}/user/{username}/contacts?limit=10&needReturnRemark=true' \
+-H 'Content-Type: application/json' \
+-H 'Accept: application/json' \
+-H 'Authorization: Bearer '
+```
+
+#### 响应示例
+
+```json
+{
+ "uri": "http://{host}/{org_name}/{app_name}/users/{username}/rostersByPage",
+ "timestamp": 1706238297509,
+ "entities": [],
+ "count": 1,
+ "action": "get",
+ "data": {
+ "contacts": [
+ {
+ "remark": null,
+ "username": "username"
+ }
+ ]
+ },
+ "duration": 27
+}
+```
+
+## 一次性获取好友列表
+
+一次性获取指定用户的好友列表。
### HTTP 请求
diff --git a/docs/document/unity/message_delete.md b/docs/document/unity/message_delete.md
index 10efd58ac..be8d258cb 100644
--- a/docs/document/unity/message_delete.md
+++ b/docs/document/unity/message_delete.md
@@ -2,13 +2,16 @@
-本文介绍用户如何单向删除服务端的历史消息。
+本文介绍用户如何单向删除服务端和本地的历史消息。
## 技术原理
-使用环信即时通讯 IM SDK 可以通过 `IChatManager` 类从服务器单向删除历史消息,主要方法如下:
+使用环信即时通讯 IM SDK 可以通过 `ChatManager` 和 `Conversation` 类单向删除服务端和本地的历史消息,主要方法如下:
-- `RemoveMessagesFromServer`:单向删除服务端的历史消息;
+- `ChatManager#RemoveMessagesFromServer`:单向删除服务端的历史消息。
+- `Conversation#DeleteAllMessages`:删除本地指定会话的所有消息。
+- `Conversation#DeleteMessages (long startTime, long endTime)`:删除本地单个会话在指定时间段的消息。
+- `Conversation#DeleteMessage (string messageId)`:删除本地单个会话的指定消息。
## 前提条件
@@ -50,5 +53,52 @@ SDKClient.Instance.ChatManager.RemoveMessagesFromServer(convId, ctype, msgList,
));
```
+### 删除本地指定会话的所有消息
+
+你可以删除本地指定会话的所有消息,示例代码如下:
+
+```csharp
+Conversation conv = SDKClient.Instance.ChatManager.GetConversation(conversionId, conversationType);
+
+if (conv.DeleteAllMessages()){
+ //成功删除消息
+}
+else{
+ //删除消息失败
+}
+```
+
+### 删除本地单个会话在指定时间段的消息
+
+你可以删除本地指定会话在一段时间内的本地消息,示例代码如下:
+
+```csharp
+Conversation conv = SDKClient.Instance.ChatManager.GetConversation(conversionId, conversationType);
+
+if (conv.DeleteMessages(startTime, endTime)) {
+ //成功删除消息
+}
+else {
+ //删除消息失败
+}
+```
+
+### 删除本地单个会话的指定消息
+
+你可以删除本地单个会话的指定消息,示例代码如下:
+
+```csharp
+Conversation conv = SDKClient.Instance.ChatManager.GetConversation(conversionId, conversationType);
+
+if (conv.DeleteMessage(msgid)){
+ //成功删除消息
+}
+else{
+ //删除消息失败
+}
+```
+
+
+
diff --git a/docs/document/unity/moderation.md b/docs/document/unity/moderation.md
index f6241ebe4..a9f59cc5f 100644
--- a/docs/document/unity/moderation.md
+++ b/docs/document/unity/moderation.md
@@ -23,7 +23,7 @@
```csharp
// msgId:要举报的消息 ID。
// tag:非法消息的标签。你需要自定义标签,例如`涉政`或`广告`。该字段对应环信即时通讯云控制台的消息举报记录页面的`词条标记`字段。
-// reason:举报原因。你需要自行填写举报原因。该字段对应环信即时通讯云控制台的消息举报记录页面的`举报原因`字段。
+// reason:举报原因。你需要自行填写举报原因,最长不能超过 512 字节。该字段对应环信即时通讯云控制台的消息举报记录页面的`举报原因`字段。
SDKClient.Instance.ChatManager.ReportMessage(msgId, tag, reason, new CallBack(
onSuccess: () =>
{
diff --git a/docs/document/unity/user_relationship.md b/docs/document/unity/user_relationship.md
index e3e8cc7f5..1de5f1645 100644
--- a/docs/document/unity/user_relationship.md
+++ b/docs/document/unity/user_relationship.md
@@ -35,9 +35,7 @@ SDK 提供用户关系管理功能,包括好友列表管理和黑名单管理
本节展示如何在项目中管理好友的添加移除和黑名单的添加移除。
-### 管理好友列表
-
-#### 添加好友
+### 添加好友
好友请求部分主要功能是发送好友请求、接收好友请求、处理好友请求和好友请求处理结果回调等。
@@ -124,10 +122,12 @@ SDKClient.Instance.ContactManager.DeclineInvitation(username, callback: new Call
当你同意或者拒绝后,对方会通过好友事件回调,收到 `OnFriendRequestAccepted` 或者 `OnFriendRequestDeclined` 回调。
-#### 删除好友
+### 删除好友
调用 `DeleteContact` 删除指定联系人。被删除的用户收到 `OnContactDeleted` 回调。删除联系人时会同时删除对方联系人列表中的该用户,建议执行双重确认,以免发生误删操作。删除操作不需要对方同意或者拒绝。
+删除好友后,对方会收到 `OnContactDeleted` 回调。
+
```csharp
SDKClient.Instance.ContactManager.DeleteContact(username, callback: new CallBack(
onSuccess: () =>
@@ -139,20 +139,11 @@ SDKClient.Instance.ContactManager.DeleteContact(username, callback: new CallBack
));
```
-调用 `DeleteContact` 删除好友后,对方会收到 `OnContactDeleted` 回调。
-
-#### 获取好友列表
-
-你可以从服务器获取好友列表,也可以从本地数据库获取保存的好友列表。
+### 从服务器获取好友列表
-:::notice
-从服务器获取好友列表之后才能从本地数据库获取到好友列表。
-:::
-
-示例代码如下:
+你可以调用 `GetAllContactsFromServer` 方法从服务器获取好友列表:
```csharp
-//从服务器获取好友列表。
SDKClient.Instance.ContactManager.GetAllContactsFromServer(new ValueCallBack>(
onSuccess: (list) =>
{
@@ -161,19 +152,24 @@ SDKClient.Instance.ContactManager.GetAllContactsFromServer(new ValueCallBacklist = SDKClient.Instance.ContactManager.GetAllContactsFromDB();
```
-### 管理黑名单
+### 添加用户到黑名单
黑名单是与好友无任何关系的独立体系。可以将任何用户加入黑名单,不论该用户与你是否是好友关系。
黑名单功能包括加入黑名单,从黑名单移出用户和获取黑名单列表。
-#### 添加用户到黑名单
-
你可以调用 `AddUserToBlockList` 添加用户到黑名单。用户被加入黑名单后,无法向你发送消息,也无法发送好友申请。
用户可以将任何其他用户添加到黑名单列表,无论该用户是否是好友。好友被加入黑名单后仍在好友列表上显示。
@@ -190,7 +186,7 @@ SDKClient.Instance.ContactManager.AddUserToBlockList(username, callback: new Cal
));
```
-#### 将用户从黑名单移除
+### 将用户从黑名单移除
你可以调用 `RemoveUserFromBlockList` 将用户从黑名单移除,用户发送消息等行为将恢复。
@@ -205,7 +201,7 @@ SDKClient.Instance.ContactManager.RemoveUserFromBlockList(username, callback: ne
));
```
-#### 从服务器获取黑名单列表
+### 从服务器获取黑名单列表
你可以调用 `GetBlockListFromServer` 从服务端获取黑名单列表。示例代码如下:
diff --git a/docs/document/web/moderation.md b/docs/document/web/moderation.md
index 363e82b6b..659be31d8 100644
--- a/docs/document/web/moderation.md
+++ b/docs/document/web/moderation.md
@@ -23,7 +23,7 @@
```javascript
connection.reportMessage({
reportType: 'report type', // 非法消息的标签。你需要自定义标签,例如`涉政`或`广告`。该字段对应环信即时通讯云控制台的消息举报记录页面的`词条标记`字段。
- reportReason: 'report reason', // 举报原因。你需要自行填写举报原因。该字段对应环信即时通讯云控制台的消息举报记录页面的`举报原因`字段。
+ reportReason: 'report reason', // 举报原因。你需要自行填写举报原因,最长不能超过 512 字节。该字段对应环信即时通讯云控制台的消息举报记录页面的`举报原因`字段。
messageId: 'ID of the reported message' // 要举报的消息 ID。
})
```
\ No newline at end of file
diff --git a/docs/document/web/user_relationship.md b/docs/document/web/user_relationship.md
index 245b8456b..68bef4978 100644
--- a/docs/document/web/user_relationship.md
+++ b/docs/document/web/user_relationship.md
@@ -24,9 +24,7 @@ SDK 提供用户关系管理功能,包括好友列表管理和黑名单管理
## 实现方法
-### 管理联系人列表
-
-#### 添加好友
+### 添加好友
本节主要介绍发送好友请求、接收好友请求、处理好友请求和好友请求处理结果回调等。
@@ -75,7 +73,7 @@ conn.addContact("userId", "加个好友呗!");
conn.declineContactInvite("userId");
```
-#### 删除好友
+### 删除好友
删除联系人时会同时删除对方联系人列表中的该用户,建议执行双重确认,以免发生误删操作。删除操作不需要对方同意或者拒绝。
@@ -87,7 +85,7 @@ conn.deleteContact("userId");
删除好友后,对方会收到 `onContactDeleted` 事件。
-#### 设置好友备注
+### 设置好友备注
自 4.3.0 版本开始,你可以调用 `setContactRemark` 方法设置单个好友的备注。
@@ -107,7 +105,7 @@ conn
});
```
-#### 获取好友列表
+### 获取好友列表
自 4.3.0 版本,你可以调用 `getAllContacts` 或 `getContactsWithCursor` 方法一次性或分页获取好友列表,其中每个好友对象包含好友的用户 ID 和好友备注。
@@ -148,9 +146,7 @@ conn.getContacts().then((res) => {
})
```
-### 管理黑名单
-
-#### 添加用户至黑名单
+### 添加用户至黑名单
你可以调用 `addUsersToBlocklist` 添加用户到黑名单。用户被加入黑名单后,无法向你发送消息,也无法发送好友申请。
@@ -163,7 +159,7 @@ conn.addUsersToBlocklist({
});
```
-#### 将用户移出黑名单
+### 将用户移出黑名单
你可以调用 `removeUserFromBlocklist` 方法将用户移出黑名单,示例代码如下:
@@ -174,7 +170,7 @@ conn.removeUserFromBlocklist({
});
```
-#### 获取黑名单列表
+### 获取黑名单列表
你可以调用 `getBlocklist` 方法获取用户黑名单列表,示例代码如下:
diff --git a/docs/document/windows/message_delete.md b/docs/document/windows/message_delete.md
index 10efd58ac..458874e10 100644
--- a/docs/document/windows/message_delete.md
+++ b/docs/document/windows/message_delete.md
@@ -6,9 +6,12 @@
## 技术原理
-使用环信即时通讯 IM SDK 可以通过 `IChatManager` 类从服务器单向删除历史消息,主要方法如下:
+使用环信即时通讯 IM SDK 可以通过 `ChatManager` 和 `Conversation` 类单向删除服务端和本地的历史消息,主要方法如下:
-- `RemoveMessagesFromServer`:单向删除服务端的历史消息;
+- `ChatManager#RemoveMessagesFromServer`:单向删除服务端的历史消息。
+- `Conversation#DeleteAllMessages`:删除本地指定会话的所有消息。
+- `Conversation#DeleteMessages (long startTime, long endTime)`:删除本地单个会话在指定时间段的消息。
+- `Conversation#DeleteMessage (string messageId)`:删除本地单个会话的指定消息。
## 前提条件
@@ -50,5 +53,50 @@ SDKClient.Instance.ChatManager.RemoveMessagesFromServer(convId, ctype, msgList,
));
```
+### 删除本地指定会话的所有消息
+
+你可以删除本地指定会话的所有消息,示例代码如下:
+
+```csharp
+Conversation conv = SDKClient.Instance.ChatManager.GetConversation(conversionId, conversationType);
+
+if (conv.DeleteAllMessages()){
+ //成功删除消息
+}
+else{
+ //删除消息失败
+}
+```
+
+### 删除本地单个会话在指定时间段的消息
+
+你可以删除本地指定会话在一段时间内的本地消息,示例代码如下:
+
+```csharp
+Conversation conv = SDKClient.Instance.ChatManager.GetConversation(conversionId, conversationType);
+
+if (conv.DeleteMessages(startTime, endTime)) {
+ //成功删除消息
+}
+else {
+ //删除消息失败
+}
+```
+
+### 删除本地单个会话的指定消息
+
+你可以删除本地单个会话的指定消息,示例代码如下:
+
+```csharp
+Conversation conv = SDKClient.Instance.ChatManager.GetConversation(conversionId, conversationType);
+
+if (conv.DeleteMessage(msgid)){
+ //成功删除消息
+}
+else{
+ //删除消息失败
+}
+```
+
diff --git a/docs/document/windows/moderation.md b/docs/document/windows/moderation.md
index 43574d949..cf93ec354 100644
--- a/docs/document/windows/moderation.md
+++ b/docs/document/windows/moderation.md
@@ -23,7 +23,7 @@
```csharp
// msgId:要举报的消息 ID。
// tag:非法消息的标签。你需要自定义标签,例如`涉政`或`广告`。该字段对应环信即时通讯云控制台的消息举报记录页面的`词条标记`字段。
-// reason:举报原因。你需要自行填写举报原因。该字段对应环信即时通讯云控制台的消息举报记录页面的`举报原因`字段。
+// reason:举报原因。你需要自行填写举报原因,最长不能超过 512 字节。该字段对应环信即时通讯云控制台的消息举报记录页面的`举报原因`字段。
SDKClient.Instance.ChatManager.ReportMessage(msgId, tag, reason, new CallBack(
onSuccess: () =>
{
diff --git a/docs/document/windows/user_relationship.md b/docs/document/windows/user_relationship.md
index 00ab02db7..ac2bd1118 100644
--- a/docs/document/windows/user_relationship.md
+++ b/docs/document/windows/user_relationship.md
@@ -35,9 +35,7 @@ SDK 提供用户关系管理功能,包括好友列表管理和黑名单管理
本节展示如何在项目中管理好友的添加移除和黑名单的添加移除。
-### 管理好友列表
-
-#### 添加好友
+### 添加好友
好友请求部分主要功能是发送好友请求、接收好友请求、处理好友请求和好友请求处理结果回调等。
@@ -124,7 +122,7 @@ SDKClient.Instance.ContactManager.DeclineInvitation(username, callback: new Call
当你同意或者拒绝后,对方会通过好友事件回调,收到 `OnFriendRequestAccepted` 或者 `OnFriendRequestDeclined` 回调。
-#### 删除好友
+### 删除好友
调用 `DeleteContact` 删除指定联系人。被删除的用户收到 `OnContactDeleted` 回调。删除联系人时会同时删除对方联系人列表中的该用户,建议执行双重确认,以免发生误删操作。删除操作不需要对方同意或者拒绝。
@@ -141,18 +139,9 @@ SDKClient.Instance.ContactManager.DeleteContact(username, callback: new CallBack
调用 `DeleteContact` 删除好友后,对方会收到 `OnContactDeleted` 回调。
-#### 获取好友列表
-
-你可以从服务器获取好友列表,也可以从本地数据库获取保存的好友列表。
-
-:::notice
-从服务器获取好友列表之后才能从本地数据库获取到好友列表。
-:::
-
-示例代码如下:
+### 从服务器获取好友列表
```csharp
-//从服务器获取好友列表。
SDKClient.Instance.ContactManager.GetAllContactsFromServer(new ValueCallBack>(
onSuccess: (list) =>
{
@@ -161,19 +150,24 @@ SDKClient.Instance.ContactManager.GetAllContactsFromServer(new ValueCallBacklist = SDKClient.Instance.ContactManager.GetAllContactsFromDB();
```
-### 管理黑名单
+### 添加用户到黑名单
黑名单是与好友无任何关系的独立体系。可以将任何用户加入黑名单,不论该用户与你是否是好友关系。
黑名单功能包括加入黑名单,从黑名单移出用户和获取黑名单列表。
-#### 添加用户到黑名单
-
你可以调用 `AddUserToBlockList` 添加用户到黑名单。用户被加入黑名单后,无法向你发送消息,也无法发送好友申请。
用户可以将任何其他用户添加到黑名单列表,无论该用户是否是好友。好友被加入黑名单后仍在好友列表上显示。
@@ -190,7 +184,7 @@ SDKClient.Instance.ContactManager.AddUserToBlockList(username, callback: new Cal
));
```
-#### 将用户从黑名单移除
+### 将用户从黑名单移除
你可以调用 `RemoveUserFromBlockList` 将用户从黑名单移除,用户发送消息等行为将恢复。
@@ -205,7 +199,7 @@ SDKClient.Instance.ContactManager.RemoveUserFromBlockList(username, callback: ne
));
```
-#### 从服务器获取黑名单列表
+### 从服务器获取黑名单列表
你可以调用 `GetBlockListFromServer` 从服务端获取黑名单列表。示例代码如下:
diff --git a/docs/product/enable_and_configure_IM.md b/docs/product/enable_and_configure_IM.md
index 6c24d8ce1..4de73201c 100644
--- a/docs/product/enable_and_configure_IM.md
+++ b/docs/product/enable_and_configure_IM.md
@@ -109,22 +109,93 @@
1. 在环信即时通讯云控制台首页的**应用列表**中,在目标应用的 **操作** 栏中,点击 **查看**。
-![img](@static/images/product/credentials.png)
+![img](@static/images/product/push/push_app_list.png)
2. 在左侧导航栏,选择 **即时通讯** > **功能配置** > **消息推送** > **证书管理**,进入 **证书管理** 页面。
-![img](@static/images/product/push-settings.png)
+![img](@static/images/product/push/push_settings.png)
3. 点击 **添加推送证书** 按钮,打开 **添加推送证书** 对话框。
-![img](@static/images/product/push-settings-window.png)
+![img](@static/images/product/push/push_settings_window.png)
4. 在 **添加推送证书** 对话框中,填写各厂商平台的相关推送信息,点击 **保存** 按钮,完成证书配置。
-![img](@static/images/product/push-settings-form.png)
+![img](@static/images/product/push/push_settings_form.png)
-## 配置消息回调
+## 配置推送模板
+
+若使用推送模板,你首先要在环信即时通讯云控制台选择 **即时通讯** > **功能配置** > **功能配置总览** 开启离线推送高级功能。
+
+开启后,你可以配置默认推送模板和自定义推送模板。
+
+![img](@static/images/product/push/enable_advanced_function.png)
+
+### 使用默认推送模板
+
+默认推送模板主要用于服务器提供的默认配置不满足你的需求时,可使你设置全局范围的推送标题和推送内容。例如,服务器提供的默认设置为中文和英文的推送标题和内容,你若需要使用韩语或日语的推送标题和内容,则可以设置对应语言的推送模板。
+
+要使用默认模板,你需要在环信即时通讯云控制台或[调用 RESTful 接口](/document/server-side/push.html#创建离线推送模板)创建默认推送模板,模板名称为 **default**。设置完毕,消息推送时自动使用默认模板,创建消息时无需传入模板名称。
+
+按照以下步骤创建默认推送模板:
+
+1. 在环信即时通讯云控制台首页的**应用列表**中,在目标应用的 **操作** 栏中,点击 **查看**。
+
+![img](@static/images/product/push/app_list.png)
+
+2. 在左侧导航栏,选择 **即时通讯** > **功能配置** > **消息推送** > **模板管理**,进入 **模板管理** 页面。
+
+![img](@static/images/product/push/push_template.png)
+
+3. 点击 **添加推送模板**,在弹出的窗口中配置**模板名称**、**标题**和**内容**。
+
+- **模板名称**:推送模板名称,String 类型,默认模板为 **default**。该参数必须填写。模板名称最多可包含 64 个字符,支持以下字符集:
+ - 26 个小写英文字母 a-z;
+ - 26 个大写英文字母 A-Z;
+ - 10 个数字 0-9。
+- **标题**/**内容**:推送标题/内容。Array 类型,该参数必须填写。这两个参数的设置方式如下:
+ - 输入固定的推送标题,例如,标题为 “您好”,内容为“您有一条新消息”。
+ - 内置参数填充:
+ - `{$dynamicFrom}`:按优先级从高到底的顺序填充好友备注、群昵称(仅限群消息)和推送昵称。
+ - `{$fromNickname}`:推送昵称。
+ - `{$msg}`:消息内容。
+ - 自定义参数填充:模板输入数组索引占位符,格式为: {0} {1} {2} ... {n}
+
+ 对于推送标题和内容来说,前两种设置方式在创建消息时无需传入该参数,第三种设置方式则需要通过扩展字段传入。
+
+ 推送模板参数在消息扩展 `ext.em_push_template` 中。推送模板参数的 JSON 结构如下:
+
+ ```json
+ {
+ "ext":{
+ "em_push_template":{
+ "title_args":[
+ "环信"
+ ],
+ "content_args":[
+ "欢迎使用im-push",
+ "加油"
+ ]
+ }
+ }
+ }
+
+ # title: {0} = "环信"
+ # content: {0} = "欢迎使用im-push" {1} = "加油"
+ ```
+
+ ![img](@static/images/product/push/push_template_add.png)
+
+### 使用自定义推送模板
+
+自定义推送模板,即名称为 `default` 之外的推送模板。你可以参考以下步骤使用自定义推送模板:
+
+1. 若使用自定义推送模板,你需要在环信即时通讯云控制台或[调用 RESTful 接口](/document/server-side/push.html#创建离线推送模板)创建自定义推送模板。**添加推送模板** 对话框中参数的描述,详见[使用默认推送模板](#使用默认推送模板)。使用自定义模板时,**标题** 和 **内容** 参数无论通过哪种方式设置,创建消息时均需通过扩展字段传入。
+
+2. 创建消息时需通过使用扩展字段传入模板名称、推送标题和推送内容,通知栏中的推送标题和内容分别使用模板中的格式。
+
+## 配置消息回调
环信即时通讯 IM 提供消息回调服务。**旗舰版 IM 服务包含回调服务,而专业版 IM 服务不包含回调服务,需要按以下步骤单独购买**。
@@ -184,7 +255,7 @@
| 规则名称 | 是 | 唯一的规则名称,只支持字母、数字和下划线,不支持中文字符,且长度不超过 32 字符。 |
| 回调地址 | 是 |环信 IM 服务器会将消息推送到指定的 URL 地址,支持针对不同类型的消息配置不同的 HTTP 和 HTTPS 回调地址。 |
| 启用状态 | 是 |是否启用该规则。|
-| 回调类型 | 是 |回调类型。你可以选择对各种类型的单聊、群聊、和聊天室消息以及各种事件进行回调。|
+| 回调类型 | 是 |回调类型。你可以选择对各种类型的单聊、群聊、和聊天室消息以及各种事件进行回调,详见[回调事件](/document/server-side/callback_configurations.html)。对于表情回复 Reaction 和子区 Thread,如要获取回调事件,无需单独配置,只需选择对应的消息类型即可。例如,如果需要单聊文本消息的 Reaction,你需要选中 **单聊消息 > 文本消息**,服务器发送回调事件时即会返回 Reaction 信息。|
| 消息类型 | 是 |需要回调的类型:
- **聊天消息**:发送成功的消息,包括通过客户端和 REST API 发送的消息。这些消息与通过 REST 导出的聊天记录查询到的消息一致。例如,用户 u1 向用户 u2 发送消息,则会产生一条聊天消息,与接收方是否在线无关。收到的消息中 `from` 为 u1,`to` 为 u2。用户 u1 在群组 g1 中发送消息,则会产生一条聊天消息,收到的消息中 `from` 为 u1,`to` 为 g1,且返回值包含 `group_id` 字段。
- **离线消息**:消息发送时接收方为离线的消息。例如:单聊中发送消息,若对端用户不在线,则会产生一条离线消息;在群聊中发送消息,若有几个群成员不在线,则会产生几条离线消息,这些离线消息的 `to` 参数为接收消息用户的 ID,并不是群组 ID。App 可以通过推送服务对这些消息进行个性化推送。|
| REST 消息是否需要回调 | 是 | 通过 REST API 发送的消息是否需要回调:
- **是**:需要;
- **否**:不需要。 |
| From ID | 否 |消息发送方或操作者的用户 ID。每行输入一个用户 ID,一次最多输入 50 条。设置该参数后,环信服务器只针对该用户发送的消息及执行的操作(例如好友、群组或聊天室相关操作)进行回调。若不指定该参数,规则对发送方或操作者不限制。 |
diff --git a/docs/product/limitationapi.md b/docs/product/limitationapi.md
index 66aa1f9e1..96f2225ed 100644
--- a/docs/product/limitationapi.md
+++ b/docs/product/limitationapi.md
@@ -48,6 +48,7 @@
| 创建离线推送模板 | POST | /{org_name}/{app_name}/notification/template | 10 次/秒/App Key |
| 查询离线推送模板 | GET | /{org_name}/{app_name}/notification/template/{name} | 10 次/秒/App Key |
| 删除离线推送模板 | DELETE | /{org_name}/{app_name}/notification/template/{name} | 10 次/秒/App Key |
+| 接收方配置模板名称 | PUT | /{org_name}/{app_name}/users/{username}/notification/template | 100 次/秒/App Key。 |
## 消息管理
@@ -64,7 +65,6 @@
| 服务端单向删除会话 | DELETE | /{org_name}/{app_name}/users/{userName}/user_channel | 5 次/分钟/单用户 ID,100 次/秒/App Key |
| 拉取会话列表 | GET | /{org_name}/{app_name}/user/{username}/user_channels | 5 次/分钟/单用户 ID,100 次/秒/App Key |
-
## 用户属性
| RESTful API 接口 |方法 | 接口 URL| 接口最高调用频率(默认值) |
@@ -79,13 +79,14 @@
| RESTful API 接口 |方法 | 接口 URL| 接口最高调用频率 |
| :------------- | :----- | :---------------- | :-------------- |
-| 添加好友 | POST | /{org_name}/{app_name}/users/{owner_username}/contacts/users/{friend_username} | 100 次/秒/App Key |
-| 移除好友 | DELETE | /{org_name}/{app_name}/users/{owner_username}/contacts/users/{friend_username} | 100 次/秒/App Key |
+| 添加好友 | POST | /{org_name}/{app_name}/users/{owner_username}/contacts/users/{friend_username} | 100 次/秒/App Key |
+| 移除好友 | DELETE | /{org_name}/{app_name}/users/{owner_username}/contacts/users/{friend_username} | 100 次/秒/App Key |
| 设置好友备注 | PUT | /{org_name}/{app_name}/user/{owner_username}/contacts/users/{friend_username} | 100 次/秒/App Key |
-| 获取好友列表 | GET | /{org_name}/{app_name}/users/{owner_username}/contacts/users | 100 次/秒/App Key |
-| 获取黑名单列表 | GET | /{org_name}/{app_name}/users/{owner_username}/blocks/users | 50 次/秒/App Key |
-| 添加用户至黑名单 | POST | /{org_name}/{app_name}/users/{owner_username}/blocks/users | 50 次/秒/App Key |
-| 从黑名单移除用户 | DELETE | /{org_name}/{app_name}/users/{owner_username}/blocks/users/{blocked_username} | 50 次/秒/App Key |
+| 分页获取好友列表 | GET | /{org_name}/{app_name}/user/{username}/contacts?pageSize={N}&cursor={cursor}&needReturnRemark={true/false} | 100 次/秒/App Key |
+| 一次性获取好友列表 | GET | /{org_name}/{app_name}/users/{owner_username}/contacts/users | 100 次/秒/App Key |
+| 获取黑名单列表 | GET | /{org_name}/{app_name}/users/{owner_username}/blocks/users | 50 次/秒/App Key |
+| 添加用户至黑名单 | POST | /{org_name}/{app_name}/users/{owner_username}/blocks/users | 50 次/秒/App Key |
+| 从黑名单移除用户 | DELETE | /{org_name}/{app_name}/users/{owner_username}/blocks/users/{blocked_username} | 50 次/秒/App Key |
## 群组管理
diff --git a/static/images/android/push/push_template_custom.png b/static/images/android/push/push_template_custom.png
new file mode 100644
index 000000000..14691ee77
Binary files /dev/null and b/static/images/android/push/push_template_custom.png differ
diff --git a/static/images/product/push/enable_advanced_function.png b/static/images/product/push/enable_advanced_function.png
new file mode 100644
index 000000000..24739e0dd
Binary files /dev/null and b/static/images/product/push/enable_advanced_function.png differ
diff --git a/static/images/product/credentials.png b/static/images/product/push/push_app_list.png
similarity index 100%
rename from static/images/product/credentials.png
rename to static/images/product/push/push_app_list.png
diff --git a/static/images/product/push-settings.png b/static/images/product/push/push_settings.png
similarity index 100%
rename from static/images/product/push-settings.png
rename to static/images/product/push/push_settings.png
diff --git a/static/images/product/push-settings-form.png b/static/images/product/push/push_settings_form.png
similarity index 100%
rename from static/images/product/push-settings-form.png
rename to static/images/product/push/push_settings_form.png
diff --git a/static/images/product/push-settings-window.png b/static/images/product/push/push_settings_window.png
similarity index 100%
rename from static/images/product/push-settings-window.png
rename to static/images/product/push/push_settings_window.png
diff --git a/static/images/product/push/push_template.png b/static/images/product/push/push_template.png
new file mode 100644
index 000000000..501861261
Binary files /dev/null and b/static/images/product/push/push_template.png differ
diff --git a/static/images/product/push/push_template_add.png b/static/images/product/push/push_template_add.png
new file mode 100644
index 000000000..f09fd0400
Binary files /dev/null and b/static/images/product/push/push_template_add.png differ