From 201c14d0273d82df0281752e1abdb4470ee90388 Mon Sep 17 00:00:00 2001 From: haoxiuwen Date: Sun, 8 Dec 2024 21:46:38 +0800 Subject: [PATCH 1/7] modify --- docs/document/android/releasenote.md | 2 +- docs/document/server-side/message_import.md | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/document/android/releasenote.md b/docs/document/android/releasenote.md index 056c0f54..b77686f5 100644 --- a/docs/document/android/releasenote.md +++ b/docs/document/android/releasenote.md @@ -20,7 +20,7 @@ ### 修复 -修复调用 [EMPushManager#getSilentModeForConversations]((/document/android/push/push_notification_mode_dnd.html#获取多个会话的推送通知设置)) 方法获取会话的免打扰状态失败的问题。 +修复调用 [EMPushManager#getSilentModeForConversations](/document/android/push/push_notification_mode_dnd.html#获取多个会话的推送通知设置)方法获取会话的免打扰状态失败的问题。 ## 版本 V4.10.2 Dev 2024-11-04(开发版) diff --git a/docs/document/server-side/message_import.md b/docs/document/server-side/message_import.md index 534181a1..29235812 100644 --- a/docs/document/server-side/message_import.md +++ b/docs/document/server-side/message_import.md @@ -201,6 +201,7 @@ POST https://{host}/{org_name}/{app_name}/messages/chatgroups/import | `target` | String | 是 | 群组 ID。 | | `type` | String | 是 | 消息类型:
- `txt`:文本消息;
- `img`:图片消息;
- `audio`:语音消息;
- `video`:视频消息;
- `file`:文件消息;
- `loc`:位置消息;
- `cmd`:透传消息;
- `custom`:自定义消息。 | | `body` | JSON | 是 | 消息内容。 | +| `ext` | JSON | 否 | 消息支持扩展字段,可添加自定义信息。例如,请求中的 "key1": "value1"。 | | `is_ack_read` | Bool | 否 | 是否设置会话已读。
- `true`:是;
- `false`:否。
调用该接口导入消息后会生成对应的会话,若该字段为 `true`,则会话为已读状态,为 `false` 表示会话为未读状态。 | | `msg_timestamp` | Long | 否 | 要导入的消息的时间戳,单位为毫秒。若不传该参数,环信服务器会将导入的消息的时间戳设置为当前时间。 | | `need_download` | Bool | 否 | 是否需要下载附件并上传到服务器。
- `true`:是。这种情况下,需确保附件地址可直接访问,没有访问权限的限制。
- (默认)`false`:否。 | From 3262b95dbb16ec3131aac279ee6bb9ebfdaf61c5 Mon Sep 17 00:00:00 2001 From: haoxiuwen Date: Mon, 9 Dec 2024 11:13:57 +0800 Subject: [PATCH 2/7] Add Conversation Read Ack --- docs/.vuepress/sidebar/document.ts | 1 + .../callback_single_conversation_ack.md | 42 +++++++++++++++++++ .../server-side/callback_single_read_ack.md | 2 +- 3 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 docs/document/server-side/callback_single_conversation_ack.md diff --git a/docs/.vuepress/sidebar/document.ts b/docs/.vuepress/sidebar/document.ts index 705f8a9d..ae67951c 100644 --- a/docs/.vuepress/sidebar/document.ts +++ b/docs/.vuepress/sidebar/document.ts @@ -437,6 +437,7 @@ const documentSidebar = [ { text: '用户登入/登出', link: 'callback_login_logout.html' }, { text: '发送消息', link: 'callback_message_send.html' }, { text: '发送单聊消息已读回执', link: 'callback_single_read_ack.html' }, + { text: '发送会话已读回执', link: 'callback_single_conversation_ack.html' }, { text: '撤回消息', link: 'callback_message_recall.html' }, { text: '群组/聊天室操作(新)', collapsible: true, diff --git a/docs/document/server-side/callback_single_conversation_ack.md b/docs/document/server-side/callback_single_conversation_ack.md new file mode 100644 index 00000000..56b05c62 --- /dev/null +++ b/docs/document/server-side/callback_single_conversation_ack.md @@ -0,0 +1,42 @@ +# 发送单聊会话已读回执 + +在单聊中,消息接收方成功发送会话已读回执后,环信服务器会向你的 App Server 发送回调请求,App Server 可查看会话已读回执相关信息,进行数据同步。 + +回调请求主要字段含义: + +| 字段 | 数据类型 | 含义 | +| :------------ | :------- | :----------------------------------------------------------- | +| `callId` | String | `callId` 为每个回调请求的唯一标识,格式为 “App Key_回执消息的消息 ID”。 | +| `eventType` | String | `chat`:单聊。 | +| `chat_type` | String | 会话已读回执。 | +| `security` | String | 签名,格式如下: `MD5(callId+secret+timestamp)`。关于 `Secret`,详见 [环信即时通讯管理台配置回调规则的描述](/product/enable_and_configure_IM.html#配置回调规则)。 | +| `payload` | object | 会话已读回执详情。 | +| `payload.ack_message_id` | String | 会话中消息的消息 ID。 | +| `payload.type` | 会话已读回执类型。 | | +| `host` | String | 服务器名称。 | +| `appkey` | String | 你在环信管理后台注册的应用唯一标识。 | +| `from` | String | 发送已读回执的用户。| +| `to` | String | 接收已读回执的用户。 | +| `msg_id` | String | 已读回执的消息 ID。 | +| `timestamp` | long | 环信 IM 服务器收到会话已读回执的 Unix 时间戳,单位为 ms。 | + +回调请求示例: + +```json +{ +"callId": "XXXX-XXXX#testy_1252106597610555348", +"eventType": "chat", +"chat_type": "channel_ack", +"security": "203e3cXXXX0ebdbd776d8aa9cc057b2d", +"payload": { +"ack_message_id": "1252106100258375636", +"type": "channel_ack" +}, +"host": "XXXX@hsb-XXXX-msync0", +"appkey": "XXXX-XXXX#testy", +"from": "wzy", +"to": "wzy1", +"msg_id": "1252106597610555348", +"timestamp": 1709093585046 +} +``` \ No newline at end of file diff --git a/docs/document/server-side/callback_single_read_ack.md b/docs/document/server-side/callback_single_read_ack.md index f90af584..bd4e1d4c 100644 --- a/docs/document/server-side/callback_single_read_ack.md +++ b/docs/document/server-side/callback_single_read_ack.md @@ -13,7 +13,7 @@ | `from` | String | 发送已读回执用户 ID。 | | `to` | String | 接收已读回执用户 ID。 | | `eventType` | String | `chat`:单聊。 | -| `timestamp` | long | 到环信 IM 服务器的 Unix 时间戳,单位为 ms。 | +| `timestamp` | long | 环信 IM 服务器收到消息已读回执的 Unix 时间戳,单位为 ms。 | | `msg_id` | String | 该回执消息的消息 ID。 | 回调请求示例: From 36ebb466b7a81bbdf0ea46e81174fbe5df114539 Mon Sep 17 00:00:00 2001 From: haoxiuwen Date: Mon, 9 Dec 2024 17:36:48 +0800 Subject: [PATCH 3/7] Add Flutter Offline Push Docs --- docs/.vuepress/sidebar/document.ts | 12 +- docs/document/android/push/push_overview.md | 10 +- docs/document/flutter/push/push_display.md | 217 ++++++++++++++++++ .../flutter/push/push_easemob_console.md | 44 ++++ docs/document/flutter/push/push_extension.md | 90 ++++++++ .../push/push_notification_mode_dnd.md | 198 ++++++++++++++++ docs/document/flutter/push/push_overview.md | 82 +++++++ .../document/flutter/push/push_translation.md | 19 ++ docs/document/flutter/releasenote.md | 6 +- docs/document/harmonyos/push/push_overview.md | 9 +- docs/document/ios/push/push_overview.md | 13 +- .../react-native/push/push_overview.md | 12 +- .../react-native/push/push_translation.md | 10 + docs/document/web/push/push_overview.md | 36 ++- docs/product/product_offline_push_overview.md | 62 +++-- 15 files changed, 751 insertions(+), 69 deletions(-) create mode 100644 docs/document/flutter/push/push_display.md create mode 100644 docs/document/flutter/push/push_easemob_console.md create mode 100644 docs/document/flutter/push/push_extension.md create mode 100644 docs/document/flutter/push/push_notification_mode_dnd.md create mode 100644 docs/document/flutter/push/push_overview.md create mode 100644 docs/document/flutter/push/push_translation.md diff --git a/docs/.vuepress/sidebar/document.ts b/docs/.vuepress/sidebar/document.ts index ae67951c..7f84ba0a 100644 --- a/docs/.vuepress/sidebar/document.ts +++ b/docs/.vuepress/sidebar/document.ts @@ -109,7 +109,7 @@ const documentSidebar = [ text: '离线推送', collapsible: true, children: [ - { text: '离线推送概述', link: 'push/push_overview.html', only: ['android', 'ios', 'web', 'harmonyos', 'react-native'] }, + { text: '离线推送概述', link: 'push/push_overview.html', only: ['android', 'ios', 'web', 'harmonyos', 'react-native', 'flutter'] }, { text: '集成第三方推送', collapsible: true, @@ -125,15 +125,15 @@ const documentSidebar = [ { text: 'HarmonyOS 推送', link: 'push/push_harmony.html', only: ['harmonyos'] } ] }, - { text: '上传推送证书到环信控制台', link: 'push/push_easemob_console.html', only: ['react-native'] }, + { text: '上传推送证书', link: 'push/push_easemob_console.html', only: ['react-native', 'flutter'] }, { text: '获取或更新推送 token', link: 'push/push_get_device_token.html', only: ['react-native'] }, { 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_display.html', only: ['android', 'ios', 'harmonyos', 'react-native'] }, - { text: '设置通知方式和免打扰', link: 'push/push_notification_mode_dnd.html', only: ['android', 'ios', 'web', 'harmonyos', 'react-native']}, + { text: '设置通知的显示内容', link: 'push/push_display.html', 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_translation.html', only: ['android', 'ios', 'web', 'react-native']}, - { text: '设置推送扩展功能', link: 'push/push_extension.html', only: ['android', 'ios', 'web', 'react-native']}, + { 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'] }, { text: 'FAQ', link: 'push/push_solution.html', only: ['android', 'ios','harmonyos']}, ] diff --git a/docs/document/android/push/push_overview.md b/docs/document/android/push/push_overview.md index af44d5d6..ea2b7191 100644 --- a/docs/document/android/push/push_overview.md +++ b/docs/document/android/push/push_overview.md @@ -6,6 +6,8 @@ 要体验离线推送功能,请点击[这里](https://www.easemob.com/download/demo)下载即时通讯 IM 的 demo。 +## 离线推送过程 + 客户端断开连接或应用进程被关闭等原因导致用户离线时,即时通讯 IM 会通过第三方消息推送服务向该离线用户的设备推送消息通知。当用户再次上线时,服务器会将离线期间的消息发送给用户(这里角标表示的是离线消息数,并不是实际的未读消息数)。例如,当你离线时,有用户向你发送了消息,你的手机的通知中心会弹出消息通知,当你再次打开 app 并登录成功,即时通讯 IM SDK 会主动拉取你不在线时的消息。 除了满足用户离线条件外,要使用第三方离线推送,你还需在[环信即时通讯云控制台](https://console.easemob.com/user/login)配置推送证书信息,例如,对于华为推送,需配置**证书名称**和**推送密钥**,并调用客户端 SDK 提供的 API 向环信服务器上传 device token。 @@ -16,7 +18,11 @@ 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)的**证书管理**页面配置推送策略,该策略配置对所有推送通道生效: @@ -52,7 +58,7 @@ 1. 已开启环信即时通讯服务,详见 [开启和配置即时通讯服务](/product/enable_and_configure_IM.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/flutter/push/push_display.md b/docs/document/flutter/push/push_display.md new file mode 100644 index 00000000..1fd214da --- /dev/null +++ b/docs/document/flutter/push/push_display.md @@ -0,0 +1,217 @@ +# 设置推送通知的显示内容 + +通知收到后,通知栏中显示的推送标题和内容可通过以下方式设置,配置的优先级为由低到高: + +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`:设置或不设置 |
- 推送标题:**您有一条新消息**
- 推送内容:**请点击查看** | ![img](/images/android/push/push_displayattribute_1.png)| +|
- `DisplayStyle`:`Summary`
- `nickname`:设置具体值 |
- 推送标题:**您有一条新消息**
- 推送内容:**消息发送方的推送昵称:消息内容** |![img](/images/android/push/push_displayattribute_2.png) | +|
- `DisplayStyle`:`Summary`
- `nickname`:不设置 |
- 推送标题:**您有一条新消息**
- 推送内容:**消息发送方的 IM 用户 ID: 消息内容** | ![img](/images/android/push/push_displayattribute_3.png)| + +### 获取推送通知的显示属性 + +你可以调用 `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. 推送模板相关的数据结构,详见[推送扩展字段](/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. 使用自定义推送模板,而且推送标题和推送内容为自定义参数: + +例如,推送模板的设置如下图所示: + +![img](/images/android/push/push_template_custom.png) + +使用下面的示例代码后,通知栏中弹出的推送通知为: + +![img](/images/android/push/push_template_custom_example.png) + +```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_easemob_console.md b/docs/document/flutter/push/push_easemob_console.md new file mode 100644 index 00000000..0a30c37f --- /dev/null +++ b/docs/document/flutter/push/push_easemob_console.md @@ -0,0 +1,44 @@ +# 上传推送证书及绑定推送信息 + +除了满足用户离线条件外,要使用第三方离线推送,你还需在[环信即时通讯云控制台](https://console.easemob.com/user/login)配置推送证书信息,例如,对于 FCM 推送,需配置**证书类型**和**证书名称**,上传证书,并调用客户端 SDK 提供的 API 向环信服务器上传 device token。 + +## 上传推送证书 + +在第三方推送服务后台注册应用,获取应用信息,开启推送服务后,你需要在[环信即时通讯云控制台](https://console.easemob.com/user/login)上传推送证书,实现第三方推送服务与环信即时通讯 IM 的通信。 + +![img](/images/react-native/push/push_add_certificate.png) + +关于各推送证书相关信息以及[环信即时通讯云控制台](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#步骤二-在环信即时通讯云控制台上传荣耀推送证书)。 | +| 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#步骤二-上传推送证书)。 | +| 魅族推送 | 详见 [Android 端魅族推送集成文档](/document/android/push/push_meizu.html#步骤一-在魅族开发者后台创建应用)。 | 详见 [Android 端魅族推送集成文档](/document/android/push/push_meizu.html#步骤二-上传推送证书)。 | + +## 绑定推送信息 + +调用 `bindDeviceToken` 方法将你的用户 ID 与推送证书和推送 token `deviceToken` 进行绑定。绑定推送信息前,你需要自行实现如何从第三方服务获取推送 token。 + +推送 token `deviceToken` 是第三方推送服务提供的推送 token。例如,对于 FCM 推送来说,初次启动你的应用时,FCM SDK 为客户端应用实例生成的注册令牌 (registration token)。该 token 用于标识每台设备上的每个应用,FCM 通过该 token 明确消息是发送给哪个设备的,然后将消息转发给设备,设备再通知应用程序。你可以调用 `await FirebaseMessaging.instance.getToken()` 方法获得 token。另外,如果退出即时通讯 IM 登录时不解绑 device token(调用 `logout` 方法时对 `unbindToken` 参数传 `false` 时不解绑 device token,传 `true` 表示解绑 token),用户在推送证书有效期和 token 有效期内仍会接收到离线推送通知。 + +```dart + try { + // notifierName: 对应平台在环信后台的推送证书名称 + // deviceToken: 推送token + EMClient.getInstance.pushManager.bindDeviceToken( + notifierName: notifierName, + deviceToken: deviceToken, + ); + } catch (e) { + debugPrint("bindDeviceToken error: $e"); + } +``` + + + diff --git a/docs/document/flutter/push/push_extension.md b/docs/document/flutter/push/push_extension.md new file mode 100644 index 00000000..ebeaad6a --- /dev/null +++ b/docs/document/flutter/push/push_extension.md @@ -0,0 +1,90 @@ +# 设置推送扩展功能 + +你可以实现推送扩展功能,包括设置自定义推送字段、强制推送和发送静默消息。 + +## 设置自定义推送字段 + +创建推送消息时,可以在消息中添加自定义字段,满足个性化业务需求。 + +```dart +// 本示例以文本消息为例,图片和文件等消息类型的设置方法相同。 +EMMessage msg = EMMessage.createTxtSendMessage( + targetId: 'receiveId', + content: 'content', +); +msg.attributes = { + // 将推送扩展设置到消息中。 + "em_push_ext": { + "custom": { + "key1": "value1", + "key2": "value2" + } + } +}; + +try { + await EMClient.getInstance.chatManager.sendMessage(msg); +} on EMError catch (e) {} + +``` + +自定义字段的数据结构如下: + +```json +{ + "em_push_ext": { + "custom": { + "key1": "value1", + "key2": "value2" + } + } +} +``` + +| 参数 | 描述 | +| :--------------- | :----------------- | +| `em_push_ext` | 消息推送扩展固定值,不可修改。 | +| `custom` | 消息扩展,使用扩展的方式向推送中添加自定义字段,该值为固定值。 | +| `key1`/`key2` | 自定义消息推送扩展的具体内容。 | + +## 强制推送 + +设置强制推送后,用户发送消息时会忽略接收方的免打扰设置,不论是否处于免打扰时间段都会正常向接收方推送消息。 + +```dart +// 本示例以文本消息为例,图片和文件等消息类型的设置方法相同。 +EMMessage msg = EMMessage.createTxtSendMessage( + targetId: 'receiveId', + content: 'content', +); +msg.attributes = { + 'em_force_notification': true, +}; + +try { + await EMClient.getInstance.chatManager.sendMessage(msg); +} on EMtError catch (e) {} + +``` + +## 发送静默消息 + +发送静默消息指发送方在发送消息时设置不推送消息,即用户离线时,即时通讯 IM 服务不会通过推送服务向该用户的设备推送消息通知。因此,用户不会收到消息推送通知。当用户再次上线时,会收到离线期间的所有消息。 + +发送静默消息和免打扰模式下均为不推送消息,区别在于发送静默消息为发送方在发送消息时设置,而免打扰模式为接收方设置在指定时间段内不接收推送通知。 + +```dart +// 本示例以文本消息为例,图片和文件等消息类型的设置方法相同。 +EMMessage msg = EMMessage.createTxtSendMessage( + targetId: 'receiveId', + content: 'content', +); +msg.attributes = { + 'em_ignore_notification': true, +}; + +try { + await EMClient.getInstance.chatManager.sendMessage(msg); +} on EMError catch (e) {} + +``` \ No newline at end of file diff --git a/docs/document/flutter/push/push_notification_mode_dnd.md b/docs/document/flutter/push/push_notification_mode_dnd.md new file mode 100644 index 00000000..263fc9ee --- /dev/null +++ b/docs/document/flutter/push/push_notification_mode_dnd.md @@ -0,0 +1,198 @@ +# 设置推送通知方式和免打扰模式 + +为优化用户在处理大量推送通知时的体验,即时通讯 IM 在 app 和会话层面提供了推送通知方式和免打扰模式的细粒度选项。 + +**推送通知方式和免打扰模式为推送的高级功能**,若要设置,你需要在 [环信即时通讯控制台](https://console.easemob.com/user/login)的**即时通讯 > 功能配置 > 功能配置总览**页面激活推送高级功能。如需关闭推送高级功能必须联系商务,因为该操作会删除所有相关配置。 + +![image](/images/android/push/push_android_enable_push.png) + +## 推送通知方式 + +推送通知方式 `ChatPushRemindType` 包含三种类型,如下表所示。其中,会话级别的 `ChatPushRemindType` 设置优先于 app 级别的设置,未设置推送通知方式的会话默认采用 app 的设置。例如,假设 app 的推送方式设置为 `MENTION_ONLY`,而指定会话的推送方式设置为 `ALL`。你会收到来自该会话的所有推送通知,而对于其他会话来说,你只会收到提及你的消息的推送通知。 + +| 参数 | 描述 | App | 单聊和群聊会话 | +| :------- | :----- | :----- | :----- | +| `ALL` | 接收所有离线消息的推送通知。 | ✓ | ✓ | +| `MENTION_ONLY` | 仅接收提及消息的推送通知。
该参数推荐在群聊中使用。若提及一个或多个用户,需在创建消息时对 `ext` 字段传 "em_at_list":["user1", "user2" ...];若提及所有人,对该字段传 "em_at_list":"all"。 | ✓ | ✓ | +| `NONE` | 不接收离线消息的推送通知。 | ✓ | ✓ | + +### 从服务器获取所有会话的推送通知方式设置 + +你可以调用 `EMPushManager#syncConversationsSilentMode` 方法从服务器同步所有会话的推送通知方式设置。同步后成功后的结果会存储到本地数据库,然后你可以通过`EMConversation#remindType` 查询当前会话的推送通知方式。 + +```dart +//同步会话的推送通知方式 +await EMClient.getInstance.pushManager.syncConversationsSilentMode(); + +//查询会话的推送通知方式 + EMConversation? conversation = + await EMClient.getInstance.chatManager.getConversation( + conversationId, + ); + ChatPushRemindType? remindType = await conversation?.remindType(); + debugPrint(remindType.toString()); +``` + +### 本地设置推送通知方式 + +在本机上调用 `EMPushManager#setConversationSilentMode` 设置会话的推送通知方式,在多设备事件 `EMMultiDeviceListener#onConversationEvent` 里会回调当前操作,此时参数 `event` 的值为 `EMMultiDeviceListener#CONVERSATION_MUTE_INFO_CHANGED`。 + +```dart + //对会话设置推送通知方式 + await EMClient.getInstance.pushManager.setConversationSilentMode( + conversationId: conversationId, + type: type, + param: ChatSilentModeParam.remindType( + ChatPushRemindType.MENTION_ONLY, + ), + ); + + //多设备事件 + EMClient.getInstance.addMultiDeviceEventHandler('Identifier', EMMultiDeviceEventHandler( + onConversationEvent: (event, conversationId, type) { + }, + )); + +``` + +## 免打扰模式 + +在你完成 SDK 初始化和成功登录 app 后,可以对 app 以及各类型的会话开启离线推送功能以及通过设置免打扰模式关闭推送。 + +你可以在 app 级别指定免打扰时间段和免打扰时长,即时通讯 IM 在这两个时间段内不发送离线推送通知。若既设置了免打扰时间段,又设置了免打扰时长,免打扰模式的生效时间为这两个时间段的累加。 + +免打扰时间参数的说明如下表所示: + +| 免打扰时间参数 | 类型 | 描述 | 应用范围 | +| :------------- | :---------------- | :-------------- | :-------- | +| `silentModeInterval` | Int | 每天定时触发离线推送免打扰的时间段,采用 24 小时制,精确到分钟,格式为 H:M-H:M,例如 8:30-10:0,开始时间和结束时间中的小时数和分钟数的取值范围分别为 [0,23] 和 [0,59]。免打扰时间段的设置说明如下:
- 开始时间和结束时间设置后,免打扰模式每天定时触发。例如,若该时间段设置为 `8:0`-`10:0`,免打扰模式在每天的 8:00-10:00 内生效。若你在 11:00 设置开始时间为 8:0,结束时间为 12:0,则免打扰模式在当天的 11:00-12:00 生效,以后每天均在 8:00-12:00 生效。
- 若开始时间和结束时间相同,免打扰模式则全天生效。不过,若设置为 `0:0-0:0`,则关闭免打扰模式。
- 若结束时间早于开始时间,则免打扰模式在每天的开始时间到次日的结束时间内生效。例如,开始时间为 `10:0`,结束时间为 `8:0`,则免打扰模式的在当天的 10:00 到次日的 8:00 生效。
- 目前仅支持在每天的一个指定时间段内开启免打扰模式,不支持多个免打扰时间段,新的设置会覆盖之前的设置。
- 若该参数和 `silentDuration` 均设置,免打扰模式当日在这两个时间段均生效,例如,例如,上午 8:00 将 `silentModeInterval` 设置为 8:0-10:0,`silentDuration` 设置为 240 分钟(4 个小时),则 app 在当天 8:00-12:00 和以后每天 8:00-10:00 处于免打扰模式。| 仅针对 app 生效,对单聊或群聊不生效。 | +| `silentDuration`| Int | 免打扰时长,单位为分钟。免打扰时长的取值范围为 [0,10080],`0` 表示该参数无效,`10080` 表示免打扰模式持续 7 天。
- 与免打扰时间段的设置每天生效不同,该参数为一次有效。设置后立即生效,例如,上午 8:00 将 app 层级的 `silentDuration` 设置为 240 分钟(4 个小时),则 app 在当天 8:00-12:00 处于免打扰模式。
- 若该参数和 `silentModeInterval` 均设置,免打扰模式当日在这两个时间段均生效,例如,上午 8:00 将 app 级的 `silentModeInterval` 设置为 8:00-10:00,免打扰时长设置为 240 分钟(4 个小时),则 app 在当前 8:00-12:00 和以后每天 8:00-10:00 处于免打扰模式。 | App 或单聊/群聊会话。 | + +:::tip +若在免打扰时段或时长生效期间需要对指定用户推送消息,需设置[强制推送](push_extension.html#强制推送)。 +::: + +**推送通知方式与免打扰时间设置之间的关系** + +对于 app 和 app 中的所有会话,免打扰模式的设置优先于[推送通知方式](#推送通知方式)的设置。例如,假设在 app 级别指定了免打扰时间段,并将指定会话的推送通知方式设置为 `ALL`。App 在指定的时间段内进入免打扰模式,你不会收到任何推送通知。或者,假设为会话指定了免打扰时间段,而 app 没有任何免打扰设置并且其推送通知方式设置为 `ALL`。在指定的免打扰时间段内,你不会收到来自该会话的任何推送通知,而所有其他会话的推送保持不变。 + +## 设置 app 的推送通知 + +你可以调用 `setSilentModeForAll` 方法设置 app 级别的推送通知,并通过指定 `ChatSilentModeParam` 字段设置推送通知方式和免打扰模式,如下代码示例所示: + +```dart +//设置推送通知方式为 `MENTION_ONLY`。 +ChatSilentModeParam param = ChatSilentModeParam.remindType(ChatPushRemindType.MENTION_ONLY); + +//设置离线推送免打扰时长为 15 分钟。 +ChatSilentModeParam param = ChatSilentModeParam.silentDuration(15); + +//设置离线推送的免打扰时间段为 8:30 至 15:00。 +ChatSilentModeParam param = ChatSilentModeParam.silentModeInterval( + startTime: ChatSilentModeTime(hour: 8, minute: 30), + endTime: ChatSilentModeTime(hour: 15, minute: 0), +); + +try { + //设置 app 的离线推送通知。 + await EMClient.getInstance.pushManager.setSilentModeForAll(param: param); +} on EMError catch (e) {} +``` + +## 获取 app 的推送通知设置 + +你可以调用 `fetchSilentModeForAll` 方法获取 app 级别的推送通知设置,如以下代码示例所示: + +```dart +try { + ChatSilentModeResult result = + await EMClient.getInstance.pushManager.fetchSilentModeForAll(); + // 获取 app 的推送通知方式的设置。 + ChatPushRemindType? remindType = result.remindType; + + // 获取 app 的离线推送免打扰过期的 Unix 时间戳。 + int? timestamp = result.expireTimestamp; + + // 获取 app 的离线推送免打扰时间段的开始时间。 + ChatSilentModeTime? startTime = result.startTime; + // 免打扰时间段的开始时间中的小时数。 + startTime?.hour; + // 免打扰时间段的开始时间中的分钟数。 + startTime?.minute; + + // 获取 app 的离线推送免打扰时间段的结束时间。 + ChatSilentModeTime? endTime = result.endTime; + // 免打扰时间段的结束时间中的小时数。 + endTime?.hour; + // 免打扰时间段的结束时间中的分钟数。 + endTime?.minute; +} on EMError catch (e) {} +``` + +## 设置单个会话的推送通知 + +你可以调用 `setConversationSilentMode` 方法设置指定会话的推送通知,并通过指定 `ChatSilentModeParam` 字段设置推送通知方式和免打扰模式,如以下代码示例所示: + +```dart +//设置推送通知方式为 `MENTION_ONLY`。 +ChatSilentModeParam param = ChatSilentModeParam.remindType(ChatPushRemindType.MENTION_ONLY); + +//设置离线推送免打扰时长为 15 分钟。 +ChatSilentModeParam param = ChatSilentModeParam.silentDuration(15); + +try { + //设置会话的离线推送免打扰模式。目前,暂不支持设置会话免打扰时间段。 + EMClient.getInstance.pushManager.setConversationSilentMode( + conversationId: conversationId, + type: conversationType, + param: param, + ); +} on EMError catch (e) {} +``` + +## 获取单个会话的推送通知设置 + +你可以调用 `fetchConversationSilentMode` 方法获取指定会话的推送通知设置,如以下代码示例所示: + +```dart +try { + //设置会话的离线推送免打扰模式。目前,暂不支持设置会话免打扰时间段。 + ChatSilentModeResult result = + await EMClient.getInstance.pushManager.fetchConversationSilentMode( + conversationId: conversationId, + type: conversationType, + ); + + //获取会话的推送通知方式。 + result.remindType; + + // 获取会话的离线推送免打扰过期 Unix 时间戳。 + result.expireTimestamp; +} on EMError catch (e) {} +``` + +## 获取多个会话的推送通知设置 + +1. 你可以在每次调用中最多获取 20 个会话的推送通知设置。 + +2. 如果会话使用了 app 设置或其推送通知设置已过期,则返回的字典不包含此会话。 + +你可以调用 `fetchSilentModeForConversations` 方法获取多个会话的推送通知设置,如以下示例代码所示: + +```dart +try { + Map map = await EMClient.getInstance.pushManager.fetchSilentModeForConversations(conversationList); +} on EMError catch (e) {} +``` + +## 清除单个会话的推送通知方式的设置 + +你可以调用 `removeConversationSilentMode` 方法清除指定会话的推送通知方式的设置。清除后,默认情况下,该会话会使用 app 的设置。 + +以下代码示例显示了如何清除会话的推送通知方式: + +```dart +try { + await EMClient.getInstance.pushManager.removeConversationSilentMode(conversationId: conversationId, type: conversationType); +} on EMError catch (e) {} +``` diff --git a/docs/document/flutter/push/push_overview.md b/docs/document/flutter/push/push_overview.md new file mode 100644 index 00000000..336e85e8 --- /dev/null +++ b/docs/document/flutter/push/push_overview.md @@ -0,0 +1,82 @@ +# 离线推送概述 + +即时通讯 IM 支持集成第三方离线消息推送服务,为 Flutter 开发者提供低延时、高送达、高并发、不侵犯用户个人数据的离线消息推送服务。 + +## 离线推送过程 + +客户端断开连接或应用进程被关闭等原因导致用户离线时,即时通讯 IM 会通过第三方消息推送服务向该离线用户的设备推送消息通知。当用户再次上线时,服务器会将离线期间的消息发送给用户(这里角标表示的是离线消息数,并不是实际的未读消息数)。例如,当你离线时,有用户向你发送了消息,你的手机的通知中心会弹出消息通知,当你再次打开 app 并登录成功,即时通讯 IM SDK 会主动拉取你不在线时的消息。 + +**以下两种情况,即时通讯 IM 不会发送离线推送通知:** + +1. 若应用在后台运行,则用户仍为在线状态,即时通讯 IM 不会向用户推送消息通知。 + +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 离线推送,也收不到离线推送消息。 + +![image](/images/android/push/push_multidevice_policy.png) + +## 技术原理 + +### Android 平台离线推送 + +![img](/images/android/push/push_android_understand.png) + +推送流程如下: + +1. 用户 B(消息接收者)检查设备支持哪种推送渠道,即 app 配置了哪种第三方推送服务且满足该推送的使用条件。 +2. 用户 B 根据配置的第三方推送 SDK 从第三方推送服务器获取推送 token。 +3. 第三方推送服务器向用户 B 返回推送 token。 +4. 用户 B 向环信服务器上传推送证书名称和推送 token。 +5. 用户 A 向用户 B 发送消息。 +6. 环信服务器检查用户 B 是否在线。若在线,环信服务器直接将消息发送给用户 B。 +7. 若用户 B 离线,环信服务器判断该用户的设备使用的推送服务类型。 +8. 环信服务器将将消息发送给第三方推送服务器。 +9. 第三方推送服务器将消息发送给用户 B。 + +:::tip +1. 开发者通过[环信即时通讯云控制台](https://console.easemob.com/user/login)配置 App 的推送证书,需填写证书名称(或者 App Key)。该步骤须在登录环信 IM SDK 成功后进行。证书名称是环信服务器用于判断目标设备使用哪种推送通道的唯一条件,因此必须确保与 Android 终端设备上传的证书名称一致。 +2. 关于推送 token,详见[绑定推送信息页面相关描述](push_easemob_console.html#绑定推送信息)。 +::: + +### iOS 平台离线推送 + +![image](/images/ios/push/push_ios_1_understand.png) + +推送流程如下: + +1. 用户 B 向 APNs 推送服务注册,获取推送 token。 +2. APNs 返回推送 token。 +3. 用户 B 向环信服务器上传推送证书名称和推送 token。 +4. 用户 A 向 用户 B 发送消息。 +5. 环信服务器检查用户 B 是否在线。若在线,环信服务器直接将消息发送给用户 B。 +6. 若用户 B 离线,环信服务器判断该用户是否使用了 APNs 推送。 +7. 环信服务器将消息发送给 APNs 推送服务器。 +8. APNs 推送服务器将消息发送给用户 B。 + +## 前提条件 + +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 服务器; + - 小米推送:在小米设备上可用; + - 华为推送:在华为设备上可用; + - 荣耀推送:在荣耀设备上可用; + - 魅族推送:在魅族设备上可用; + - OPPO 推送:在 OPPO 设备上可用; + - vivo 推送:在 vivo 设备上可用。 + diff --git a/docs/document/flutter/push/push_translation.md b/docs/document/flutter/push/push_translation.md new file mode 100644 index 00000000..afed1fb2 --- /dev/null +++ b/docs/document/flutter/push/push_translation.md @@ -0,0 +1,19 @@ +# 设置推送翻译 + +推送通知与翻译功能协同工作。如果用户启用[自动翻译](message_translation.html)功能并发送消息,SDK 会同时发送原始消息和翻译后的消息。 + +作为接收方,你可以设置你在离线时希望接收的推送通知的首选语言。如果翻译后消息的语言匹配你的设置,则翻译后消息显示在推送通知栏;否则,将显示原始消息。翻译功能由 Microsoft Azure Translation API 提供,你可以点击[这里](https://learn.microsoft.com/zh-cn/azure/ai-services/translator/language-support)了解支持的翻译语言。 + +以下示例代码显示如何设置和获取推送通知的首选语言: + +```dart +// 设置离线推送的首选语言。 +try { + await EMClient.getInstance.pushManager.setPreferredNotificationLanguage('en'); +} on EMClient catch (e) {} + +// 获取设置的离线推送的首选语言。 +try { + String? language = await EMClient.getInstance.pushManager.fetchPreferredNotificationLanguage(); +} on EMClient catch (e) {} +``` \ No newline at end of file diff --git a/docs/document/flutter/releasenote.md b/docs/document/flutter/releasenote.md index 9d1b2cb0..b4101bf6 100644 --- a/docs/document/flutter/releasenote.md +++ b/docs/document/flutter/releasenote.md @@ -4,7 +4,7 @@ ## 版本 4.10.0 2024-12-05 -- 修复 `fetchSilentModeForConversations` 方法获取会话的免打扰状态失败的问题。 +- 修复 [fetchSilentModeForConversations](/document/flutter/push/push_notification_mode_dnd.html#获取多个会话的推送通知设置) 方法获取会话的免打扰状态失败的问题。 - 修复 iOS `applicationDidEnterBackground` 和 `applicationWillEnterForeground` 不执行的问题。 ## 版本 4.8.2+1 @@ -22,8 +22,8 @@ - 支持[加入聊天室时携带扩展信息、是否退出之前加入的全部聊天室](room_manage.html#加入聊天室): - 新增 `EMChatRoomManager.joinChatRoom(String roomId, {bool leaveOther = true,String? ext,})` 方法,支持设置加入聊天室时携带的扩展信息,并指定是否退出所有其他聊天室。 - 新增 `EMChatRoomEventHandler.onMemberJoinedFromChatRoom(String roomId, String participant, String? ext)` 回调,当用户加入聊天室携带了扩展信息时,聊天室内其他人可以在用户加入聊天室的回调中,获取到扩展信息。 -- 新增 `EMPushManager.syncConversationsSilentMode()` 方法,支持从服务器获取所有会话的推送通知方式的设置。 -- 新增 `EMPushManager.bindDeviceToken(String notifierName, String deviceToken)` 方法。 +- 新增 `EMPushManager.syncConversationsSilentMode()` 方法,支持[从服务器获取所有会话的推送通知方式的设置](/document/flutter/push/push_notification_mode_dnd.html#推送通知方式)。 +- 新增 [EMPushManager.bindDeviceToken(String notifierName, String deviceToken) 方法](/document/flutter/push/push_easemob_console.html#绑定推送信息)。 - 新增 `EMConversation.remindType()` 方法,用于本地存储会话的推送通知方式。 - 新增 `EMConversation.getLocalMessageCount()` 方法,用于[获取 SDK 本地数据库中会话在某个时间段内的全部消息数](message_retrieve.html#获取会话在一定时间内的消息数)。 - 新增[设备登录时允许携带自定义消息,并将其传递给被踢的设备](multi_device.html#设置登录设备的扩展信息): diff --git a/docs/document/harmonyos/push/push_overview.md b/docs/document/harmonyos/push/push_overview.md index 2f08b31e..d80687ce 100644 --- a/docs/document/harmonyos/push/push_overview.md +++ b/docs/document/harmonyos/push/push_overview.md @@ -6,6 +6,8 @@ 要体验离线推送功能,请点击[这里](https://www.easemob.com/download/demo)下载即时推送 IM 的 demo。 +## 离线推送过程 + 客户端断开连接或应用进程被关闭等原因导致用户离线时,即时通讯 IM 会通过第三方消息推送服务向该离线用户的设备推送消息通知。当用户再次上线时,服务器会将离线期间的消息发送给用户(这里角标表示的是离线消息数,并不是实际的未读消息数)。例如,当你离线时,有用户向你发送了消息,你的手机的通知中心会弹出消息通知,当你再次打开 app 并登录成功,即时通讯 IM SDK 会主动拉取你不在线时的消息。 除了满足用户离线条件外,要使用 HarmonyOS 离线推送,用户还需在[环信即时通讯云控制台](https://console.easemob.com/user/login)配置推送证书信息,并调用客户端 SDK 提供的 API 向环信服务器上传 device token。 @@ -16,7 +18,11 @@ 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)的**证书管理**页面配置推送策略,该策略配置对所有推送通道生效: @@ -47,5 +53,6 @@ - 了解环信即时通讯 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)上激活。 diff --git a/docs/document/ios/push/push_overview.md b/docs/document/ios/push/push_overview.md index 0c00e6e1..53e45405 100644 --- a/docs/document/ios/push/push_overview.md +++ b/docs/document/ios/push/push_overview.md @@ -4,6 +4,8 @@ 要体验离线推送功能,请点击[这里](https://www.easemob.com/download/demo)下载即时通讯 IM 的 demo。 +## 离线推送过程 + 客户端断开连接或应用进程被关闭等原因导致用户离线时,即时通讯 IM 会通过 APNs 消息推送服务向该离线用户的设备推送消息通知,暂时保存这些消息。当用户再次上线时,服务器会将离线期间的消息发送给用户(这里角标表示的是离线消息数,并不是实际的未读消息数)。例如,当你离线时,有用户向你发送了消息,你的手机的通知中心会弹出消息通知,当你再次打开 app 并登录成功,即时通讯 IM SDK 会主动拉取你不在线时的消息。 除了满足用户离线条件外,要使用第三方离线推送,你还需在[环信即时通讯云控制台](https://console.easemob.com/user/login)配置推送证书信息,例如,对于华为推送,需配置**证书名称**和**推送密钥**,并调用客户端 SDK 提供的 API 向环信服务器上传 device token。 @@ -14,7 +16,11 @@ 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)的**证书管理**页面配置推送策略,该策略配置对所有推送通道生效: @@ -44,9 +50,10 @@ 推送 token(device token)是 APNs 推送提供的推送 token,即初次启动你的应用时,APNs SDK 为客户端应用实例生成的推送 token。该 token 用于标识每台设备上的每个应用,APNs 通过该 token 明确消息是发送给哪个设备的,然后将消息转发给设备,设备再通知应用程序。你可以调用 `registerForRemoteNotifications` 方法获得 token。另外,如果退出即时通讯 IM 登录时不解绑 device token(调用 `logout` 方法时对 `aIsUnbindDeviceToken` 参数传 `NO` 表示不解绑 device token,传 `YES` 表示解绑 token),用户在推送证书有效期和 token 有效期内仍会接收到离线推送通知。 ::: -## **前提条件** +## 前提条件 使用 APNs 推送前,确保满足以下条件: - 完成 SDK 初始化,并连接到服务器,详见 [快速开始](/document/ios/quickstart.html)。 -- 了解环信即时通讯 IM API 的使用限制,详见 [使用限制](/product/limitation.html)。 \ No newline at end of file +- 了解环信即时通讯 IM API 的使用限制,详见 [使用限制](/product/limitation.html)。 +- 若使用[推送高级功能](#离线推送高级功能),需在[环信即时通讯控制台](https://console.easemob.com/user/login)上激活。 \ No newline at end of file diff --git a/docs/document/react-native/push/push_overview.md b/docs/document/react-native/push/push_overview.md index ab683b01..93bf5ac6 100644 --- a/docs/document/react-native/push/push_overview.md +++ b/docs/document/react-native/push/push_overview.md @@ -4,6 +4,8 @@ 即时通讯 IM 支持集成第三方离线消息推送服务,为 React Native 开发者提供低延时、高送达、高并发、不侵犯用户个人数据的离线消息推送服务。目前支持的手机厂商推送服务包括:APNs、Google FCM、华为、荣耀、小米、OPPO、VIVO 和魅族。 +## 离线推送过程 + 客户端断开连接或应用进程被关闭等原因导致用户离线时,即时通讯 IM 会通过第三方消息推送服务向该离线用户的设备推送消息通知。当用户再次上线时,服务器会将离线期间的消息发送给用户(这里角标表示的是离线消息数,并不是实际的未读消息数)。例如,当你离线时,有用户向你发送了消息,你的手机的通知中心会弹出消息通知,当你再次打开 app 并登录成功,即时通讯 IM SDK 会主动拉取你不在线时的消息。 除了满足用户离线条件外,要使用第三方离线推送,你还需在[环信即时通讯云控制台](https://console.easemob.com/user/login)配置推送证书信息,例如,对于华为推送,需配置**证书名称**和**推送密钥**,并调用客户端 SDK 提供的 API 向环信服务器上传 device token。 @@ -14,7 +16,11 @@ 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)的**证书管理**页面配置推送策略,该策略配置对所有推送通道生效: @@ -23,7 +29,7 @@ **注意**:多端登录时若有设备被踢下线,即使接入了 IM 离线推送,也收不到离线推送消息。 -![img](/images/android/push/push_multidevice_policy.png) +![image](/images/android/push/push_multidevice_policy.png) ## 技术原理 @@ -71,7 +77,7 @@ 1. 已开启环信即时通讯服务,详见 [开启和配置即时通讯服务](/product/enable_and_configure_IM.html)。 2. 了解环信即时通讯 IM 的使用限制,详见 [使用限制](/product/limitation.html)。 -3. 你已在 [环信即时通讯控制台](https://console.easemob.com/user/login)的**即时通讯 > 功能配置 > 功能配置总览**页面激活推送高级功能。高级功能激活后,你可以设置推送通知方式、免打扰模式和自定义推送模板。**如需关闭推送高级功能必须联系商务,因为该操作会删除所有相关配置。** +3. 若使用[推送高级功能](#离线推送高级功能),需在[环信即时通讯控制台](https://console.easemob.com/user/login)上激活。 4. 各推送使用的条件: - APNs:在苹果设备上可用; - Google FCM:设备启用了 Google Play 服务且可连接至 Google 服务器; diff --git a/docs/document/react-native/push/push_translation.md b/docs/document/react-native/push/push_translation.md index 0c6ac6d2..c99f4e20 100644 --- a/docs/document/react-native/push/push_translation.md +++ b/docs/document/react-native/push/push_translation.md @@ -7,6 +7,7 @@ 以下示例代码显示如何设置和获取推送通知的首选语言: ```typescript +// 设置推送通知的首选语言 ChatClient.getInstance() .pushManager.setPreferredNotificationLanguage(languageCode) .then(() => { @@ -15,4 +16,13 @@ ChatClient.getInstance() .catch((reason) => { console.log("Failed to set the preferred notification language.", reason); }); +// 获取推送通知的首选语言 +ChatClient.getInstance() + .pushManager.fetchPreferredNotificationLanguage() + .then((value) => { + console.log('fetchPreferredNotificationLanguage', value); + }) + .catch((e) => { + console.log('fetchPreferredNotificationLanguage', e); + }); ``` \ No newline at end of file diff --git a/docs/document/web/push/push_overview.md b/docs/document/web/push/push_overview.md index b1ebf189..29564b72 100644 --- a/docs/document/web/push/push_overview.md +++ b/docs/document/web/push/push_overview.md @@ -14,7 +14,22 @@ 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 离线推送,也收不到离线推送消息。 + +![image](/images/android/push/push_multidevice_policy.png) + +## 上传推送证书 除了满足用户离线条件外,要使用第三方离线推送,用户还需在[环信即时通讯控制台](https://console.easemob.com/user/login)配置推送证书信息,详见 [Android 推送](/document/android/push/push_fcm.html)和 [APNs 推送](/document/ios/push/push_apns.html)文档中各厂商证书配置描述。 @@ -30,19 +45,6 @@ const params = { WebIM.conn.uploadPushToken(params); ``` -## 多设备离线推送策略 - -多设备登录时,可在[环信即时通讯控制台](https://console.easemob.com/user/login)的**证书管理**页面配置推送策略,该策略配置对所有推送通道生效: - -- 所有设备离线时,才发送推送消息; -- 任一设备离线时,都发送推送消息。 - -:::tip -多端登录时若有设备被踢下线,即使接入了 IM 离线推送,也收不到离线推送消息。 -::: - -![image](/images/android/push/push_multidevice_policy.png) - ## Web 端可设置的功能 环信 IM Web SDK 支持对移动端离线推送进行如下配置: @@ -55,8 +57,4 @@ WebIM.conn.uploadPushToken(params); - 清除会话的推送通知方式的设置。 - 设置推送翻译。 - 设置推送模板。 -- 设置推送扩展功能:包括强制推送和发送静默消息。 - -其中,**推送高级功能包括设置推送通知方式、免打扰模式和自定义推送模板**。使用前,你需要在 [环信即时通讯控制台](https://console.easemob.com/user/login)的**即时通讯 > 功能配置 > 功能配置总览**页面激活。如需关闭推送高级功能必须联系商务,因为该操作会删除所有相关配置。 - -![image](/images/web/push_web_enable_push.png) +- 设置推送扩展功能:包括强制推送和发送静默消息。 \ No newline at end of file diff --git a/docs/product/product_offline_push_overview.md b/docs/product/product_offline_push_overview.md index f435c055..e302ef0e 100644 --- a/docs/product/product_offline_push_overview.md +++ b/docs/product/product_offline_push_overview.md @@ -29,15 +29,13 @@ 如果退出即时通讯 IM 登录时不解绑 device token。例如,对于 Android 平台,调用 `logout` 方法时对 `unbindToken` 参数传 `false` 时不解绑 `device token`,传 `true` 表示解绑 token),用户在推送证书有效期和 token 有效期内仍会接收到离线推送通知。 -## 离线推送配置 - -### 在环信控制台配置推送证书 +## 上传推送证书 在第三方推送服务控制台创建应用后,下载推送证书并获取证书相关信息,将推送证书上传至环信即时通讯控制台,并配置证书相关信息。 例如,对于 FCM 推送证书相关配置,详见 [FCM 推送集成文档](/document/android/push/push_fcm.html#步骤三-上传推送证书)。 -### 配置多设备离线推送策略 +## 多设备离线推送策略 多设备登录时,可在环信即时通讯控制台的证书管理页面配置推送策略,该策略配置对所有推送通道生效: @@ -46,21 +44,34 @@ **多端登录时若有设备被踢下线,即使接入了 IM 离线推送,也收不到离线推送消息。** -### 配置推送高级功能 +## 推送高级功能 -要使用离线推送的高级功能,包括推送通知方式、免打扰模式和自定义推送模板,你可以在环信即时通讯控制台的**即时通讯 > 功能配置 > 功能配置总览**页面激活推送高级功能。**如需关闭推送高级功能必须联系商务,因为该操作会删除所有相关配置。** +要使用离线推送的高级功能,包括推送通知方式、免打扰模式和使用推送模板,你可以在环信即时通讯控制台的**即时通讯 > 功能配置 > 功能配置总览**页面激活推送高级功能。**如需关闭推送高级功能必须联系商务,因为该操作会删除所有相关配置。** -### 开启第三方离线推送服务 +### 推送通知方式 -在环信即时通讯 IM SDK 初始化时开启相应的离线推送服务,例如 对于 FCM 推送,详见 [FCM 推送集成文档](/document/android/push/push_fcm.html#步骤四-fcm-推送集成)。 +推送通知方式包括以下三种: +- 接收所有离线消息的推送通知。 +- 仅接收提及某些用户的消息的推送通知。该参数推荐在群聊中使用。若提及一个或多个用户,需在创建消息时对 ext 字段传 "em_at_list":["user1", "user2" ...];若提及所有人,对该字段传 "em_at_list":"all"。 +- 不接收离线消息的推送通知。 -## 设置移动端推送通知的显示内容 +推送通知方式在 App 或单聊/群聊会话层级生效,会话级别的设置优先于 app 级别的设置,未设置推送通知方式的会话默认采用 app 的设置。 -对于推送通知的标题和内容,你可以通过多种方式设置,包括调用 API、使用推送模板以及发送消息时使用消息扩展字段。 +关于推送通知方式的设置,详见相应文档,例如,对于 Android,可参见[推送通知方式文档](/document/android/push/push_notification_mode_dnd.html#推送通知方式)。 -关于这些设置方式的使用和设置优先级,详见具体文档,例如,对于 Android,可参见[设置通知的显示内容](/document/android/push/push_display.html)。 +### 免打扰模式 + +免打扰的设置包括免打扰时间段和免打扰时长。环信 IM 在这两个时间段内不发送离线推送通知,因此,你可以通过设置免打扰模式关闭推送。若在免打扰时段或时长生效期间需要对指定用户推送消息,需设置[强制推送](/document/android/push/push_extension.html#强制推送)。 + +免打扰时间段仅在 app 级别生效,而免打扰时长对 app、单聊和群聊会话均生效。如果你既设置了免打扰时间段,又设置了免打扰时长,免打扰模式的生效时间为这两个时间段的累加。 + +关于免打扰时间段和免打扰时长的设置,详见相应文档,例如,对于 Android,可参见[免打扰模式文档](/document/android/push/push_notification_mode_dnd.html#免打扰模式)。 + +### 推送通知方式与免打扰模式之间的关系 + +对于 app 和 app 中的所有会话,免打扰模式的设置优先于推送通知方式的设置。对于二者关系的具体描述,详见相应文档,例如,对于 Android,可参见[推送通知方式与免打扰模式之间的关系文档](/document/android/push/push_notification_mode_dnd.html#免打扰模式)。 -## 使用推送模板 +### 使用推送模板 设置推送模板为推送的高级功能,使用前需要在[环信即时通讯控制台](https://console.easemob.com/user/login)的**即时通讯 > 功能配置 > 功能配置总览**页面激活推送高级功能。 @@ -79,30 +90,17 @@ 关于推送模板的详情,可以参见各端的[如何使用推送模板](/document/android/push/push_display.html#使用推送模板)的文档。 -## 设置移动端推送通知方式和免打扰模式 +## 开启第三方离线推送服务 -1. 推送通知方式包括以下三种: -- 接收所有离线消息的推送通知。 -- 仅接收提及某些用户的消息的推送通知。该参数推荐在群聊中使用。若提及一个或多个用户,需在创建消息时对 ext 字段传 "em_at_list":["user1", "user2" ...];若提及所有人,对该字段传 "em_at_list":"all"。 -- 不接收离线消息的推送通知。 - -推送通知方式在 App 或单聊/群聊会话层级生效,会话级别的设置优先于 app 级别的设置,未设置推送通知方式的会话默认采用 app 的设置。 - -关于推送通知方式的设置,详见相应文档,例如,对于 Android,可参见[推送通知方式文档](/document/android/push/push_notification_mode_dnd.html#推送通知方式)。 - -2. 免打扰模式 - -免打扰的设置包括免打扰时间段和免打扰时长。环信 IM 在这两个时间段内不发送离线推送通知,因此,你可以通过设置免打扰模式关闭推送。若在免打扰时段或时长生效期间需要对指定用户推送消息,需设置[强制推送](/document/android/push/push_extension.html#强制推送)。 - -免打扰时间段仅在 app 级别生效,而免打扰时长对 app、单聊和群聊会话均生效。如果你既设置了免打扰时间段,又设置了免打扰时长,免打扰模式的生效时间为这两个时间段的累加。 +在环信即时通讯 IM SDK 初始化时开启相应的离线推送服务,例如 对于 FCM 推送,详见 [FCM 推送集成文档](/document/android/push/push_fcm.html#步骤四-fcm-推送集成)。 -关于免打扰时间段和免打扰时长的设置,详见相应文档,例如,对于 Android,可参见[免打扰模式文档](/document/android/push/push_notification_mode_dnd.html#免打扰模式)。 +## 设置推送通知的显示内容 -3. 推送通知方式与免打扰模式之间的关系 +对于推送通知的标题和内容,你可以通过多种方式设置,包括调用 API、使用推送模板以及发送消息时使用消息扩展字段。 -对于 app 和 app 中的所有会话,免打扰模式的设置优先于推送通知方式的设置。对于二者关系的具体描述,详见相应文档,例如,对于 Android,可参见[推送通知方式与免打扰模式之间的关系文档](/document/android/push/push_notification_mode_dnd.html#免打扰模式)。 +关于这些设置方式的使用和设置优先级,详见具体文档,例如,对于 Android,可参见[设置通知的显示内容](/document/android/push/push_display.html)。 -## 设置推送翻译 +## 推送翻译 推送通知与[翻译功能](/document/android/message_translation.html)协同工作。如果用户启用自动翻译功能并发送消息,SDK 会同时发送原始消息和翻译后的消息。 @@ -110,7 +108,7 @@ 关于如何设置和获取推送通知的首选语言,详见相应文档,例如,对于 Android,可参见[设置推送翻译文档](/document/android/push/push_translation.html)。 -## 设置推送扩展 +## 推送扩展 你可以利用扩展字段实现自定义推送设置,包括仅对群组中某些成员推送通知、设置通知栏折叠、强制推送和发送静默消息。 From b584225071303d12a5ffc5ea9ad61269ad1b72f7 Mon Sep 17 00:00:00 2001 From: haoxiuwen Date: Mon, 9 Dec 2024 17:39:58 +0800 Subject: [PATCH 4/7] modify --- docs/.vuepress/sidebar/document.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/.vuepress/sidebar/document.ts b/docs/.vuepress/sidebar/document.ts index 7f84ba0a..9062ab32 100644 --- a/docs/.vuepress/sidebar/document.ts +++ b/docs/.vuepress/sidebar/document.ts @@ -125,7 +125,8 @@ const documentSidebar = [ { text: 'HarmonyOS 推送', link: 'push/push_harmony.html', only: ['harmonyos'] } ] }, - { text: '上传推送证书', link: 'push/push_easemob_console.html', only: ['react-native', 'flutter'] }, + { text: '上传推送证书', link: 'push/push_easemob_console.html', only: ['react-native'] }, + { text: '上传推送证书及绑定推送信息', link: 'push/push_easemob_console.html', only: ['flutter'] }, { text: '获取或更新推送 token', link: 'push/push_get_device_token.html', only: ['react-native'] }, { text: '发送推送 token 到环信服务器', link: 'push/push_send_token_to_server.html', only: ['react-native'] }, { text: '解析推送消息', link: 'push/push_parsing.html', only: ['android', 'ios'] }, From af2bdbe2a4586a3a7263e2dcfd5be15447541158 Mon Sep 17 00:00:00 2001 From: haoxiuwen Date: Mon, 9 Dec 2024 17:42:28 +0800 Subject: [PATCH 5/7] modify --- docs/document/flutter/push/push_easemob_console.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/document/flutter/push/push_easemob_console.md b/docs/document/flutter/push/push_easemob_console.md index 0a30c37f..d4c239ab 100644 --- a/docs/document/flutter/push/push_easemob_console.md +++ b/docs/document/flutter/push/push_easemob_console.md @@ -1,6 +1,8 @@ # 上传推送证书及绑定推送信息 -除了满足用户离线条件外,要使用第三方离线推送,你还需在[环信即时通讯云控制台](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` 进行绑定。 ## 上传推送证书 From 38ee5a6ff2525bb91aa03253c8b3f358bfe5e10c Mon Sep 17 00:00:00 2001 From: haoxiuwen Date: Mon, 9 Dec 2024 17:58:12 +0800 Subject: [PATCH 6/7] modify --- docs/document/flutter/push/push_display.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/document/flutter/push/push_display.md b/docs/document/flutter/push/push_display.md index 1fd214da..9641c088 100644 --- a/docs/document/flutter/push/push_display.md +++ b/docs/document/flutter/push/push_display.md @@ -80,7 +80,7 @@ try { :::tip 1. 设置推送模板为推送的高级功能,使用前需要在[环信即时通讯控制台](https://console.easemob.com/user/login)的**即时通讯 > 功能配置 > 功能配置总览**页面激活推送高级功能。如需关闭推送高级功能必须联系商务,因为该操作会删除所有相关配置。 -2. 推送模板相关的数据结构,详见[推送扩展字段](/server-side/push_extension.html)。 +2. 推送模板相关的数据结构,详见[推送扩展字段](/document/server-side/push_extension.html)。 ::: ### 发消息时使用推送模板 From 54cb92e13baae465c0655f32e5495b858eef8476 Mon Sep 17 00:00:00 2001 From: haoxiuwen Date: Mon, 9 Dec 2024 18:00:32 +0800 Subject: [PATCH 7/7] modify a link --- docs/document/flutter/push/push_translation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/document/flutter/push/push_translation.md b/docs/document/flutter/push/push_translation.md index afed1fb2..e4d3e0c0 100644 --- a/docs/document/flutter/push/push_translation.md +++ b/docs/document/flutter/push/push_translation.md @@ -1,6 +1,6 @@ # 设置推送翻译 -推送通知与翻译功能协同工作。如果用户启用[自动翻译](message_translation.html)功能并发送消息,SDK 会同时发送原始消息和翻译后的消息。 +推送通知与翻译功能协同工作。如果用户启用[自动翻译](/document/flutter/message_translation.html)功能并发送消息,SDK 会同时发送原始消息和翻译后的消息。 作为接收方,你可以设置你在离线时希望接收的推送通知的首选语言。如果翻译后消息的语言匹配你的设置,则翻译后消息显示在推送通知栏;否则,将显示原始消息。翻译功能由 Microsoft Azure Translation API 提供,你可以点击[这里](https://learn.microsoft.com/zh-cn/azure/ai-services/translator/language-support)了解支持的翻译语言。