diff --git a/docs/.vuepress/public/images/android/push/huawei-notifier-category.png b/docs/.vuepress/public/images/android/push/huawei-notifier-category.png
index 61025e162..82fd998d4 100644
Binary files a/docs/.vuepress/public/images/android/push/huawei-notifier-category.png and b/docs/.vuepress/public/images/android/push/huawei-notifier-category.png differ
diff --git a/docs/.vuepress/public/images/android/push/oppo-notifier-channelId.png b/docs/.vuepress/public/images/android/push/oppo-notifier-channelId.png
index f71b9814c..76e3f37bd 100644
Binary files a/docs/.vuepress/public/images/android/push/oppo-notifier-channelId.png and b/docs/.vuepress/public/images/android/push/oppo-notifier-channelId.png differ
diff --git a/docs/.vuepress/public/images/android/push/push_multidevice_policy.png b/docs/.vuepress/public/images/android/push/push_multidevice_policy.png
index 1adfd697a..548905959 100644
Binary files a/docs/.vuepress/public/images/android/push/push_multidevice_policy.png and b/docs/.vuepress/public/images/android/push/push_multidevice_policy.png differ
diff --git a/docs/.vuepress/public/images/android/push/push_notification_user_bind.png b/docs/.vuepress/public/images/android/push/push_notification_user_bind.png
index 3499dafee..d6b6f84b3 100644
Binary files a/docs/.vuepress/public/images/android/push/push_notification_user_bind.png and b/docs/.vuepress/public/images/android/push/push_notification_user_bind.png differ
diff --git a/docs/.vuepress/public/images/android/push/push_notification_user_search.png b/docs/.vuepress/public/images/android/push/push_notification_user_search.png
index 713832857..25493d3d8 100644
Binary files a/docs/.vuepress/public/images/android/push/push_notification_user_search.png and b/docs/.vuepress/public/images/android/push/push_notification_user_search.png differ
diff --git a/docs/.vuepress/public/images/android/push/vivo-notifier-category.png b/docs/.vuepress/public/images/android/push/vivo-notifier-category.png
index aedd229b4..f064e9cf6 100644
Binary files a/docs/.vuepress/public/images/android/push/vivo-notifier-category.png and b/docs/.vuepress/public/images/android/push/vivo-notifier-category.png differ
diff --git a/docs/.vuepress/public/images/android/push/xiaomi-notifier-channelId.png b/docs/.vuepress/public/images/android/push/xiaomi-notifier-channelId.png
index a78875b0c..0653618d5 100644
Binary files a/docs/.vuepress/public/images/android/push/xiaomi-notifier-channelId.png and b/docs/.vuepress/public/images/android/push/xiaomi-notifier-channelId.png differ
diff --git a/docs/.vuepress/public/images/react-native/push/push_add_certificate.png b/docs/.vuepress/public/images/react-native/push/push_add_certificate.png
index 0c144feb4..ec312629b 100644
Binary files a/docs/.vuepress/public/images/react-native/push/push_add_certificate.png and b/docs/.vuepress/public/images/react-native/push/push_add_certificate.png differ
diff --git a/docs/.vuepress/public/images/react-native/push/push_get_appkey.png b/docs/.vuepress/public/images/react-native/push/push_get_appkey.png
index 312ce2323..04d603e08 100644
Binary files a/docs/.vuepress/public/images/react-native/push/push_get_appkey.png and b/docs/.vuepress/public/images/react-native/push/push_get_appkey.png differ
diff --git a/docs/.vuepress/public/images/react-native/push/push_get_certificate_name.png b/docs/.vuepress/public/images/react-native/push/push_get_certificate_name.png
index 8f881ae3d..f5cc3b190 100644
Binary files a/docs/.vuepress/public/images/react-native/push/push_get_certificate_name.png and b/docs/.vuepress/public/images/react-native/push/push_get_certificate_name.png differ
diff --git a/docs/.vuepress/sidebar/document.ts b/docs/.vuepress/sidebar/document.ts
index a505aa07e..751020548 100644
--- a/docs/.vuepress/sidebar/document.ts
+++ b/docs/.vuepress/sidebar/document.ts
@@ -147,9 +147,16 @@ const documentSidebar = [
{ text: '发送推送 token 到环信服务器', link: 'push/push_send_token_to_server.html', only: ['react-native'] },
{ text: '解析推送消息', link: 'push/push_parsing.html', only: ['android', 'ios'] },
{ text: '统一获取消息方案', link: 'push/push_parsing_unified.html', only: ['android'] },
- { text: '设置通知的显示内容', link: 'push/push_display.html', only: ['android', 'ios', 'harmonyos', 'react-native', 'flutter'] },
+ { text: '设置通知的显示内容',
+ children: [
+ { text: '概述', link: 'push/push_display_overview.html', except: ['harmonyos']},
+ { text: '设置推送通知的显示属性', link: 'push/push_display_attribute.html' },
+ { text: '使用消息扩展字段', link: 'push/push_display_field.html', except: ['harmonyos']},
+ ],
+ only: ['android', 'ios', 'harmonyos', 'react-native', 'flutter']
+ },
{ text: '设置通知方式和免打扰', link: 'push/push_notification_mode_dnd.html', only: ['android', 'ios', 'web', 'harmonyos', 'react-native', 'flutter']},
- { text: '设置推送模板', link: 'push/push_template.html', only: ['web']},
+ { text: '设置推送模板', link: 'push/push_template.html', only: ['android', 'ios', 'web', 'harmonyos', 'react-native', 'flutter']},
{ text: '设置推送翻译', link: 'push/push_translation.html', only: ['android', 'ios', 'web', 'react-native', 'flutter']},
{ text: '设置推送扩展功能', link: 'push/push_extension.html', only: ['android', 'ios', 'web', 'react-native', 'flutter']},
{ text: '推送消息分类', link: 'push/push_message_classification.html', only: ['android'] },
diff --git a/docs/document/android/push/push_display.md b/docs/document/android/push/push_display.md
deleted file mode 100644
index fd0f41975..000000000
--- a/docs/document/android/push/push_display.md
+++ /dev/null
@@ -1,243 +0,0 @@
-# 设置推送通知的显示内容
-
-通知收到后,通知栏中显示的推送标题和内容可通过以下方式设置,配置的优先级为由低到高:
-
-1. **设置推送通知的显示属性**:使用默认的推送标题和内容,即推送通知的展示方式 `DisplayStyle` 采用默认的值(`SimpleBanner`)。推送标题为**您有一条新消息**,推送内容为**请点击查看**。
-2. **使用默认推送模板**:若有默认模板 `default`,发消息时无需指定。
-3. **使用消息扩展字段**:使用扩展字段自定义要显示的推送标题和推送内容,即 `em_push_title` 和 `em_push_content`。
-4. **接收方设置了推送模板**。
-5. **使用自定义推送模板**:发送消息时通过消息扩展字段指定推送模板名称。
-
-## 设置和获取推送通知的显示属性
-
-### 设置推送通知的显示属性
-
-你可以调用 `updatePushNickname` 方法设置推送通知中显示的昵称,如以下代码示例所示:
-
-```java
-// 需要异步处理。
-EMClient.getInstance().pushManager().updatePushNickname("pushNickname");
-```
-
-你也可以调用 `updatePushDisplayStyle` 设置推送通知的显示样式,如下代码示例所示:
-
-```java
-// 设置为简单样式。
-EMPushManager.DisplayStyle displayStyle = EMPushManager.DisplayStyle.SimpleBanner;
-// 需要异步处理。
-EMClient.getInstance().pushManager().updatePushDisplayStyle(displayStyle);
-```
-
-若要在通知栏中显示消息内容,需要设置通知显示样式 `DisplayStyle`。`DisplayStyle` 是枚举类型,有如下两种设置:
-
-| 参数值 | 描述 |
-| :--------------- | :---------------------- |
-| (默认)`SimpleBanner` | 不论 `nickname` 是否设置,对于推送任何类型的消息,通知栏采用默认显示设置,即推送标题为**您有一条新消息**,推送内容为**请点击查看**。 |
-| `MessageSummary` | `MessageSummary`:显示消息内容。设置的昵称只在 `DisplayStyle` 为 `MessageSummary` 时生效,在 `SimpleBanner` 时不生效。 |
-
-下表以**单聊文本消息**为例介绍显示属性的设置。
-
-对于**群聊**,下表中的**消息发送方的推送昵称**和**消息发送方的 IM 用户 ID**显示为**群组 ID**。
-
-| 参数设置 | 推送显示 | 图片 |
-| :--------- | :----- |:------------- |
-|
- `DisplayStyle`:(默认)`SimpleBanner`
- `nickname`:设置或不设置 |
- 推送标题:**您有一条新消息**
- 推送内容:**请点击查看** | |
-|
- `DisplayStyle`:`MessageSummary`
- `nickname`:设置具体值 |
- 推送标题:**您有一条新消息**
- 推送内容:**消息发送方的推送昵称:消息内容** | |
-|
- `DisplayStyle`:`MessageSummary`
- `nickname`:不设置 |
- 推送标题:**您有一条新消息**
- 推送内容:**消息发送方的 IM 用户 ID: 消息内容** | |
-
-### 获取推送通知的显示属性
-
-你可以调用 `getPushConfigsFromServer` 获取推送通知中的显示属性,如以下代码示例所示:
-
-```java
-EMPushConfigs pushConfigs = EMClient.getInstance().pushManager().getPushConfigsFromServer();
-// 获取推送显示昵称。
-String nickname = pushConfigs.getDisplayNickname();
-// 获取推送通知的显示样式。
-EMPushManager.DisplayStyle style = pushConfigs.getDisplayStyle();
-```
-
-## 使用推送模板
-
-推送模板主要用于服务器提供的默认配置不满足你的需求时,可使你设置全局范围的推送标题和推送内容。例如,服务器提供的默认设置为中文和英文的推送标题和内容,你若需要使用韩语或日语的推送标题和内容,则可以设置对应语言的推送模板。推送模板包括默认推送模板 `default` 和自定义推送模板。对于群组消息,你可以使用定向模板向某些用户推送与其他用户不同的离线通知。
-
-你可以通过以下两种方式设置:
-
-- [调用 REST API 配置](/document/server-side/push.html#使用推送模板)。
-- 在[环信即时通讯云控制台](https://console.easemob.com/user/login)设置推送模板,详见[控制台文档](/product/enable_and_configure_IM.html#配置推送模板)。
-
-使用推送模板有以下优势:
-
-1. 自定义修改环信服务端默认推送内容。
-
-2. 接收方可以决定使用哪个模板。
-
-3. 按优先级选择模板使用方式:
-
- - 使用自定义推送模板的优先级高于默认推送模板。
-
- - 若发送方发消息时设置了推送模板,接收方即使设置了推送模板,收到推送通知后也按照发送方设置的推送模板显示。
-
-:::tip
-1. 设置推送模板为推送的高级功能,使用前需要在[环信即时通讯控制台](https://console.easemob.com/user/login)的**即时通讯 > 功能配置 > 功能配置总览**页面激活推送高级功能。如需关闭推送高级功能必须联系商务,因为该操作会删除所有相关配置。
-
-2. 推送模板相关的数据结构,详见[推送扩展字段](/document/server-side/push_extension.html)。
-:::
-
-### 发消息时使用推送模板
-
-创建模板后,你可以在发送消息时选择此推送模板,分为以下三种情况:
-
-:::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}`:消息内容。
-
-群昵称即群成员在群组中的昵称,群成员在发送群消息时通过扩展字段设置,JSON 结构如下:
-
-```json
- {
- "ext":{
- "em_push_ext":{
- "group_user_nickname":"Jane"
- }
- }
- }
-```
-
-内置参数的介绍,详见[环信即时通讯控制台文档](/product/enable_and_configure_IM.html#使用默认推送模板)。
-
-这种方式的示例代码与“使用固定内容的推送模板”的相同。
-
-3. 使用自定义推送模板,而且推送标题和推送内容为自定义参数:
-
-例如,推送模板的设置如下图所示:
-
-
-
-使用下面的示例代码后,通知栏中弹出的推送通知为:
-
-
-
-```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", "push");
- // 设置填写模板标题的 value 数组。
- titleArgs.put("您");
- titleArgs.put("消息,");
- //...
- pushObject.put("title_args", titleArgs);
- // 设置填写模板内容的 value 数组。
- contentArgs.put("请");
- contentArgs.put("查看");
- //...
- pushObject.put("content_args", contentArgs);
-} catch (JSONException e) {
- e.printStackTrace();
-}
-// 将推送扩展设置到消息中。
-message.setAttribute("em_push_template", pushObject);
-// 设置消息状态回调。
-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) {
-
- }
-});
-```
-
-## 使用消息扩展字段设置推送通知显示内容
-
-创建推送消息时,你可以设置消息扩展字段自定义要显示的推送标题 `em_push_title` 和推送内容 `em_push_content`。
-
-```java
-// 这里以文本消息为例,附件等类型的消息设置方法相同。
-EMMessage message = EMMessage.createSendMessage(EMMessage.Type.TXT);
-EMTextMessageBody txtBody = new EMTextMessageBody("message content");
-// 设置要发送用户的用户 ID。
-message.setTo("toChatUsername");
-// 设置自定义推送提示。
-JSONObject extObject = new JSONObject();
-try {
- extObject.put("em_push_title", "custom push title");
- extObject.put("em_push_content", "custom push content");
-} catch (JSONException e) {
- e.printStackTrace();
-}
-// 将推送扩展设置到消息中。
-message.setAttribute("em_apns_ext", extObject);
-// 设置消息体。
-message.addBody(txtBody);
-// 设置消息回调。
-message.setMessageStatusCallback(new CallBack() {...});
-// 发送消息。
-EMClient.getInstance().chatManager().sendMessage(message);
-```
-
-| 参数 | 描述 |
-| :---------------- | :----------- |
-| `toChatUsername` | 消息接收方 ID。 |
-| `em_apns_ext` | 消息扩展,使用扩展的方式向推送中添加自定义字段,该值为固定值,不可修改。 |
-| `em_push_title` | 自定义字段 key,用于设置自定义的标题,该值为固定值,不可修改。 |
-| `em_push_content` | 自定义字段 key,用于设置自定义的内容,该值为固定值,不可修改。 |
\ No newline at end of file
diff --git a/docs/document/android/push/push_display_attribute.md b/docs/document/android/push/push_display_attribute.md
new file mode 100644
index 000000000..e44dd0089
--- /dev/null
+++ b/docs/document/android/push/push_display_attribute.md
@@ -0,0 +1,48 @@
+# 设置和获取推送通知的显示属性
+
+## 设置推送通知的显示属性
+
+调用 `updatePushNickname` 方法设置推送通知中显示的昵称,如以下代码示例所示:
+
+```java
+// 需要异步处理。
+EMClient.getInstance().pushManager().updatePushNickname("pushNickname");
+```
+
+调用 `updatePushDisplayStyle` 设置推送通知的显示样式,如下代码示例所示:
+
+```java
+// 设置为简单样式。
+EMPushManager.DisplayStyle displayStyle = EMPushManager.DisplayStyle.SimpleBanner;
+// 需要异步处理。
+EMClient.getInstance().pushManager().updatePushDisplayStyle(displayStyle);
+```
+
+若要在通知栏中显示消息内容,需要设置通知显示样式 `DisplayStyle`。`DisplayStyle` 是枚举类型,有如下两种设置:
+
+| 参数值 | 描述 |
+| :--------------- | :---------------------- |
+| (默认)`SimpleBanner` | 不论 `nickname` 是否设置,对于推送任何类型的消息,通知栏采用默认显示设置,即推送标题为**您有一条新消息**,推送内容为**请点击查看**。 |
+| `MessageSummary` | `MessageSummary`:显示消息内容。设置的昵称只在 `DisplayStyle` 为 `MessageSummary` 时生效,在 `SimpleBanner` 时不生效。 |
+
+下表以**单聊文本消息**为例介绍显示属性的设置。
+
+对于**群聊**,下表中的**消息发送方的推送昵称**和**消息发送方的 IM 用户 ID**显示为**群组 ID**。
+
+| 参数设置 | 推送显示 | 图片 |
+| :--------- | :----- |:------------- |
+|
- `DisplayStyle`:(默认)`SimpleBanner`
- `nickname`:设置或不设置 |
- 推送标题:**您有一条新消息**
- 推送内容:**请点击查看** | |
+|
- `DisplayStyle`:`MessageSummary`
- `nickname`:设置具体值 |
- 推送标题:**您有一条新消息**
- 推送内容:**消息发送方的推送昵称:消息内容** | |
+|
- `DisplayStyle`:`MessageSummary`
- `nickname`:不设置 |
- 推送标题:**您有一条新消息**
- 推送内容:**消息发送方的 IM 用户 ID: 消息内容** | |
+
+## 获取推送通知的显示属性
+
+你可以调用 `getPushConfigsFromServer` 获取推送通知中的显示属性,如以下代码示例所示:
+
+```java
+EMPushConfigs pushConfigs = EMClient.getInstance().pushManager().getPushConfigsFromServer();
+// 获取推送显示昵称。
+String nickname = pushConfigs.getDisplayNickname();
+// 获取推送通知的显示样式。
+EMPushManager.DisplayStyle style = pushConfigs.getDisplayStyle();
+```
\ No newline at end of file
diff --git a/docs/document/android/push/push_display_field.md b/docs/document/android/push/push_display_field.md
new file mode 100644
index 000000000..17a2e370e
--- /dev/null
+++ b/docs/document/android/push/push_display_field.md
@@ -0,0 +1,34 @@
+# 使用消息扩展字段设置推送通知显示内容
+
+创建推送消息时,你可以设置消息扩展字段自定义要显示的推送标题 `em_push_title` 和推送内容 `em_push_content`。
+
+```java
+// 这里以文本消息为例,附件等类型的消息设置方法相同。
+EMMessage message = EMMessage.createSendMessage(EMMessage.Type.TXT);
+EMTextMessageBody txtBody = new EMTextMessageBody("message content");
+// 设置要发送用户的用户 ID。
+message.setTo("toChatUsername");
+// 设置自定义推送提示。
+JSONObject extObject = new JSONObject();
+try {
+ extObject.put("em_push_title", "custom push title");
+ extObject.put("em_push_content", "custom push content");
+} catch (JSONException e) {
+ e.printStackTrace();
+}
+// 将推送扩展设置到消息中。
+message.setAttribute("em_apns_ext", extObject);
+// 设置消息体。
+message.addBody(txtBody);
+// 设置消息回调。
+message.setMessageStatusCallback(new CallBack() {...});
+// 发送消息。
+EMClient.getInstance().chatManager().sendMessage(message);
+```
+
+| 参数 | 描述 |
+| :---------------- | :----------- |
+| `toChatUsername` | 消息接收方 ID。 |
+| `em_apns_ext` | 消息扩展,使用扩展的方式向推送中添加自定义字段,该值为固定值,不可修改。 |
+| `em_push_title` | 自定义字段 key,用于设置自定义的标题,该值为固定值,不可修改。 |
+| `em_push_content` | 自定义字段 key,用于设置自定义的内容,该值为固定值,不可修改。 |
\ No newline at end of file
diff --git a/docs/document/android/push/push_display_overview.md b/docs/document/android/push/push_display_overview.md
new file mode 100644
index 000000000..b87fb0a5b
--- /dev/null
+++ b/docs/document/android/push/push_display_overview.md
@@ -0,0 +1,13 @@
+# 设置推送通知的显示内容
+
+通知收到后,通知栏中显示的推送标题和内容可通过以下方式设置,配置的优先级为由低到高:
+
+1. [**设置推送通知的显示属性**](push_display_attribute.html):使用默认的推送标题和内容,即推送通知的展示方式 `DisplayStyle` 采用默认的值(`SimpleBanner`)。推送标题为**您有一条新消息**,推送内容为**请点击查看**。
+2. [**使用默认推送模板**](push_template.html#编辑默认推送模板):若有默认模板 `default`,发消息时无需指定。
+3. [**使用消息扩展字段**](push_display_field.html):使用扩展字段自定义要显示的推送标题和推送内容,即 `em_push_title` 和 `em_push_content`。
+4. [**接收方设置了推送模板**](push_template.html#消息接收方使用推送模板)。
+5. [**使用自定义推送模板**](push_template.html#):发送消息时通过消息扩展字段指定推送模板名称。
+
+:::tip
+推送模板为离线推送的高级功能,使用前需要 [在环信控制台开启](push_template.html#开通服务)。
+:::
\ No newline at end of file
diff --git a/docs/document/android/push/push_extension.md b/docs/document/android/push/push_extension.md
index ea2165ec3..f7a21e5ab 100644
--- a/docs/document/android/push/push_extension.md
+++ b/docs/document/android/push/push_extension.md
@@ -2,7 +2,7 @@
你可以利用扩展字段实现自定义推送设置,本文以强制推送和发送静默消息为例介绍如何实现推送扩展功能。
-对于推送扩展字段,详见[离线推送扩展字段文档](/document/server-side/push_extension.html)。
+对于推送扩展字段,详见 [离线推送扩展字段文档](/document/server-side/push_extension.html)。
## 设置自定义推送字段
diff --git a/docs/document/android/push/push_fcm.md b/docs/document/android/push/push_fcm.md
index 69de86318..442dc99ed 100644
--- a/docs/document/android/push/push_fcm.md
+++ b/docs/document/android/push/push_fcm.md
@@ -14,15 +14,15 @@

-1. 选择该项目下的应用。
+2. 选择该项目下的应用。

-1. 选择**服务账号**页签,点击**生成新的私钥**。
+3. 选择**服务账号**页签,点击**生成新的私钥**。

-1. 下载证书,保存备用。
+4. 下载证书,保存备用。
下载证书文件,例如 `myapplication-72d8c-firebase-adminsdk-yqa7z-4766fefcaf.json`。
@@ -44,47 +44,40 @@
### **步骤三 上传推送证书**
-1. 在[环信即时通讯云控制台](https://console.easemob.com/user/login)上传推送证书,选择你的应用 > **即时通讯** > **功能配置** > **消息推送** > **证书管理**。
+1. 登录 [环信控制台](https://console.easemob.com/user/login),选择你的应用 > **功能配置** > **增值功能** > **即时推送**。
-
+2. 在 **证书管理** 页面,点击 **添加推送证书**。在 **添加推送证书** 对话框打开后,默认显示 **谷歌** 页签。你可以在该页面配置谷歌 FCM 推送证书。
-1. 点击 **添加推送证书**。在默认打开的 **谷歌** 页签中,配置 FCM 推送:
-
-
+
| 参数 | 类型 | 是否必需 | 描述 |
| :-------------- | :----- | :------- | :---------------------------- |
| 证书类型 | 文件 | 是 | 选择使用 V1 或旧版证书。
- **V1**:推荐使用。你需要点击 **上传证书** 上传FCM V1 版本证书文件,并且设置 **证书名称**。
-**旧版**:已弃用,不推荐使用。你需要配置 **证书名称** 和 **推送密钥**。 |
| 上传文件 | 文件 | 是 | 点击 **上传证书** 上传获取的 FCM V1 版本证书文件(.json 文件)。此项仅对 V1 证书有效。 |
-| 证书名称 | String | 是 | FCM 的发送者 ID。
- v1 证书:在 [Firebase 控制台](https://console.firebase.google.com/?hl=zh-cn) 的 **项目设置** > **云消息传递** 页面的 **Firebase Cloud Messaging API(V1)** 区域中获取发送者 ID,如下图所示。
- 旧版证书:在 [Firebase 控制台](https://console.firebase.google.com/?hl=zh-cn)的 **项目设置 > 云消息传递** 页面的 **Cloud Messaging API(旧版)** 区域中获取发送者 ID。 |
-| 推送密钥 | String | 是 | FCM 服务器密钥。你需在 [Firebase 控制台](https://console.firebase.google.com/) 的 **项目设置** > **云消息传递**页面的 **云消息传递 API(旧版)** 区域中获取服务器密钥。此参数仅对旧版证书有效。|
+| 证书名称 | String | 是 | FCM 的发送者 ID。
- v1 证书:在 [Firebase 控制台](https://console.firebase.google.com/?hl=zh-cn) 的 **项目设置** > **云消息传递** 页面的 **Firebase Cloud Messaging API(V1)** 区域中获取发送者 ID,如下图所示。
- 旧版证书:在 [Firebase 控制台](https://console.firebase.google.com/?hl=zh-cn)的 **项目设置 > 云消息传递** 页面的 **Cloud Messaging API(旧版)** 区域中获取发送者 ID,如下图所示。 |
+| 推送密钥 | String | 是 | FCM 服务器密钥。你需在 [Firebase 控制台](https://console.firebase.google.com/) 的 **项目设置** > **云消息传递**页面的 **云消息传递 API(旧版)** 区域中获取服务器密钥,如下图所示。此参数仅对旧版证书有效。|
| 通道 ID | String | 否 | FCM 通道 ID。该参数仅对离线推送有效。 |
| 推送优先级设置 | | 否 | 消息传递优先级。请参见 [设置消息优先级](https://firebase.google.cn/docs/cloud-messaging/concept-options#setting-the-priority-of-a-message)。
该参数仅对离线推送有效。|
| 推送消息类型 | | 否 | 通过 FCM 发送给客户端的消息类型:
- **数据**:数据消息,由客户端应用程序处理。
- **通知**:通知消息,由 FCM SDK 自动处理。**数据+通知**:通知消息和数据消息都可以通过 FCM 客户端发送。
请参见 FCM 的 [消息类型介绍](https://firebase.google.com/docs/cloud-messaging/concept-options#notifications_and_data_messages)。
该参数仅对离线推送有效。|
| APNs跨平台推送支持 | String | 否 | 是否开启 APNs 跨平台推送支持。非跨平台应用建议不要启用。该参数仅对离线推送有效。|
-#### **旧版证书无缝切换至 V1 证书**
-
-若你仍使用旧版证书,即 **证书类型** 选择 **旧版**,你需要将 **证书名称** 设置为 FCM 的发送者 ID,**推送密钥** 设置为 FCM 的服务器密钥。你需在 [Firebase 控制台](https://console.firebase.google.com/?hl=zh-cn)的 **项目设置 > 云消息传递** 页面中,在 **Cloud Messaging API(旧版)** 区域中获取发送者 ID 和服务器密钥,如下图所示。配置完毕,设置 **铃声**、**推送优先级设置** 和 **推送消息类型** 参数。
+- 获取 V1 版证书名称
-
-
-**旧版 HTTP 或 XMPP API 于 2024 年 6 月 20 日停用,请尽快迁移到最新的 FCM API(HTTP v1)版本证书。详见 [FCM 控制台](https://console.firebase.google.com)。请确保 V1 证书可用,因为执行转换证书后,旧证书会被删除,若此时新证书不可用,会导致推送失败。**
+
-你可以参考以下步骤从旧版证书无缝切换到 V1 新证书:
+- 获取旧版证书名称和推送密钥
-1. 在 **证书管理** 页面的旧版证书的 **操作** 栏中点击 **编辑**。
+
-
+#### **旧版证书无缝切换至 V1 证书**
-1. 在**编辑推送证书** 窗口的 **谷歌** 页签,将**证书类型**切换为 **V1**。
+旧版 HTTP 或 XMPP API 已在 2024 年 6 月 20 日停用,请尽快迁移到最新的 FCM API(HTTP v1)版本证书,详见 [FCM 控制台](https://console.firebase.google.com)。请确保 V1 证书可用,因为执行转换证书后,旧证书会被删除,若 V1 证书不可用会导致推送失败。
-
+你可以参考以下步骤从旧版证书无缝切换到 V1 新证书:
+1. 在 **证书管理** 页面的旧版证书的 **操作** 栏中点击 **编辑**。
+2. 在**编辑推送证书** 窗口的 **谷歌** 页签,将**证书类型**切换为 **V1**。
3. 点击 **上传证书** 上传本地保存的 V1 证书文件(.json)。
-
-
-
4. 点击 **保存** 完成切换。
### **步骤四 FCM 推送集成**
diff --git a/docs/document/android/push/push_honor.md b/docs/document/android/push/push_honor.md
index 44262af4f..fdd7a8606 100644
--- a/docs/document/android/push/push_honor.md
+++ b/docs/document/android/push/push_honor.md
@@ -1,31 +1,29 @@
-# 在即时通讯 IM 中集成荣耀推
+# 在即时通讯 IM 中集成荣耀推送
环信即时通讯 IM SDK 4.0.3 版本中集成了荣耀推送。本节介绍如何集成荣耀厂商的离线推送通道,使消息通过荣耀推送服务推送至离线的用户。
-## **步骤一 在[荣耀开发者服务平台](https://developer.hihonor.com/cn/)创建应用并申请开通推送服务**
+## **步骤一 在 [荣耀开发者服务平台](https://developer.hihonor.com/cn/) 创建应用并申请开通推送服务**
-详见[荣耀推送官网说明](https://developer.honor.com/cn/docs/11002/guides/kit-history)。
+关于如何在 [荣耀开发者服务平台](https://developer.hihonor.com/cn/) 创建应用并申请开通推送服务,详见 [荣耀推送官网说明](https://developer.honor.com/cn/docs/11002/guides/kit-history)。
-## **步骤二 在环信即时通讯云控制台上传荣耀推送证书**
+## **步骤二 上传荣耀推送证书**
-1. 在[环信即时通讯云控制台](https://console.easemob.com/user/login)首页的**应用列表**中,点击目标应用的**操作**栏中的**管理**。
+1. 登录 [环信控制台](https://console.easemob.com/user/login),选择你的应用 > **功能配置** > **增值功能** > **即时推送**。
-2. 在左侧导航栏中,选择**即时通讯** > **功能配置** > **消息推送** > **证书管理**,点击**添加推送证书**。
-
-3. 在**添加推送证书**对话框中选择**荣耀**页签,配置荣耀推送参数。
+2. 在 **证书管理** 页面,点击 **添加推送证书**。在 **添加推送证书** 对话框中选择 **荣耀** 页签,配置荣耀推送参数。
-
+
| 推送证书参数 | 类型 | 是否必需 | 描述 |
| :-------------- | :----- | :------- | :--------------------------------------- |
-| `App ID` | String | 是 | 应用标识符,应用的唯一标识,在荣耀开发者服务平台开通对应用的荣耀推送服务时生成。 |
-| `Client ID` | String | 是 | 应用的客户 ID,用于获取发送消息令牌的 ID,在荣耀开发者服务平台开通对应应用的荣耀推送服务时生成。 |
-| `Client Secret` | String | 是 | 应用的客户密钥,用于获取发送消息令牌的密钥,在荣耀开发者服务平台开通对应应用的荣耀推送服务时生成。 |
-| `Badge Class` | String | 否 | 应用入口 Activity 类全路径,例如 com.example.test.MainActivity。 |
-| `Action` | String | 否 | 消息接收方在收到离线推送通知时单击通知栏时打开的应用指定页面的自定义标记。该参数需要与客户端 `AndroidManifest.xml` 文件中注册启动的 `Activity` 类中 `intent-filter` 标签中设置的 `action` 一致。 |
+| App ID | String | 是 | 应用标识符,应用的唯一标识,在荣耀开发者服务平台开通对应用的荣耀推送服务时生成。 |
+| Client ID | String | 是 | 应用的客户 ID,用于获取发送消息令牌的 ID,在荣耀开发者服务平台开通对应应用的荣耀推送服务时生成。 |
+| Client Secret | String | 是 | 应用的客户密钥,用于获取发送消息令牌的密钥,在荣耀开发者服务平台开通对应应用的荣耀推送服务时生成。 |
+| Badge Class | String | 否 | 应用入口 Activity 类全路径,例如 com.example.test.MainActivity。
该参数仅对离线推送有效。 |
+| Action | String | 否 | 消息接收方在收到离线推送通知时,单击通知栏时打开的应用指定页面的自定义标记。
- 该参数需要与客户端 `AndroidManifest.xml` 文件中注册启动的 `Activity` 类中 `intent-filter` 页签中设置的 `action` 一致。
- 该参数仅对离线推送有效。 |
:::tip
-关于**App ID**、**Client ID**和**Client Secret**,可在荣耀开发者服务平台申请开通推送服务后,在**推送服务**页面选择创建的应用,在[**查看推送服务**](https://developer.honor.com/cn/docs/11002/guides/app-registration#申请开通推送服务)页面查看。
+关于 **App ID**、**Client ID** 和 **Client Secret**,可在荣耀开发者服务平台申请开通推送服务后,在 **推送服务** 页面选择创建的应用,在 [**查看推送服务**](https://developer.honor.com/cn/docs/11002/guides/app-registration#申请开通推送服务)页面查看。
:::

diff --git a/docs/document/android/push/push_huawei.md b/docs/document/android/push/push_huawei.md
index 2bdfc89ec..b6d8e5f1c 100644
--- a/docs/document/android/push/push_huawei.md
+++ b/docs/document/android/push/push_huawei.md
@@ -8,27 +8,25 @@
详见华为官方介绍:[华为 HMS 消息推送服务集成](https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/android-config-agc-0000001050170137#section19884105518498)。
-## **步骤二 在环信即时通讯云控制台上传推送证书**
+## **步骤二 上传推送证书**
-在[环信即时通讯云控制台](https://console.easemob.com/user/login)上传华为推送证书。
+在[环信控制台](https://console.easemob.com/user/login)上传华为推送证书。
-1. 在[环信即时通讯云控制台](https://console.easemob.com/user/login)首页的**应用列表**中,点击目标应用的**操作**栏中的**管理**。
+1. 登录 [环信控制台](https://console.easemob.com/user/login),选择你的应用 > **功能配置** > **增值功能** > **即时推送**。
-2. 在左侧导航栏中,选择**即时通讯** > **功能配置** > **消息推送** > **证书管理**,点击**添加推送证书**。
-
-3. 在**添加推送证书**对话框中选择**华为**页签,配置华为推送参数。参数相关信息,详见你在华为开发者后台创建的[应用信息中的 App ID 和 SecretKey 以及程序的包名](https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/android-config-agc-0000001050170137#section125831926193110)。
+2. 在 **证书管理** 页面,点击 **添加推送证书**。在 **添加推送证书** 对话框中选择 **华为** 页签,配置华为推送参数。参数相关信息,详见你在华为开发者后台创建的 [应用信息中的 App ID 和 SecretKey 以及程序的包名](https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/android-config-agc-0000001050170137#section125831926193110)。

| 参数 | 类型 | 是否必需 | 描述 |
| :--------- | :----- | :------- | :---------------- |
-| `证书名称` | String | 是 | 填写华为 Client ID。 |
-| `推送密钥` | String | 是 | 填写华为 Client Secret。|
-| `应用包名` | String | 是 | 填写华为 App package name。 |
-| `项目 ID` | String | 否 | 填写项目 ID。 |
-| `Category` | String | 否 | 选择 category 类型。 |
-| `Action` | String | 否 | 选择点击通知后的动作。组件定义的 intent-filter action name。 |
-| `ActivityClass`| String | 否 | 角标显示,应用入口类路径。示例:com.easemob.MainActivity。 |
+| 证书名称 | String | 是 | 华为 Client ID。 |
+| 推送密钥 | String | 是 | 华为 Client Secret。|
+| 应用包名 | String | 是 | 华为 App package name。 |
+| 项目 ID | String | 否 | 项目 ID。 |
+| Category | String | 否 | 自动分类权益申请 Category。该参数仅对离线推送有效。 |
+| Action | String | 否 | 点击通知后的动作。组件定义的 intent-filter action name。该参数仅对离线推送有效。 |
+| ActivityClass | String | 否 | 角标显示,应用入口类路径。示例:com.easemob.MainActivity。该参数仅对离线推送有效。 |
## **步骤三 集成华为推送 SDK**
diff --git a/docs/document/android/push/push_meizu.md b/docs/document/android/push/push_meizu.md
index ef96379ea..de992b614 100644
--- a/docs/document/android/push/push_meizu.md
+++ b/docs/document/android/push/push_meizu.md
@@ -8,23 +8,21 @@
## **步骤二 上传推送证书**
-在[环信即时通讯云控制台](https://console.easemob.com/user/login)上传魅族推送证书。
+在[环信控制台](https://console.easemob.com/user/login)上传魅族推送证书。
-1. 在[环信即时通讯云控制台](https://console.easemob.com/user/login)首页的**应用列表**中,点击目标应用的**操作**栏中的**管理**。
+1. 登录 [环信控制台](https://console.easemob.com/user/login),选择你的应用 > **功能配置** > **增值功能** > **即时推送**。
-2. 在左侧导航栏中,选择**即时通讯** > **功能配置** > **消息推送** > **证书管理**,点击**添加推送证书**。
-
-3. 在**添加推送证书**对话框中选择 **魅族** 页签,配置魅族推送参数。参数相关信息,详见你在 [flyme 推送平台](https://login.flyme.cn/sso?appuri=https%3A%2F%2Fapiopen.flyme.cn%2Flogin&useruri=https%3A%2F%2Fopen.flyme.cn%3Ft%3D1722914343470&sid=node0mpa52w0llp341dncyz6wr7yi56208487&service=open&autodirct=true)创建的应用的 `APP ID` 和 `APP SECRET` 以及程序的 `包名`。
+2. 在 **证书管理** 页面,点击 **添加推送证书**。在 **添加推送证书** 对话框中选择 **魅族** 页签,配置魅族推送参数。参数相关信息,详见你在 [flyme 推送平台](https://login.flyme.cn/sso?appuri=https%3A%2F%2Fapiopen.flyme.cn%2Flogin&useruri=https%3A%2F%2Fopen.flyme.cn%3Ft%3D1722914343470&sid=node0mpa52w0llp341dncyz6wr7yi56208487&service=open&autodirct=true)创建的应用的 `APP ID` 和 `APP SECRET` 以及程序的 `包名`。
-
+
| 参数 | 类型 | 是否必需 | 描述 |
| :--------- | :----- | :------- | :---------------- |
-| `证书名称` | String | 是 | 填写魅族 App ID。 |
-| `推送密钥` | String | 是 | 填写魅族 App Secret。|
-| `应用包名` | String | 是 | 填写魅族 App package name。 |
-| `Activity`| String | 否 | 选择点击通知后的动作。 |
-| `推送送达回执` | String | 否 |
- **开启**;
- **关闭** |
+| 证书名称 | String | 是 | 魅族 App ID。 |
+| 推送密钥 | String | 是 | 魅族 App Secret。|
+| 应用包名 | String | 是 | 魅族 App package name。 |
+| Activity| String | 否 | 点击通知后的动作。该参数仅对离线推送有效。 |
+| 推送送达回执 | String | 否 | 是否开启推送送达回执。
- 开发者需要在 Flyme 推送平台新建回执后,才能开启推送送达回执,获取到魅族推送通道送达到设备的推送数据。
- 该参数仅对离线推送有效。 |
## **步骤三 集成魅族推送 SDK**
diff --git a/docs/document/android/push/push_notification_mode_dnd.md b/docs/document/android/push/push_notification_mode_dnd.md
index d5678fd2a..d00d81dc8 100644
--- a/docs/document/android/push/push_notification_mode_dnd.md
+++ b/docs/document/android/push/push_notification_mode_dnd.md
@@ -2,10 +2,6 @@
环信即时通讯 IM 3.9.2 及以上版本对离线消息推送进行了优化。你可以在 app 和会话层面提供了推送通知方式和免打扰模式的细粒度选项。
-**推送通知方式和免打扰模式为推送的高级功能**,若要设置,你需要在 [环信即时通讯控制台](https://console.easemob.com/user/login)的**即时通讯 > 功能配置 > 功能配置总览**页面激活推送高级功能。如需关闭推送高级功能必须联系商务,因为该操作会删除所有相关配置。
-
-
-
## 推送通知方式
推送通知方式 `pushRemindType` 包含三种类型,如下表所示。其中,会话级别的 `pushRemindType` 设置优先于 app 级别的设置,未设置推送通知方式的会话默认采用 app 的设置。例如,假设 app 的推送方式设置为 `MENTION_ONLY`,而指定会话的推送方式设置为 `ALL`。你会收到来自该会话的所有推送通知,而对于其他会话来说,你只会收到提及你的消息的推送通知。
@@ -120,8 +116,8 @@ EMClient.getInstance().addMultiDeviceListener(new EMMultiDeviceListener() {
## 免打扰模式
完成 SDK 初始化和成功登录 app 后,你可以对 app 以及各类型的会话开启离线推送功能以及通过设置免打扰模式关闭推送。
-
-你可以在 app 级别指定免打扰时间段和免打扰时长,环信 IM 在这两个时间段内不发送离线推送通知。若既设置了免打扰时间段,又设置了免打扰时长,免打扰模式的生效时间为这两个时间段的累加。
+- 你可以通过 `SILENT_MODE_INTERVAL` 参数开启全天免打扰和关闭免打扰模式:若开始时间和结束时间相同,免打扰模式则全天生效;若设置为 `0:0`-`0:0`,则关闭免打扰模式。
+- 你可以在 app 级别指定免打扰时间段和免打扰时长,环信 IM 在这两个时间段内不发送离线推送通知。若既设置了免打扰时间段,又设置了免打扰时长,免打扰模式的生效时间为这两个时间段的累加。
免打扰时间参数的说明如下表所示:
diff --git a/docs/document/android/push/push_oppo.md b/docs/document/android/push/push_oppo.md
index 31077a967..f8175db8b 100644
--- a/docs/document/android/push/push_oppo.md
+++ b/docs/document/android/push/push_oppo.md
@@ -8,13 +8,11 @@
## **步骤二 上传推送证书**
-在[环信即时通讯云控制台](https://console.easemob.com/user/login)上传 OPPO 推送证书。
+在[环信控制台](https://console.easemob.com/user/login)上传 OPPO 推送证书。
-1. 在[环信即时通讯云控制台](https://console.easemob.com/user/login)首页的**应用列表**中,点击目标应用的**操作**栏中的**管理**。
+1. 登录 [环信控制台](https://console.easemob.com/user/login),选择你的应用 > **功能配置** > **增值功能** > **即时推送**。
-2. 在左侧导航栏中,选择**即时通讯** > **功能配置** > **消息推送** > **证书管理**,点击**添加推送证书**。
-
-3. 在**添加推送证书**对话框中选择 **OPPO** 页签,配置 OPPO 推送参数。参数相关信息,详见你在 [OPPO 开发者后台](https://open.oppomobile.com/service/oms?service_id=1000004&app_type=app&app_id=30004346)创建的应用的 `appkey` 和 `mastersecret` 以及程序的 `包名`等信息。
+2. 在 **证书管理** 页面,点击 **添加推送证书**。在 **添加推送证书** 对话框中选择 **OPPO** 页签,配置 OPPO 推送参数。参数相关信息,详见你在 [OPPO 开发者后台](https://open.oppomobile.com/service/oms?service_id=1000004&app_type=app&app_id=30004346)创建的应用的 `appkey` 和 `mastersecret` 以及程序的 `包名`等信息。

diff --git a/docs/document/android/push/push_overview.md b/docs/document/android/push/push_overview.md
index ea2b7191a..dca2e5c1c 100644
--- a/docs/document/android/push/push_overview.md
+++ b/docs/document/android/push/push_overview.md
@@ -4,7 +4,7 @@
即时通讯 IM 支持集成第三方离线消息推送服务,为 Android 开发者提供低延时、高送达、高并发、不侵犯用户个人数据的离线消息推送服务。目前支持的手机厂商推送服务包括:Google FCM、华为、荣耀、小米、OPPO、VIVO 和魅族。
-要体验离线推送功能,请点击[这里](https://www.easemob.com/download/demo)下载即时通讯 IM 的 demo。
+要体验离线推送功能,请在 [环信官网](https://www.easemob.com/download/demo) 下载即时通讯 IM 的 demo。
## 离线推送过程
@@ -18,22 +18,7 @@
2. 应用在后台运行或手机锁屏等情况,若客户端未断开与服务器的连接,则即时通讯 IM 不会收到离线推送通知。
-## 离线推送高级功能
-
-如果需要离线推送的高级功能,需在[环信即时通讯控制台](https://console.easemob.com/user/login)的**即时通讯 > 功能配置 > 功能配置总览**页面激活。高级功能包括[推送通知方式](push_notification_mode_dnd.html#推送通知方式)、[免打扰模式](push_notification_mode_dnd.html#免打扰模式)和[推送模板](push_display.html#使用推送模板)。**如需关闭推送高级功能必须联系商务,因为该操作会删除所有相关配置。**
-
-## 多设备离线推送策略
-
-多设备登录时,可在[环信即时通讯控制台](https://console.easemob.com/user/login)的**证书管理**页面配置推送策略,该策略配置对所有推送通道生效:
-
-- 所有设备离线时,才发送推送消息;
-- 任一设备离线时,都发送推送消息。
-
-**注意**:多端登录时若有设备被踢下线,即使接入了 IM 离线推送,也收不到离线推送消息。
-
-
-
-## 技术原理
+## 推送原理

@@ -49,16 +34,36 @@
8. 环信服务器将将消息发送给第三方推送服务器。
9. 第三方推送服务器将消息发送给用户 B。
-:::tip
-1. 开发者通过[环信即时通讯云控制台](https://console.easemob.com/user/login)配置 App 的推送证书,需填写证书名称(或者 App Key)。该步骤须在登录环信 IM SDK 成功后进行。证书名称是环信服务器用于判断目标设备使用哪种推送通道的唯一条件,因此必须确保与 Android 终端设备上传的证书名称一致。
-2. 推送 token(device token) 是 FCM 推送提供的推送 token,即初次启动你的应用时,FCM SDK 为客户端应用实例生成的注册令牌 (registration token)。该 token 用于标识每台设备上的每个应用,FCM 通过该 token 明确消息是发送给哪个设备的,然后将消息转发给设备,设备再通知应用程序。你可以调用 `FirebaseMessaging.getInstance().getToken()` 方法获得 token。另外,如果退出即时通讯 IM 登录时不解绑 device token(调用 `logout` 方法时对 `unbindToken` 参数传 `false` 时不解绑 device token,传 `true` 表示解绑 token),用户在推送证书有效期和 token 有效期内仍会接收到离线推送通知。
-:::
+## 推送证书和推送 Token
+
+**推送证书**:推送证书是环信服务器用于判断目标设备使用哪种推送通道的唯一条件。发送推送通知前需要在 [环信控制台](https://console.easemob.com/user/login)配置 App 的推送证书,需填写证书名称(或者 App Key),确保与 Android 终端设备上传的证书名称一致。该步骤必须在登录环信 IM SDK 成功后进行。
+
+**推送 token(device token)**:推送 token 是第三方推送服务提供的推送 token。以 FCM 推送为例,初次启动你的应用时,FCM SDK 为客户端应用实例生成的注册令牌 (registration token)。该 token 用于标识每台设备上的每个应用,FCM 通过该 token 明确消息是发送给哪个设备的,然后将消息转发给设备,设备再通知应用程序。你可以调用 `FirebaseMessaging.getInstance().getToken()` 方法获得 token。另外,如果退出即时通讯 IM 登录时不解绑 device token(调用 `logout` 方法时对 `unbindToken` 参数传 `false` 时不解绑 device token,传 `true` 表示解绑 token),用户在推送证书有效期和 token 有效期内仍会接收到离线推送通知。
+
+关于如何获取推送 Token 并上传至环信服务器,详见各推送服务的集成文档,例如 对于 FCM 推送,请参阅 [FCM 推送集成文档](/push/push_fcm.html#步骤四-fcm-推送集成)。
+
+## 推送模板
+
+推送模板是离线推送的高级功能。使用前,你需要在 [环信控制台](https://console.easemob.com/user/login)的 **功能配置 > 基础功能 > 消息** 页面激活。**激活后,如需关闭推送模板功能,必须联系商务,因为该操作会删除推送模板相关的所有配置。**
+
+推送模板的配置和使用,详见 [相关文档介绍](push_template.html)。
+
+## 多设备离线推送策略
+
+多设备登录时,可在 [环信控制台](https://console.easemob.com/user/login)的 **证书管理** 页面配置推送策略,该策略配置对所有推送通道生效:
+
+- 所有设备离线时,才发送推送消息;
+- 任一设备离线时,都发送推送消息。
+
+**多端登录时若有设备被踢下线,即使接入了 IM 离线推送,也收不到离线推送消息。**
+
+
## 前提条件
-1. 已开启环信即时通讯服务,详见 [开启和配置即时通讯服务](/product/enable_and_configure_IM.html)。
+1. 已开启环信即时通讯服务,详见 [开启和配置即时通讯服务](/product/console/app_create.html)。
2. 了解环信即时通讯 IM 的使用限制,详见 [使用限制](/product/limitation.html)。
-3. 若使用[推送高级功能](#离线推送高级功能),需在[环信即时通讯控制台](https://console.easemob.com/user/login)上激活。
+3. 若使用[推送模板](#推送模板),需在[环信控制台](https://console.easemob.com/user/login)上激活。
4. 各推送使用的条件:
- Google FCM:设备启用了 Google Play 服务且可连接至 Google 服务器;
- 小米推送:在小米设备上可用;
diff --git a/docs/document/android/push/push_parsing_unified.md b/docs/document/android/push/push_parsing_unified.md
index 8ec1f2021..51af31d0f 100644
--- a/docs/document/android/push/push_parsing_unified.md
+++ b/docs/document/android/push/push_parsing_unified.md
@@ -1,8 +1,8 @@
# 统一获取消息方案
-Android 设备品牌丰富,各厂商对于点击通知栏后获取消息的方式不尽相同,华为、荣耀等厂商官方推荐使用 Activity 获取消息,而小米、vivo 等厂商支持通过监听器解析获取消息,详见[解析推送消息](push_parsing.html)。
+Android 设备品牌丰富,各厂商对于点击通知栏后获取消息的方式不尽相同,华为、荣耀等厂商官方推荐使用 Activity 获取消息,而小米、vivo 等厂商支持通过监听器解析获取消息,详见 [解析推送消息](push_parsing.html)。
-开发者可能需针对不同厂商编写多套点击处理代码,能否有一种统一方案适用于各厂商呢?
+开发者可能需针对不同厂商编写多套点击处理代码。方便起见,我们提供统一获取消息的方案适用于各厂商。
## 方案详情
diff --git a/docs/document/android/push/push_solution.md b/docs/document/android/push/push_solution.md
index c7b2bd9ab..38d0d2b4b 100644
--- a/docs/document/android/push/push_solution.md
+++ b/docs/document/android/push/push_solution.md
@@ -20,7 +20,7 @@
4. 查看推送证书是否存和证书推送测试。
-在[环信即时通讯控制台](https://console.easemob.com) 的 **即时通讯** > **功能配置** > **消息推送** > **证书管理**页面选择要测试的推送证书(用户绑定的推送证书),选择 **更多** > **测试**。
+在 [环信控制台](https://console.easemob.com) 的 **功能配置** > **增值功能** > **即时推送** > **证书管理**页面选择要测试的推送证书(用户绑定的推送证书),选择 **更多** > **测试**。

@@ -28,7 +28,7 @@

-5. 查看是否超过了厂商通道限制。
+1. 查看是否超过了厂商通道限制。
详见[推送消息分类](push_message_classification.html)。
diff --git a/docs/document/android/push/push_template.md b/docs/document/android/push/push_template.md
new file mode 100644
index 000000000..9c79cbd3f
--- /dev/null
+++ b/docs/document/android/push/push_template.md
@@ -0,0 +1,242 @@
+# 推送模板
+
+## 概述
+
+推送模板主要用于服务器提供的默认离线推送配置不满足你的需求时,设置全局范围的推送标题和推送内容。例如,服务器提供的默认设置为中文和英文的推送标题和内容,你若需要使用韩语或日语的推送标题和内容,则可以设置对应语言的推送模板。
+
+推送模板包括默认推送模板 `default`、`detail` 和自定义推送模板。对于群组消息,你可以使用定向模板向某些用户推送与其他用户不同的离线通知。
+
+使用推送模板有以下优势:
+
+1. 自定义修改环信服务端默认推送内容。
+
+2. 接收方可以决定使用哪个模板。
+
+3. 按优先级选择模板使用方式:
+
+ - 使用自定义推送模板的优先级高于默认推送模板。
+ - 若发送方发消息时设置了推送模板,接收方即使设置了推送模板,收到推送通知后也按照发送方设置的推送模板显示。
+
+## 开通服务
+
+推送模板是离线推送服务的高级功能,使用前应先开通该功能。**如需关闭推送模板必须联系商务,因为该操作会删除所有相关配置。**
+
+1. 登录 [环信控制台](https://console.easemob.com/user/login)。
+2. 选择页面上方的 **应用管理**。在弹出的应用列表页面,单击你的应用的 **操作** 栏中的 **管理**。
+3. 在左侧导航栏,选择 **功能配置** > **基础功能**。
+4. 在 **消息** 页面,开通消息相关配置。
+5. 在 **设置离线推送模板** 一栏点击 **免费开通** 开通该功能。
+
+ 功能开通后,你可以点击 **设置** 配置推送模板。
+
+
+
+
+
+## 设置推送模板
+
+你可以通过以下两种方式设置离线推送模板:
+
+- [调用 REST API 配置](/document/server-side/push.html#使用推送模板)。
+- 在 [环信控制台](https://console.easemob.com/user/login) 设置推送模板。
+
+推送模板相关的数据结构,详见[推送扩展字段](/document/server-side/push_extension.html)。
+
+下面为在环信控制台设置离线推送模板。
+
+### 编辑默认推送模板
+
+离线推送模板开通后,**模板管理** 页面默认添加两个模板,`default` 和 `detail`。若未配置自定义推送模板,消息推送时自动使用默认模板,创建消息时无需传入模板名称。
+
+ - `default`:默认情况下,推送标题为 **您有一条新消息**,推送内容为 **请点击查看**。
+ - `detail`:默认情况下,推送标题为 **您有一条新消息**,推送内容为为消息发送方的推送昵称和消息内容。
+
+
+
+你可以在 **操作** 栏中选择 **更多 > 编辑**,修改默认推送模板的推送标题和推送内容,模板名称不能编辑。
+
+
+
+| 参数 | 类型 | 描述 |
+| :-------------- | :----- | :----- |
+| 标题/内容 | Array | 参数的设置方式如下:
- 输入固定内容,例如,标题为 **您好**,内容为 **您有一条新消息**。
- 内置参数填充:1. `{$dynamicFrom}`:按优先级从高到底的顺序填充好友备注、群昵称(仅限群消息)和推送昵称。2. `{$fromNickname}`:推送昵称。 3. `{$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} = "加油"
+ ```
+
+ 群昵称即群成员在群组中的昵称。若要在推送通知中展示群昵称,群成员在发送群消息时可通过扩展字段设置,JSON 结构如下:
+
+```json
+ {
+ "ext":{
+ "em_push_ext":{
+ "group_user_nickname":"Jane"
+ }
+ }
+ }
+```
+
+### 添加自定义推送模板
+
+即时通讯 IM 支持添加自定义推送模板。除了 [调用 RESTful 接口](/document/server-side/push.html#创建离线推送模板) 创建自定义推送模板,你还可以在 [环信控制台](https://console.easemob.com/user/login) 添加自定义推送模板。**自定义推送模板的级别比默认模板高。**
+
+在 **模板管理** 页面,点击 **添加推送模板** 创建自定义推送模板。
+
+| 参数 | 类型 | 描述 |
+| :-------------- | :----- | :----- |
+| 模板名称 | String | 推送模板名称,最多可包含 64 个字符,支持以下字符集:
- 26 个小写英文字母 a-z
- 26 个大写英文字母 A-Z
- 10 个数字 0-9|
+| 标题/内容 | Array | 详见 [默认推送模板中的配置](#编辑默认推送模板)。 |
+
+**创建消息时需通过使用扩展字段传入模板名称、推送标题和推送内容**,通知栏中的推送标题和内容分别使用模板中的格式。详见 [消息扩展中的默认推送模板的参数](#编辑默认推送模板)。
+
+
+
+## 发消息时使用推送模板
+
+你可以在发送消息时选择推送模板。
+
+:::tip
+若使用默认模板 **default**,消息推送时自动使用默认模板,创建消息时无需传入模板名称。
+:::
+
+### 使用固定内容的推送模板
+
+使用固定内容的推送模板,通过 `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);
+```
+
+### 使用包含内置参数的推送模板
+
+使用自定义或默认推送模板,模板中的推送标题和推送内容使用以下内置参数:
+
+- `{$dynamicFrom}`:服务器按优先级从高到底的顺序填充备注、群昵称(仅限群消息)和推送昵称。
+- `{$fromNickname}`:推送昵称。
+- `{$msg}`:消息内容。
+
+群昵称即群成员在群组中的昵称,群成员在发送群消息时通过扩展字段设置,JSON 结构如下:
+
+```json
+ {
+ "ext":{
+ "em_push_ext":{
+ "group_user_nickname":"Jane"
+ }
+ }
+ }
+```
+
+内置参数的介绍,详见 [编辑默认推送模板](#编辑默认推送模板)。
+
+这种方式的示例代码与 [使用固定内容的推送模板](#使用固定内容的推送模板)的相同。
+
+### 使用包含自定义参数的推送模板
+
+使用自定义推送模板,而且推送标题和推送内容为自定义参数:
+
+例如,推送模板的设置如下图所示:
+
+
+
+使用下面的示例代码后,通知栏中弹出的推送通知为:
+
+
+
+```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", "push");
+ // 设置填写模板标题的 value 数组。
+ titleArgs.put("您");
+ titleArgs.put("消息,");
+ //...
+ pushObject.put("title_args", titleArgs);
+ // 设置填写模板内容的 value 数组。
+ contentArgs.put("请");
+ contentArgs.put("查看");
+ //...
+ pushObject.put("content_args", contentArgs);
+} catch (JSONException e) {
+ e.printStackTrace();
+}
+// 将推送扩展设置到消息中。
+message.setAttribute("em_push_template", pushObject);
+// 设置消息状态回调。
+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) {
+
+ }
+});
+```
+
diff --git a/docs/document/android/push/push_translation.md b/docs/document/android/push/push_translation.md
index 64a457bdd..8b629c2db 100644
--- a/docs/document/android/push/push_translation.md
+++ b/docs/document/android/push/push_translation.md
@@ -2,7 +2,7 @@
推送通知与翻译功能协同工作。如果用户启用 [自动翻译](/document/android/message_translation.html) 功能并发送消息,SDK 会同时发送原始消息和翻译后的消息。
-作为接收方,你可以设置你在离线时希望接收的推送通知的首选语言。如果翻译消息的语言符合你的设置,则翻译消息显示在推送通知中;否则,将显示原始消息。翻译功能由 Microsoft Azure Translation API 提供,你可以点击[这里](https://learn.microsoft.com/zh-cn/azure/ai-services/translator/language-support)了解支持的翻译语言。
+作为接收方,你可以设置你在离线时希望接收的推送通知的首选语言。如果翻译消息的语言符合你的设置,则翻译消息显示在推送通知中;否则,将显示原始消息。翻译功能由 Microsoft Azure Translation API 提供,你可以在 [微软官网](https://learn.microsoft.com/zh-cn/azure/ai-services/translator/language-support)了解支持的翻译语言。
以下代码示例显示了如何设置和获取推送通知的首选语言:
diff --git a/docs/document/android/push/push_vivo.md b/docs/document/android/push/push_vivo.md
index 625baa5c2..861a5d41d 100644
--- a/docs/document/android/push/push_vivo.md
+++ b/docs/document/android/push/push_vivo.md
@@ -10,25 +10,23 @@
## **步骤二 上传推送证书**
-在[环信即时通讯云控制台](https://console.easemob.com/user/login)上传推送证书:
+在 [环信控制台](https://console.easemob.com/user/login) 上传推送证书:
-1. 在[环信即时通讯云控制台](https://console.easemob.com/user/login)首页的**应用列表**中,点击目标应用的**操作**栏中的**管理**。
+1. 登录 [环信控制台](https://console.easemob.com/user/login),选择你的应用 > **功能配置** > **增值功能** > **即时推送**。
-2. 在左侧导航栏中,选择**即时通讯** > **功能配置** > **消息推送** > **证书管理**,点击**添加推送证书**。
-
-3. 在**添加推送证书**对话框中选择 **VIVO** 页签,配置 VIVO 推送参数。参数相关信息,详见你在 [VIVO 开发者后台](https://vpush.vivo.com.cn/#/appdetail)创建的应用的 `APP ID`,`APP KEY` 和 `APP SECRET` 以及程序的 `包名`。
+2. 在 **证书管理** 页面,点击 **添加推送证书**。在 **添加推送证书** 对话框中选择 **VIVO** 页签,配置 VIVO 推送参数。参数相关信息,详见你在 [VIVO 开发者后台](https://vpush.vivo.com.cn/#/appdetail) 创建的应用的 `APP ID`,`APP KEY` 和 `APP SECRET` 以及程序的 `包名`。
-
+
| 参数 | 类型 | 是否必需 | 描述 |
| :--------- | :----- | :------- | :---------------- |
-| `证书名称` | String | 是 | 填写 VIVO App ID。 |
-| `证书标识` | String | 是 | 填写 VIVO App Key。|
-| `推送密钥` | String | 是 | 填写 VIVO App Secret。|
-| `Category` | String | 否 | 选择 category 类型。 |
-| `应用包名` | String | 是 | 填写 VIVO App package name。 |
-| `Activity`| String | 否 | 选择点击通知后的动作。 |
-| `推送类型` | String | 否 |
- **运营消息**
- **系统消息** |
+| 证书名称 | String | 是 | VIVO App ID。 |
+| 证书标识 | String | 是 | VIVO App Key。|
+| 推送密钥 | String | 是 | VIVO App Secret。|
+| Category | String | 否 | Category 类型。关于该参数,详见 [VIVO 推送文档](https://dev.vivo.com.cn/documentCenter/doc/359#w2-67805227)。该参数仅对离线推送有效。 |
+| 应用包名 | String | 是 | VIVO App package name。该参数仅对离线推送有效。 |
+| Activity| String | 否 | 点击通知后的动作。 该参数仅对离线推送有效。 |
+| 推送类型 | String | 否 |可选择 **运营消息** 或 **系统消息**。该参数仅对离线推送有效。 |
## **步骤三 集成 VIVO 推送 SDK**
diff --git a/docs/document/android/push/push_xiaomi.md b/docs/document/android/push/push_xiaomi.md
index 6d418b317..0819c94ef 100644
--- a/docs/document/android/push/push_xiaomi.md
+++ b/docs/document/android/push/push_xiaomi.md
@@ -8,23 +8,21 @@
## **步骤二 上传推送证书**
-在[环信即时通讯云控制台](https://console.easemob.com/user/login)上传推送证书:
+在[环信控制台](https://console.easemob.com/user/login)上传推送证书:
-1. 在[环信即时通讯云控制台](https://console.easemob.com/user/login)首页的**应用列表**中,点击目标应用的**操作**栏中的**管理**。
+1. 登录 [环信控制台](https://console.easemob.com/user/login),选择你的应用 > **功能配置** > **增值功能** > **即时推送**。
-2. 在左侧导航栏中,选择**即时通讯** > **功能配置** > **消息推送** > **证书管理**,点击**添加推送证书**。
-
-3. 在**添加推送证书**对话框中选择**小米**页签,配置小米推送参数。参数相关信息,详见你在 [小米开放平台](https://dev.mi.com/platform) 创建的应用信息中的 App ID 和 Secret Key 以及程序的包名。
-
-
+2. 在 **证书管理** 页面,点击 **添加推送证书**。在 **添加推送证书** 对话框中选择 **小米** 页签,配置小米推送参数。参数相关信息,详见你在 [小米开放平台](https://dev.mi.com/platform) 创建的应用信息中的 App ID 和 Secret Key 以及程序的包名。
+
+
| 参数 | 类型 | 是否必需 | 描述 |
| :--------- | :----- | :------- | :---------------- |
-| `证书名称` | String | 是 | 填写小米 App ID。 |
-| `推送密钥` | String | 是 | 填写小米 App Secret。|
-| `应用包名` | String | 是 | 填写小米 App package name。 |
-| `Channel ID` | String | 是 | 填写 Channel ID。 |
-| `Action` | String | 否 | 选择点击通知后的动作。 |
+| 证书名称 | String | 是 | 小米 App ID。 |
+| 推送密钥 | String | 是 | 小米 App Secret。|
+| 应用包名 | String | 是 | 小米 App package name。 |
+| Channel ID | String | 是 | Channel ID。该参数仅对离线推送有效。 |
+| Action | String | 否 | 点击通知后的动作。该参数仅对离线推送有效。 |
## **步骤三 集成小米推送 SDK**
diff --git a/docs/document/flutter/push/push_display.md b/docs/document/flutter/push/push_display.md
deleted file mode 100644
index b2b9c3675..000000000
--- a/docs/document/flutter/push/push_display.md
+++ /dev/null
@@ -1,217 +0,0 @@
-# 设置推送通知的显示内容
-
-通知收到后,通知栏中显示的推送标题和内容可通过以下方式设置,配置的优先级为由低到高:
-
-1. 设置推送通知的显示属性:使用默认的推送标题和内容,即推送通知的展示方式 `DisplayStyle` 采用默认的值(`Simple`)。推送标题为**您有一条新消息**,推送内容为**请点击查看**。
-2. 使用默认推送模板:若有默认模板 `default`,发消息时无需指定。
-3. 使用消息扩展字段:使用扩展字段自定义要显示的推送标题和推送内容,即 `em_push_title` 和 `em_push_content`。
-4. 接收方设置了推送模板。
-5. 使用自定义推送模板:发送消息时通过消息扩展字段指定推送模板名称。
-
-## 设置和获取推送通知的显示属性
-
-### 设置推送通知的显示属性
-
-你可以分别调用 `updatePushNickname` 和 `updatePushDisplayStyle` 方法设置推送通知中显示的昵称(`nickname`)和通知显示样式(`DisplayStyle`),确定通知栏中的推送标题和推送内容。
-
-```dart
-try {
- EMClient.getInstance.pushManager.updatePushNickname('nickname');
-} on EMError catch (e) {}
-```
-
-```dart
-try {
- EMClient.getInstance.pushManager.updatePushDisplayStyle(DisplayStyle.Simple);
-} on EMError catch (e) {}
-```
-
-若要在通知栏中显示消息内容,需要设置通知显示样式 `DisplayStyle`。该参数有如下两种设置:
-
-| 参数值 | 描述 |
-| :--------------- | :---------------------- |
-| (默认)`Simple` | 不论 `nickname` 是否设置,对于推送任何类型的消息,通知栏采用默认显示设置,即推送标题为**您有一条新消息**,推送内容为**请点击查看**。 |
-| `Summary` | `Summary`:显示消息内容。设置的昵称只在 `DisplayStyle` 为 `Summary` 时生效,在 `Simple` 时不生效。 |
-
-下表以单聊文本消息为例介绍这显示属性的设置。
-
-对于**群聊**,下表中的**消息发送方的推送昵称**和**消息发送方的 IM 用户 ID**显示为**群组 ID**。
-
-| 参数设置 | 推送显示 | 图片 |
-| :--------- | :----- |:------------- |
-|
- `DisplayStyle`:(默认)`Simple`
- `nickname`:设置或不设置 |
- 推送标题:**您有一条新消息**
- 推送内容:**请点击查看** | |
-|
- `DisplayStyle`:`Summary`
- `nickname`:设置具体值 |
- 推送标题:**您有一条新消息**
- 推送内容:**消息发送方的推送昵称:消息内容** | |
-|
- `DisplayStyle`:`Summary`
- `nickname`:不设置 |
- 推送标题:**您有一条新消息**
- 推送内容:**消息发送方的 IM 用户 ID: 消息内容** | |
-
-### 获取推送通知的显示属性
-
-你可以调用 `fetchPushConfigsFromServer` 方法获取推送通知中的显示属性,如以下代码示例所示:
-
-```dart
-try {
- EMPushConfigs configs = await EMClient.getInstance.pushManager.fetchPushConfigsFromServer();
- // 获取推送显示昵称。
- String? pushNickname = configs.displayName;
- // 获取推送通知的显示样式。
- DisplayStyle pushDisplayStyle = configs.displayStyle;
-} on EMError catch (e) {}
-```
-
-## 使用推送模板
-
-推送模板主要用于服务器提供的默认配置不满足你的需求时,可使你设置全局范围的推送标题和推送内容。例如,服务器提供的默认设置为中文和英文的推送标题和内容,你若需要使用韩语或日语的推送标题和内容,则可以设置对应语言的推送模板。推送模板包括默认推送模板 `default` 和自定义推送模板。对于群组消息,你可以使用定向模板向某些用户推送与其他用户不同的离线通知。
-
-你可以通过以下两种方式设置:
-
-- [调用 REST API 配置](/document/server-side/push.html#使用推送模板)。
-- 在[环信即时通讯云控制台](https://console.easemob.com/user/login)设置推送模板,详见[控制台文档](/product/enable_and_configure_IM.html#配置推送模板)。
-
-使用推送模板有以下优势:
-
-1. 自定义修改环信服务端默认推送内容。
-
-2. 接收方可以决定使用哪个模板。
-
-3. 按优先级选择模板使用方式:
-
- - 使用自定义推送模板的优先级高于默认推送模板。
-
- - 若发送方发消息时设置了推送模板,接收方即使设置了推送模板,收到推送通知后也按照发送方设置的推送模板显示。
-
-:::tip
-1. 设置推送模板为推送的高级功能,使用前需要在[环信即时通讯控制台](https://console.easemob.com/user/login)的**即时通讯 > 功能配置 > 功能配置总览**页面激活推送高级功能。如需关闭推送高级功能必须联系商务,因为该操作会删除所有相关配置。
-2. 推送模板相关的数据结构,详见[推送扩展字段](/document/server-side/push_extension.html)。
-:::
-
-### 发消息时使用推送模板
-
-创建模板后,你可以在发送消息时选择此推送模板,分为以下三种情况:
-
-:::tip
-若使用默认模板 **default**,消息推送时自动使用默认模板,创建消息时无需传入模板名称。
-:::
-
-1. 使用固定内容的推送模板,通过 `ext` 扩展字段指定推送模板名称。
-
-这种情况下,创建消息时无需传入 `title_args` 和 `content_args` 参数。
-
-```dart
- final msg = EMMessage.createTxtSendMessage(
- targetId: 'userId',
- content: '消息内容',
- );
-
- msg.attributes = {
- // 设置推送模板名称'test7'。若不指定,设置默认推送模板的信息。
- 'em_push_template': {'name': 'test7'},
- };
-
- await EMClient.getInstance.chatManager.sendMessage(msg);
-```
-
-2. 使用自定义或者默认推送模板,模板中的推送标题和推送内容使用以下内置参数:
-
-- `{$dynamicFrom}`:服务器按优先级从高到底的顺序填充备注、群昵称(仅限群消息)和推送昵称。
-- `{$fromNickname}`:推送昵称。
-- `{$msg}`:消息内容。
-
-群昵称即群成员在群组中的昵称,群成员在发送群消息时通过扩展字段设置,JSON 结构如下:
-
-```json
- {
- "ext":{
- "em_push_ext":{
- "group_user_nickname":"Jane"
- }
- }
- }
-```
-
-内置参数的介绍,详见[环信即时通讯控制台文档](/product/enable_and_configure_IM.html#使用默认推送模板)。
-
-这种方式的示例代码与“使用固定内容的推送模板”的相同。
-
-3. 使用自定义推送模板,而且推送标题和推送内容为自定义参数:
-
-例如,推送模板的设置如下图所示:
-
-
-
-使用下面的示例代码后,通知栏中弹出的推送通知为:
-
-
-
-```dart
- final msg = EMMessage.createTxtSendMessage(
- targetId: 'userId',
- content: '消息内容',
- );
-
- msg.attributes = {
- 'em_push_template': {
- // 设置推送模板名称。若不指定,设置默认推送模板的信息。
- 'name': 'push',
- 'title_args': ['您', '消息'],
- 'content_args': ['请', '查看'],
- },
- };
-
- await EMClient.getInstance.chatManager.sendMessage(msg);
-```
-
-### 消息接收方使用推送模板
-
-消息接收方可以调用 `setPushTemplate` 方法传入推送模板名称,选择要使用的模板。
-
-:::tip
-若发送方在发送消息时使用了推送模板,则推送通知栏中的显示内容以发送方的推送模板为准。
-:::
-
-```dart
-try {
- await EMClient.getInstance.pushManager.setPushTemplate('Template Name');
-} on EMError catch (e) {}
-```
-
-## 使用消息扩展字段
-
-创建推送消息时,你可以设置消息扩展字段自定义要显示的推送标题 `em_push_title` 和推送内容 `em_push_content`。
-
-```dart
-EMMessage msg = EMMessage.createTxtSendMessage(
- targetId: 'receiveId',
- content: 'content',
-);
-msg.attributes = {
- // 将推送扩展设置到消息中。该字段为内置的推送扩展字段。
- 'em_push_ext': {
- // 自定义推送消息标题。该字段为内置内置字段,字段名不可修改。
- 'em_push_title': 'custom push title',
- // 自定义推送消息内容。该字段为内置内置字段,字段名不可修改。
- 'em_push_content': 'custom push content'
- }
-};
-
-try {
- await EMClient.getInstance.chatManager.sendMessage(msg);
-} on EMError catch (e) {}
-```
-
-自定义显示字段的数据结构如下:
-
-```dart
-{
- "em_apns_ext": {
- "em_push_title": "custom push title",
- "em_push_content": "custom push content"
- }
-}
-```
-
-| 参数 | 描述 |
-| :---------------- | :----------- |
-| `em_apns_ext` | 消息扩展,使用扩展的方式向推送中添加自定义字段,该值为固定值,不可修改。 |
-| `em_push_title` | 自定义字段 key,用于设置自定义的标题,该值为固定值,不可修改。 |
-| `em_push_content` | 自定义字段 key,用于设置自定义的内容,该值为固定值,不可修改。 |
-
-
diff --git a/docs/document/flutter/push/push_display_attribute.md b/docs/document/flutter/push/push_display_attribute.md
new file mode 100644
index 000000000..9222b8b0f
--- /dev/null
+++ b/docs/document/flutter/push/push_display_attribute.md
@@ -0,0 +1,48 @@
+# 设置和获取推送通知的显示属性
+
+## 设置推送通知的显示属性
+
+你可以分别调用 `updatePushNickname` 和 `updatePushDisplayStyle` 方法设置推送通知中显示的昵称(`nickname`)和通知显示样式(`DisplayStyle`),确定通知栏中的推送标题和推送内容。
+
+```dart
+try {
+ EMClient.getInstance.pushManager.updatePushNickname('nickname');
+} on EMError catch (e) {}
+```
+
+```dart
+try {
+ EMClient.getInstance.pushManager.updatePushDisplayStyle(DisplayStyle.Simple);
+} on EMError catch (e) {}
+```
+
+若要在通知栏中显示消息内容,需要设置通知显示样式 `DisplayStyle`。该参数有如下两种设置:
+
+| 参数值 | 描述 |
+| :--------------- | :---------------------- |
+| (默认)`Simple` | 不论 `nickname` 是否设置,对于推送任何类型的消息,通知栏采用默认显示设置,即推送标题为**您有一条新消息**,推送内容为**请点击查看**。 |
+| `Summary` | `Summary`:显示消息内容。设置的昵称只在 `DisplayStyle` 为 `Summary` 时生效,在 `Simple` 时不生效。 |
+
+下表以单聊文本消息为例介绍这显示属性的设置。
+
+对于**群聊**,下表中的**消息发送方的推送昵称**和**消息发送方的 IM 用户 ID**显示为**群组 ID**。
+
+| 参数设置 | 推送显示 | 图片 |
+| :--------- | :----- |:------------- |
+|
- `DisplayStyle`:(默认)`Simple`
- `nickname`:设置或不设置 |
- 推送标题:**您有一条新消息**
- 推送内容:**请点击查看** | |
+|
- `DisplayStyle`:`Summary`
- `nickname`:设置具体值 |
- 推送标题:**您有一条新消息**
- 推送内容:**消息发送方的推送昵称:消息内容** | |
+|
- `DisplayStyle`:`Summary`
- `nickname`:不设置 |
- 推送标题:**您有一条新消息**
- 推送内容:**消息发送方的 IM 用户 ID: 消息内容** | |
+
+## 获取推送通知的显示属性
+
+你可以调用 `fetchPushConfigsFromServer` 方法获取推送通知中的显示属性,如以下代码示例所示:
+
+```dart
+try {
+ EMPushConfigs configs = await EMClient.getInstance.pushManager.fetchPushConfigsFromServer();
+ // 获取推送显示昵称。
+ String? pushNickname = configs.displayName;
+ // 获取推送通知的显示样式。
+ DisplayStyle pushDisplayStyle = configs.displayStyle;
+} on EMError catch (e) {}
+```
\ No newline at end of file
diff --git a/docs/document/flutter/push/push_display_field.md b/docs/document/flutter/push/push_display_field.md
new file mode 100644
index 000000000..2ce3d79cc
--- /dev/null
+++ b/docs/document/flutter/push/push_display_field.md
@@ -0,0 +1,40 @@
+# 使用消息扩展字段
+
+创建推送消息时,你可以设置消息扩展字段自定义要显示的推送标题 `em_push_title` 和推送内容 `em_push_content`。
+
+```dart
+EMMessage msg = EMMessage.createTxtSendMessage(
+ targetId: 'receiveId',
+ content: 'content',
+);
+msg.attributes = {
+ // 将推送扩展设置到消息中。该字段为内置的推送扩展字段。
+ 'em_push_ext': {
+ // 自定义推送消息标题。该字段为内置内置字段,字段名不可修改。
+ 'em_push_title': 'custom push title',
+ // 自定义推送消息内容。该字段为内置内置字段,字段名不可修改。
+ 'em_push_content': 'custom push content'
+ }
+};
+
+try {
+ await EMClient.getInstance.chatManager.sendMessage(msg);
+} on EMError catch (e) {}
+```
+
+自定义显示字段的数据结构如下:
+
+```dart
+{
+ "em_apns_ext": {
+ "em_push_title": "custom push title",
+ "em_push_content": "custom push content"
+ }
+}
+```
+
+| 参数 | 描述 |
+| :---------------- | :----------- |
+| `em_apns_ext` | 消息扩展,使用扩展的方式向推送中添加自定义字段,该值为固定值,不可修改。 |
+| `em_push_title` | 自定义字段 key,用于设置自定义的标题,该值为固定值,不可修改。 |
+| `em_push_content` | 自定义字段 key,用于设置自定义的内容,该值为固定值,不可修改。 |
\ No newline at end of file
diff --git a/docs/document/flutter/push/push_display_overview.md b/docs/document/flutter/push/push_display_overview.md
new file mode 100644
index 000000000..911326d44
--- /dev/null
+++ b/docs/document/flutter/push/push_display_overview.md
@@ -0,0 +1,13 @@
+# 设置推送通知的显示内容
+
+通知收到后,通知栏中显示的推送标题和内容可通过以下方式设置,配置的优先级为由低到高:
+
+1. **设置推送通知的显示属性**:使用默认的推送标题和内容,即推送通知的展示方式 `DisplayStyle` 采用默认的值(`Simple`)。推送标题为**您有一条新消息**,推送内容为**请点击查看**。
+2. **使用默认推送模板**:若有默认模板 `default`,发消息时无需指定。
+3. **使用消息扩展字段**:使用扩展字段自定义要显示的推送标题和推送内容,即 `em_push_title` 和 `em_push_content`。
+4. **接收方设置了推送模板**。
+5. **使用自定义推送模板**:发送消息时通过消息扩展字段指定推送模板名称。
+
+:::tip
+推送模板为离线推送的高级功能,使用前需要在环信控制台开启。
+:::
\ No newline at end of file
diff --git a/docs/document/flutter/push/push_easemob_console.md b/docs/document/flutter/push/push_easemob_console.md
index d4c239ab5..af1e1b824 100644
--- a/docs/document/flutter/push/push_easemob_console.md
+++ b/docs/document/flutter/push/push_easemob_console.md
@@ -1,23 +1,23 @@
# 上传推送证书及绑定推送信息
-1. 除了满足用户离线条件外,要使用第三方离线推送,你还需在[环信即时通讯云控制台](https://console.easemob.com/user/login)配置推送证书信息,例如,对于 FCM 推送,需配置**证书类型**和**证书名称**,上传证书,并调用客户端 SDK 提供的 API 向环信服务器上传 device token。
+1. 除了满足用户离线条件外,要使用第三方离线推送,你还需在[环信控制台](https://console.easemob.com/user/login)配置推送证书信息,例如,对于 FCM 推送,需配置 **证书类型** 和 **证书名称**,上传证书,并调用客户端 SDK 提供的 API 向环信服务器上传 device token。
2. 从第三方服务获取推送 token 后,将你的用户 ID 与推送证书和推送 token `deviceToken` 进行绑定。
## 上传推送证书
-在第三方推送服务后台注册应用,获取应用信息,开启推送服务后,你需要在[环信即时通讯云控制台](https://console.easemob.com/user/login)上传推送证书,实现第三方推送服务与环信即时通讯 IM 的通信。
+在第三方推送服务后台注册应用,获取应用信息,开启推送服务后,你需要在 [环信控制台](https://console.easemob.com/user/login) 上传推送证书,实现第三方推送服务与环信即时通讯 IM 的通信。

-关于各推送证书相关信息以及[环信即时通讯云控制台](https://console.easemob.com/user/login)上的推送证书参数描述,详见下表中 [iOS 离线推送文档](/document/ios/push/push_overview.html)和 [Android 离线推送文档](/document/android/push/push_overview.html)中的相关链接。
+关于各推送证书相关信息以及 [环信控制台](https://console.easemob.com/user/login)上的推送证书参数描述,详见下表中 [iOS 离线推送文档](/document/ios/push/push_overview.html)和 [Android 离线推送文档](/document/android/push/push_overview.html)中的相关链接。
-| 推送服务类型 | 在推送厂商后台获取推送证书信息 | 在环信即时通讯控制台上传推送证书 |
+| 推送服务类型 | 在推送厂商后台获取推送证书信息 | 在环信控制台上传推送证书 |
| :--------- | :----- | :------- |
| APNs 推送 | 详见 [iOS 端 APNs 推送集成文档](/document/ios/push/push_apns.html#创建推送证书)。 | 详见 [iOS 端 APNs 推送文档](/document/ios/push/push_apns.html#上传推送证书)。 |
| FCM 推送 | 详见 [Android 端 FCM 推送集成文档](/document/android/push/push_fcm.html#fcm-推送集成)。 | 详见 [Android 端 FCM 推送集成文档](/document/android/push/push_fcm.html#步骤三-上传推送证书)。 |
-| 华为推送 | 详见 [Android 端华为推送集成文档](/document/android/push/push_huawei.html#步骤一-在华为开发者后台创建应用)。 | 详见 [Android 端华为推送集成文档](/document/android/push/push_huawei.html#步骤二-在环信即时通讯云控制台上传推送证书)。 |
-| 荣耀推送 | 详见 [Android 端荣耀推送集成文档](/document/android/push/push_honor.html#步骤一-在荣耀开发者服务平台创建应用并申请开通推送服务)。 | 详见 [Android 端荣耀推送集成文档](/document/android/push/push_honor.html#步骤二-在环信即时通讯云控制台上传荣耀推送证书)。 |
+| 华为推送 | 详见 [Android 端华为推送集成文档](/document/android/push/push_huawei.html#步骤一-在华为开发者后台创建应用)。 | 详见 [Android 端华为推送集成文档](/document/android/push/push_huawei.html#步骤二-在环信控制台上传推送证书)。 |
+| 荣耀推送 | 详见 [Android 端荣耀推送集成文档](/document/android/push/push_honor.html#步骤一-在荣耀开发者服务平台创建应用并申请开通推送服务)。 | 详见 [Android 端荣耀推送集成文档](/document/android/push/push_honor.html#步骤二-在环信控制台上传荣耀推送证书)。 |
| OPPO 推送 | 详见 [Android 端 OPPO 推送集成文档](/document/android/push/push_oppo.html#步骤一-在-oppo-开发者后台创建应用)。 | 详见 [Android 端 OPPO 推送集成文档](/document/android/push/push_oppo.html#步骤二-上传推送证书)。 |
| vivo 推送 | 详见 [Android 端 vivo 推送集成文档](/document/android/push/push_vivo.html#步骤一-在-vivo-开发者后台创建应用)。 | 详见 [Android 端 vivo 推送集成文档](/document/android/push/push_vivo.html#步骤二-上传推送证书)。 |
| 小米推送 | 详见 [Android 端小米推送集成文档](/document/android/push/push_xiaomi.html#步骤一-在小米开放平台创建应用)。 | 详见 [Android 端小米推送集成文档](/document/android/push/push_xiaomi.html#步骤二-上传推送证书)。 |
diff --git a/docs/document/flutter/push/push_notification_mode_dnd.md b/docs/document/flutter/push/push_notification_mode_dnd.md
index 263fc9ee7..996102f93 100644
--- a/docs/document/flutter/push/push_notification_mode_dnd.md
+++ b/docs/document/flutter/push/push_notification_mode_dnd.md
@@ -2,10 +2,6 @@
为优化用户在处理大量推送通知时的体验,即时通讯 IM 在 app 和会话层面提供了推送通知方式和免打扰模式的细粒度选项。
-**推送通知方式和免打扰模式为推送的高级功能**,若要设置,你需要在 [环信即时通讯控制台](https://console.easemob.com/user/login)的**即时通讯 > 功能配置 > 功能配置总览**页面激活推送高级功能。如需关闭推送高级功能必须联系商务,因为该操作会删除所有相关配置。
-
-
-
## 推送通知方式
推送通知方式 `ChatPushRemindType` 包含三种类型,如下表所示。其中,会话级别的 `ChatPushRemindType` 设置优先于 app 级别的设置,未设置推送通知方式的会话默认采用 app 的设置。例如,假设 app 的推送方式设置为 `MENTION_ONLY`,而指定会话的推送方式设置为 `ALL`。你会收到来自该会话的所有推送通知,而对于其他会话来说,你只会收到提及你的消息的推送通知。
@@ -58,8 +54,8 @@ await EMClient.getInstance.pushManager.syncConversationsSilentMode();
## 免打扰模式
在你完成 SDK 初始化和成功登录 app 后,可以对 app 以及各类型的会话开启离线推送功能以及通过设置免打扰模式关闭推送。
-
-你可以在 app 级别指定免打扰时间段和免打扰时长,即时通讯 IM 在这两个时间段内不发送离线推送通知。若既设置了免打扰时间段,又设置了免打扰时长,免打扰模式的生效时间为这两个时间段的累加。
+- 你可以通过 `silentModeInterval` 参数开启全天免打扰和关闭免打扰模式:若开始时间和结束时间相同,免打扰模式则全天生效;若设置为 `0:0`-`0:0`,则关闭免打扰模式。
+- 你可以在 app 级别指定免打扰时间段和免打扰时长,即时通讯 IM 在这两个时间段内不发送离线推送通知。若既设置了免打扰时间段,又设置了免打扰时长,免打扰模式的生效时间为这两个时间段的累加。
免打扰时间参数的说明如下表所示:
diff --git a/docs/document/flutter/push/push_overview.md b/docs/document/flutter/push/push_overview.md
index 336e85e82..fa165ba51 100644
--- a/docs/document/flutter/push/push_overview.md
+++ b/docs/document/flutter/push/push_overview.md
@@ -12,22 +12,7 @@
2. 应用在后台运行或手机锁屏等情况,若客户端未断开与服务器的连接,则即时通讯 IM 不会收到离线推送通知。
-## 离线推送高级功能
-
-如果需要离线推送的高级功能,需在[环信即时通讯控制台](https://console.easemob.com/user/login)的**即时通讯 > 功能配置 > 功能配置总览**页面激活。高级功能包括[推送通知方式](push_notification_mode_dnd.html#推送通知方式)、[免打扰模式](push_notification_mode_dnd.html#免打扰模式)和[推送模板](push_display.html#使用推送模板)。**如需关闭推送高级功能必须联系商务,因为该操作会删除所有相关配置。**
-
-## 多设备离线推送策略
-
-多设备登录时,可在[环信即时通讯控制台](https://console.easemob.com/user/login)的**证书管理**页面配置推送策略,该策略配置对所有推送通道生效:
-
-- 所有设备离线时,才发送推送消息;
-- 任一设备离线时,都发送推送消息。
-
-**注意**:多端登录时若有设备被踢下线,即使接入了 IM 离线推送,也收不到离线推送消息。
-
-
-
-## 技术原理
+## 推送原理
### Android 平台离线推送
@@ -46,7 +31,7 @@
9. 第三方推送服务器将消息发送给用户 B。
:::tip
-1. 开发者通过[环信即时通讯云控制台](https://console.easemob.com/user/login)配置 App 的推送证书,需填写证书名称(或者 App Key)。该步骤须在登录环信 IM SDK 成功后进行。证书名称是环信服务器用于判断目标设备使用哪种推送通道的唯一条件,因此必须确保与 Android 终端设备上传的证书名称一致。
+1. 开发者通过[环信控制台](https://console.easemob.com/user/login)配置 App 的推送证书,需填写证书名称(或者 App Key)。该步骤须在登录环信 IM SDK 成功后进行。证书名称是环信服务器用于判断目标设备使用哪种推送通道的唯一条件,因此必须确保与 Android 终端设备上传的证书名称一致。
2. 关于推送 token,详见[绑定推送信息页面相关描述](push_easemob_console.html#绑定推送信息)。
:::
@@ -65,11 +50,28 @@
7. 环信服务器将消息发送给 APNs 推送服务器。
8. APNs 推送服务器将消息发送给用户 B。
+## 推送模板
+
+推送模板是离线推送的高级功能。使用前,你需要在 [环信控制台](https://console.easemob.com/user/login)的 **功能配置 > 基础功能 > 消息** 页面激活。**激活后,如需关闭推送模板功能,必须联系商务,因为该操作会删除推送模板相关的所有配置。**
+
+推送模板的配置和使用,详见 [相关文档介绍](push_template.html)。
+
+## 多设备离线推送策略
+
+多设备登录时,可在 [环信控制台](https://console.easemob.com/user/login)的 **证书管理** 页面配置推送策略,该策略配置对所有推送通道生效:
+
+- 所有设备离线时,才发送推送消息;
+- 任一设备离线时,都发送推送消息。
+
+**多端登录时若有设备被踢下线,即使接入了 IM 离线推送,也收不到离线推送消息。**
+
+
+
## 前提条件
-1. 已开启即时通讯 IM ,详见[开启和配置即时通讯服务](/product/enable_and_configure_IM.html)。
-2. 了解即时通讯 IM 套餐包中的 API 调用频率限制,详见[使用限制](/product/limitation.html)。
-3. 若使用[推送高级功能](#离线推送高级功能),需在[环信即时通讯控制台](https://console.easemob.com/user/login)上激活。
+1. 已开启即时通讯 IM ,详见 [开启和配置即时通讯服务](/product/enable_and_configure_IM.html)。
+2. 了解即时通讯 IM 套餐包中的 API 调用频率限制,详见 [使用限制](/product/limitation.html)。
+3. 若使用[推送模板](#推送模板),需在 [环信控制台](https://console.easemob.com/user/login)上激活。
4. 各推送使用的条件:
- APNs:在苹果设备上可用;
- Google FCM:设备启用了 Google Play 服务且可连接至 Google 服务器;
diff --git a/docs/document/flutter/push/push_template.md b/docs/document/flutter/push/push_template.md
new file mode 100644
index 000000000..bc36c22bc
--- /dev/null
+++ b/docs/document/flutter/push/push_template.md
@@ -0,0 +1,209 @@
+# 推送模板
+
+## 概述
+
+推送模板主要用于服务器提供的默认离线推送配置不满足你的需求时,设置全局范围的推送标题和推送内容。例如,服务器提供的默认设置为中文和英文的推送标题和内容,你若需要使用韩语或日语的推送标题和内容,则可以设置对应语言的推送模板。
+
+推送模板包括默认推送模板 `default`、`detail` 和自定义推送模板。对于群组消息,你可以使用定向模板向某些用户推送与其他用户不同的离线通知。
+
+使用推送模板有以下优势:
+
+1. 自定义修改环信服务端默认推送内容。
+
+2. 接收方可以决定使用哪个模板。
+
+3. 按优先级选择模板使用方式:
+
+ - 使用自定义推送模板的优先级高于默认推送模板。
+ - 若发送方发消息时设置了推送模板,接收方即使设置了推送模板,收到推送通知后也按照发送方设置的推送模板显示。
+
+## 开通服务
+
+推送模板是离线推送服务的高级功能,使用前应先开通该功能。**如需关闭推送模板必须联系商务,因为该操作会删除所有相关配置。**
+
+1. 登录 [环信控制台](https://console.easemob.com/user/login)。
+2. 选择页面上方的 **应用管理**。在弹出的应用列表页面,单击你的应用的 **操作** 栏中的 **管理**。
+3. 在左侧导航栏,选择 **功能配置** > **基础功能**。
+4. 在 **消息** 页面,开通消息相关配置。
+5. 在 **设置离线推送模板** 一栏点击 **免费开通** 开通该功能。
+
+ 功能开通后,你可以点击 **设置** 配置推送模板。
+
+
+
+
+
+## 设置推送模板
+
+你可以通过以下两种方式设置离线推送模板:
+
+- [调用 REST API 配置](/document/server-side/push.html#使用推送模板)。
+- 在 [环信控制台](https://console.easemob.com/user/login) 设置推送模板。
+
+推送模板相关的数据结构,详见[推送扩展字段](/document/server-side/push_extension.html)。
+
+下面为在环信控制台设置离线推送模板。
+
+### 编辑默认推送模板
+
+离线推送模板开通后,**模板管理** 页面默认添加两个模板,`default` 和 `detail`。若未配置自定义推送模板,消息推送时自动使用默认模板,创建消息时无需传入模板名称。
+
+ - `default`:默认情况下,推送标题为 **您有一条新消息**,推送内容为 **请点击查看**。
+ - `detail`:默认情况下,推送标题为 **您有一条新消息**,推送内容为为消息发送方的推送昵称和消息内容。
+
+
+
+你可以在 **操作** 栏中选择 **更多 > 编辑**,修改默认推送模板的推送标题和推送内容,模板名称不能编辑。
+
+
+
+| 参数 | 类型 | 描述 |
+| :-------------- | :----- | :----- |
+| 标题/内容 | Array | 参数的设置方式如下:
- 输入固定内容,例如,标题为 **您好**,内容为 **您有一条新消息**。
- 内置参数填充:1. `{$dynamicFrom}`:按优先级从高到底的顺序填充好友备注、群昵称(仅限群消息)和推送昵称。2. `{$fromNickname}`:推送昵称。 3. `{$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} = "加油"
+ ```
+
+ 群昵称即群成员在群组中的昵称。若要在推送通知中展示群昵称,群成员在发送群消息时可通过扩展字段设置,JSON 结构如下:
+
+```json
+ {
+ "ext":{
+ "em_push_ext":{
+ "group_user_nickname":"Jane"
+ }
+ }
+ }
+```
+
+### 添加自定义推送模板
+
+即时通讯 IM 支持添加自定义推送模板。除了 [调用 RESTful 接口](/document/server-side/push.html#创建离线推送模板) 创建自定义推送模板,你还可以在 [环信控制台](https://console.easemob.com/user/login) 添加自定义推送模板。**自定义推送模板的级别比默认模板高。**
+
+在 **模板管理** 页面,点击 **添加推送模板** 创建自定义推送模板。
+
+| 参数 | 类型 | 描述 |
+| :-------------- | :----- | :----- |
+| 模板名称 | String | 推送模板名称,最多可包含 64 个字符,支持以下字符集:
- 26 个小写英文字母 a-z
- 26 个大写英文字母 A-Z
- 10 个数字 0-9|
+| 标题/内容 | Array | 详见 [默认推送模板中的配置](#编辑默认推送模板)。 |
+
+**创建消息时需通过使用扩展字段传入模板名称、推送标题和推送内容**,通知栏中的推送标题和内容分别使用模板中的格式。详见 [消息扩展中的默认推送模板的参数](#编辑默认推送模板)。
+
+
+
+## 发消息时使用推送模板
+
+你可以在发送消息时选择推送模板。
+
+:::tip
+若使用默认模板 **default**,消息推送时自动使用默认模板,创建消息时无需传入模板名称。
+:::
+
+### 使用固定内容的推送模板
+
+使用固定内容的推送模板,通过 `ext` 扩展字段指定推送模板名称。
+
+这种情况下,创建消息时无需传入 `titleArgs` 和 `contentArgs` 参数。
+
+```dart
+ final msg = EMMessage.createTxtSendMessage(
+ targetId: 'userId',
+ content: '消息内容',
+ );
+
+ msg.attributes = {
+ // 设置推送模板名称'test7'。若不指定,设置默认推送模板的信息。
+ 'em_push_template': {'name': 'test7'},
+ };
+
+ await EMClient.getInstance.chatManager.sendMessage(msg);
+```
+
+### 使用包含内置参数的推送模板
+
+使用自定义或默认推送模板,模板中的推送标题和推送内容使用以下内置参数:
+
+- `{$dynamicFrom}`:服务器按优先级从高到底的顺序填充备注、群昵称(仅限群消息)和推送昵称。
+- `{$fromNickname}`:推送昵称。
+- `{$msg}`:消息内容。
+
+群昵称即群成员在群组中的昵称,群成员在发送群消息时通过扩展字段设置,JSON 结构如下:
+
+```json
+ {
+ "ext":{
+ "em_push_ext":{
+ "group_user_nickname":"Jane"
+ }
+ }
+ }
+```
+
+内置参数的介绍,详见 [编辑默认推送模板](#编辑默认推送模板)。
+
+这种方式的示例代码与 [使用固定内容的推送模板](#使用固定内容的推送模板)的相同。
+
+### 使用包含自定义参数的推送模板
+
+使用自定义推送模板,而且推送标题和推送内容为自定义参数:
+
+例如,推送模板的设置如下图所示:
+
+
+
+使用下面的示例代码后,通知栏中弹出的推送通知为:
+
+
+
+```dart
+ final msg = EMMessage.createTxtSendMessage(
+ targetId: 'userId',
+ content: '消息内容',
+ );
+
+ msg.attributes = {
+ 'em_push_template': {
+ // 设置推送模板名称。若不指定,设置默认推送模板的信息。
+ 'name': 'push',
+ 'title_args': ['您', '消息'],
+ 'content_args': ['请', '查看'],
+ },
+ };
+
+ await EMClient.getInstance.chatManager.sendMessage(msg);
+```
+
+## 消息接收方使用推送模板
+
+消息接收方可以调用 `setPushTemplate` 方法传入推送模板名称,选择要使用的模板。
+
+:::tip
+若发送方在发送消息时使用了推送模板,则推送通知栏中的显示内容以发送方的推送模板为准。
+:::
+
+```dart
+try {
+ await EMClient.getInstance.pushManager.setPushTemplate('Template Name');
+} on EMError catch (e) {}
+```
+
diff --git a/docs/document/flutter/push/push_translation.md b/docs/document/flutter/push/push_translation.md
index e4d3e0c0f..7d8aea8c6 100644
--- a/docs/document/flutter/push/push_translation.md
+++ b/docs/document/flutter/push/push_translation.md
@@ -2,7 +2,7 @@
推送通知与翻译功能协同工作。如果用户启用[自动翻译](/document/flutter/message_translation.html)功能并发送消息,SDK 会同时发送原始消息和翻译后的消息。
-作为接收方,你可以设置你在离线时希望接收的推送通知的首选语言。如果翻译后消息的语言匹配你的设置,则翻译后消息显示在推送通知栏;否则,将显示原始消息。翻译功能由 Microsoft Azure Translation API 提供,你可以点击[这里](https://learn.microsoft.com/zh-cn/azure/ai-services/translator/language-support)了解支持的翻译语言。
+作为接收方,你可以设置你在离线时希望接收的推送通知的首选语言。如果翻译后消息的语言匹配你的设置,则翻译后消息显示在推送通知栏;否则,将显示原始消息。翻译功能由 Microsoft Azure Translation API 提供,你可以在 [微软官网](https://learn.microsoft.com/zh-cn/azure/ai-services/translator/language-support) 了解支持的翻译语言。
以下示例代码显示如何设置和获取推送通知的首选语言:
diff --git a/docs/document/harmonyos/push/push_display.md b/docs/document/harmonyos/push/push_display.md
deleted file mode 100644
index 5964d1a3f..000000000
--- a/docs/document/harmonyos/push/push_display.md
+++ /dev/null
@@ -1,187 +0,0 @@
-# 设置推送通知的显示内容
-
-通知收到后,通知栏中显示的推送标题和内容可通过以下方式设置,配置的优先级为由低到高:
-
-- 调用 `updatePushNickname` 接口设置推送显示属性。
-- 使用推送模板。
-
-## 设置推送显示属性
-
-你可以调用 `updatePushNickname` 设置推送通知中显示的昵称,如以下代码示例所示:
-
-```typescript
-ChatClient.getInstance().pushManager()?.updatePushNickname(pushNickname).then(() => {
- // success logic
-}).catch((e: ChatError) => {
- // failure logic
-});
-```
-
-你也可以调用 `updatePushDisplayStyle` 设置推送通知的显示样式,如下代码示例所示:
-
-```typescript
-// 设置为简单样式。
-const displayStyle = PushDisplayStyle.SimpleBanner;
-ChatClient.getInstance().pushManager()?.updatePushDisplayStyle(displayStyle).then(() => {
- // success logic
-}).catch((e: ChatError) => {
- // failure logic
-})
-```
-
-| 参数设置 | 推送显示 | 图片 |
-| :--------- | :----- |:------------- |
-|
- `PushDisplayStyle`:(默认)`SimpleBanner`
- `nickname`:设置或不设置 |
- 推送标题:**您有一条新消息**
- 推送内容:**请点击查看** | |
-|
- `PushDisplayStyle`:`MessageSummary`
- `nickname`:设置具体值 |
- 推送标题:**您有一条新消息**
- 推送内容:**消息发送方的推送昵称:消息内容** | |
-|
- `PushDisplayStyle`:`MessageSummary`
- `nickname`:不设置 |
- 推送标题:**您有一条新消息**
- 推送内容:**消息发送方的 IM 用户 ID: 消息内容** | |
-
-## 使用推送模板
-
-推送模板主要用于服务器提供的默认配置不满足你的需求时,可使你设置全局范围的推送标题和推送内容。例如,服务器提供的默认设置为中文和英文的推送标题和内容,你若需要使用韩语或日语的推送标题和内容,则可以设置对应语言的推送模板。推送模板包括默认推送模板 `default` 和自定义推送模板。对于群组消息,你可以使用定向模板向某些用户推送与其他用户不同的离线通知。
-
-你可以通过以下两种方式设置:
-
-- [调用 REST API 配置](/document/server-side/push.html#使用推送模板)。
-- 在[环信即时通讯云控制台](https://console.easemob.com/user/login)设置推送模板,详见[控制台文档](/product/enable_and_configure_IM.html#配置推送模板)。
-
-使用推送模板有以下优势:
-
-1. 自定义修改环信服务端默认推送内容。
-
-2. 接收方可以决定使用哪个模板。
-
-3. 按优先级选择模板使用方式。
-
-**推送通知栏内容设置的使用优先级**
-
-通知栏中显示的推送标题和内容可通过以下方式设置,优先级为由低到高:
-
-1. 发送消息时使用默认的推送标题和内容:设置推送通知的展示方式 `PushDisplayStyle`。推送标题为“您有一条新消息”,推送内容为“请点击查看”。
-2. 发送消息时使用默认模板:若有默认模板 `default`,发消息时无需指定。
-3. 接收方设置了推送模板。
-4. 发送消息时通过消息扩展字段指定模板名称。
-
-:::tip
-1. 设置推送模板为推送的高级功能,使用前需要在[环信即时通讯控制台](https://console.easemob.com/user/login)的**即时通讯 > 功能配置 > 功能配置总览**页面激活推送高级功能。如需关闭推送高级功能必须联系商务,因为该操作会删除所有相关配置。
-
-2. 推送模板相关的数据结构,详见[推送扩展字段](/document/server-side/push_extension.html)。
-:::
-
-#### **发送消息时使用推送模板**
-
-创建模板后,你可以在发送消息时选择此推送模板,分为以下三种情况:
-
-:::tip
-若使用默认模板 **default**,消息推送时自动使用默认模板,创建消息时无需传入模板名称。
-:::
-
-1. 使用固定内容的推送模板,通过 `ext` 扩展字段指定推送模板名称。
-
-这种情况下,创建消息时无需传入 `title_args` 和 `content_args` 参数。
-
-```typescript
-// 先定义一个推送模版类
-export class PushTemplate {
- // 模版名称
- name?: string;
- // 标题自定设置部分
- title_args?: string[];
- // 内容自定设置部分
- content_args?: string[];
-}
-
-// 下面以文本消息为例,其他类型的消息设置方法相同。
-const message = ChatMessage.createTextSendMessage(conversationId, "消息内容");
-if (message) {
- // 设置推送模板名称。设置前需在环信即时通讯云管理后台或调用 REST 接口创建推送模板。
- // 若为默认模板 `default`,无需传入模板名称。
- // 若为自定义模板,需传入模板名称。
- let templateName = "自定义推送模板名称";
- // 1.6.0版本之前版本需要先将 PushTemplate 转为 JSON,例如:let pushTemplateStr = JSON.stringify(pushTemplate);
- message?.setJsonAttribute("em_push_template", {
- name: templateName
- } as PushTemplate);
- // 发送消息。
- ChatClient.getInstance().chatManager()?.sendMessage(message);
-}
-```
-
-2. 使用自定义或者默认推送模板,模板中的推送标题和推送内容使用以下内置参数:
-- `{$dynamicFrom}`:服务器按优先级从高到底的顺序填充备注、群昵称(仅限群消息)和推送昵称。
-- `{$fromNickname}`:推送昵称。
-- `{$msg}`:消息内容。
-
-群昵称即群成员在群组中的昵称,群成员在发送群消息时通过扩展字段设置,JSON 结构如下:
-
-```json
-{
- "ext":{
- "em_push_ext":{
- "group_user_nickname":"Jane"
- }
- }
-}
-```
-
-内置参数的介绍,详见[环信即时通讯控制台文档](/product/enable_and_configure_IM.html#使用默认推送模板)。
-
-这种方式的示例代码与“使用固定内容的推送模板”的相同。
-
-3. 使用自定义推送模板,而且推送标题和推送内容为自定义参数:
-
-例如,推送模板的设置如下图所示:
-
-
-
-使用下面的示例代码后,通知栏中弹出的推送通知为:
-
-您收到了一条消息
-请及时查看
-
-```typescript
-// 先定义一个推送模版类
-export class PushTemplate {
- // 模版名称
- name?: string;
- // 标题自定设置部分
- title_args?: string[];
- // 内容自定设置部分
- content_args?: string[];
-}
-
-// 下面以文本消息为例,其他类型的消息设置方法相同。
-const message = ChatMessage.createTextSendMessage(conversationId, "消息内容");
-if (message) {
- // 设置推送模板名称。设置前需在环信即时通讯云管理后台或调用 REST 接口创建推送模板。
- // 设置填写模板标题的 value 数组。
- let titleArgs = ["您","消息,"];
- // 设置填写模板内容的 value 数组。
- let contentArgs = ["请","查看"];
- let templateName = "push"; // 此处 `push` 为已在创建的推送模版名称。
- // 设置推送模板名称。若不指定,设置默认推送模板的信息。
- // 1.6.0版本之前版本需要先将 PushTemplate 转为 JSON,例如:let pushTemplateStr = JSON.stringify(pushTemplate);
- message?.setJsonAttribute("em_push_template", {
- name: templateName,
- title_args: titleArgs,
- content_args: contentArgs
- } as PushTemplate);
- // 发送消息。
- ChatClient.getInstance().chatManager()?.sendMessage(message);
-}
-```
-
-#### **消息接收方使用推送模板**
-
-消息接收方可以调用 `setPushTemplate` 方法传入推送模板名称,选择要使用的模板。
-
-:::tip
-若发送方在发送消息时使用了推送模板,则推送通知栏中的显示内容以发送方的推送模板为准。
-:::
-
-```typescript
-ChatClient.getInstance().pushManager()?.setPushTemplate("自定义模板名称").then(() => {
- // success logic
-}).catch((e: ChatError) => {
- // failure logic
-})
-```
diff --git a/docs/document/harmonyos/push/push_display_attribute.md b/docs/document/harmonyos/push/push_display_attribute.md
new file mode 100644
index 000000000..92b8db11e
--- /dev/null
+++ b/docs/document/harmonyos/push/push_display_attribute.md
@@ -0,0 +1,37 @@
+# 设置推送显示属性
+
+你可以调用 API 设置通知栏中显示的推送昵称、推送标题和推送内容。
+
+这种方式的优先级低于 [使用推送模板](push_template.html)。
+
+## 设置推送昵称
+
+你可以调用 `updatePushNickname` 设置推送通知中显示的昵称,如以下代码示例所示:
+
+```typescript
+ChatClient.getInstance().pushManager()?.updatePushNickname(pushNickname).then(() => {
+ // success logic
+}).catch((e: ChatError) => {
+ // failure logic
+});
+```
+
+## 设置推送标题和推送内容
+
+你也可以调用 `updatePushDisplayStyle` 设置推送通知栏的内容显示样式,如下代码示例所示:
+
+```typescript
+// 设置为简单样式。
+const displayStyle = PushDisplayStyle.SimpleBanner;
+ChatClient.getInstance().pushManager()?.updatePushDisplayStyle(displayStyle).then(() => {
+ // success logic
+}).catch((e: ChatError) => {
+ // failure logic
+})
+```
+
+| 参数设置 | 推送显示 | 图片 |
+| :--------- | :----- |:------------- |
+|
- `PushDisplayStyle`:(默认)`SimpleBanner`
- `nickname`:设置或不设置 |
- 推送标题:**您有一条新消息**
- 推送内容:**请点击查看** | |
+|
- `PushDisplayStyle`:`MessageSummary`
- `nickname`:设置具体值 |
- 推送标题:**您有一条新消息**
- 推送内容:**消息发送方的推送昵称:消息内容** | |
+|
- `PushDisplayStyle`:`MessageSummary`
- `nickname`:不设置 |
- 推送标题:**您有一条新消息**
- 推送内容:**消息发送方的 IM 用户 ID: 消息内容** | |
diff --git a/docs/document/harmonyos/push/push_notification_mode_dnd.md b/docs/document/harmonyos/push/push_notification_mode_dnd.md
index 21bc61953..917d2702d 100644
--- a/docs/document/harmonyos/push/push_notification_mode_dnd.md
+++ b/docs/document/harmonyos/push/push_notification_mode_dnd.md
@@ -2,10 +2,6 @@
环信即时通讯 IM 支持你可以在 app 和会话层面提供了推送通知方式和免打扰模式的细粒度选项。
-**推送通知方式和免打扰模式为推送的高级功能**,若要设置,你需要在 [环信即时通讯控制台](https://console.easemob.com/user/login)的**即时通讯 > 功能配置 > 功能配置总览**页面激活推送高级功能。如需关闭推送高级功能必须联系商务,因为该操作会删除所有相关配置。
-
-
-
## 推送通知方式
推送通知方式 `PushRemindType` 包含三种类型,如下表所示。其中,会话级别的 `PushRemindType` 设置优先于 app 级别的设置,未设置推送通知方式的会话默认采用 app 的设置。例如,假设 app 的推送方式设置为 `MENTION_ONLY`,而指定会话的推送方式设置为 `ALL`。你会收到来自该会话的所有推送通知,而对于其他会话来说,你只会收到提及你的消息的推送通知。
@@ -104,7 +100,8 @@ ChatClient.getInstance().addMultiDevicesListener(multiDevicesListener);
完成 SDK 初始化和成功登录 app 后,你可以对 app 以及各类型的会话开启离线推送功能以及通过设置免打扰模式关闭推送。
-你可以在 app 级别指定免打扰时间段和免打扰时长,环信 IM 在这两个时间段内不发送离线推送通知。若既设置了免打扰时间段,又设置了免打扰时长,免打扰模式的生效时间为这两个时间段的累加。
+- 你可以通过 `SILENT_MODE_INTERVAL` 参数开启全天免打扰和关闭免打扰模式:若开始时间和结束时间相同,免打扰模式则全天生效;若设置为 `0:00`-`0:00`,则关闭免打扰模式。
+- 你可以在 app 级别指定免打扰时间段和免打扰时长,环信 IM 在这两个时间段内不发送离线推送通知。若既设置了免打扰时间段,又设置了免打扰时长,免打扰模式的生效时间为这两个时间段的累加。
免打扰时间参数的说明如下表所示:
diff --git a/docs/document/harmonyos/push/push_overview.md b/docs/document/harmonyos/push/push_overview.md
index d80687cec..a727dd124 100644
--- a/docs/document/harmonyos/push/push_overview.md
+++ b/docs/document/harmonyos/push/push_overview.md
@@ -4,13 +4,13 @@
即时通讯 IM 支持集成第三方消息推送服务,为 HarmonyOS 开发者提供低延时、高送达、高并发、不侵犯用户个人数据的离线消息推送服务。
-要体验离线推送功能,请点击[这里](https://www.easemob.com/download/demo)下载即时推送 IM 的 demo。
+要体验离线推送功能,请在 [环信官网](https://www.easemob.com/download/demo) 下载即时通讯 IM 的 demo。
## 离线推送过程
客户端断开连接或应用进程被关闭等原因导致用户离线时,即时通讯 IM 会通过第三方消息推送服务向该离线用户的设备推送消息通知。当用户再次上线时,服务器会将离线期间的消息发送给用户(这里角标表示的是离线消息数,并不是实际的未读消息数)。例如,当你离线时,有用户向你发送了消息,你的手机的通知中心会弹出消息通知,当你再次打开 app 并登录成功,即时通讯 IM SDK 会主动拉取你不在线时的消息。
-除了满足用户离线条件外,要使用 HarmonyOS 离线推送,用户还需在[环信即时通讯云控制台](https://console.easemob.com/user/login)配置推送证书信息,并调用客户端 SDK 提供的 API 向环信服务器上传 device token。
+除了满足用户离线条件外,要使用 HarmonyOS 离线推送,用户还需在[环信控制台](https://console.easemob.com/user/login)配置推送证书信息,并调用客户端 SDK 提供的 API 向环信服务器上传 device token。
**以下两种情况,即时通讯 IM 不会发送离线推送通知:**
@@ -18,22 +18,7 @@
2. 应用在后台运行或手机锁屏等情况,若客户端未断开与服务器的连接,则即时通讯 IM 不会收到离线推送通知。
-## 离线推送高级功能
-
-如果需要离线推送的高级功能,需在[环信即时通讯控制台](https://console.easemob.com/user/login)的**即时通讯 > 功能配置 > 功能配置总览**页面激活。高级功能包括[推送通知方式](push_notification_mode_dnd.html#推送通知方式)、[免打扰模式](push_notification_mode_dnd.html#免打扰模式)和[推送模板](push_display.html#使用推送模板)。**如需关闭推送高级功能必须联系商务,因为该操作会删除所有相关配置。**
-
-## 多设备离线推送策略
-
-多设备登录时,可在[环信即时通讯控制台](https://console.easemob.com/user/login)的**证书管理**页面配置推送策略,该策略配置对所有推送通道生效:
-
-- 所有设备离线时,才发送推送消息;
-- 任一设备离线时,都发送推送消息。
-
-**注意**:多端登录时若有设备被踢下线,即使接入了 IM 离线推送,也收不到离线推送消息。
-
-
-
-## 技术原理
+## 推送原理

@@ -47,12 +32,29 @@
6. 环信服务器将将消息发送给华为 Auth 服务端。
7. 华为 Auth 服务端将消息发送给用户 B。
+## 推送模板
+
+推送模板是离线推送的高级功能。使用前,你需要在 [环信控制台](https://console.easemob.com/user/login)的 **功能配置 > 基础功能 > 消息** 页面激活。**激活后,如需关闭推送模板功能,必须联系商务,因为该操作会删除推送模板相关的所有配置。**
+
+推送模板的配置和使用,详见 [相关文档介绍](push_template.html)。
+
+## 多设备离线推送策略
+
+多设备登录时,可在 [环信控制台](https://console.easemob.com/user/login)的 **证书管理** 页面配置推送策略,该策略配置对所有推送通道生效:
+
+- 所有设备离线时,才发送推送消息;
+- 任一设备离线时,都发送推送消息。
+
+**多端登录时若有设备被踢下线,即使接入了 IM 离线推送,也收不到离线推送消息。**
+
+
+
## 前提条件
-- 已开启环信即时通讯服务,详见 [开启和配置即时通讯服务](/product/enable_and_configure_IM.html)。
+- 已开启环信即时通讯服务,详见 [开启和配置即时通讯服务](/product/console/app_create.html)。
- 了解环信即时通讯 IM 的使用限制,详见 [使用限制](/product/limitation.html)。
- 确保已经在 [AppGallery Connect](https://developer.huawei.com/consumer/cn/service/josp/agc/index.html) 网站开通开通推送服务。
-- 检查并提醒用户允许接收通知消息,并将设备的推送证书上传到[环信即时通讯云控制台](https://console.easemob.com/user/login)。
-- 若使用[推送高级功能](#离线推送高级功能),需在[环信即时通讯控制台](https://console.easemob.com/user/login)上激活。
+- 检查并提醒用户允许接收通知消息,并将设备的推送证书上传到[环信控制台](https://console.easemob.com/user/login)。
+- 若使用[推送模板](#推送模板),需在[环信控制台](https://console.easemob.com/user/login)上激活。
diff --git a/docs/document/harmonyos/push/push_template.md b/docs/document/harmonyos/push/push_template.md
new file mode 100644
index 000000000..cd84c53a3
--- /dev/null
+++ b/docs/document/harmonyos/push/push_template.md
@@ -0,0 +1,234 @@
+# 推送模板
+
+## 概述
+
+推送模板主要用于服务器提供的默认离线推送配置不满足你的需求时,设置全局范围的推送标题和推送内容。例如,服务器提供的默认设置为中文和英文的推送标题和内容,你若需要使用韩语或日语的推送标题和内容,则可以设置对应语言的推送模板。
+推送模板包括默认推送模板 `default`、`detail` 和自定义推送模板。
+
+推送模板的特点如下:
+1. 推送模板的优先级高于 [调用 API 设置通知栏的推送内容](push_display_attribute.html)。
+2. 实现自定义修改环信服务端默认推送内容。
+3. 对于群组消息,你可以使用定向模板向某些用户推送与其他用户不同的离线通知。
+4. 接收方可以决定使用哪个模板。
+5. 按优先级选择模板使用方式:
+ - 使用自定义推送模板的优先级高于默认推送模板。
+ - 若发送方发消息时设置了推送模板,接收方即使设置了推送模板,收到推送通知后也按照发送方设置的推送模板显示。
+
+## 开通服务
+
+推送模板是离线推送服务的高级功能,使用前应先开通该功能。**如需关闭推送模板必须联系商务,因为该操作会删除所有相关配置。**
+
+1. 登录 [环信控制台](https://console.easemob.com/user/login)。
+2. 选择页面上方的 **应用管理**。在弹出的应用列表页面,单击你的应用的 **操作** 栏中的 **管理**。
+3. 在左侧导航栏,选择 **功能配置** > **基础功能**。
+4. 在 **消息** 页面,开通消息相关配置。
+5. 在 **设置离线推送模板** 一栏点击 **免费开通** 开通该功能。
+
+ 功能开通后,你可以点击 **设置** 配置推送模板。
+
+
+
+
+
+## 设置推送模板
+
+你可以通过以下两种方式设置离线推送模板:
+
+- [调用 REST API 配置](/document/server-side/push.html#使用推送模板)。
+- 在 [环信控制台](https://console.easemob.com/user/login) 设置推送模板。
+
+推送模板相关的数据结构,详见 [推送扩展字段](/document/server-side/push_extension.html)。
+
+本节介绍在环信控制台设置离线推送模板。
+
+### 编辑默认推送模板
+
+离线推送模板开通后,**模板管理** 页面默认添加两个模板,`default` 和 `detail`。若未配置自定义推送模板,消息推送时自动使用默认模板,创建消息时无需传入模板名称。
+
+ - `default`:默认情况下,推送标题为 **您有一条新消息**,推送内容为 **请点击查看**。
+ - `detail`:默认情况下,推送标题为 **您有一条新消息**,推送内容为为消息发送方的推送昵称和消息内容。
+
+
+
+你可以在 **操作** 栏中选择 **更多 > 编辑**,修改默认推送模板的推送标题和推送内容,模板名称不能编辑。
+
+
+
+| 参数 | 类型 | 描述 |
+| :-------------- | :----- | :----- |
+| 标题/内容 | Array | 参数的设置方式如下:
- 输入固定内容,例如,标题为 **您好**,内容为 **您有一条新消息**。
- 内置参数填充:1. `{$dynamicFrom}`:按优先级从高到底的顺序填充好友备注、群昵称(仅限群消息)和推送昵称。2. `{$fromNickname}`:推送昵称。 3. `{$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} = "加油"
+ ```
+
+ 群昵称即群成员在群组中的昵称。若要在推送通知中展示群昵称,群成员在发送群消息时可通过扩展字段设置,JSON 结构如下:
+
+```json
+ {
+ "ext":{
+ "em_push_ext":{
+ "group_user_nickname":"Jane"
+ }
+ }
+ }
+```
+
+### 添加自定义推送模板
+
+即时通讯 IM 支持添加自定义推送模板。除了 [调用 RESTful 接口](/document/server-side/push.html#创建离线推送模板) 创建自定义推送模板,你还可以在 [环信控制台](https://console.easemob.com/user/login) 添加自定义推送模板。**自定义推送模板的级别比默认模板高。**
+
+在 **模板管理** 页面,点击 **添加推送模板** 创建自定义推送模板。
+
+| 参数 | 类型 | 描述 |
+| :-------------- | :----- | :----- |
+| 模板名称 | String | 推送模板名称,最多可包含 64 个字符,支持以下字符集:
- 26 个小写英文字母 a-z
- 26 个大写英文字母 A-Z
- 10 个数字 0-9|
+| 标题/内容 | Array | 详见 [默认推送模板中的配置](#编辑默认推送模板)。 |
+
+**创建消息时需通过使用扩展字段传入模板名称、推送标题和推送内容**,通知栏中的推送标题和内容分别使用模板中的格式。详见 [消息扩展中的默认推送模板的参数](#编辑默认推送模板)。
+
+
+
+## 发送消息时使用推送模板
+
+你可以在发送消息时选择推送模板。
+
+:::tip
+若使用默认模板 **default**,消息推送时自动使用默认模板,创建消息时无需传入模板名称。
+:::
+
+### 使用固定内容的推送模板
+
+使用固定内容的推送模板,通过 `ext` 扩展字段指定推送模板名称。
+
+这种情况下,创建消息时无需传入 `title_args` 和 `content_args` 参数。
+
+```typescript
+// 先定义一个推送模版类
+export class PushTemplate {
+ // 模版名称
+ name?: string;
+ // 标题自定设置部分
+ title_args?: string[];
+ // 内容自定设置部分
+ content_args?: string[];
+}
+
+// 下面以文本消息为例,其他类型的消息设置方法相同。
+const message = ChatMessage.createTextSendMessage(conversationId, "消息内容");
+if (message) {
+ // 设置推送模板名称。设置前需在环信即时通讯云管理后台或调用 REST 接口创建推送模板。
+ // 若为默认模板 `default`,无需传入模板名称。
+ // 若为自定义模板,需传入模板名称。
+ let templateName = "自定义推送模板名称";
+ // 1.6.0版本之前版本需要先将 PushTemplate 转为 JSON,例如:let pushTemplateStr = JSON.stringify(pushTemplate);
+ message?.setJsonAttribute("em_push_template", {
+ name: templateName
+ } as PushTemplate);
+ // 发送消息。
+ ChatClient.getInstance().chatManager()?.sendMessage(message);
+}
+```
+
+### 使用包含内置参数的推送模板
+
+使用自定义或者默认推送模板,模板中的推送标题和推送内容使用以下内置参数:
+- `{$dynamicFrom}`:服务器按优先级从高到底的顺序填充备注、群昵称(仅限群消息)和推送昵称。
+- `{$fromNickname}`:推送昵称。
+- `{$msg}`:消息内容。
+
+群昵称即群成员在群组中的昵称,群成员在发送群消息时通过扩展字段设置,JSON 结构如下:
+
+```json
+{
+ "ext":{
+ "em_push_ext":{
+ "group_user_nickname":"Jane"
+ }
+ }
+}
+```
+
+内置参数的介绍,详见 [编辑默认推送模板](#编辑默认推送模板)。
+
+这种方式的示例代码与 [使用固定内容的推送模板](#使用固定内容的推送模板)的相同。
+
+### 使用包含自定义参数的推送模板
+
+使用自定义推送模板,而且推送标题和推送内容为自定义参数:
+
+例如,推送模板的设置如下图所示:
+
+
+
+使用下面的示例代码后,通知栏中弹出的推送通知为:
+
+您收到了一条消息
+请及时查看
+
+```typescript
+// 先定义一个推送模版类
+export class PushTemplate {
+ // 模版名称
+ name?: string;
+ // 标题自定设置部分
+ title_args?: string[];
+ // 内容自定设置部分
+ content_args?: string[];
+}
+
+// 下面以文本消息为例,其他类型的消息设置方法相同。
+const message = ChatMessage.createTextSendMessage(conversationId, "消息内容");
+if (message) {
+ // 设置推送模板名称。设置前需在环信即时通讯云管理后台或调用 REST 接口创建推送模板。
+ // 设置填写模板标题的 value 数组。
+ let titleArgs = ["您","消息,"];
+ // 设置填写模板内容的 value 数组。
+ let contentArgs = ["请","查看"];
+ let templateName = "push"; // 此处 `push` 为已在创建的推送模版名称。
+ // 设置推送模板名称。若不指定,设置默认推送模板的信息。
+ // 1.6.0版本之前版本需要先将 PushTemplate 转为 JSON,例如:let pushTemplateStr = JSON.stringify(pushTemplate);
+ message?.setJsonAttribute("em_push_template", {
+ name: templateName,
+ title_args: titleArgs,
+ content_args: contentArgs
+ } as PushTemplate);
+ // 发送消息。
+ ChatClient.getInstance().chatManager()?.sendMessage(message);
+}
+```
+
+## 消息接收方使用推送模板
+
+消息接收方可以调用 `setPushTemplate` 方法传入推送模板名称,选择要使用的模板。
+
+:::tip
+若发送方在发送消息时使用了推送模板,则推送通知栏中的显示内容以发送方的推送模板为准。
+:::
+
+```typescript
+ChatClient.getInstance().pushManager()?.setPushTemplate("自定义模板名称").then(() => {
+ // success logic
+}).catch((e: ChatError) => {
+ // failure logic
+})
+```
diff --git a/docs/document/ios/push/push_apns.md b/docs/document/ios/push/push_apns.md
index 3bf735954..36df1fca1 100644
--- a/docs/document/ios/push/push_apns.md
+++ b/docs/document/ios/push/push_apns.md
@@ -48,7 +48,7 @@

-### **步骤三 创建 app 的 APS 证书**
+### **步骤三 创建 app 的 APNs 证书**
1. 返回到 App IDs 选择你需要推送的 app。
@@ -110,28 +110,25 @@
## **上传推送证书**
-在[环信即时通讯云控制台](https://console.easemob.com/user/login)上传 APNs 推送证书。
+在[环信控制台](https://console.easemob.com/user/login)上传 APNs 推送证书。
-1. 在[环信即时通讯云控制台](https://console.easemob.com/user/login)首页的**应用列表**中,点击目标应用的**操作**栏中的**管理**。
-
-2. 在左侧导航栏中,选择**即时通讯** > **功能配置** > **消息推送** > **证书管理**,点击**添加推送证书**。
-
-3. 在**添加推送证书**对话框中选择**苹果**页签,配置 APNs 推送参数。
+1. 登录 [环信控制台](https://console.easemob.com/user/login),选择你的应用 > **功能配置** > **增值功能** > **即时推送**。
+
+2. 在 **证书管理** 页面,点击 **添加推送证书**。在 **添加推送证书** 对话框中选择 **苹果**页签,配置 APNs 推送参数。
-
+
| 参数 | 类型 | 是否必需 | 描述 |
| :--------- | :----- | :------- | :----------------------- |
-| **证书类型** | | 是 | 消息推送证书类型,目前支持 **p8** 和 **p12**。 |
-| **证书名称** | String | 是 | 消息推送证书名称。[创建推送证书](#在苹果开发者平台创建推送证书)的[步骤四](#步骤四-生成推送证书)中创建的消息推送证书名称。 |
-| **推送密钥** | String | 是 | 消息推送证书密钥。填写在[创建推送证书](#在苹果开发者平台创建推送证书)的[步骤四](#步骤四-生成推送证书)中导出消息推送证书文件时设置的证书密钥。该参数仅在使用 p12 证书时需要配置。 |
-| **上传文件** | File | 是 | 点击 **上传证书** 上传[创建推送证书](#在苹果开发者平台创建推送证书)的[步骤四](#步骤四-生成推送证书)中获取的消息推送证书文件。 |
-| **key id** | String | 是 | 输入推送证书的 Key ID。该参数仅在使用 p8 证书时需要配置。 |
-| **team id** | String | 是 | 输入推送证书的 Team ID。该参数仅在使用 p8 证书时需要配置。 |
-| **集成环境** | | 是 | 集成环境:
- **Development**:开发环境;
- **Production**:生产环境。 |
-| **Bundle ID** | String | 是 | 绑定 ID。[创建推送证书](#在苹果开发者平台创建推送证书)的[步骤二](#步骤二-创建-app-id)中创建 App ID 时设置的 Bundle ID。
- 上传 VoIP 服务证书时,Bundle ID 末尾需要加 .voip 后缀
-`nvyvtp.dabaoiian`,例如,**Bundle ID** 为 **com.example.demo**,上传对应 VoIP 证书时需要填写 **com.example.demo.voip**。|
-| **铃声** | String | 否 | 接收方收到推送通知时的铃声提醒。 |
+| 证书类型 | | 是 | 消息推送证书类型,目前支持 **p8** 和 **p12**。 |
+| 证书名称 | String | 是 | 消息推送证书名称。详见 APNs 集成文档中 [创建推送证书](/document/ios/push/push_apns.html#创建推送证书) 的 [步骤四](/document/ios/push/push_apns.html#步骤四-生成推送证书) 中创建的消息推送证书名称。 |
+| 推送密钥 | String | 否 | 消息推送证书密钥。填写在 [创建推送证书](/document/ios/push/push_apns.html#创建推送证书)的 [步骤四](/document/ios/push/push_apns.html#步骤四-生成推送证书) 中导出消息推送证书文件时设置的证书密钥。该参数仅在使用 p12 证书时需要配置。 |
+| 上传文件 | File | 是 | 点击 **上传证书** 上传推送证书文件。详见 APNs 集成文档中 [创建推送证书](/document/ios/push/push_apns.html#创建推送证书)的 [步骤四](/document/ios/push/push_apns.html#步骤四-生成推送证书) 中获取的消息推送证书文件。 |
+| key id | String | 是 | 输入推送证书的 Key ID。该参数仅对 p8 证书有效。 |
+| team id | String | 是 | 输入推送证书的 Team ID。该参数仅对 p8 证书有效。 |
+| 集成环境 | | 是 | 集成环境,包括开发环境和生产环境。 |
+| Bundle ID | String | 是 | 绑定 ID。详见 APNs 集成文档中 [创建推送证书](/document/ios/push/push_apns.html#创建推送证书)的 [步骤二](/document/ios/push/push_apns.html#步骤二-创建-app-id) 中创建 App ID 时设置的 Bundle ID。
- 上传 VoIP 服务证书时,Bundle ID 末尾需要加 .voip 后缀 `nvyvtp.dabaoiian`,例如,**Bundle ID** 为 **com.example.demo**,上传对应 VoIP 证书时需要填写 **com.example.demo.voip**。|
+| 铃声 | String | 否 | 接收方收到推送通知时的铃声提醒,该参数仅对离线推送有效:
- 设置的铃声最多为 30 秒。若超过该时间,系统会启用默认铃声 default。
- 铃声文件只支持 aiff、wav 和 caf 格式,例如铃声命名 test.caf。
- 铃声文件必须放在 app 的 /Library/Sounds 目录中。
- 如果铃声文件未找到,或不填,响铃为系统默认铃声。 |
## **在客户端集成 APNs**
@@ -194,16 +191,16 @@ DeviceToken 注册后,iOS 系统会通过以下方式将 DeviceToken 回调给
1. 在设备上登录应用,并确认 device token 绑定成功。
- 可以查看日志或调用[获取用户详情的 RESTful 接口](/document/server-side/account_system.html#获取单个用户的详情)确认 device token 是否绑定成功。
+ 可以查看日志或调用 [获取用户详情的 RESTful 接口](/document/server-side/account_system.html#获取单个用户的详情)确认 device token 是否绑定成功。
2. 杀掉应用进程。
-3. 在[环信即时通讯控制台](https://console.easemob.com/user/login)发送测试消息。
+3. 在[环信控制台](https://console.easemob.com/user/login)发送测试消息。
- 在左侧导航栏中选择 **即时通讯** > **运营服务** > **用户管理**。在**用户管理**页面中,在对应用户 ID 的**操作**栏中点击**更多**,然后选择**发送rest消息**。在弹出的对话框中选择消息类型,输入消息内容,然后点击**发送**。
+ 在左侧导航栏中选择 **运营管理** > **运营操作** > **用户管理**。在 **用户管理** 页面中,在对应用户 ID 的 **操作** 栏中点击 **更多**,然后选择 **发送rest消息**。在弹出的对话框中选择消息类型,输入消息内容,然后点击**发送**。
:::tip
- 在**证书管理**页面中证书列表中,在每个证书的**操作**一栏中,点击 **更多** > **测试**,这里是直接调用第三方接口推送,而**用户管理**页面中的消息发送测试是先调用即时通讯 IM 的发消息的接口,满足条件后(即用户离线、推送证书有效且绑定了 device token)再调第三方的接口进行推送。
+ 在 **证书管理** 页面中证书列表中,在每个证书的**操作**一栏中,点击 **更多** > **测试**,这里是直接调用第三方接口推送,而 **用户管理** 页面中的消息发送测试是先调用即时通讯 IM 的发消息的接口,满足条件后(即用户离线、推送证书有效且绑定了 device token)再调第三方的接口进行推送。
:::
1. 查看设备是否收到推送通知。
@@ -212,9 +209,9 @@ DeviceToken 注册后,iOS 系统会通过以下方式将 DeviceToken 回调给
1. 检查在即时通讯 IM 中是否正确集成或启用了 APNs 推送。
- 在左侧导航栏中选择**运营服务** > **用户管理**。在**用户管理**页面中,在对应用户 ID 的**操作**栏中选择**查看IM用户绑定推送证书**。在弹出框中查看是否正确显示了证书名称和 device token。
+ 在左侧导航栏中选择 **运营管理** > **运营操作** > **用户管理**。在 **用户管理** 页面中,在对应用户 ID 的**操作** 栏中选择 **查看IM用户绑定推送证书**。在弹出框中查看是否正确显示了证书名称和 device token。
-2. 检查是否在[环信即时通讯控制台](https://console.easemob.com/user/login)上传了正确的 APNs 证书且设置了正确的证书环境。
+2. 检查是否在 [环信控制台](https://console.easemob.com/user/login) 上传了正确的 APNs 证书且设置了正确的证书环境。
3. 检查是否在聊天室中推送消息。聊天室不支持离线消息推送。
diff --git a/docs/document/ios/push/push_display.md b/docs/document/ios/push/push_display.md
deleted file mode 100644
index 8036bbf96..000000000
--- a/docs/document/ios/push/push_display.md
+++ /dev/null
@@ -1,250 +0,0 @@
-# 设置推送通知的显示内容
-
-通知收到后,通知栏中显示的推送标题和内容可通过以下方式设置,配置的优先级为由低到高:
-
-1. **设置推送通知的显示属性**:使用默认的推送标题和内容,即推送通知的展示方式 `DisplayStyle` 采用默认的值(`EMPushDisplayStyleSimpleBanner`)。推送标题为**您有一条新消息**,推送内容为**请点击查看**。
-2. **使用默认推送模板**:若有默认模板 `default`,发消息时无需指定。
-3. **使用消息扩展字段**:使用扩展字段自定义要显示的推送标题和推送内容,即 `em_push_title` 和 `em_push_content`。
-4. **接收方设置了推送模板**。
-5. **使用自定义推送模板**:发送消息时通过消息扩展字段指定推送模板名称。
-
-## 设置和获取推送通知的显示属性
-
-### 设置推送通知的显示属性
-
-你可以调用 `updatePushDisplayName` 设置推送通知中显示的昵称,如以下代码示例所示:
-
-```objectivec
-// 异步方法
-[EMClient.sharedClient.pushManager updatePushDisplayName:@"displayName" completion:^(NSString * aDisplayName, EMError * aError) {
- if (aError) {
- NSLog(@"update push display name error: %@", aError.errorDescription);
- }
-}];
-```
-
-你也可以调用 `updatePushDisplayStyle` 设置推送通知的显示样式,如下代码示例所示:
-
-```objectivec
-// 异步方法
-[EMClient.sharedClient.pushManager updatePushDisplayStyle:EMPushDisplayStyleSimpleBanner completion:^(EMError * aError)
-{
- if (aError) {
- NSLog(@"update display style error --- %@", aError.errorDescription);
- }
-}];
-```
-
-若要在通知栏中显示消息内容,需要设置通知显示样式 `DisplayStyle`。`DisplayStyle` 是枚举类型,有如下两种设置:
-
-| 参数值 | 描述 |
-| :--------------- | :---------------------- |
-| (默认)`EMPushDisplayStyleSimpleBanner` | 不论 `displayName` 是否设置,对于推送任何类型的消息,通知栏采用默认显示设置,即推送标题为**您有一条新消息**,推送内容为**请点击查看**。 |
-| `EMPushDisplayStyleMessageSummary` | `EMPushDisplayStyleMessageSummary`:显示消息内容。设置的昵称只在 `DisplayStyle` 为 `EMPushDisplayStyleMessageSummary` 时生效,在 `EMPushDisplayStyleSimpleBanner` 时不生效。 |
-
-下表以**单聊文本消息**为例介绍显示属性的设置。
-
-对于**群聊**,下表中的**消息发送方的推送昵称**和**消息发送方的 IM 用户 ID**显示为**群组 ID**。
-
-| 参数设置 | 推送显示 | 图片 |
-| :--------- | :----- |:------------- |
-|
- `DisplayStyle`:(默认)`EMPushDisplayStyleSimpleBanner`
- `displayName`:设置或不设置 |
- 推送标题:**您有一条新消息**
- 推送内容:**请点击查看** |  |
-|
- `DisplayStyle`:`EMPushDisplayStyleMessageSummary`
- `displayName`:设置具体值 |
- 推送标题:**您有一条新消息**
- 推送内容:**消息发送方的推送昵称:消息内容** | |
-|
- `DisplayStyle`:`EMPushDisplayStyleMessageSummary`
- `displayName`:不设置 |
- 推送标题:**您有一条新消息**
- 推送内容:**消息发送方的 IM 用户 ID: 消息内容** |  |
-
-### 获取推送通知的显示属性
-
-你可以调用 `getPushNotificationOptionsFromServerWithCompletion` 方法获取推送通知中的显示属性,如以下代码示例所示:
-
-```objectivec
-// 异步方法
-[EMClient.sharedClient.pushManager getPushNotificationOptionsFromServerWithCompletion:^(EMPushOptions * aOptions, EMError * aError)
-{
- if (aError) {
- NSLog(@"get push options error --- %@", aError.errorDescription);
- }
-}];
-```
-
-`EMPushOptions` 推送配置对象。
-
-| 属性名 | 描述 |
-| :------------------- | :----------------------------------------------------------- |
-| `displayName` | 对方收到推送时发送方展示的名称。 |
-| `displayStyle` | 推送显示类型。 |
-
-## 使用推送模板
-
-推送模板主要用于服务器提供的默认配置不满足你的需求时,可使你设置全局范围的推送标题和推送内容。例如,服务器提供的默认设置为中文和英文的推送标题和内容,你若需要使用韩语或日语的推送标题和内容,则可以设置对应语言的推送模板。推送模板包括默认推送模板 `default` 和自定义推送模板。对于群组消息,你可以使用定向模板向某些用户推送与其他用户不同的离线通知。
-
-你可以通过以下两种方式设置:
-
-- [调用 REST API 配置](/document/server-side/push.html#使用推送模板)。
-- 在[环信即时通讯云控制台](https://console.easemob.com/user/login)设置推送模板,详见[控制台文档](/product/enable_and_configure_IM.html#配置推送模板)。
-
-使用推送模板有以下优势:
-
-1. 自定义修改环信服务端默认推送内容。
-
-2. 接收方可以决定使用哪个模板。
-
-3. 按优先级选择模板使用方式:
-
- - 使用自定义推送模板的优先级高于默认推送模板。
-
- - 若发送方发消息时设置了推送模板,接收方即使设置了推送模板,收到推送通知后也按照发送方设置的推送模板显示。
-
-:::tip
-1. 设置推送模板为推送的高级功能,使用前需要在[环信即时通讯控制台](https://console.easemob.com/user/login)的**即时通讯 > 功能配置 > 功能配置总览**页面激活推送高级功能。如需关闭推送高级功能必须联系商务,因为该操作会删除所有相关配置。
-
-2. 推送模板相关的数据结构,详见[推送扩展字段](/document/server-side/push_extension.html)。
-:::
-
-### 发送消息时使用推送模板
-
-创建模板后,你可以在发送消息时选择此推送模板,分为以下三种情况:
-
-:::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}`:消息内容。
-
-群昵称即群成员在群组中的昵称,群成员在发送群消息时通过扩展字段设置,JSON 结构如下:
-
-```json
- {
- "ext":{
- "em_push_ext":{
- "group_user_nickname":"Jane"
- }
- }
- }
-```
-
-内置参数的介绍,详见[环信即时通讯控制台文档](/product/enable_and_configure_IM.html#使用默认推送模板)。
-
-这种方式的示例代码与“使用固定内容的推送模板”的相同。
-
-3. 使用自定义推送模板,而且推送标题和推送内容为自定义参数:
-
-例如,推送模板的设置如下图所示:
-
-
-
-使用下面的示例代码后,通知栏中弹出的推送通知为:
-
-
-
-```objectivec
-//下面以文本消息为例,其他类型的消息设置方法相同。
-EMTextMessageBody *body = [[EMTextMessageBody alloc]initWithText:@"test"];
-EMChatMessage *message = [[EMChatMessage alloc]initWithConversationID:@"conversationId" from:@"currentUsername" to:@"conversationId" body:body ext:nil];
-//设置推送模板。设置前需在环信即时通讯云管理后台上创建推送模板。
-NSDictionary *pushObject = @{
- //设置推送模板名称。若不指定,设置默认推送模板的信息。
- //设置前需在环信即时通讯云管理后台或调用 REST 接口创建推送模板。
- @"name":@"templateName",
- @"title_args":@[@"您",@"消息"],//设置填写模板标题的 value 数组。
- @"content_args":@[@"请",@"查看"]//设置填写模板内容的 value 数组。
-};
-message.ext = @{
- @"em_push_template":pushObject,
-};
-message.chatType = EMChatTypeChat;
-[[EMClient sharedClient].chatManager sendMessage:message progress:nil completion:nil];
-```
-
-### 消息接收方使用推送模板
-
-消息接收方可以调用 `setPushTemplate` 方法传入推送模板名称,选择要使用的模板。
-
-:::tip
-若发送方在发送消息时使用了推送模板,则推送通知栏中的显示内容以发送方的推送模板为准。
-:::
-
-```objectivec
-[EMClient.sharedClient.pushManager setPushTemplate:@"templateName" completion:^(EMError * _Nullable aError) {
-
-}];
-```
-
-## 使用消息扩展字段设置推送通知显示内容
-
-创建推送消息时,你可以设置消息扩展字段自定义要显示的推送标题 `em_push_title` 和推送内容 `em_push_content`。
-
-```objectivec
-EMTextMessageBody *body = [[EMTextMessageBody alloc] initWithText:@"test"];
-EMChatMessage *message = [[EMChatMessage alloc] initWithConversationID:conversationId from:currentUsername to:conversationId body:body ext:nil];
-message.ext = @{@"em_apns_ext":@{
- @"em_push_title": @"customTitle",
- @"em_alert_subTitle": @"customSubTitle",
- @"em_push_content": @"customContent"
-}};
-
-message.chatType = EMChatTypeChat;
-[EMClient.sharedClient.chatManager sendMessage:message progress:nil completion:nil];
-```
-
-| 参数 | 描述 |
-| :-------------------- | :----------------------------------------------------------- |
-| `body` | 消息体。 |
-| `ConversationID` | 消息所属的会话 ID。 |
-| `from` | 消息发送方,一般为当前登录 ID。 |
-| `to` | 消息接收方 ID,一般与 `ConversationID` 一致。 |
-| `em_apns_ext` | 消息扩展,使用扩展的方式向推送中添加自定义字段,该值为固定值,不可修改。 |
-| `em_push_title` | 推送通知的自定义标题。 |
-| `em_alert_subTitle` | 推送通知的自定义副标题。 |
-| `em_push_content` | 推送通知展示的自定义内容。 |
-
-**解析的内容**
-
-```json
-{
- "aps":{
- "alert":{
- "body":"custom push content"
- },
- "badge":1,
- "sound":"default"
- },
- "f":"6001",
- "t":"6006",
- "m":"373360335316321408",
-}
-```
-
-| 参数 | 描述 |
-| :------ | :-------------- |
-| `body` | 显示内容。 |
-| `badge` | 角标数。 |
-| `sound` | 提示铃声。 |
-| `f` | 消息发送方 ID。 |
-| `t` | 消息接收方 ID。 |
-| `m` | 消息 ID。 |
-
-
diff --git a/docs/document/ios/push/push_display_attribute.md b/docs/document/ios/push/push_display_attribute.md
new file mode 100644
index 000000000..2b23c9b4a
--- /dev/null
+++ b/docs/document/ios/push/push_display_attribute.md
@@ -0,0 +1,65 @@
+# 设置和获取推送通知的显示属性
+
+## 设置推送通知的显示属性
+
+你可以调用 `updatePushDisplayName` 设置推送通知中显示的昵称,如以下代码示例所示:
+
+```objectivec
+// 异步方法
+[EMClient.sharedClient.pushManager updatePushDisplayName:@"displayName" completion:^(NSString * aDisplayName, EMError * aError) {
+ if (aError) {
+ NSLog(@"update push display name error: %@", aError.errorDescription);
+ }
+}];
+```
+
+你也可以调用 `updatePushDisplayStyle` 设置推送通知的显示样式,如下代码示例所示:
+
+```objectivec
+// 异步方法
+[EMClient.sharedClient.pushManager updatePushDisplayStyle:EMPushDisplayStyleSimpleBanner completion:^(EMError * aError)
+{
+ if (aError) {
+ NSLog(@"update display style error --- %@", aError.errorDescription);
+ }
+}];
+```
+
+若要在通知栏中显示消息内容,需要设置通知显示样式 `DisplayStyle`。`DisplayStyle` 是枚举类型,有如下两种设置:
+
+| 参数值 | 描述 |
+| :--------------- | :---------------------- |
+| (默认)`EMPushDisplayStyleSimpleBanner` | 不论 `displayName` 是否设置,对于推送任何类型的消息,通知栏采用默认显示设置,即推送标题为**您有一条新消息**,推送内容为**请点击查看**。 |
+| `EMPushDisplayStyleMessageSummary` | `EMPushDisplayStyleMessageSummary`:显示消息内容。设置的昵称只在 `DisplayStyle` 为 `EMPushDisplayStyleMessageSummary` 时生效,在 `EMPushDisplayStyleSimpleBanner` 时不生效。 |
+
+下表以**单聊文本消息**为例介绍显示属性的设置。
+
+对于**群聊**,下表中的**消息发送方的推送昵称**和**消息发送方的 IM 用户 ID**显示为**群组 ID**。
+
+| 参数设置 | 推送显示 | 图片 |
+| :--------- | :----- |:------------- |
+|
- `DisplayStyle`:(默认)`EMPushDisplayStyleSimpleBanner`
- `displayName`:设置或不设置 |
- 推送标题:**您有一条新消息**
- 推送内容:**请点击查看** |  |
+|
- `DisplayStyle`:`EMPushDisplayStyleMessageSummary`
- `displayName`:设置具体值 |
- 推送标题:**您有一条新消息**
- 推送内容:**消息发送方的推送昵称:消息内容** | |
+|
- `DisplayStyle`:`EMPushDisplayStyleMessageSummary`
- `displayName`:不设置 |
- 推送标题:**您有一条新消息**
- 推送内容:**消息发送方的 IM 用户 ID: 消息内容** |  |
+
+## 获取推送通知的显示属性
+
+你可以调用 `getPushNotificationOptionsFromServerWithCompletion` 方法获取推送通知中的显示属性,如以下代码示例所示:
+
+```objectivec
+// 异步方法
+[EMClient.sharedClient.pushManager getPushNotificationOptionsFromServerWithCompletion:^(EMPushOptions * aOptions, EMError * aError)
+{
+ if (aError) {
+ NSLog(@"get push options error --- %@", aError.errorDescription);
+ }
+}];
+```
+
+`EMPushOptions` 推送配置对象。
+
+| 属性名 | 描述 |
+| :------------------- | :----------------------------------------------------------- |
+| `displayName` | 对方收到推送时发送方展示的名称。 |
+| `displayStyle` | 推送显示类型。 |
+
diff --git a/docs/document/ios/push/push_display_field.md b/docs/document/ios/push/push_display_field.md
new file mode 100644
index 000000000..546b70a67
--- /dev/null
+++ b/docs/document/ios/push/push_display_field.md
@@ -0,0 +1,53 @@
+# 使用消息扩展字段设置推送通知显示内容
+
+创建推送消息时,你可以设置消息扩展字段自定义要显示的推送标题 `em_push_title` 和推送内容 `em_push_content`。
+
+```objectivec
+EMTextMessageBody *body = [[EMTextMessageBody alloc] initWithText:@"test"];
+EMChatMessage *message = [[EMChatMessage alloc] initWithConversationID:conversationId from:currentUsername to:conversationId body:body ext:nil];
+message.ext = @{@"em_apns_ext":@{
+ @"em_push_title": @"customTitle",
+ @"em_alert_subTitle": @"customSubTitle",
+ @"em_push_content": @"customContent"
+}};
+
+message.chatType = EMChatTypeChat;
+[EMClient.sharedClient.chatManager sendMessage:message progress:nil completion:nil];
+```
+
+| 参数 | 描述 |
+| :-------------------- | :----------------------------------------------------------- |
+| `body` | 消息体。 |
+| `ConversationID` | 消息所属的会话 ID。 |
+| `from` | 消息发送方,一般为当前登录 ID。 |
+| `to` | 消息接收方 ID,一般与 `ConversationID` 一致。 |
+| `em_apns_ext` | 消息扩展,使用扩展的方式向推送中添加自定义字段,该值为固定值,不可修改。 |
+| `em_push_title` | 推送通知的自定义标题。 |
+| `em_alert_subTitle` | 推送通知的自定义副标题。 |
+| `em_push_content` | 推送通知展示的自定义内容。 |
+
+**解析的内容**
+
+```json
+{
+ "aps":{
+ "alert":{
+ "body":"custom push content"
+ },
+ "badge":1,
+ "sound":"default"
+ },
+ "f":"6001",
+ "t":"6006",
+ "m":"373360335316321408",
+}
+```
+
+| 参数 | 描述 |
+| :------ | :-------------- |
+| `body` | 显示内容。 |
+| `badge` | 角标数。 |
+| `sound` | 提示铃声。 |
+| `f` | 消息发送方 ID。 |
+| `t` | 消息接收方 ID。 |
+| `m` | 消息 ID。 |
diff --git a/docs/document/ios/push/push_display_overview.md b/docs/document/ios/push/push_display_overview.md
new file mode 100644
index 000000000..19f293e24
--- /dev/null
+++ b/docs/document/ios/push/push_display_overview.md
@@ -0,0 +1,14 @@
+# 设置推送通知的显示内容
+
+通知收到后,通知栏中显示的推送标题和内容可通过以下方式设置,配置的优先级为由低到高:
+
+1. **设置推送通知的显示属性**:使用默认的推送标题和内容,即推送通知的展示方式 `DisplayStyle` 采用默认的值(`EMPushDisplayStyleSimpleBanner`)。推送标题为**您有一条新消息**,推送内容为**请点击查看**。
+2. **使用默认推送模板**:若有默认模板 `default`,发消息时无需指定。
+3. **使用消息扩展字段**:使用扩展字段自定义要显示的推送标题和推送内容,即 `em_push_title` 和 `em_push_content`。
+4. **接收方设置了推送模板**。
+5. **使用自定义推送模板**:发送消息时通过消息扩展字段指定推送模板名称。
+
+:::tip
+推送模板为离线推送的高级功能,使用前需要在环信控制台开启。
+:::
+
diff --git a/docs/document/ios/push/push_extension.md b/docs/document/ios/push/push_extension.md
index 8c639903d..5c3d4bbd0 100644
--- a/docs/document/ios/push/push_extension.md
+++ b/docs/document/ios/push/push_extension.md
@@ -2,7 +2,7 @@
你可以利用扩展字段实现自定义推送设置,本文以强制推送、发送静默消息和富文本推送为例介绍如何实现推送扩展功能。
-对于推送扩展字段,详见[离线推送扩展字段文档](/document/server-side/push_extension.html)。
+对于推送扩展字段,详见 [离线推送扩展字段文档](/document/server-side/push_extension.html)。
## 自定义推送字段
diff --git a/docs/document/ios/push/push_notification_mode_dnd.md b/docs/document/ios/push/push_notification_mode_dnd.md
index fa198510f..5bb6ace81 100644
--- a/docs/document/ios/push/push_notification_mode_dnd.md
+++ b/docs/document/ios/push/push_notification_mode_dnd.md
@@ -2,10 +2,6 @@
环信即时通讯 IM 3.9.2 及以上版本对离线消息推送进行了优化。你可以在 app 和会话层面提供了推送通知方式和免打扰模式的细粒度选项。
-推送通知方式和免打扰模式为推送的高级功能,若要设置,你需要在 [环信即时通讯控制台](https://console.easemob.com/user/login)的**即时通讯 > 功能配置 > 功能配置总览**页面激活推送高级功能。如需关闭推送高级功能必须联系商务,因为该操作会删除所有相关配置。
-
-
-
## 推送通知方式
为优化用户在处理大量推送通知时的体验,环信 IM 在 app 和会话层面提供了推送通知方式和免打扰模式的细粒度选项。
@@ -111,7 +107,8 @@ extension ViewController: EMMultiDevicesDelegate {
完成 SDK 初始化和成功登录 app 后,你可以对 app 以及各类型的会话开启离线推送功能以及通过设置免打扰模式关闭推送。
-你可以在 app 级别指定免打扰时间段和免打扰时长,环信 IM 在这两个时间段内不发送离线推送通知。若既设置了免打扰时间段,又设置了免打扰时长,免打扰模式的生效时间为这两个时间段的累加。
+- 你可以通过 `EMSilentModeParamTypeInterval` 参数开启全天免打扰和关闭免打扰模式:若开始时间和结束时间相同,免打扰模式则全天生效;若设置为 `0:0`-`0:0`,则关闭免打扰模式。
+- 你可以在 app 级别指定免打扰时间段和免打扰时长,环信 IM 在这两个时间段内不发送离线推送通知。若既设置了免打扰时间段,又设置了免打扰时长,免打扰模式的生效时间为这两个时间段的累加。
免打扰时间参数的说明如下表所示:
diff --git a/docs/document/ios/push/push_overview.md b/docs/document/ios/push/push_overview.md
index 53e45405b..ad01ca260 100644
--- a/docs/document/ios/push/push_overview.md
+++ b/docs/document/ios/push/push_overview.md
@@ -2,7 +2,7 @@
即时通讯 IM 支持集成 APNs 消息推送服务,为 iOS 开发者提供低延时、高送达、高并发、不侵犯用户个人数据的离线消息推送服务。
-要体验离线推送功能,请点击[这里](https://www.easemob.com/download/demo)下载即时通讯 IM 的 demo。
+要体验离线推送功能,请在 [环信官网](https://www.easemob.com/download/demo) 下载即时通讯 IM 的 demo。
## 离线推送过程
@@ -16,22 +16,7 @@
2. 应用在后台运行或手机锁屏等情况,若客户端未断开与服务器的连接,则即时通讯 IM 不会收到离线推送通知。
-## 离线推送高级功能
-
-如果需要离线推送的高级功能,需在[环信即时通讯控制台](https://console.easemob.com/user/login)的**即时通讯 > 功能配置 > 功能配置总览**页面激活。高级功能包括[推送通知方式](push_notification_mode_dnd.html#推送通知方式)、[免打扰模式](push_notification_mode_dnd.html#免打扰模式)和[推送模板](push_display.html#使用推送模板)。**如需关闭推送高级功能必须联系商务,因为该操作会删除所有相关配置。**
-
-## 多设备离线推送策略
-
-多设备登录时,可在[环信即时通讯控制台](https://console.easemob.com/user/login)的**证书管理**页面配置推送策略,该策略配置对所有推送通道生效:
-
-- 所有设备离线时,才发送推送消息;
-- 任一设备离线时,都发送推送消息。
-
-**注意**:多端登录时若有设备被踢下线,即使接入了 IM 离线推送,也收不到离线推送消息。
-
-
-
-## **技术原理**
+## 推送原理

@@ -46,9 +31,30 @@
7. 环信服务器将消息发送给 APNs 推送服务器。
8. APNs 推送服务器将消息发送给用户 B。
-:::tip
-推送 token(device token)是 APNs 推送提供的推送 token,即初次启动你的应用时,APNs SDK 为客户端应用实例生成的推送 token。该 token 用于标识每台设备上的每个应用,APNs 通过该 token 明确消息是发送给哪个设备的,然后将消息转发给设备,设备再通知应用程序。你可以调用 `registerForRemoteNotifications` 方法获得 token。另外,如果退出即时通讯 IM 登录时不解绑 device token(调用 `logout` 方法时对 `aIsUnbindDeviceToken` 参数传 `NO` 表示不解绑 device token,传 `YES` 表示解绑 token),用户在推送证书有效期和 token 有效期内仍会接收到离线推送通知。
-:::
+## 推送证书和推送 Token
+
+**推送证书**:集成 APNs 离线推送时,需要上传 APNs 推送证书。关于创建和上传 APNs 推送证书,详见 [APNs 推送集成文档](push_apns.html)。
+
+**推送 Token**:推送 token(device token)是 APNs 推送提供的推送 token,即初次启动你的应用时,APNs SDK 为客户端应用实例生成的推送 token。该 token 用于标识每台设备上的每个应用,APNs 通过该 token 明确消息是发送给哪个设备的,然后将消息转发给设备,设备再通知应用程序。你可以调用 `registerForRemoteNotifications` 方法获得 token。另外,如果退出即时通讯 IM 登录时不解绑 device token(调用 `logout` 方法时对 `aIsUnbindDeviceToken` 参数传 `NO` 表示不解绑 device token,传 `YES` 表示解绑 token),用户在推送证书有效期和 token 有效期内仍会接收到离线推送通知。
+
+关于如何获取推送 Token 并上传至环信服务器,详见 [APNs 推送服务的集成文档](push_apns.html#步骤三-获取-device-token-并传递给-sdk)。
+
+## 推送模板
+
+推送模板是离线推送的高级功能。使用前,你需要在 [环信控制台](https://console.easemob.com/user/login)的 **功能配置 > 基础功能 > 消息** 页面激活。**激活后,如需关闭推送模板功能,必须联系商务,因为该操作会删除推送模板相关的所有配置。**
+
+推送模板的配置和使用,详见 [相关文档介绍](push_template.html)。
+
+## 多设备离线推送策略
+
+多设备登录时,可在 [环信控制台](https://console.easemob.com/user/login)的 **证书管理** 页面配置推送策略,该策略配置对所有推送通道生效:
+
+- 所有设备离线时,才发送推送消息;
+- 任一设备离线时,都发送推送消息。
+
+**多端登录时若有设备被踢下线,即使接入了 IM 离线推送,也收不到离线推送消息。**
+
+
## 前提条件
diff --git a/docs/document/ios/push/push_solution.md b/docs/document/ios/push/push_solution.md
index 661f25bae..f66c2f989 100644
--- a/docs/document/ios/push/push_solution.md
+++ b/docs/document/ios/push/push_solution.md
@@ -20,7 +20,7 @@
4. 查看推送证书是否存和证书推送测试。
-在[环信即时通讯控制台](https://console.easemob.com) 的 **即时通讯** > **功能配置** > **消息推送** > **证书管理**页面选择要测试的推送证书(用户绑定的推送证书),选择 **更多** > **测试**。
+在 [环信控制台](https://console.easemob.com) 的 **功能配置** > **增值功能** > **即时推送** > **证书管理**页面选择要测试的推送证书(用户绑定的推送证书),选择 **更多** > **测试**。

diff --git a/docs/document/ios/push/push_template.md b/docs/document/ios/push/push_template.md
new file mode 100644
index 000000000..e083ffa02
--- /dev/null
+++ b/docs/document/ios/push/push_template.md
@@ -0,0 +1,209 @@
+## 概述
+
+推送模板主要用于服务器提供的默认离线推送配置不满足你的需求时,设置全局范围的推送标题和推送内容。例如,服务器提供的默认设置为中文和英文的推送标题和内容,你若需要使用韩语或日语的推送标题和内容,则可以设置对应语言的推送模板。
+
+推送模板包括默认推送模板 `default`、`detail` 和自定义推送模板。对于群组消息,你可以使用定向模板向某些用户推送与其他用户不同的离线通知。
+
+使用推送模板有以下优势:
+
+1. 自定义修改环信服务端默认推送内容。
+
+2. 接收方可以决定使用哪个模板。
+
+3. 按优先级选择模板使用方式:
+
+ - 使用自定义推送模板的优先级高于默认推送模板。
+ - 若发送方发消息时设置了推送模板,接收方即使设置了推送模板,收到推送通知后也按照发送方设置的推送模板显示。
+
+## 开通服务
+
+推送模板是离线推送服务的高级功能,使用前应先开通该功能。**如需关闭推送模板必须联系商务,因为该操作会删除所有相关配置。**
+
+1. 登录 [环信控制台](https://console.easemob.com/user/login)。
+2. 选择页面上方的 **应用管理**。在弹出的应用列表页面,单击你的应用的 **操作** 栏中的 **管理**。
+3. 在左侧导航栏,选择 **功能配置** > **基础功能**。
+4. 在 **消息** 页面,开通消息相关配置。
+5. 在 **设置离线推送模板** 一栏点击 **免费开通** 开通该功能。
+
+ 功能开通后,你可以点击 **设置** 配置推送模板。
+
+
+
+
+
+## 设置推送模板
+
+你可以通过以下两种方式设置离线推送模板:
+
+- [调用 REST API 配置](/document/server-side/push.html#使用推送模板)。
+- 在 [环信控制台](https://console.easemob.com/user/login) 设置推送模板。
+
+推送模板相关的数据结构,详见[推送扩展字段](/document/server-side/push_extension.html)。
+
+下面为在环信控制台设置离线推送模板。
+
+### 编辑默认推送模板
+
+离线推送模板开通后,**模板管理** 页面默认添加两个模板,`default` 和 `detail`。若未配置自定义推送模板,消息推送时自动使用默认模板,创建消息时无需传入模板名称。
+
+ - `default`:默认情况下,推送标题为 **您有一条新消息**,推送内容为 **请点击查看**。
+ - `detail`:默认情况下,推送标题为 **您有一条新消息**,推送内容为为消息发送方的推送昵称和消息内容。
+
+
+
+你可以在 **操作** 栏中选择 **更多 > 编辑**,修改默认推送模板的推送标题和推送内容,模板名称不能编辑。
+
+
+
+| 参数 | 类型 | 描述 |
+| :-------------- | :----- | :----- |
+| 标题/内容 | Array | 参数的设置方式如下:
- 输入固定内容,例如,标题为 **您好**,内容为 **您有一条新消息**。
- 内置参数填充:1. `{$dynamicFrom}`:按优先级从高到底的顺序填充好友备注、群昵称(仅限群消息)和推送昵称。2. `{$fromNickname}`:推送昵称。 3. `{$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} = "加油"
+ ```
+
+ 群昵称即群成员在群组中的昵称。若要在推送通知中展示群昵称,群成员在发送群消息时可通过扩展字段设置,JSON 结构如下:
+
+```json
+ {
+ "ext":{
+ "em_push_ext":{
+ "group_user_nickname":"Jane"
+ }
+ }
+ }
+```
+
+### 添加自定义推送模板
+
+即时通讯 IM 支持添加自定义推送模板。除了 [调用 RESTful 接口](/document/server-side/push.html#创建离线推送模板) 创建自定义推送模板,你还可以在 [环信控制台](https://console.easemob.com/user/login) 添加自定义推送模板。**自定义推送模板的级别比默认模板高。**
+
+在 **模板管理** 页面,点击 **添加推送模板** 创建自定义推送模板。
+
+| 参数 | 类型 | 描述 |
+| :-------------- | :----- | :----- |
+| 模板名称 | String | 推送模板名称,最多可包含 64 个字符,支持以下字符集:
- 26 个小写英文字母 a-z
- 26 个大写英文字母 A-Z
- 10 个数字 0-9|
+| 标题/内容 | Array | 详见 [默认推送模板中的配置](#编辑默认推送模板)。 |
+
+**创建消息时需通过使用扩展字段传入模板名称、推送标题和推送内容**,通知栏中的推送标题和内容分别使用模板中的格式。详见 [消息扩展中的默认推送模板的参数](#编辑默认推送模板)。
+
+
+
+## 发送消息时使用推送模板
+
+创建模板后,你可以在发送消息时选择此推送模板。
+
+:::tip
+若使用默认模板 **default**,消息推送时自动使用默认模板,创建消息时无需传入模板名称。
+:::
+
+### 使用固定内容的推送模板
+
+使用固定内容的推送模板,通过 `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];
+```
+### 使用包含内置参数的推送模板
+
+使用自定义或者默认推送模板,模板中的推送标题和推送内容使用以下内置参数:
+- `{$dynamicFrom}`:服务器按优先级从高到底的顺序填充备注、群昵称(仅限群消息)和推送昵称。
+- `{$fromNickname}`:推送昵称。
+- `{$msg}`:消息内容。
+
+群昵称即群成员在群组中的昵称,群成员在发送群消息时通过扩展字段设置,JSON 结构如下:
+
+```json
+ {
+ "ext":{
+ "em_push_ext":{
+ "group_user_nickname":"Jane"
+ }
+ }
+ }
+```
+
+内置参数的介绍,详见 [编辑默认推送模板](#编辑默认推送模板)。
+
+这种方式的示例代码与 [使用固定内容的推送模板](#使用固定内容的推送模板)的相同。
+
+### 使用包含自定义参数的推送模板
+
+使用自定义推送模板,而且推送标题和推送内容为自定义参数:
+
+例如,推送模板的设置如下图所示:
+
+
+
+使用下面的示例代码后,通知栏中弹出的推送通知为:
+
+
+
+```objectivec
+//下面以文本消息为例,其他类型的消息设置方法相同。
+EMTextMessageBody *body = [[EMTextMessageBody alloc]initWithText:@"test"];
+EMChatMessage *message = [[EMChatMessage alloc]initWithConversationID:@"conversationId" from:@"currentUsername" to:@"conversationId" body:body ext:nil];
+//设置推送模板。设置前需在环信即时通讯云管理后台上创建推送模板。
+NSDictionary *pushObject = @{
+ //设置推送模板名称。若不指定,设置默认推送模板的信息。
+ //设置前需在环信即时通讯云管理后台或调用 REST 接口创建推送模板。
+ @"name":@"templateName",
+ @"title_args":@[@"您",@"消息"],//设置填写模板标题的 value 数组。
+ @"content_args":@[@"请",@"查看"]//设置填写模板内容的 value 数组。
+};
+message.ext = @{
+ @"em_push_template":pushObject,
+};
+message.chatType = EMChatTypeChat;
+[[EMClient sharedClient].chatManager sendMessage:message progress:nil completion:nil];
+```
+
+## 消息接收方使用推送模板
+
+消息接收方可以调用 `setPushTemplate` 方法传入推送模板名称,选择要使用的模板。
+
+:::tip
+若发送方在发送消息时使用了推送模板,则推送通知栏中的显示内容以发送方的推送模板为准。
+:::
+
+```objectivec
+[EMClient.sharedClient.pushManager setPushTemplate:@"templateName" completion:^(EMError * _Nullable aError) {
+
+}];
+```
+
diff --git a/docs/document/ios/push/push_translation.md b/docs/document/ios/push/push_translation.md
index bdf8d4d33..25bb183fa 100644
--- a/docs/document/ios/push/push_translation.md
+++ b/docs/document/ios/push/push_translation.md
@@ -2,7 +2,7 @@
如果用户启用 [自动翻译](/document/ios/message_translation.html) 功能并发送消息,SDK 会同时发送原始消息和翻译后的消息。
-推送通知与翻译功能协同工作。作为接收方,你可以设置你在离线时希望接收的推送通知的首选语言。如果翻译消息的语言符合你的设置,则翻译消息显示在推送通知中;否则,将显示原始消息。翻译功能由 Microsoft Azure Translation API 提供,你可以点击[这里](https://learn.microsoft.com/zh-cn/azure/ai-services/translator/language-support)了解支持的翻译语言。
+推送通知与翻译功能协同工作。作为接收方,你可以设置你在离线时希望接收的推送通知的首选语言。如果翻译消息的语言符合你的设置,则翻译消息显示在推送通知中;否则,将显示原始消息。翻译功能由 Microsoft Azure Translation API 提供,你可以在 [微软官网](https://learn.microsoft.com/zh-cn/azure/ai-services/translator/language-support) 了解支持的翻译语言。
以下代码示例显示了如何设置和获取推送通知的首选语言:
diff --git a/docs/document/react-native/push/push_display.md b/docs/document/react-native/push/push_display.md
deleted file mode 100644
index 0876798fe..000000000
--- a/docs/document/react-native/push/push_display.md
+++ /dev/null
@@ -1,217 +0,0 @@
-# 设置推送通知的显示内容
-
-通知收到后,通知栏中显示的推送标题和内容可通过以下方式设置,配置的优先级为由低到高:
-
-1. 设置推送通知的显示属性;
-2. 使用默认推送模板;
-3. 使用消息扩展字段;
-4. 使用自定义推送模板。
-
-## 设置推送通知的显示属性
-
-你可以分别调用 `updatePushNickname` 和 `updatePushDisplayStyle` 方法设置推送通知中显示的昵称(`nickname`)和通知显示样式(`displayStyle`),确定通知栏中的推送标题和推送内容。
-
-```typescript
-ChatClient.getInstance()
- .pushManager.updatePushNickname(nickname)
- .then(() => {
- console.log("Succeeded in updating the nickname.");
- })
- .catch((reason) => {
- console.log("Failed to update the nickname.", reason);
- });
-```
-
-```typescript
-ChatClient.getInstance()
- .pushManager.updatePushDisplayStyle(displayStyle)
- .then(() => {
- console.log("Succeeded in updating the display style.");
- })
- .catch((reason) => {
- console.log("Failed to update the display style.", reason);
- });
-```
-
-你可以调用 `fetchPushOptionFromServer` 方法获取推送通知中的显示属性,如以下代码示例所示:
-
-```typescript
-ChatClient.getInstance()
- .pushManager.fetchPushOptionFromServer()
- .then(() => {
- console.log("Succeeded in getting the push configurations.");
- })
- .catch((reason) => {
- console.log("Failed to get the push configuration.", reason);
- });
-```
-
-若要在通知栏中显示消息内容,需要设置通知显示样式 `displayStyle`。该参数有如下两种设置:
-
-- (默认)`Simple`:不论 `nickname` 是否设置,对于推送任何类型的消息,通知栏采用默认显示设置,即推送标题为“您有一条新消息”,推送内容为“请点击查看”。
-- `Summary`:显示消息内容。设置的昵称只在 `displayStyle` 为 `Summary` 时生效,在 `Simple` 时不生效。
-
-下表以单聊文本消息为例介绍这显示属性的设置。
-
-:::tip
-对于群聊,下表中的“消息发送方的推送昵称”和“消息发送方的 IM 用户 ID”显示为“群组 ID”。
-:::
-
-| 参数设置 | 推送显示 | 图片 |
-| :--------- | :----- |:------------- |
-|