跳到主要内容

插入消息

IMLib SDK 支持在本地数据库中插入消息。本地插入的消息不会实际发送给融云服务器和对方

提示

所有插入消息的 MessageTag 必须设置为 MessageTag.Save,否则报参数错误异常。

插入的 Message 消息的下列属性会被入库,其余属性会被抛弃:

  • UId:消息全局唯一 ID,消息成功收发后会带有由服务端生成的全局唯一 ID。
  • conversationType:会话类型。
  • targetId:会话 ID。
  • messageDirection:消息方向。
  • senderUserId:发送者 ID。
  • receivedStatus:接收状态
  • sentStatus:发送状态。
  • content:消息的内容。
  • sentTime:消息发送的 Unix 时间戳,单位为毫秒,会影响消息排序。
  • extra:消息的附加信息

插入单条消息(1.2.0 支持)

插入单条消息,插入成功后的消息将会存在有效的 messageId。

接口原型

TypeScript
public insertMessage(msg: Message): Promise<IAsyncResult<Message>>;

示例代码

TypeScript
let conId = new ConversationIdentifier();
conId.conversationType = ConversationType.Private;
conId.targetId = "会话 Id";

let txtMsg = new TextMessage();
txtMsg.content = "文本内容";

let msg = new Message(conId, txtMsg);
msg.senderId = "发送方 Id";

IMEngine.getInstance().insertMessage(msg).then(result => {
if (EngineError.Success !== result.code) {
// 单条消息入库失败
return;
}
if (!result.data) {
// 单条入库的消息为空
return;
}
// 单条入库成功的消息
let message = result.data as Message;
});

批量插入消息

在本地数据库批量插入消息。由于批量插入失败会导致整体插入失败,建议分批插入。该接口不支持聊天室会话类型,不支持超级群会话类型。

接口原型

TypeScript
public batchInsertMessage(msgList: List<Message>): Promise<IAsyncResult<void>>;

示例代码

TypeScript
let conId = new ConversationIdentifier();
conId.conversationType = ConversationType.Private;
conId.targetId = "会话 id";

let count = new Number(this.countString).valueOf();
let msgList = new List<Message>();
for (let i = 0; i < count; i++) {
let txtMsg = new TextMessage();
txtMsg.content = this.txtContent + i;
txtMsg.extra = this.txtExtra;
let msg = new Message(conId, txtMsg);
txtMsg.senderId = this.senderId;
msgList.add(msg);
}

IMEngine.getInstance().batchInsertMessage(msgList)
.then(result => {
if (EngineError.Success !== result.code) {
// 插入失败
return;
}
});