Skip to main content

消息相关监听

可以设置多个监听。

JIM.getInstance().getMessageManager().addListener("main", new IMessageManager.IMessageListener() {
/// 接收消息的回调
@Override
public void onMessageReceive(Message message) {
Log.d("TAG", "onMessageReceive, conversationType is " + message.getConversation().getConversationType() + ", conversationId is " + message.getConversation().getConversationId());
MessageContent content = message.getContent();
if (content instanceof TextMessage) {
Log.d("TAG", "text did receive, content is " + ((TextMessage) content).getContent());
} else if (content instanceof ImageMessage) {
Log.d("TAG", "image did receive, url is " + ((ImageMessage) content).getUrl());
} else if (content instanceof FileMessage) {
Log.d("TAG", "file did receive, name is " + ((FileMessage) content).getName());
} else if (content instanceof VoiceMessage) {
Log.d("TAG", "voice did receive");
}
}

/// 消息撤回回调
@Override
public void onMessageRecall(Message message) {
Log.d("TAG", "onMessageRecall, messageId is " + message.getMessageId());
}

@Override
public void onMessageUpdate(Message message) {
Log.d("TAG", "onMessageUpdate, messageId is " + message.getMessageId());
}

/// 消息删除回调
/// conversation: 会话标识
/// clientMsgNos: 列表(本端消息唯一编号)
@Override
public void onMessageDelete(Conversation conversation, List<Long> clientMsgNos) {
Log.d("TAG", "onMessageDelete, conversation is " + conversation.getConversationId() + ", clientMsgNo is " + clientMsgNos);
}

/// 消息清除回调,表示清除特定会话中某个时间点之前的所有消息
/// conversation: 会话标识
/// timestamp: 时间戳(毫秒),timestamp 之前的消息被清除
/// senderId: 若不为空,表示只清除发送者 id 为 senderId 的消息
@Override
public void onMessageClear(Conversation conversation, long timestamp, String senderId) {
Log.d("TAG", "onMessageClear, conversation is " + conversation.getConversationId() + ", timestamp is " + timestamp + ", senderId is " + senderId);
}

/// 新增消息回应的回调
/// conversation: 所属会话
/// reaction: 新增的消息回应
@Override
public void onMessageReactionAdd(Conversation conversation, MessageReaction reaction) {

}

/// 删除消息回应的回调
/// conversation: 所属会话
/// reaction: 删除的消息回应
void onMessageReactionRemove(Conversation conversation, MessageReaction reaction) {

}

/// 消息置顶的回调
/// message: 对应的消息
/// operator: 操作置顶的用户
/// isTop: true false 表示取消置顶
void onMessageSetTop(Message message, UserInfo operator, boolean isTop) {

}
});

消息阅读状态相关监听

可以设置多个监听。

JIM.getInstance().getMessageManager().addReadReceiptListener("main", new IMessageManager.IMessageReadReceiptListener() {
/// 单聊消息阅读回调
/// conversation: 所在会话
/// messageIds: 消息 id 数组
@Override
public void onMessagesRead(Conversation conversation, List<String> messageIds) {
Log.d("TAG", "onMessageRead, count is " + messageIds.size() + ", conversationType is " + conversation.getConversationType() + ", conversationId is " + conversation.getConversationId());
}

/// 群消息阅读回调
/// conversation: 所在会话
/// messages: key 为 messageId
@Override
public void onGroupMessagesRead(Conversation conversation, Map<String, GroupMessageReadInfo> messages) {
Log.d("TAG", "onGroupMessagesRead, conversationType is " + conversation.getConversationType() + ", id is " + conversation.getConversationId() + ", count is " + messages.size());
}
});

消息销毁相关监听

可以设置多个监听。

JIM.getInstance().getMessageManager().addDestroyListener("main", new IMessageManager.IMessageDestroyListener() {
/**
* 消息销毁时间更新回调(一般发生在阅后即焚之类的场景)
* @param messageId 消息 id
* @param conversation 所在会话
* @param destroyTime 更新后的销毁时间
*/
@Override
public void onMessageDestroyTimeUpdate(String messageId, Conversation conversation, long destroyTime) {

}
});

消息加解密相关回调

消息加解密只能设置一个监听。

JIM.getInstance().getMessageManager().setPreprocessor(new IMessageManager.IMessagePreprocessor() {
/**
* 消息加密的回调
* 回调时机:消息入库之后,发送之前
* @param content 待发送的消息内容,已序列化成 byte[]
* @param conversation 所在会话
* @param contentType 消息类型
* @return 处理后的消息内容。
*/
@Override
public byte[] encryptMessageContent(byte[] content, Conversation conversation, String contentType) {

}

/**
* 消息解密的回调
* 回调时机:接收到消息,入库之前
* @param content 接收到的消息内容, byte[] 类型,还没反序列化
* @param conversation 所在会话
* @param contentType 消息类型
* @return 处理后的消息内容。
*/
@Override
public byte[] decryptMessageContent(byte[] content, Conversation conversation, String contentType) {

}
});