Skip to content
v1
文档/iOS SDK/消息

发送消息

接口

objc
@property (nonatomic, strong, nullable) id<BIMMessageSender> messageSender;
- (NSString *)sendMessage:(BIMMessage *)message
                       to:(BIMConversation *)conversation
                 assemble:(BIMMessageAssemble)assemble
                 progress:(BIMProgress _Nullable)progress
                     succ:(BIMMessageSucc)succ
                     fail:(BIMFail)fail;
- (NSString *)forwardMessage:(BIMMessage *)message
                          to:(BIMConversation *)conversation
                    assemble:(BIMMessageAssemble _Nullable)assemble
                    progress:(BIMProgress _Nullable)progress
                        succ:(BIMMessageSucc)succ
                        fail:(BIMFail)fail;
- (void)sendMessageReadReceipt:(BIMMessage *)message
                            to:(BIMConversation *)conversation
                          succ:(BIMMessageSucc _Nullable)succ
                          fail:(BIMFail _Nullable)fail;
- (void)sendUndoMessage:(BIMMessage *)message
                     to:(BIMConversation *)conversation
                   succ:(BIMMessageSucc)succ
                   fail:(BIMFail)fail;

代码示例

swift
let msg = BIMManager.sharedInstance().createTextMessage("hello")
BIMManager.sharedInstance().send(msg,
                                 to: conversation,
                                 assemble: {
                                     print("assembled")
                                 },
                                 progress: nil) {
    print("send success")
} fail: { code, desc in
    if msg.status == .reject {
        // 服务端已明确拒绝该消息,可在消息气泡旁展示失败标识。
        // msg.rejectRason 与 code 一致,例如敏感词拒绝为 204202。
        showRejectedIcon(for: msg)
    }
    print("send fail: \(code) \(desc)")
}

BIMManager.sharedInstance().sendMessageReadReceipt(msg, to: conversation, succ: nil, fail: nil)
BIMManager.sharedInstance().sendUndoMessage(msg, to: conversation, succ: {
    print("undo success")
}, fail: { code, desc in
    print("undo fail: \(code) \(desc)")
})

服务端拒绝

收到消息协议中的 reject 后,SDK 会保留消息并执行以下处理:

  • message.status 设置为 BIMMessageStatusReject(Swift 为 .reject)。
  • 将后台拒绝码写入 message.rejectRason
  • 调用发送接口的 fail,其中 coderejectRason 一致。

这类消息不应从本地消息列表删除,接入方可根据 .reject 在消息气泡左侧展示红色感叹号。当前常见拒绝码包括敏感词 204202 和发送频率限制 204203

被服务端拒绝的消息不会进入服务端历史记录。SDK 会把消息状态和 rejectRason 一起保留在本地消息数据库中,并在获取聊天记录时按发送时间与服务端消息合并;因此重新进入会话或重新启动 App 后仍能看到该消息及原始拒绝码。发送中和发送失败的本地消息使用相同的合并规则。