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
相关产品推荐
相关产品推荐

