WuKongIM Docs

iOS 消息管理

发送、接收、重发和读取本地消息,并理解消息状态。

编辑此页报告文档问题

消息由正文 WKMessageContent 和目标 WKChannel 组成。WKChatManager 负责发送、接收、本地保存和查询。

发送单聊或群聊消息

WKTextContent *content = [[WKTextContent alloc] initWithContent:@"你好"];

WKChannel *person = [WKChannel personWithChannelID:@"bob"];
WKMessage *directMessage = [[WKSDK shared].chatManager sendMessage:content
                                                           channel:person];

WKChannel *group = [WKChannel groupWithChannelID:@"team-1"];
WKMessage *groupMessage = [[WKSDK shared].chatManager sendMessage:content
                                                          channel:group];

返回的 WKMessage 是本地消息,不代表服务器已经处理完成。用 clientMsgNo 将它和后续状态更新关联起来。

监听接收与发送状态

[[WKSDK shared].chatManager addDelegate:self];

- (void)onRecvMessages:(WKMessage *)message left:(NSInteger)left {
    // 新消息可能是文本、图片或自定义正文,先判断 message.content 的类型。
    [self appendMessage:message];
}

- (void)onMessageUpdate:(WKMessage *)message left:(NSInteger)left {
    [self updateMessage:message.clientMsgNo status:message.status];
}

常用状态:

状态含义UI 建议
WK_MESSAGE_WAITSEND已保存,等待发送显示发送中
WK_MESSAGE_UPLOADING正在上传媒体显示进度
WK_MESSAGE_SUCCESS服务器已接受消息显示已发送
WK_MESSAGE_FAIL本次发送失败显示重试按钮

重发失败消息:

[[WKSDK shared].chatManager resendMessage:failedMessage];

读取某个聊天的消息

首次打开聊天页时,读取最近 30 条:

WKChannel *channel = [WKChannel personWithChannelID:@"bob"];
[[WKSDK shared].chatManager pullLastMessages:channel
                                       limit:30
                                    complete:^(NSArray<WKMessage *> *messages, NSError *error) {
    if (error == nil) {
        [self showMessages:messages];
    }
}];

继续向更早的消息翻页时,使用 pullDown:startOrderSeq:limit:complete:;向更新的方向读取时使用 pullUp:startOrderSeq:limit:complete:

清理监听器

[[WKSDK shared].chatManager removeDelegate:self];

不要在多个页面重复添加同一个监听器而不移除,否则一条消息可能触发多次 UI 更新。离线或远端历史消息的接入见媒体与历史消息

本页内容