title: 消息收发

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

发送消息

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

创建会话

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

  1. List<String> ids = new ArrayList<>();
  2. ids.add("uid1");
  3. WilddogIM.newConversation(ids, new WilddogIMClient.CompletionListener() {
  4. @Override
  5. public void onComplete(WilddogIMError error, Conversation wilddogConversation) {
  6. if(error==null){
  7. // 创建会话失败
  8. }else {
  9. // 创建会话成功
  10. }
  11. }
  12. });

创建文本消息

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

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

创建图片消息

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

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

创建语音消息

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

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

发送消息

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

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

接收消息

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

注册监听

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

  1. client.addMessageListener(listener);

消息解析

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

  1. private WilddogIM.WilddogIMMessageListener listener=new WilddogIMClient.WilddogIMMessageListener() {
  2. @Override
  3. public void onNewMessage(List<com.wilddog.wildim.message.Message> messages) {
  4. for(com.wilddog.wildim.message.Message wildMessage:messages){
  5. switch (message.getMessageType()) {
  6. case TEXT:
  7. //文本消息
  8. TextMessage textMessage = (TextMessage)message;
  9. case IMAGE:
  10. //图片消息
  11. ImageMessage imageMessage = (ImageMessage)message;
  12. case VOICE:
  13. //语音消息
  14. VoiceMessage voiceMessage = (VoiceMessage)message;
  15. }
  16. }
  17. }
  18. };

消息删除

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

  1. message.delete();

消息属性

消息状态

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

三种状态在 MessageStatus 枚举中:

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

消息时间

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

  1. long sendAt = textMessage.getSendAt();

提示:

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

消息 ID

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

  1. String messageId = textMessage.getMessageId();

消息发送者

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

  1. String senderId = textMessage.getSender();

消息删除

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

  1. textMessage.delete()

会话操作

获取所有会话

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

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

获取会话本地消息

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

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

删除会话

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

  1. conversation.delete();

提示:

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