跳转到内容

消息收发

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

- (void)wilddogIM:(WDGIM *)im didRecieveMessages:(NSArray<WDGIMMessage *> *)messages
{
for (WDGIMMessage *msg in messages) {
switch (msg.messageType) {
//文本消息
case WDGIMMessageTypeText:
break;
//图片消息
case WDGIMMessageTypeImage:
break;
//语音消息
case WDGIMMessageTypeVoice:
break;
default:
break;
}
}
}

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

- (BOOL)deleteMessage;

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

四种状态在 WDGIMMessageStatus 枚举中:

/**
* 消息发送状态
*/
typedef NS_ENUM(NSInteger, WDGIMMessageStatus) {
/**
* 正在发送中
*/
WDGIMMessageStatusSending = 1,
/**
* 发送成功
*/
WDGIMMessageStatusSuccess,
/**
* 发送失败
*/
WDGIMMessageStatusFailed,
/**
* 消息已被删除
*/
WDGIMMessageStatusDelete
};

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

@property (nonatomic, readonly) long long sentAt

提示:

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

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

@property (nonatomic, readonly) NSString *messageId

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

@property (nonatomic, readonly) NSString *sender

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

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

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

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

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

BOOL result = [conversation deleteConversation];

提示:

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