title: 消息收发

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

发送消息

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

创建会话

会话是指面向一个人或者一个群组的对话,发消息时需要先获取会话。 使用 -newConversationWithMembers:completion 方法获取会话,比如创建一个单聊会话:

  1. [[WDGIM im] newConversationWithMembers:@[@"User Id"] completion:^(WDGIMConversation * _Nullable conversation, NSError *__autoreleasing _Nullable * _Nullable error) {
  2. //...
  3. }];

创建文本消息

-messageWithText: 方法用于创建文本消息:

  1. WDGIMMessageText *textMsg = [WDGIMMessage messageWithText:@"Hi, Wilddog!"];

创建图片消息

-messageWithImage: 方法用于创建图片消息:

  1. // 创建图片消息
  2. WDGIMMessageImage *imageMsg = [WDGIMMessage messageWithImage:image];

创建语音消息

-messageWithVoiceData:duration: 方法用于创建语音消息:

  1. // 创建语音消息
  2. WDGIMMessageVoice *voiceMsg = [WDGIMMessage messageWithVoiceData:voiceData duration:voiceDuration];

发送消息

-sendMessage:completion: 方法用于发送一条消息:

  1. // 回调中可以获取消息的发送状态
  2. WDGIMMessageText *textMessage = [WDGIMMessage messageWithText:@"Hi, Wilddog!"];
  3. [conversation sendMessage:textMessage completion:^(WDGIMMessage * _Nullable msg, NSError * _Nullable err) {
  4. //...
  5. }];

接收消息

新消息通知会在 -wilddogIM:didRecieveMessages: 方法中回调给用户。

注册监听

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

  1. // 设置代理
  2. [[WDGIM im] setDelegate:self];

消息解析

WDGIMDelegate 的 -wilddogIM:didRecieveMessages: 方法用于获取 messages 中所有新的聊天消息:

  1. - (void)wilddogIM:(WDGIM *)im didRecieveMessages:(NSArray<WDGIMMessage *> *)messages
  2. {
  3. for (WDGIMMessage *msg in messages) {
  4. switch (msg.messageType) {
  5. //文本消息
  6. case WDGIMMessageTypeText:
  7. break;
  8. //图片消息
  9. case WDGIMMessageTypeImage:
  10. break;
  11. //语音消息
  12. case WDGIMMessageTypeVoice:
  13. break;
  14. default:
  15. break;
  16. }
  17. }
  18. }

消息删除

-deleteMessage 方法用于删除本地消息:

  1. - (BOOL)deleteMessage;

消息属性

消息状态

WDGIMMessage 的 messageStatus 属性用于获取当前消息的状态,如发送中、发送成功、发送失败和删除等。

四种状态在 WDGIMMessageStatus 枚举中:

  1. /**
  2. * 消息发送状态
  3. */
  4. typedef NS_ENUM(NSInteger, WDGIMMessageStatus) {
  5. /**
  6. * 正在发送中
  7. */
  8. WDGIMMessageStatusSending = 1,
  9. /**
  10. * 发送成功
  11. */
  12. WDGIMMessageStatusSuccess,
  13. /**
  14. * 发送失败
  15. */
  16. WDGIMMessageStatusFailed,
  17. /**
  18. * 消息已被删除
  19. */
  20. WDGIMMessageStatusDelete
  21. };

消息时间

sentAt 方法用于获取到消息的发送时间:

  1. @property (nonatomic, readonly) long long sentAt

提示:

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

消息 ID

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

  1. @property (nonatomic, readonly) NSString *messageId

消息发送者

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

  1. @property (nonatomic, readonly) NSString *sender

会话操作

获取所有会话

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

  1. NSArray *conversations = [[WDGIM im] getConversations];

获取会话本地消息

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

  1. NSArray *messages = [conversation getMessageFromLast:lastMsg limit:20];

删除会话

WDGIMConversation 中的 - deleteConversation 方法用于删除会话:

  1. BOOL result = [conversation deleteConversation];

提示:

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