You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QuickBlox聊天发送图片提示Acknowledgement Timed out错误,附代码求解决方案

报错触发原因
  • 附件体积超出限制:QuickBlox默认单附件最大为10MB,超出后附件上传阶段卡住,最终触发发送确认超时。
  • 网络适配不足:带图片的消息需要先上传附件再发送信令,耗时比普通文本消息高很多,弱网或网络抖动场景下很容易超出默认30秒的超时阈值。
  • 会话状态校验不全:你现有代码仅判断了全局聊天连接状态,未校验当前会话的加入有效性,已断开的会话发送消息不会被服务端接收,自然不会返回确认回执。
  • 缺失附件上传逻辑:你当前代码未显式将本地图片上传到QuickBlox的Blob存储服务获取合法的附件ID,直接传入本地路径的附件无法被服务端解析,会被直接忽略导致无回执超时。
可行解决方法
  • 先完成附件上传再发送消息,示例代码如下:
// 先压缩并上传图片到QuickBlox存储
guard let imageData = targetImage.jpegData(compressionQuality: 0.7) else {
    self.showAlert(message: "图片读取失败", strtitle: "")
    return
}
let blob = QBCBlob()
blob.name = "chat_img_\(Int(Date().timeIntervalSince1970)).jpg"
blob.contentType = "image/jpeg"
blob.data = imageData

QBRequest.upload(blob, successBlock: { [weak self] _, uploadedBlob in
    // 构造合法的聊天附件
    let attachment = QBChatAttachment()
    attachment.id = uploadedBlob.uid
    attachment.type = "image"
    attachment.url = uploadedBlob.publicUrl()
    message.attachments = [attachment]
    // 再执行原有消息发送逻辑
    self?.sendChatMessage(message: message)
}, errorBlock: { _, error in
    self.showAlert(message: error.localizedDescription ?? "图片上传失败", strtitle: "")
})
  • 调整消息确认超时阈值,适配大文件发送场景:
// 初始化聊天时修改超时时间为60秒
QBChat.instance.streamManagement.sendMessageAcknowledgementTimeout = 60
  • 发送前增加完整状态校验:
// 发送消息前同时校验连接状态和会话加入状态
guard QBChat.instance.isConnected, self.dialogForChat.isJoined else {
    // 先执行重连或重新加入会话逻辑
    return
}
  • 提前压缩图片体积,确保压缩后的图片大小不超过10MB,避免触发大小限制。

内容的提问来源于stack exchange,提问作者ios testing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 04:09:02