跳到主要内容

插入消息

插入消息的接口不会将消息向远端发送,所以卸载重装或者换端登录时插入的消息不会从远端同步到本地数据库。

插入发送消息

您可以通过 insertOutgoingMessage: 接口在本地数据库插入一条对外发送的消息。以下示例使用 RCChannelClient 下的 insertOutgoingMessage 方法。

提示
  • 如果 sentTime 有问题会影响消息排序,请谨慎使用!
  • 插入成功的消息不会立刻在会话页面展示。

接口原型

Objective C
- (void)insertOutgoingMessage:(RCConversationType)conversationType
targetId:(NSString *)targetId
sentStatus:(RCSentStatus)sentStatus
content:(RCMessageContent *)content
sentTime:(long long)sentTime
completion:(nullable void(^)(RCMessage *_Nullable message))completion;

插入本地数据库的消息如需支持消息扩展功能,必须使用 RCChannelClient 下的插入方法,否则无法打开消息的可扩展属性(canIncludeExpansion)。本地插入消息时不支持设置消息扩展信息数据。您可以在消息插入后,选择合适的时机为消息设置扩展数据。详见[消息扩展]。

参数说明

参数类型说明
conversationType[RCConversationType]会话类型。
targetIdNSString会话 targetId
channelIdNSString超级群会话的频道 Id,非超级群会话传 nil。
canIncludeExpansionBOOL是否支持消息扩展。YES表示可扩展;NO 表示不可扩展。
sentStatus[RCSentStatus]发送状态。
content[RCMessageContent]消息的内容。
sentTimelong long消息发送的 Unix 时间戳,单位为毫秒(传 0 会按照本地时间插入)。
completionBlock异步回调,返回已插入的消息实体 [RCMessage]。

示例代码

Objective C
RCTextMessage *content = [RCTextMessage messageWithContent:@"测试文本消息"];

[[RCChannelClient sharedChannelManager]
insertOutgoingMessage:ConversationType_PRIVATE
targetId:@"targetId"
channelId:@"channelId"
canIncludeExpansion:YES
sentStatus:SentStatus_SENT
content:content
sentTime:sentTime
completion::^(RCMessage * _Nullable message) {

}];

插入接收消息

您可以通过 insertIncomingMessage: 接口在本地数据库被插入一条接收的消息。

提示
  • 如果消息的 sentTime 有问题会影响消息排序,慎用!
  • 5.6.8 版本后使用 RCReceivedStatusInfo 对象构造接收消息状态,5.6.8 版本前使用 RCReceivedStatus 对象构造消息接收状态。
  • 插入成功的消息不会立刻在会话页面展示。

接口原型

objectivec-
                     targetId:(NSString *)targetId
senderUserId:(NSString *)senderUserId
receivedStatusInfo:(RCReceivedStatusInfo *)receivedStatusInfo
content:(RCMessageContent *)content
sentTime:(long long)sentTime
completion:(nullable void(^)(RCMessage *_Nullable message))completion;

参数说明

参数类型说明
conversationType[RCConversationType]会话类型,单聊传入 ConversationType_PRIVATE
targetIdNSStringtargetId 用于标识会话,称为目标 ID 或会话 ID。注意,因为单聊业务中始终使用对端用户 ID 作为标识本端会话的 Target ID,因此在单聊会话中插入本端接收的消息时,Target ID 始终是单聊对端用户 ID。群聊、超级群的会话 ID 分别为群组 ID、超级群 ID。详见消息介绍中关于 Target ID 的说明。
senderUserIdNSString发送者ID
RCReceivedStatusInfoRCReceivedStatusInfo消息接收状态
content[RCMessageContent]消息的内容
sentTimelong long消息发送的Unix时间戳,单位为毫秒(传 0 会按照本地时间插入)
completionBlock异步回调,返回已插入的消息实体 [RCMessage]

示例代码

Objective C
RCTextMessage *content = [RCTextMessage messageWithContent:@"测试文本消息"];
RCReceivedStatusInfo * info = [[RCReceivedStatusInfo alloc] initWithReceivedStatus:0];
[[RCCoreClient sharedCoreClient] insertIncomingMessage:ConversationType_PRIVATE
targetId:@"targetId"
senderUserId:@"senderUserId"
receivedStatusInfo:info
content:content
sentTime:0
completion:^(RCMessage * _Nullable message) {

}];

会话页面显示插入的消息

如果插入的消息想在会话页面 RCConversationViewController 中及时展示,需要调用 appendAndDisplayMessage: 方法传入插入本地数据库返回的 RCMessage 对象才会实时更新到页面显示。

Objective C
RCMessage *insertMessage;
[self appendAndDisplayMessage:insertMessage];