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