diff --git a/docs/document/android/error.md b/docs/document/android/error.md index 50594d5f..140354d9 100644 --- a/docs/document/android/error.md +++ b/docs/document/android/error.md @@ -92,6 +92,7 @@ Android 中错误码的类为 `EMError`。 | 703 | CHATROOM_PERMISSION_DENIED | 无权限的聊天室操作:例如,聊天室普通成员没有权限设置聊天室管理员。 | | 704 | CHATROOM_MEMBERS_FULL | 聊天室已满:聊天室成员数量已达到创建聊天室时设置的最大人数。 | | 705 | CHATROOM_NOT_EXIST | 聊天室不存在:尝试对不存在的聊天室进行操作时提示该错误。 | +| 706 | CHATROOM_OWNER_NOT_ALLOW_LEAVE | 聊天室所有者不允许离开聊天室。若初始化时,`EMOptions#allowChatroomOwnerLeave` 参数设置为 `false`,聊天室所有者调用 `leaveChatRoom` 方法离开聊天室时会提示该错误。 | | 900 | USERINFO_USERCOUNT_EXCEED | 获取用户属性的用户个数超过 100。 | | 901 | USERINFO_DATALENGTH_EXCEED | 设置的用户属性太长。单个用户的所有属性数据不能超过 2 KB,单个 app 所有用户属性数据不能超过 10 GB。 | | 1000 | CONTACT_ADD_FAILED | 添加联系人失败。 | diff --git a/docs/document/android/group_manage.md b/docs/document/android/group_manage.md index 9e755fae..0c652bf7 100644 --- a/docs/document/android/group_manage.md +++ b/docs/document/android/group_manage.md @@ -209,6 +209,24 @@ List groupsList = result.getData(); String cursor = result.getCursor(); ``` +### 查询当前用户已加入的群组数量 + +你可以调用 `EMGroupManager#asyncGetJoinedGroupsCountFromServer` 方法从服务器获取当前用户已加入的群组数量。单个用户可加入群组数量的上限取决于订阅的即时通讯的套餐包,详见[产品价格](product/pricing.html#套餐包功能详情)。 + +```java +EMClient.getInstance().groupManager().asyncGetJoinedGroupsCountFromServer(new EMValueCallBack() { + @Override + public void onSuccess(Integer value) { + + } + + @Override + public void onError(int error, String errorMsg) { + + } +}); +``` + ### 屏蔽和解除屏蔽群消息 群成员可以屏蔽群消息和解除屏蔽群消息。 @@ -280,7 +298,7 @@ EMGroupChangeListener groupListener = new EMGroupChangeListener() { // 群主或群管理员拒绝用户的进群申请。申请人、群主和管理员(除操作者)收到该回调。 @Override - public void onRequestToJoinDeclined(String groupId, String groupName, String decliner, String reason) { + public void onRequestToJoinDeclined(String groupId, String groupName, String decliner, String reason, String applicant) { } // 用户同意进群邀请。邀请人收到该回调。 diff --git a/docs/document/android/group_overview.md b/docs/document/android/group_overview.md index 84b15b6a..4ba6e8af 100644 --- a/docs/document/android/group_overview.md +++ b/docs/document/android/group_overview.md @@ -23,7 +23,7 @@ | 创建方式 | 所有 app 用户都可以创建群组。 | 仅 [超级管理员](/document/server-side/chatroom.html#管理超级管理员) 有权限创建聊天室。 | | 类型 | 分为公开群和私有群,创建群组时可设置入群是否需获得群主和群管理员的同意,支持不同使用场景。 | 没有公开和私有之分,所有用户均可自由加入或退出。 | | 最大成员数 | 成员数支持取决于所选择的版本,最高版本支持 8,000 人。 | 成员数支持取决于所选择的版本,最高版本支持 10,000 人。如需提升该上限,请联系商务。 | -| 离线推送消息 | 离线时,会收到推送消息。 | 离线时,不会收到推送消息;成员离线超过 2 分钟会自动退出聊天室。 | +| 离线推送消息 | 离线时,会收到推送消息。 | 离线时,不会收到推送消息;成员(除聊天室白名单中的成员)离线超过 2 分钟会自动退出聊天室。 | | 离线消息存储 | 支持离线消息存储,每个会话存储 200 条消息。
用户上线时,会收到离线消息。 | 不支持离线消息存储。如果需要用户新加入聊天室时服务器推送最近的历史消息,可以联系商务开通聊天室历史消息推送,每个会话默认支持 10 条消息,最多可调整至 200 条。 | | 漫游消息存储 | 支持漫游消息存储。你可以从服务器获取指定会话的消息。 | 不支持漫游消息存储。 | | 消息可靠性 | 群组中发送的所有消息,用户都会收到。 | 当消息量大时,聊天室中超过阈值的消息会被丢弃。消息开始丢弃的阈值为每秒 100 条消息,可以根据需求进行调整。 | diff --git a/docs/document/android/message_manage.md b/docs/document/android/message_manage.md index 5bebc5ba..3c957fee 100644 --- a/docs/document/android/message_manage.md +++ b/docs/document/android/message_manage.md @@ -39,7 +39,7 @@ ### 获取本地所有会话 -你可以调用 `getAllConversationsBySort` 方法一次性获取本地所有会话。 +你可以调用 `getAllConversationsBySort` 方法一次性获取本地所有会话。若在初始化时,将 `EMOptions#setLoadEmptyConversations` 设置为 `true` 允许返回空会话,则会话列表中会包含空会话,否则不包含。 SDK 从内存中获取会话,若未从本地数据库中加载过,会先从数据库加载到内存中。获取会话后,SDK 按照会话活跃时间(最新一条消息的时间戳)的倒序返回会话,置顶会话在前,非置顶会话在后,会话列表为 `List` 结构。 diff --git a/docs/document/android/message_retrieve.md b/docs/document/android/message_retrieve.md index 815c030c..409c6623 100644 --- a/docs/document/android/message_retrieve.md +++ b/docs/document/android/message_retrieve.md @@ -32,9 +32,11 @@ 对于单聊或群聊,用户发消息时会自动将对方添加到用户的会话列表。 -你可以调用 `asyncFetchConversationsFromServer` 方法从服务端分页获取会话列表,每个会话包含最新一条历史消息。 +你可以调用 `asyncFetchConversationsFromServer` 方法从服务端分页获取会话列表。若在初始化时,将 `EMOptions#setLoadEmptyConversations` 设置为 `true` 允许返回空会话,则会话列表中会包含空会话,否则不包含。 -SDK 按照会话活跃时间(会话的最新一条消息的时间戳)的倒序返回会话列表。服务器默认存储 100 条会话,可存储 7 天。若提升这两个上限,需联系环信商务。 +SDK 按照会话活跃时间(会话的最新一条消息的时间戳)的倒序返回会话列表,每个会话对象中包含会话 ID、会话类型、是否为置顶状态、置顶时间(对于未置顶的会话,值为 `0`)以及最新一条消息。从服务端拉取会话列表后会更新本地会话列表。 + +服务器默认存储 100 条会话,可存储 7 天。若提升这两个上限,需联系环信商务。 :::notice 1. 若使用该功能,需将 SDK 升级至 4.0.3。 diff --git a/docs/document/android/message_send_receive.md b/docs/document/android/message_send_receive.md index e72cf81c..84c06399 100644 --- a/docs/document/android/message_send_receive.md +++ b/docs/document/android/message_send_receive.md @@ -99,12 +99,12 @@ EMClient.getInstance().chatManager().sendMessage(message); ### 接收消息 -你可以用注册监听 `EMMessageListener` 接收消息。 - -该 `EMMessageListener` 可以多次添加,请记得在不需要的时候移除 `listener`,如在 `activity` 的 `onDestroy()` 时。 +你可以用注册监听 `EMMessageListener` 接收消息。该 `EMMessageListener` 可以多次添加,请记得在不需要的时候移除 `listener`,如在 `activity` 的 `onDestroy()` 时。 在新消息到来时,你会收到 `onMessageReceived` 的回调,消息接收时可能是一条,也可能是多条。你可以在该回调里遍历消息队列,解析并显示收到的消息。 +对于聊天室消息,你可以通过消息的 `EMMessage#isBroadcast` 属性判断通过该消息是否为[通过 REST API 发送的聊天室全局广播消息](server-side/message_chatroom.html#发送聊天室全局广播消息)。 + ```java EMMessageListener msgListener = new EMMessageListener() { @@ -120,6 +120,8 @@ EMClient.getInstance().chatManager().addMessageListener(msgListener); EMClient.getInstance().chatManager().removeMessageListener(msgListener); ``` + + ### 撤回消息 发送方可以撤回一条发送成功的消息。调用 API 撤回消息后,服务端的该条消息(历史消息,离线消息或漫游消息)以及消息发送方和接收方的内存和数据库中的消息均会被移除,消息的接收方会收到 `onMessageRecalled` 事件。 diff --git a/docs/document/android/releasenote.md b/docs/document/android/releasenote.md index 5b561392..5f0ec4f1 100644 --- a/docs/document/android/releasenote.md +++ b/docs/document/android/releasenote.md @@ -2,20 +2,48 @@ -## 版本 V4.1.3 Dev 2023-9-25(开发版) +## 版本 V4.2.1 Dev 2023-11-17(开发版) + +### 新增特性 + +- [IM SDK] 新增[好友备注功能](user_relationship.html#设置好友备注)。 +- [IM SDK] 新增 `EMMessage#isBroadcast` 属性用于判断通过该消息是否为聊天室全局广播消息。可通过[调用 REST API 发送聊天室全局广播消息](server-side/message_chatroom.html#发送聊天室全局广播消息)。 +- [IM SDK] 新增 `EMGroupManager#asyncGetJoinedGroupsCountFromServer` 方法用于[从服务器获取当前用户已加入的群组数量](group_manage.html#查询当前用户已加入的群组数量)。 +- [IM SDK] 新增[错误码 706](error.html) `CHATROOM_OWNER_NOT_ALLOW_LEAVE`,表示聊天室所有者不允许离开聊天室。若初始化时,`EMOptions#allowChatroomOwnerLeave` 参数设置为 `false`,聊天室所有者调用 `leaveChatRoom` 方法离开聊天室时会提示该错误。 +- [IM SDK] 新增 `EMOptions#setLoadEmptyConversations` 方法用于在初始化时配置是否允许返回空会话。 +- [IM SDK] [申请入群被拒绝的回调](group_manage.html#监听群组事件) `EMGroupChangeListener#onRequestToJoinDeclined` 中新增 `decliner` 和 `applicant` 参数表示申请者和拒绝者的用户 ID。 +- [IM Demo] 好友详情页面可添加和修改好友备注。 + +### 优化 + +- [IM SDK] 统一 Agora Token 和 EaseMob Token 登录方式: `EMClient#loginWithAgoraToken` 接口废弃,统一使用 `EMClient#loginWithToken` 接口。此外,新增 EaseMob Token 即将过期及已过期的回调,即 EaseMob Token 已过期或有效期过半时也返回 `EMConnectionListener#onTokenExpired` 和 `EMConnectionListener#onTokenWillExpire` 回调。 +- [IM SDK] 优化发消息时重试的逻辑。 +- [IM SDK] 移除网络请求时对 `NetworkOnMainThreadException` 异常的捕获。 +- [IM SDK] 数据库升级逻辑优化。 + +### 修复 + +- [IM SDK] 修复网络恢复时重连 2 次的问题。 +- [IM SDK] 修复未登录时调用 `leaveChatroom` 方法返回的错误提示不准确。 +- [IM CallKit] 一对一视频通话时对方未接听,发起方进入悬浮窗状态,悬浮窗未刷新。 +- [IM CallKit] 挂断音视频后,最小化 app,最近任务中窗口中仍然显示音视频页面。 +- [IM CallKit] 悬浮窗需要点击两次才响应。 +- [IM CallKit] 多人音视频前,发起方静音,对方接听后看不到发起方的 UI 界面。 + +## 版本 V4.1.3 Dev 2023-9-25 ### 修复 - [IM SDK] 特殊场景下,SDK 退出后再登录会丢失聊天室监听事件问题。 -## 版本 V4.1.2 Dev 2023-9-5(开发版) +## 版本 V4.1.2 Dev 2023-9-5 ### 优化 - [IM SDK] 适配 Android 14 Beta。 - 适配以 Android 14 为目标平台时动态注册广播接收者必须设置 `RECEIVER_EXPORTED` 或者 `RECEIVER_NOT_EXPORTED` 的规定。 -## 版本 V4.1.1 Dev 2023-8-3(开发版) +## 版本 V4.1.1 Dev 2023-8-3 ### 修复 @@ -59,7 +87,7 @@ - [IM SDK] 修复调用接口 `EMChatManager#deleteMessagesBeforeTimestamp` 和 `EMConversation#removeMessages(long,long)` 偶现崩溃的问题; - [IM UIKit] 修复语音消息自动下载失败后点击语音图标无法再次下载的问题。 -## 版本 V4.0.3 Dev 2023-6-19(开发版) +## 版本 V4.0.3 Dev 2023-6-19 ### 新增特性 @@ -82,7 +110,7 @@ - [IM UIKit] 修复部分空指针问题。 - [IM UIKit] 修复部分场景下不展示自定义头像的问题。 -## 版本 V4.0.2 Dev 2023-4-26(开发版) +## 版本 V4.0.2 Dev 2023-4-26 ### 新增特性 @@ -108,7 +136,7 @@ - [IM SDK] 修复部分场景下用户调用下载消息附件接口时,附件未下载到私有目录的问题。 - [IM SDK] 修复某些场景下消息已读状态不更新的问题。 -## 版本 V4.0.1 Dev 2023-3-16(开发版) +## 版本 V4.0.1 Dev 2023-3-16 ### 新增特性 @@ -189,7 +217,7 @@ - [IM SDK] 适配 Android 12,修复依赖环信即时通讯云 SDK 的 APK 在 Android 12 版本的部分手机上第一次安装后打开时出现异常弹框的问题。 - [IM SDK] 修复某些场景下调用 `updateMessage` 方法导致的内存与数据库消息不一致问题。 -## 版本 V3.9.7 Dev 2022-9-30(开发版) +## 版本 V3.9.7 Dev 2022-9-30 ### 新增特性 @@ -206,7 +234,7 @@ - [IM SDK] 修复开启全链路加入(FPA)功能时导致崩溃的问题。 - [IM SDK] 修复聊天室自定义属性部分设置失败时,返回的错误码为字符串类型(修改为 Int 类型)的问题。 -## 版本 V3.9.6.1 Dev 2022-9-21(开发版) +## 版本 V3.9.6.1 Dev 2022-9-21 ### 新增特性 @@ -218,7 +246,7 @@ - [IM SDK] 优化聊天室自定义属性移除的回调方法 `onAttributesRemoved`,返回成功移除的聊天室自定义属性的 key 数组。 - [IMKit] 语音播放切换至媒体音量。 -## 版本 V3.9.6 Dev 2022-9-16(开发版) +## 版本 V3.9.6 Dev 2022-9-16 ### 新增特性 diff --git a/docs/document/android/room_manage.md b/docs/document/android/room_manage.md index ce40ceb8..ef450187 100644 --- a/docs/document/android/room_manage.md +++ b/docs/document/android/room_manage.md @@ -107,7 +107,7 @@ EMOptions options = new EMOptions(); options.setDeleteMessagesAsExitChatRoom(false); ``` -与群主无法退出群组不同,聊天室所有者可以离开聊天室,例如所有者从服务器下线则 2 分钟后自动离开聊天室。如果所有者重新进入聊天室仍是该聊天室的所有者。 +与群主无法退出群组不同,聊天室所有者可以离开聊天室,例如,所有者从服务器下线则 2 分钟后自动离开聊天室。如果所有者重新进入聊天室仍是该聊天室的所有者。若 `EMOptions#allowChatroomOwnerLeave` 参数在初始化时设置为 `false`,聊天室所有者调用 `leaveChatRoom` 方法离开聊天室时会提示错误 706 `CHATROOM_OWNER_NOT_ALLOW_LEAVE`。 ### 解散聊天室 diff --git a/docs/document/android/room_overview.md b/docs/document/android/room_overview.md index 1635b990..58acdc0a 100644 --- a/docs/document/android/room_overview.md +++ b/docs/document/android/room_overview.md @@ -4,7 +4,7 @@ ## 功能描述 -聊天室是支持多人加入的类似 Twitch 的组织,聊天室中的成员没有固定关系,一旦离线后,不会收到聊天室中的任何消息,超过 2 分钟会自动退出聊天室。聊天室可以应用于直播、消息广播等。若需调整该时间,需联系环信商务经理。 +聊天室是支持多人加入的类似 Twitch 的组织,聊天室中的成员没有固定关系,一旦离线后,不会收到聊天室中的任何消息,(除了聊天室白名单中的成员)超过 2 分钟会自动退出聊天室。聊天室可以应用于直播、消息广播等。若需调整该时间,需联系环信商务经理。 聊天室的使用限制视不同套餐版本而定,请参见 [使用限制](/product/limitation.html)。 diff --git a/docs/document/android/user_relationship.md b/docs/document/android/user_relationship.md index 5b72c3e3..bf14f7de 100644 --- a/docs/document/android/user_relationship.md +++ b/docs/document/android/user_relationship.md @@ -13,16 +13,13 @@ SDK 提供用户关系管理功能,包括好友列表管理和黑名单管理 ## 技术原理 -环信即时通讯 IM Android SDK 提供 `EMContactManager` 类实现好友的添加移除,黑名单的添加移除等功能。主要方法如下: +环信即时通讯 IM Android SDK 提供 `EMContactManager` 类实现好友的添加移除,黑名单的添加移除等功能。 -- `addContact` 申请添加好友。 -- `acceptInvitation` 同意好友申请。 -- `declineInvitation` 拒绝好友申请。 -- `deleteContact` 删除好友。 -- `getAllContactsFromServer` 从服务器获取好友列表。 -- `addUserToBlackList` 添加用户到黑名单。 -- `removeUserFromBlackList` 将用户从黑名单移除。 -- `getBlackListFromServer` 从服务器获取黑名单列表。 +- 添加、删除好友。 +- 设置和获取好友备注。 +- 从服务器获取好友列表。 +- 将用户添加到或移除黑名单。 +- 从服务器获取黑名单列表。 ## 前提条件 @@ -106,21 +103,120 @@ EMClient.getInstance().contactManager().deleteContact(username); 调用 `deleteContact` 删除好友后,对方会收到 `onContactDeleted` 回调。 +#### 设置好友备注 + +你可以调用 `asyncSetContactRemark` 方法设置单个好友的备注。 + +好友备注的长度不能超过 100 个字符。 + +```java +EMClient.getInstance().contactManager().asyncSetContactRemark(userId, remark, new EMCallBack() { + @Override + public void onSuccess() { + + } + + @Override + public void onError(int code, String error) { + + } +}); +``` + #### 获取好友列表 -你可以从服务器获取好友列表,也可以从本地数据库获取已保存的好友列表。 +- 从服务端获取好友列表: -:::notice -需要从服务器获取好友列表之后,才能从本地数据库获取到好友列表。 -::: +调用以下两种方法返回好友列表,其中每个好友对象包含好友的用户 ID 和好友备注。 -示例代码如下: +```java +//一次性从服务端获取整个好友列表 +EMClient.getInstance().contactManager().asyncFetchAllContactsFromServer(new EMValueCallBack>() { + @Override + public void onSuccess(List value) { + + } + + @Override + public void onError(int error, String errorMsg) { + + } +}); + +//从服务端分页获取好友列表 +// limit 的取值范围为 [1,50] +List contacts=new ArrayList<>(); +String cursor= ""; +int limit=20; +doAsyncFetchAllContactsFromServer(contacts,cursor,limit); + +private void doAsyncFetchAllContactsFromServer(List contacts, String cursor, int limit) { + EMClient.getInstance().contactManager().asyncFetchAllContactsFromServer(limit, cursor, new EMValueCallBack>() { + @Override + public void onSuccess(EMCursorResult value) { + List data = value.getData(); + String resultCursor = value.getCursor(); + if(!CollectionUtils.isEmpty(data)) { + contacts.addAll(data); + } + if(!TextUtils.isEmpty(resultCursor)) { + doAsyncFetchAllContactsFromServer(contacts, resultCursor, limit); + } + } + + @Override + public void onError(int error, String errorMsg) { + + } + }); +``` + +你也可以调用 `getAllContactsFromServer` 方法从服务器获取所有好友的列表,该列表只包含好友的用户 ID。 ```java // 从服务器获取好友列表。 // 同步方法,会阻塞当前线程。异步方法为 asyncGetAllContactsFromServer(EMValueCallBack)。 List usernames = EMClient.getInstance().contactManager().getAllContactsFromServer(); -// 从本地数据库获取好友列表。 +``` + +- 从本地获取好友列表 + +调用以下两种方法返回好友列表,其中每个好友对象包含好友的用户 ID 和好友备注。 + +:::notice +需要从服务器获取好友列表之后,才能从本地获取到好友列表。 +::: + +```java +//从本地获取单个好友 +try { + EMContact emContact = EMClient.getInstance().contactManager().fetchContactFromLocal(userId); + String remark = emContact.getRemark(); + String username = emContact.getUsername(); + EMLog.e(TAG, "fetchContactFromLocal success, username:" + username + ",remark:" + remark); +} catch (HyphenateException e) { + EMLog.e(TAG, "fetchContactFromLocal error:" + e.getMessage()); +}; + +//一次性从本地获取整个好友列表 +EMClient.getInstance().contactManager().asyncFetchAllContactsFromLocal(new EMValueCallBack>() { + @Override + public void onSuccess(List value) { + + } + + @Override + public void onError(int error, String errorMsg) { + + } +}); +``` + +你也可以调用 `getContactsFromLocal` 方法从本地获取所有好友的列表,该列表只包含好友的用户 ID。 + +示例代码如下: + +```java List usernames = EMClient.getInstance().contactManager().getContactsFromLocal(); ``` diff --git a/docs/document/flutter/message_retrieve.md b/docs/document/flutter/message_retrieve.md index 40ea4d6a..d3c13466 100644 --- a/docs/document/flutter/message_retrieve.md +++ b/docs/document/flutter/message_retrieve.md @@ -32,9 +32,9 @@ 对于单聊或群聊,用户发消息时会自动将对方添加到用户的会话列表。 -你可以调用 `fetchConversation` 方法从服务端分页获取会话列表,每个会话包含最新一条历史消息。 +你可以调用 `fetchConversation` 方法从服务端分页获取会话列表。SDK 按照会话活跃时间(会话的最新一条消息的时间戳)的倒序返回会话列表,每个会话对象中包含会话 ID、会话类型、是否为置顶状态、置顶时间(对于未置顶的会话,值为 `0`)以及最新一条消息。从服务端拉取会话列表后会更新本地会话列表。 -SDK 按照会话活跃时间(会话的最新一条消息的时间戳)的倒序返回会话列表。服务器默认存储 100 条会话,可存储 7 天。若提升这两个上限,需联系环信商务。 +服务器默认存储 100 条会话,可存储 7 天。若提升这两个上限,需联系环信商务。 :::tip 1. 若使用该功能,需将 SDK 升级至 4.0.0。 diff --git a/docs/document/flutter/room_manage.md b/docs/document/flutter/room_manage.md index 4a13320d..7e0f1476 100644 --- a/docs/document/flutter/room_manage.md +++ b/docs/document/flutter/room_manage.md @@ -2,7 +2,7 @@ -聊天室是支持多人沟通的即时通讯系统。聊天室中的成员没有固定关系,一旦离线后,不会收到聊天室中的任何消息,超过 2 分钟会自动退出聊天室。聊天室可以应用于直播、消息广播等。若需调整该时间,需联系环信商务经理。 +聊天室是支持多人沟通的即时通讯系统。聊天室中的成员没有固定关系,一旦离线后,不会收到聊天室中的任何消息,(除了聊天室白名单中的成员)超过 2 分钟会自动退出聊天室。聊天室可以应用于直播、消息广播等。若需调整该时间,需联系环信商务经理。 本文介绍如何使用环信即时通讯 IM SDK 在实时互动 app 中创建和管理聊天室,并实现聊天室的相关功能。 diff --git a/docs/document/ios/error.md b/docs/document/ios/error.md index 08148017..42defdb2 100644 --- a/docs/document/ios/error.md +++ b/docs/document/ios/error.md @@ -94,6 +94,7 @@ iOS 的错误码只有当操作出错的时候才会有返回值,否则返回 | 703 | EMErrorChatroomPermissionDenied | 无权限的聊天室操作:例如,聊天室普通成员没有权限设置聊天室管理员。 | | 704 | EMErrorChatroomMembersFull | 聊天室已满:聊天室成员数量已达到创建聊天室时设置的最大人数。| | 705 | EMErrorChatroomNotExist | 聊天室不存在:尝试对不存在的聊天室进行操作时提示该错误。 | +| 706 | EMErrorChatroomOwnerNotAllowLeave | 聊天室所有者不允许离开聊天室。若初始化时,`EMOptions#allowChatroomOwnerLeave` 参数设置为 `false`,聊天室所有者调用 `leaveChatroom` 方法离开聊天室时会提示该错误。 | | 900 | EMErrorUserCountExceed | 获取用户属性的用户个数超过 100。 | | 901 | EMErrorUserInfoDataLengthExceed | 设置的用户属性太长。单个用户的所有属性数据不能超过 2 KB,单个 app 所有用户属性数据不能超过 10 GB。 | | 1000 | EMErrorContactAddFailed | 添加联系人失败。 | diff --git a/docs/document/ios/group_manage.md b/docs/document/ios/group_manage.md index 8d5573ab..8b1a5f66 100644 --- a/docs/document/ios/group_manage.md +++ b/docs/document/ios/group_manage.md @@ -214,6 +214,16 @@ do { } while (result && result.list < pageSize); ``` +### 查询当前用户已加入的群组数量 + +你可以调用 `EMGroupManager#getJoinedGroupsCountFromServerWithCompletion` 方法用于从服务器获取当前用户已加入的群组数量。单个用户可加入群组数量的上限取决于你订阅的即时通讯的套餐包,详见[产品价格](product/pricing.html#套餐包功能详情)。 + +```objectivec +[EMClient.sharedClient.groupManager getJoinedGroupsCountFromServerWithCompletion:^(NSInteger groupCount, EMError * _Nullable aError) { + + }]; +``` + ### 屏蔽和解除屏蔽群消息 #### 屏蔽群消息 @@ -280,9 +290,9 @@ do { } // 群主或群管理员拒绝用户的进群申请。申请人、群主和管理员(除操作者)收到该回调。 -- (void)joinGroupRequestDidDecline:(NSString *)aGroupId reason:(NSString *)aReason +- (void)joinGroupRequestDidDecline:(NSString *)aGroupId reason:(NSString *)aReason decliner:(NSString *)aDecliner applicant:(NSString *)aApplicant { - + } // 用户同意进群邀请。邀请人收到该回调。 diff --git a/docs/document/ios/message_manage.md b/docs/document/ios/message_manage.md index 802daf5b..088e427d 100644 --- a/docs/document/ios/message_manage.md +++ b/docs/document/ios/message_manage.md @@ -38,7 +38,7 @@ ### 获取本地所有会话 -你可以调用 `getAllConversations:` 方法一次性获取本地所有会话。 +你可以调用 `getAllConversations:` 方法一次性获取本地所有会话。若在初始化时,将 `EMOptions#loadEmptyConversations` 设置为 `YES` 允许返回空会话,则会话列表中会包含空会话,否则不包含。 SDK 从内存中获取会话,若未从本地数据库中加载过,会先从数据库加载到内存中。获取会话后,SDK 按照会话活跃时间(最新一条消息的时间戳)的倒序返回会话,置顶会话在前,非置顶会话在后,会话列表为 `List` 结构。 diff --git a/docs/document/ios/message_retrieve.md b/docs/document/ios/message_retrieve.md index c1701453..a501de33 100644 --- a/docs/document/ios/message_retrieve.md +++ b/docs/document/ios/message_retrieve.md @@ -30,9 +30,11 @@ ### 从服务器分页获取会话列表 -你可以调用 `getConversationsFromServerWithCursor:pageSize:completion` 方法从服务端分页获取会话列表,每个会话包含最新一条历史消息。 +你可以调用 `getConversationsFromServerWithCursor:pageSize:completion` 方法从服务端分页获取会话列表。若在初始化时,将 `EMOptions#loadEmptyConversations` 设置为 `YES` 允许返回空会话,则会话列表中会包含空会话,否则不包含。 -SDK 按照会话活跃时间(会话的最新一条消息的时间戳)的倒序返回会话列表。服务器默认存储 100 条会话,可存储 7 天。若提升这两个上限,需联系环信商务。 +SDK 按照会话活跃时间(会话的最新一条消息的时间戳)的倒序返回会话列表,每个会话对象中包含会话 ID、会话类型、是否为置顶状态、置顶时间(对于未置顶的会话,值为 `0`)以及最新一条消息。从服务端拉取会话列表后会更新本地会话列表。 + +服务器默认存储 100 条会话,可存储 7 天。若提升这两个上限,需联系环信商务。 :::notice 1. 若使用该功能,需将 SDK 升级至 4.0.3。 diff --git a/docs/document/ios/message_send_receive.md b/docs/document/ios/message_send_receive.md index 02ffaefb..0df3ad25 100644 --- a/docs/document/ios/message_send_receive.md +++ b/docs/document/ios/message_send_receive.md @@ -82,12 +82,12 @@ message.priority = EMChatRoomMessagePriorityHigh; ### 接收消息 -你可以用注册监听 `EMChatManagerDelegate` 接收消息。 - -该 `EMChatManagerDelegate` 可以多次添加,请记得在不需要的时候移除 `Delegate`,如在`ViewController` `dealloc()` 时。 +你可以用注册监听 `EMChatManagerDelegate` 接收消息。该 `EMChatManagerDelegate` 可以多次添加,请记得在不需要的时候移除 `Delegate`,如在`ViewController` `dealloc()` 时。 在新消息到来时,你会收到 `messagesDidReceive` 的回调,消息接收时可能是一条,也可能是多条。你可以在该回调里遍历消息队列,解析并显示收到的消息。 +对于聊天室消息,你可以通过消息的 `EMChatMessage#broadcast` 属性判断通过该消息是否为[通过 REST API 发送的聊天室全局广播消息](server-side/message_chatroom.html#发送聊天室全局广播消息)。 + ```objectivec // 添加代理。 [[EMClient sharedClient].chatManager addDelegate:self delegateQueue:nil]; diff --git a/docs/document/ios/releasenote.md b/docs/document/ios/releasenote.md index e6f62417..efebc8ec 100644 --- a/docs/document/ios/releasenote.md +++ b/docs/document/ios/releasenote.md @@ -2,7 +2,29 @@ -## 版本 V4.1.1 Dev 2023-8-03(开发版) +## 版本 V4.2.0 Dev 2023-11-13(开发版) + +### 新增特性 + +- [IM SDK] 新增[好友备注功能](user_relationship.html#设置好友备注)。 +- [IM SDK] 新增 `EMChatMessage#broadcast` 属性用于判断通过该消息是否为聊天室全局广播消息。可通过[调用 REST API 发送聊天室全局广播消息](server-side/message_chatroom.html#发送聊天室全局广播消息)。 +- [IM SDK] 新增 `EMGroupManager#getJoinedGroupsCountFromServerWithCompletion` 方法用于[从服务器获取当前用户已加入的群组数量](group_manage.html#查询当前用户已加入的群组数量)。 +- [IM SDK] 新增[错误码 706](error.html) `EMErrorChatroomOwnerNotAllowLeave`,表示聊天室所有者不允许离开聊天室。若初始化时,`EMOptions#canChatroomOwnerLeave` 参数设置为 `false`,聊天室所有者调用 `leaveChatroom` 方法离开聊天室时会提示该错误。 +- [IM SDK] 新增 `EMOptions#loadEmptyConversations` 属性用于在初始化时配置是否允许返回空会话。 +- [IM SDK] 申请入群被拒绝的回调 `EMGroupManagerDelegate#joinGroupRequestDidDecline:reason:decliner:applicant:` 中新增 `decliner` 和 `applicant` 参数表示申请者和拒绝者的用户 ID。 +- [IM Demo] 好友详情页面可添加和修改好友备注。 + +### 优化 + +- [IM SDK] 统一 Agora Token 和 EaseMob Token 登录方式:`EMClient#loginWithUsername:agoraToken:` 接口废弃,统一使用 `EMClient#loginWithUsername:token` 接口。此外,新增 EaseMob Token 即将过期及已过期的回调,即 EaseMob Token 已过期或有效期过半时也返回 `EMClientDelegate#tokenDidExpire` 和 `EMClientDelegate#tokenWillExpire` 回调。 +- [IM SDK] 优化发消息时重试的逻辑。 +- [IM SDK] 数据库升级逻辑优化。 + +### 修复 + +- [IM SDK] 修复网络恢复时重连 2 次的问题。 + +## 版本 V4.1.1 Dev 2023-8-03 ### 修复 @@ -44,7 +66,7 @@ - [IM SDK] 修复在 ARM 64 模拟器下偶现的文件类消息附件路径不对的问题; - [IM APP] 修复 Demo 偶现的 UI 刷新崩溃的问题。 -## 版本 V4.0.3 Dev 2023-6-19(开发版) +## 版本 V4.0.3 Dev 2023-6-19 ### 新增特性 @@ -64,7 +86,7 @@ - [IM UIKit] 修复发送图片消息时,`compressionRatio` 配置为 1.0 未发送原图的问题。 -## 版本 V4.0.2 Dev 2023-4-26(开发版) +## 版本 V4.0.2 Dev 2023-4-26 ### 新增特性 @@ -83,7 +105,7 @@ - [IM SDK] 优化日志回调逻辑。 - [IM SDK] 移除代码中使用的 ECB 加密。 -## 版本 V4.0.1 Dev 2023-3-16(开发版) +## 版本 V4.0.1 Dev 2023-3-16 ### 新增特性 @@ -127,7 +149,7 @@ [IM SDK] 修复某些场景下调用 `updateMessage` 方法导致的内存与数据库消息不一致问题。 -## 版本 V3.9.7.1 Dev 2022-9-30(开发版) +## 版本 V3.9.7.1 Dev 2022-9-30 ### 新增特性 @@ -143,7 +165,7 @@ - [IM SDK] 修复极少数场景下打印日志导致崩溃的问题。 - [IM SDK] 修复开启全链路加入(FPA)功能时导致崩溃的问题。 -## 版本 V3.9.6.1 Dev 2022-9-21(开发版) +## 版本 V3.9.6.1 Dev 2022-9-21 ### 优化 @@ -151,7 +173,7 @@ - [IM SDK] 优化聊天室自定义属性移除的回调方法 `onAttributesRemoved`,返回成功移除的聊天室自定义属性的 key 数组。 - [IMKit] 语音播放切换至媒体音量。 -## 版本 V3.9.6 Dev 2022-9-16(开发版) +## 版本 V3.9.6 Dev 2022-9-16 ### 新增特性 @@ -167,7 +189,7 @@ - [IM SDK] 修复少数场景下,同步或拉取消息时消息量较大时收取失败的问题。 - [Demo] 修复部分 Demo bug。 -## 版本 V3.9.5 2022-8-2(开发版) +## 版本 V3.9.5 2022-8-2 ### 新增特性 diff --git a/docs/document/ios/room_manage.md b/docs/document/ios/room_manage.md index 5f35cf39..df456324 100644 --- a/docs/document/ios/room_manage.md +++ b/docs/document/ios/room_manage.md @@ -2,7 +2,7 @@ -聊天室是支持多人沟通的即时通讯系统。聊天室中的成员没有固定关系,一旦离线后,不会收到聊天室中的任何消息,超过 2 分钟会自动退出聊天室。聊天室可以应用于直播、消息广播等。若需调整该时间,需联系环信商务经理。 +聊天室是支持多人沟通的即时通讯系统。聊天室中的成员没有固定关系,一旦离线后,不会收到聊天室中的任何消息,(除了聊天室白名单中的成员)超过 2 分钟会自动退出聊天室。聊天室可以应用于直播、消息广播等。若需调整该时间,需联系环信商务经理。 本文介绍如何使用环信即时通讯 IM SDK 在实时互动 app 中创建和管理聊天室,并实现聊天室的相关功能。 @@ -101,7 +101,7 @@ EMOptions *retOpt = [EMOptions optionsWithAppkey:@"appkey"]; retOpt.isDeleteMessagesWhenExitChatRoom = NO; ``` -与群主无法退出群组不同,聊天室所有者可以离开聊天室,例如所有者从服务器下线则 2 分钟后自动离开聊天室。如果所有者重新进入聊天室仍是该聊天室的所有者。 +与群主无法退出群组不同,聊天室所有者可以离开聊天室,例如所有者从服务器下线则 2 分钟后自动离开聊天室。如果所有者重新进入聊天室仍是该聊天室的所有者。若 `EMOptions#canChatroomOwnerLeave` 参数在初始化时设置为 `false`,聊天室所有者调用 `leaveChatroom` 方法离开聊天室时会提示错误 706 `EMErrorChatroomOwnerNotAllowLeave`。 ### 解散聊天室 diff --git a/docs/document/ios/user_relationship.md b/docs/document/ios/user_relationship.md index 6410b097..ca3e731a 100644 --- a/docs/document/ios/user_relationship.md +++ b/docs/document/ios/user_relationship.md @@ -11,14 +11,14 @@ SDK 提供用户关系管理功能,包括好友列表管理和黑名单管理 ## 技术原理 -环信即时通讯 IM iOS SDK 可以实现好友的添加移除,黑名单的添加移除等功能,主要调用方法如下: +环信即时通讯 IM iOS SDK 可以实现好友的添加移除,黑名单的添加移除等功能: -- `addContact` 申请添加好友。 -- `deleteContact` 删除好友。 -- `getContactsFromServerWithCompletion` 从服务器获取好友列表。 -- `addUserToBlackList` 添加黑名单。 -- `removeUserFromBlackList` 删除黑名单。 -- `getBlackListFromServerWithCompletion` 从服务器获取黑名单列表。 +- 添加、删除好友。 +- 设置好友备注。 +- 获取好友列表。 +- 添加黑名单。 +- 删除黑名单。 +- 从服务器获取黑名单列表。 ## 前提条件 @@ -136,15 +136,41 @@ if (!aError) { { } ``` +#### 设置好友备注 + +你可以调用 `setContactRemark` 方法设置好友备注。 + +好友备注的长度不能超过 100 个字符。 + +```objective-c +[EMClient.sharedClient.contactManager setContactRemark:@"userId" remark:@"remark" completion:^(EMContact * _Nullable contact, EMError * _Nullable aError) { + + }]; +``` + #### 获取好友列表 -你可以从服务器获取好友列表,也可以从本地数据库获取已保存的好友列表。 +你可以从服务器获取好友列表,也可以从本地获取已保存的好友列表。 -:::notice -需要从服务器获取好友列表之后,才能从本地数据库获取到好友列表。 -::: +- 从服务端获取好友列表 -示例代码如下: +调用以下两种方法返回好友列表,其中每个好友对象包含好友的用户 ID 和好友备注。 + +```objectivec + +//一次性从服务端获取整个好友列表 +[EMClient.sharedClient.contactManager getAllContactsFromServerWithCompletion:^(NSArray * _Nullable aList, EMError * _Nullable aError) { + + }]; + +//从服务端分页获取好友列表 +//pageSize 的取值范围为 [1,50] +[EMClient.sharedClient.contactManager getContactsFromServerWithCursor:@"" pageSize:50 completion:^(EMCursorResult * _Nullable aResult, EMError * _Nullable aError) { + + }]; +``` + +你也可以调用 `getContactsFromServerWithCompletion` 方法从服务器获取所有好友的列表。该列表只包含好友的用户 ID。 ```objectivec // 从服务器获取好友列表。 @@ -156,7 +182,31 @@ if (!aError) { NSLog(@"获取所有好友失败的原因 %@", aError.errorDescription); } }]; -// 从本地数据库获取好友列表。 +``` + +- 从本地获取好友列表 + +:::notice +需要从服务器获取好友列表之后,才能从本地获取到好友列表。 +::: + +调用以下两种方法返回好友列表,其中每个好友对象包含好友的用户 ID 和好友备注。 + +```objectivec +//从本地获取单个好友 +EMContact* contact = [EMClient.sharedClient.contactManager getContact:@"userId"]; + + +//一次性从本地获取整个好友列表 +NSArray* contacts = [EMClient.sharedClient.contactManager getAllContacts]; + +``` + +你也可以调用 `getContacts` 方法从本地获取所有好友的列表,该列表只包含好友的用户 ID。 + +示例代码如下: + +```objectivec NSArray *userlist = [[EMClient sharedClient].contactManager getContacts]; ``` diff --git a/docs/document/react-native/message_manage.md b/docs/document/react-native/message_manage.md index 0d840258..d3c5e045 100644 --- a/docs/document/react-native/message_manage.md +++ b/docs/document/react-native/message_manage.md @@ -28,9 +28,9 @@ 对于单聊或群聊,用户发消息时会自动将对方添加到用户的会话列表。 -你可以调用 `fetchConversationsFromServerWithCursor` 方法从服务端分页获取会话列表,每个会话包含最新一条历史消息。 +你可以调用 `fetchConversationsFromServerWithCursor` 方法从服务端分页获取会话列表。SDK 按照会话活跃时间(会话的最新一条消息的时间戳)的倒序返回会话列表,每个会话对象中包含会话 ID、会话类型、是否为置顶状态、置顶时间(对于未置顶的会话,值为 `0`)以及最新一条消息。从服务端拉取会话列表后会更新本地会话列表。 -SDK 按照会话活跃时间(会话的最新一条消息的时间戳)的倒序返回会话列表。服务器默认存储 100 条会话,可存储 7 天。若提升这两个上限,需联系环信商务。 +服务器默认存储 100 条会话,可存储 7 天。若提升这两个上限,需联系环信商务。 :::tip 1. 若使用该功能,需将 SDK 升级至 1.2.0。 diff --git a/docs/document/unity/message_retrieve.md b/docs/document/unity/message_retrieve.md index 951dbd37..99052a31 100644 --- a/docs/document/unity/message_retrieve.md +++ b/docs/document/unity/message_retrieve.md @@ -34,7 +34,7 @@ 你可以调用 `GetConversationsFromServerWithCursor` 方法从服务端分页获取会话列表。通过设置该方法中的 `pinOnly` 参数确定是否只获取置顶会话列表: -- 若 `pinOnly` 为 `false`,获取包括置顶和未置顶会话的列表。SDK 按照会话活跃时间(会话的最新一条消息的时间戳)的倒序返回会话列表。服务器默认存储 100 条会话,可存储 7 天。若提升这两个上限,需联系环信商务。 +- 若 `pinOnly` 为 `false`,获取包括置顶和未置顶会话的列表。SDK 按照会话活跃时间(会话的最新一条消息的时间戳)的倒序返回会话列表,每个会话对象中包含会话 ID、会话类型、是否为置顶状态、置顶时间(对于未置顶的会话,值为 `0`)以及最新一条消息。从服务端拉取会话列表后会更新本地会话列表。服务器默认存储 100 条会话,可存储 7 天。若提升这两个上限,需联系环信商务。 - 若为 `true` 仅获取置顶会话列表,最多可拉取 50 个置顶会话。SDK 按照会话置顶时间的倒序返回。 :::notice diff --git a/docs/document/web/message_retrieve.md b/docs/document/web/message_retrieve.md index fbd5660d..7259cd40 100644 --- a/docs/document/web/message_retrieve.md +++ b/docs/document/web/message_retrieve.md @@ -30,7 +30,7 @@ 对于单聊或群聊,用户发消息时,会自动将对方添加到用户的会话列表。 -你可以调用 `getServerConversations` 方法从服务端分页获取会话列表,每个会话包含最新一条历史消息。SDK 按照会话活跃时间(会话的最新一条消息的时间戳)的倒序返回会话列表。服务器默认存储 100 条会话,可存储 7 天。若提升这两个上限,需联系环信商务。 +你可以调用 `getServerConversations` 方法从服务端分页获取会话列表。SDK 按照会话活跃时间(会话的最新一条消息的时间戳)的倒序返回会话列表。服务器默认存储 100 条会话,可存储 7 天。若提升这两个上限,需联系环信商务。 :::notice 1. 若使用该功能,需将 SDK 升级至 4.1.7 或以上版本。 diff --git a/docs/document/web/message_send_receive.md b/docs/document/web/message_send_receive.md index 34c8e38d..6f27471f 100644 --- a/docs/document/web/message_send_receive.md +++ b/docs/document/web/message_send_receive.md @@ -106,6 +106,8 @@ function sendTextMessage() { 当消息到达时,接收方会收到 `onXXXMessage` 回调。每个回调包含一条或多条消息。你可以遍历消息列表,并可以解析和展示回调中的消息。 +对于聊天室消息,你可以通过消息的 `broadcast` 属性判断通过该消息是否为[通过 REST API 发送的聊天室全局广播消息](server-side/message_chatroom.html#发送聊天室全局广播消息)。 + ```javascript // 使用 `addEventHandler` 监听回调事件 conn.addEventHandler("eventName", { diff --git a/docs/document/web/releasenote.md b/docs/document/web/releasenote.md index 106a244e..674fe621 100644 --- a/docs/document/web/releasenote.md +++ b/docs/document/web/releasenote.md @@ -2,6 +2,22 @@ +## 版本 V4.3.0 Dev 2023-11-17(开发版) + +### 新增特性 + +- [IM SDK] 新增[好友备注功能](user_relationship.html#设置好友备注)。 +- [IM SDK] 消息结构新增 `broadcast` 字段, 用于判断该消息是否为聊天室全局广播消息。可通过[调用 REST API 发送聊天室全局广播消息](server-side/message_chatroom.html#发送聊天室全局广播消息)。 + +### 优化 + +- [IM SDK] Token 登录增加即将过期及已过期的回调,即 Token 已过期或有效期过半时也触发 `onTokenExpired` 和 `onTokenWillExpire` 回调。 + +### 修复 + +- [IM SDK] 修复会话列表最后一条消息中获取不到 `reaction` 的问题。 + + ## 版本 V4.2.1 Dev 2023-09-27(开发版) ### 新增特性 @@ -9,7 +25,7 @@ - [IM SDK] 新增 `LocalCache` 模块[实现本地会话数据管理](message_manage.html)。 - [IM SDK] 用户申请加群被拒绝的回调 `joinPublicGroupDeclined` 中增加申请人的用户 ID。 -## 版本 V4.2.0 Dev 2023-07-27(开发版) +## 版本 V4.2.0 Dev 2023-07-27 ### 新增特性 @@ -20,7 +36,7 @@ 修复发送不必要的消息送达回执的问题。 -## 版本 V4.1.7 Dev 2023-06-08(开发版) +## 版本 V4.1.7 Dev 2023-06-08 ### 新增特性 @@ -41,7 +57,7 @@ - addUsersToBlocklist:将好友添加至黑名单。 - removeUserFromBlocklist:将好友移出黑名单。 -## 版本 V4.1.6 Dev 2023-04-17(开发版) +## 版本 V4.1.6 Dev 2023-04-17 ### 新增特性 @@ -65,7 +81,7 @@ - [IM SDK] 修复 TypeScript 代码的一些类型错误。 - [IM SDK] 修复 `getHistoryMessages` 方法无法捕获错误的问题。 -## 版本 V4.1.3 Dev 2023-02-21(开发版) +## 版本 V4.1.3 Dev 2023-02-21 #### 新增特性 @@ -83,7 +99,7 @@ - [IM SDK] 修复 `getConversationlist` 方法的返回值缺少 `customExts` 字段的问题。 - [IM SDK] 修复设置 `useOwnUploadFun` 允许用户自己上传图片时图片消息中的 `size` 字段不生效的问题。 -## 版本 V4.1.2 Dev 2022-11-08(开发版) +## 版本 V4.1.2 Dev 2022-11-08 ### 新增特性 @@ -100,7 +116,7 @@ [IM SDK] 修复调用 `create` 方法创建附件消息时 `file_length` 参数不生效的问题。 -## 版本 V4.1.1 Dev 2022-9-26(开发版) +## 版本 V4.1.1 Dev 2022-9-26 ### 优化 @@ -112,7 +128,7 @@ - [IM SDK] 修复聊天室自定义属性功能中的问题; - [IM SDK] 修复 `miniCore` 中的 `uploadFile` 方法中的问题。 -## 版本 V4.1.0 Dev 2022-9-16(开发版) +## 版本 V4.1.0 Dev 2022-9-16 ### 新增特性 diff --git a/docs/document/web/room_manage.md b/docs/document/web/room_manage.md index d987e4db..6aa4a94e 100644 --- a/docs/document/web/room_manage.md +++ b/docs/document/web/room_manage.md @@ -2,7 +2,7 @@ -聊天室是支持多人沟通的即时通讯系统。聊天室中的成员没有固定关系,用户离线后,超过 2 分钟会自动退出聊天室。聊天室成员离线后,不会收到推送消息。聊天室可以应用于直播、消息广播等。若需调整该时间,需联系环信商务经理。 +聊天室是支持多人沟通的即时通讯系统。聊天室中的成员没有固定关系,一旦离线后,不会收到聊天室中的任何消息,(除了聊天室白名单中的成员)超过 2 分钟会自动退出聊天室。聊天室可以应用于直播、消息广播等。若需调整该时间,需联系环信商务经理。 本文介绍如何使用环信即时通讯 IM SDK 在实时互动 app 中创建和管理聊天室,并实现聊天室的相关功能。 diff --git a/docs/document/web/room_overview.md b/docs/document/web/room_overview.md index 89a425e0..50202354 100644 --- a/docs/document/web/room_overview.md +++ b/docs/document/web/room_overview.md @@ -4,7 +4,7 @@ ## 功能描述 -聊天室是支持多人加入的类似 Twitch 的组织。聊天室中的成员没有固定关系,用户离线后,超过 2 分钟会自动退出聊天室。聊天室成员在离线后,不会收到推送消息。聊天室可以应用于直播、消息广播等。若需调整该时间,需联系环信商务经理。 +聊天室是支持多人加入的类似 Twitch 的组织。聊天室中的成员没有固定关系,一旦离线后,不会收到聊天室中的任何消息,(除了聊天室白名单中的成员)超过 2 分钟会自动退出聊天室。聊天室可以应用于直播、消息广播等。若需调整该时间,需联系环信商务经理。 聊天室的使用限制视不同套餐版本而定,请参见 使用限制。 diff --git a/docs/document/web/user_relationship.md b/docs/document/web/user_relationship.md index c9512245..4bbc1225 100644 --- a/docs/document/web/user_relationship.md +++ b/docs/document/web/user_relationship.md @@ -9,9 +9,8 @@ SDK 提供用户关系管理功能,包括好友列表管理和黑名单管理 ## 技术原理 环信即时通讯 IM Web SDK 提供以下好友管理功能: -- 请求添加好友; -- 接受和拒绝好友请求; -- 删除好友; +- 添加、删除好友; +- 设置好友备注; - 查询好友列表; - 添加用户至黑名单; - 将用户移出黑名单; @@ -88,9 +87,57 @@ conn.deleteContact("userId"); 删除好友后,对方会收到 `onContactDeleted` 事件。 +#### 设置好友备注 + +你可以调用 `setContactRemark` 方法设置单个好友的备注。 + +好友备注的长度不能超过 100 个字符。 + +```javascript +conn + .setContactRemark({ + userId: "userId", // 添加备注的目标好友的用户 ID + remark: "remark" // 好友备注 + }) + .then(() => { + console.log("setContactRemark success"); + }) + .catch((e) => { + console.log(e, "setContactRemark failed"); + }); +``` + #### 获取好友列表 -你可以调用 `getContacts` 方法查询好友列表,示例代码如下: +调用以下两种方法返回好友列表,其中每个好友对象包含好友的用户 ID 和好友备注。 + +```javascript +// 一次性获取全部好友列表 +conn + .getAllContacts() + .then((res) => { + console.log(res, 'getAllContacts success'); + }) + .catch((e) => { + console.log(e, 'getAllContacts failed'); + }); + + +// 分页获取好友列表 +conn + .getContactsWithCursor({ + pageSize: 20, // 每页期望获取的联系人数量。取值范围为 [1,50],默认为 `20`。 + cursor: '' // 开始获取数据的游标位置。 + }) + .then((res) => { + console.log(res, "getContactsWithCursor success"); + }) + .catch((e) => { + console.log(e, "getContactsWithCursor failed"); + }); +``` + +你可以调用 `getContacts` 方法从服务端获取所有好友的列表,该列表只包含好友的用户 ID。 ```javascript conn.getContacts().then((res) => { diff --git a/docs/document/windows/message_retrieve.md b/docs/document/windows/message_retrieve.md index e9edc0fa..7d7f7ab2 100644 --- a/docs/document/windows/message_retrieve.md +++ b/docs/document/windows/message_retrieve.md @@ -34,7 +34,7 @@ 你可以调用 `GetConversationsFromServerWithCursor` 方法从服务端分页获取会话列表。通过设置该方法中的 `pinOnly` 参数确定是否只获取置顶会话列表: -- 若 `pinOnly` 为 `false`,获取包括置顶和未置顶会话的列表。SDK 按照会话活跃时间(会话的最新一条消息的时间戳)的倒序返回会话列表。服务器默认存储 100 条会话,可存储 7 天。若提升这两个上限,需联系环信商务。 +- 若 `pinOnly` 为 `false`,获取包括置顶和未置顶会话的列表。SDK 按照会话活跃时间(会话的最新一条消息的时间戳)的倒序返回会话列表,每个会话对象中包含会话 ID、会话类型、是否为置顶状态、置顶时间(对于未置顶的会话,值为 `0`)以及最新一条消息。从服务端拉取会话列表后会更新本地会话列表。服务器默认存储 100 条会话,可存储 7 天。若提升这两个上限,需联系环信商务。 - 若为 `true` 仅获取置顶会话列表,最多可拉取 50 个置顶会话。SDK 按照会话置顶时间的倒序返回。 :::notice diff --git a/docs/product/glossary.md b/docs/product/glossary.md index a1096984..b44eee5b 100644 --- a/docs/product/glossary.md +++ b/docs/product/glossary.md @@ -152,7 +152,7 @@ CallKit 提供应用内聊天中音视频通话的页面和 UI 组件,帮助 ## 聊天室 -聊天室是支持多人加入的组织。聊天室中的成员没有固定关系,用户离线后,超过 2 分钟会自动退出聊天室。聊天室成员在离线后,不会收到推送消息。聊天室可以应用于直播、消息广播等。 +聊天室是支持多人加入的组织。聊天室中的成员没有固定关系,一旦离线后,不会收到聊天室中的任何消息,(除了聊天室白名单中的成员)超过 2 分钟会自动退出聊天室。聊天室可以应用于直播、消息广播等。 ### 聊天室黑名单