上云无忧 > 文档中心 > 环信IM即时通讯使用教程(iOS) - 管理子区消息
IM即时通讯
环信IM即时通讯使用教程(iOS) - 管理子区消息

文档简介:
子区消息消息类型属于群聊消息类型,与普通群组消息的区别是需要添加 isChatThread 标记。本文介绍环信即时通讯 IM iOS SDK 如何发送、接收以及撤回子区消息。
*此产品及展示信息均由环信官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

子区消息消息类型属于群聊消息类型,与普通群组消息的区别是需要添加 isChatThread 标记。本文介绍环信即时通讯 IM iOS SDK 如何发送、接收以及撤回子区消息。

技术原理

环信即时通讯 IM iOS SDK 提供 EMManager、EMChatMessage 和 EMChatThreadInfo 类,用于管理子区消息,支持你通过调用 API 在项目中实现如下功能:

  • 发送子区消息
  • 接收子区消息
  • 撤回子区消息
  • 获取子区消息

消息收发流程如下:

  1. 客户端从应用服务器获取 token。
  2. 客户端 A 和 B 登录即时通讯。
  3. 客户端 A 向客户端 B 发送消息。消息发送至即时通讯 IM 服务器,服务器将消息传递给客户端 B。对于子区消息,服务器投递给子区内其他每一个成员。客户端 B 收到消息后,SDK 触发事件。客户端 B 监听事件并获取消息。

子区创建和查看如下图:

前提条件

开始前,请确保满足以下条件:

  • 完成 3.9.3 以上版本 SDK 初始化,详见 快速开始。
  • 了解环信即时通讯 IM API 的 使用限制。
  • 了解子区和子区成员数量限制,详见 使用限制。
  • 联系商务开通子区功能。

实现方法

本节介绍如何使用环信即时通讯 IM SDK 提供的 API 实现上述功能。

发送子区消息

发送子区消息和发送群组消息的方法基本一致,详情请参考 发送消息。唯一不同的是,发送子区消息需要指定标记 isChatThread 为 YES。

单设备登录时,子区所属群组的所有成员会收到 EMChatThreadManagerDelegate#onChatThreadUpdated 回调。

示例代码如下:

// 创建一条文本消息,`content` 为消息文字内容,`chatThreadId` 为子区 ID。 NSString *from 
= [[EMClient sharedClient] currentUsername]; NSString *to = self.currentConversation.conversa
tionId; EMChatMessage *message = [[EMChatMessage alloc] initWithConversationID:to from:from 
to:to body:aBody ext:aExt]; // 是否需要消息已读回执。 if([aExt objectForKey:MSG_EXT_READ_RECEIPT]) 
{ message.isNeedGroupAck = YES; } message.chatType = (EMChatType)self.conversationType; message.
isChatThread = self.isChatThread; // 发送消息。 [[EMClient sharedClient].chatManager sendMessage:
message progress:nil completion:^(EMChatMessage *message, EMError *error) { }]; 
 

接收子区消息

接收消息的具体逻辑,请参考 接收消息,此处只介绍子区消息和其他消息的区别。

子区成员可以设置消息监听回调 EMManagerDelegate#messagesDidReceive 对子区消息的接收进行监听。

示例代码如下:

- (void)messagesDidReceive:(NSArray *)aMessages { // 做相关处理。 } // 添加消息监听器。
 [[EMClient sharedClient].chatManager addDelegate:self delegateQueue:nil]; // 移除消息监听器。
 [[EMClient sharedClient].chatManager removeDelegate:self]; 
 

撤回子区消息

撤回消息的具体逻辑,请参考 撤回消息,此处只介绍子区消息和其他消息的区别。

子区成员可以设置消息监听回调 EMChatManagerDelegate#messagesInfoDidRecall 对子区消息的撤回进行监听。

示例代码如下:

- (void)messagesInfoDidRecall:(NSArray<EMRecallMessageInfo *> *)aRecallMessagesInfo {} 
 

获取子区消息

从服务器还是本地数据库获取子区消息取决于你的生产环境。

进入单个子区会话后默认展示最早消息,用户可以从服务器获取子区历史消息;若需要合并本地和服务器拉取到的消息(例如有用户撤回子区消息的提示是 SDK 在本地生成的一条消息,可以选择从本地获取子区消息。

从服务器获取子区消息 (消息漫游)

从服务器获取子区消息,请参考 从服务器获取消息(消息漫游)。

从内存和本地数据库中获取子区消息

调用 EMChatManager#getAllConversations 方法只能获取单聊或群聊会话。要获取子区会话中的消息,参考以下示例代码:

// 需设置会话类型为 `EMConversationTypeGroupChat` 和 `isThread` 为 `YES` EMConversation* conversation
 = [EMClient.sharedClient.chatManager getConversation:conversationId type:EMConversationTypeGroupChat
 createIfNotExist:NO isThread:YES]; // 获取此子区会话的消息 [conversation loadMessagesStartFromId:@""
 count:20 searchDirection:EMMessageSearchDirectionUp completion:^(NSArray<EMChatMessage *> * _Nullable
 aMessages, EMError * _Nullable aError) { }]; 
 

提示

可通过 EMConversation#isChatThread 属性判断当前会话是否为子区会话。

相似文档
  • 新增消息举报接口,SDK 可以调用该接口举报对应消息。当服务器端审核服务收到举报消息后,会将举报消息存储到数据库,并提供接口供 Console 后台搜索展示。审核员可以对举报记录进行相应处理。
  • 本文介绍环信即时通讯 iOS SDK 中接口调用或者回调中的错误码。可以根据具体错误码判断具体错误原因。 iOS 中错误码的类为 EMError。 如:注册时用户返回已存在的错误可以这样检测:EMError.code == EMErrorUserAlreadyExist。 iOS 的错误码只有当操作出错的时候才会有返回值,否则返回 nil。
  • 仍在使用旧版 EaseUI 的用户可参考旧版 EaseUI 的文档,旧版已不再维护。 旧版文档地址:EaseUI 集成(opens new window)。 简介: EaseIMKit 是什么? EaseIMKit 是基于环信 IM SDK 的一款 UI 组件库,它提供了一些通用的 UI 组件,例如 ‘会话列表’、‘聊天界面’ 和 ‘联系人列表’ 等,开发者可根据实际业务需求通过该组件库快速地搭建自定义 IM 应用。
  • 功能概述: EaseCallKit 是一套基于声网音视频服务,使用环信 IM 作为信令通道的开源音视频 UI 库。UI 库提供了单人语音通话、视频通话,以及多人会议的功能接口。
  • 环信即时通讯 Web 端提供示例应用可供体验。你可以按以下步骤体验: 登录 Demo (opens new window)。 输入你的手机号,获取验证码,然后输入。 点击 登录 登录 Demo。 代码下载: 下载源代码:github 源码地址(opens new window)。 欢迎大家提交 PR 改进和修复 Web IM 中的问题。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部