跳转到内容

消息收发

本篇文档介绍 Wilddog IM SDK 的消息收发和会话操作。

发送消息前需要先创建会话和消息体。

会话是指面向一个人或者一个群组的对话,发消息时需要先获取会话。 使用 newConversation(List<String> members,CompletionListener completionListener) 方法获取会话,比如创建一个单聊会话:

List<String> ids = new ArrayList<>();
ids.add("uid1");
WilddogIM.newConversation(ids, new WilddogIMClient.CompletionListener() {
@Override
public void onComplete(WilddogIMError error, Conversation wilddogConversation) {
if(error==null){
// 创建会话失败
}else {
// 创建会话成功
}
}
});

Message.newMessage(String text) 方法用于创建文本消息:

TextMessage textMessage = Message.newMessage("Hi,Wilddog!");

Message.newMessage( int messageType,String path) 方法用于创建图片消息:

// 创建图片消息
String path = "imagePath";
ImageMessage imageMessage = Message.newMessage( MessageType.IMAGE, path);

Message.newMessage(int duration,byte[] fileData); 方法用于创建语音消息:

// 创建语音消息
int duration ="语音消息时间长度";
byte[] fileData = "生成语音二进制数据";
VoiceMessage voiceMessage = Message.newMessage(duration,fileData);

sendMessage(Message message, final WilddogValueCallback callback) 方法用于发送一条消息:

// 回调中可以获取消息的发送状态
TextMessage textMessage = Message.newMessage("Hi,Wilddog!");
conversation.sendMessage(textMessage, new WilddogValueCallback<String>() {
@Override
public void onSuccess(String s) {
Log.d(TAG,"发送成功");
}
@Override
public void onFailed(int code, String des) {
Log.d("result",des);
}
});

新消息通知会在 onNewMessage() 方法中回调给用户。

在 SDK 初始化时设置消息接收代理:

client.addMessageListener(listener);

WilddogIM.WilddogIMMessageListener 的 onNewMessage() 方法用于获取 messages 中所有新的聊天消息:

private WilddogIM.WilddogIMMessageListener listener=new WilddogIMClient.WilddogIMMessageListener() {
@Override
public void onNewMessage(List<com.wilddog.wildim.message.Message> messages) {
for(com.wilddog.wildim.message.Message wildMessage:messages){
switch (message.getMessageType()) {
case TEXT:
//文本消息
TextMessage textMessage = (TextMessage)message;
case IMAGE:
//图片消息
ImageMessage imageMessage = (ImageMessage)message;
case VOICE:
//语音消息
VoiceMessage voiceMessage = (VoiceMessage)message;
}
}
}
};

delete() 方法用于删除本地消息:

message.delete();

Message 的 status() 方法用于获取当前消息的状态,如发送中、发送成功和发送失败等。

三种状态在 MessageStatus 枚举中:

public class MessageStatus {
public static final String SENDING="1";
public static final String SUCCESS="2";
public static final String FAILED="3";
}

getSendAt() 方法用于获取到消息的发送时间:

long sendAt = textMessage.getSendAt();

提示:

该时间是服务器时间,而非本地时间。

消息 ID 是由服务器统一生成的有序 ID:

String messageId = textMessage.getMessageId();

消息发送者是消息的发送方的 ID:

String senderId = textMessage.getSender();

删除消息只支持本地消息删除,调用 delete() 方法来删除。

textMessage.delete()

getConversations() 方法用于获取本地所有会话列表:

List<Conversation> conversations = client.getConversations();

Conversation 中的 getMessagesFromLast( lastMessage,limit) 方法用于获取本地历史消息,并可以实现分页拉取(从后往前获取):

List<Message> messages = conversation.getMessagesFromLast( lastMessage,20);

Conversation 中的 delete() 方法用于删除会话:

conversation.delete();

提示:

删除会话的同时,默认会删除本地会话的相关消息。