tencent cloud

文档反馈

Android&iOS&Windows&Mac

最后更新时间:2025-01-03 10:45:14

    功能描述

    发送消息方法在核心类 V2TIMManagerV2TIMMessageManager(Java) / V2TIMManager+Message (Swift 、Objective-C) 中。
    支持发送文本、自定义、富媒体消息,消息类型都是 V2TIMMessage
    V2TIMMessage 中可以携带 V2TIMElem 的不同类型子类,表示不同类型的消息。

    重点接口说明

    接口 sendMessage (Java / Swift / Objective-C / C++) 是发送消息中最核心的接口。该接口支持发送所有类型的消息。
    说明
    下文中提到的发消息高级接口,指的都是 sendMessage
    接口说明如下:
    Java
    Swift
    Objective-C
    C++
    // V2TIMMessageManager
    public abstract String sendMessage(
    V2TIMMessage message,
    String receiver,
    String groupID,
    int priority,
    boolean onlineUserOnly,
    V2TIMOfflinePushInfo offlinePushInfo,
    V2TIMSendCallback<V2TIMMessage> callback);
    public func sendMessage(message: V2TIMMessage,
    receiver: String?,groupID: String?,
    priority: V2TIMMessagePriority,
    onlineUserOnly: Bool,
    offlinePushInfo: V2TIMOfflinePushInfo?,
    progress: V2TIMProgress?,
    succ: V2TIMSucc?,
    fail: V2TIMFail?) -> String?
    // V2TIMManager+Message.h
    - (NSString *)sendMessage:(V2TIMMessage *)message
    receiver:(NSString *)receiver
    groupID:(NSString *)groupID
    priority:(V2TIMMessagePriority)priority
    onlineUserOnly:(BOOL)onlineUserOnly
    offlinePushInfo:(V2TIMOfflinePushInfo *)offlinePushInfo
    progress:(V2TIMProgress)progress
    succ:(V2TIMSucc)succ
    fail:(V2TIMFail)fail;
    // V2TIMMessageManager
    virtual V2TIMString SendMessage(
    V2TIMMessage& message,
    const V2TIMString& receiver,
    const V2TIMString& groupID,
    V2TIMMessagePriority priority,
    bool onlineUserOnly,
    const V2TIMOfflinePushInfo& offlinePushInfo,
    V2TIMSendCallback* callback);
    参数说明:
    参数
    含义
    单聊有效
    群聊有效
    说明
    message
    消息对象
    YES
    YES
    需要通过对应的 `createXxxMessage` 接口先行创建,`Xxx` 表示具体的类型。
    receiver
    单聊消息接收者 userID
    YES
    NO
    如果是发送 C2C 单聊消息,只需要指定 `receiver` 即可。
    groupID
    群聊 groupID
    NO
    YES
    如果是发送群聊消息,只需要指定 `groupID` 即可。
    priority
    消息优先级
    NO
    YES
    请把重要消息设置为高优先级(例如红包、礼物消息),高频且不重要的消息设置为低优先级(例如点赞消息)。
    onlineUserOnly
    是否只有在线用户才能收到
    YES
    YES
    如果设置为 YES,接收方历史消息拉取不到,常被用于实现 “对方正在输入” 或群组里的非重要提示等弱提示功能。
    offlinePushInfo
    离线推送信息
    YES
    YES
    离线推送时携带的标题和内容。
    progress
    文件上传进度(IOS)
    YES
    YES
    文件上传进度。当发送消息中包含图片、语音、视频、文件等富媒体消息时才有效,纯文本、表情、定位消息不会回调。
    succ
    消息发送成功回调
    YES
    YES
    ——
    fail
    消息发送失败回调
    YES
    YES
    回调失败错误码、错误描述。
    注意
    如果 groupIDreceiver 同时设置,表示给 receiver 发送定向群消息。详情请参考 群定向消息

    发送文本消息

    文本消息区分单聊和群聊,涉及的接口、传参有所区别。
    发送文本消息可以采用两种接口:普通接口和高级接口。高级接口比普通接口能设置更多的发送参数(例如优先级、离线推送信息等)。 普通接口参考下文具体描述,高级接口就是上文中提到的 sendMessage

    单聊文本消息

    普通接口

    调用 sendC2CTextMessage (Java / Swift / Objective-C / C++) 发送单聊文本消息,直接传入消息内容和接收者的 userID 即可。
    示例代码如下:
    Java
    Swift
    Objective-C
    C++
    // API 返回 msgID,按需使用
    String msgID = V2TIMManager.getInstance().sendC2CTextMessage("单聊文本消息", "receiver_userID", new V2TIMValueCallback<V2TIMMessage>() {
    @Override
    public void onSuccess(V2TIMMessage message) {
    // 发送单聊文本消息成功
    }
    
    @Override
    public void onError(int code, String desc) {
    // 发送单聊文本消息失败
    }
    });
    // API 返回 msgID,按需使用
    let msgID = V2TIMManager.shared.sendC2CTextMessage(text: "this is c2c message", to: "receiver_userID") {
    // 发送单聊文本消息成功
    print("send c2c text message succ.")
    } fail: { code, desc in
    // 发送单聊文本消息失败
    print("send c2c text message fail, code: \\(code), desc: \\(desc)")
    }
    // API 返回 msgID,按需使用
    NSString *msgID = [[V2TIMManager sharedInstance] sendC2CTextMessage:@"单聊文本消息"
    to:@"receiver_userID"
    succ:^{
    // 发送单聊文本消息成功
    } fail:^(int code, NSString *msg) {
    // 发送单聊文本消息失败
    }];
    class SendCallback final : public V2TIMSendCallback {
    public:
    using SuccessCallback = std::function<void(const V2TIMMessage&)>;
    using ErrorCallback = std::function<void(int, const V2TIMString&)>;
    using ProgressCallback = std::function<void(uint32_t)>;
    
    SendCallback() = default;
    ~SendCallback() override = default;
    
    void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback,
    ProgressCallback progress_callback) {
    success_callback_ = std::move(success_callback);
    error_callback_ = std::move(error_callback);
    progress_callback_ = std::move(progress_callback);
    }
    
    void OnSuccess(const V2TIMMessage& message) override {
    if (success_callback_) {
    success_callback_(message);
    }
    }
    void OnError(int error_code, const V2TIMString& error_message) override {
    if (error_callback_) {
    error_callback_(error_code, error_message);
    }
    }
    void OnProgress(uint32_t progress) override {
    if (progress_callback_) {
    progress_callback_(progress);
    }
    }
    
    private:
    SuccessCallback success_callback_;
    ErrorCallback error_callback_;
    ProgressCallback progress_callback_;
    };
    
    auto callback = new SendCallback{};
    callback->SetCallback(
    [=](const V2TIMMessage& message) {
    // 发送单聊文本消息成功
    delete callback;
    },
    [=](int error_code, const V2TIMString& error_message) {
    // 发送单聊文本消息失败
    delete callback;
    },
    [=](uint32_t progress) {
    // 文本消息不会回调进度
    });
    // API 返回 msgID,按需使用
    V2TIMString msgID =
    V2TIMManager::GetInstance()->SendC2CTextMessage("单聊文本消息", "receiver_userID", callback);

    高级接口

    调用高级接口发送单聊文本消息分两步:
    1. 调用 createTextMessage (Java / Swift / Objective-C / C++) 创建文本消息。
    2. 调用 sendMessage (Java / Swift / Objective-C / C++) 发送消息。
    示例代码如下:
    Java
    Swift
    Objective-C
    C++
    // 创建文本消息
    V2TIMMessage v2TIMMessage = V2TIMManager.getMessageManager().createTextMessage("content");
    // 发送消息
    V2TIMManager.getMessageManager().sendMessage(v2TIMMessage, "userID", null, V2TIMMessage.V2TIM_PRIORITY_NORMAL, false, null, new V2TIMSendCallback<V2TIMMessage>() {
    @Override
    public void onProgress(int progress) {
    // 文本消息不会回调进度
    }
    
    @Override
    public void onSuccess(V2TIMMessage message) {
    // 文本消息发送成功
    }
    
    @Override
    public void onError(int code, String desc) {
    // 文本消息发送失败
    }
    });
    // 创建文本消息
    let msg = V2TIMManager.shared.createTextMessage(text: "content") {
    // 发送消息
    _ = V2TIMManager.shared.sendMessage(message: msg, receiver: "userID", groupID: nil, priority:
    .V2TIM_PRIORITY_DEFAULT, onlineUserOnly: false, offlinePushInfo: nil) { progress in
    } succ: {
    print("createTextMessage & send succ.")
    } fail: { code, desc in
    print("createTextMessage &send c2c text message fail, code: \\(code), desc: \\(desc)")
    }
    }
    
    // 创建文本消息
    V2TIMMessage *message = [[V2TIMManager sharedInstance] createTextMessage:@"content"];
    // 发送消息
    [V2TIMManager.sharedInstance sendMessage:message
    receiver:@"userID"
    groupID:nil
    priority:V2TIM_PRIORITY_NORMAL
    onlineUserOnly:NO
    offlinePushInfo:nil
    progress:nil
    succ:^{
    // 文本消息发送成功
    }
    fail:^(int code, NSString *desc) {
    // 文本消息发送失败
    }];
    class SendCallback final : public V2TIMSendCallback {
    public:
    using SuccessCallback = std::function<void(const V2TIMMessage&)>;
    using ErrorCallback = std::function<void(int, const V2TIMString&)>;
    using ProgressCallback = std::function<void(uint32_t)>;
    
    SendCallback() = default;
    ~SendCallback() override = default;
    
    void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback,
    ProgressCallback progress_callback) {
    success_callback_ = std::move(success_callback);
    error_callback_ = std::move(error_callback);
    progress_callback_ = std::move(progress_callback);
    }
    
    void OnSuccess(const V2TIMMessage& message) override {
    if (success_callback_) {
    success_callback_(message);
    }
    }
    void OnError(int error_code, const V2TIMString& error_message) override {
    if (error_callback_) {
    error_callback_(error_code, error_message);
    }
    }
    void OnProgress(uint32_t progress) override {
    if (progress_callback_) {
    progress_callback_(progress);
    }
    }
    
    private:
    SuccessCallback success_callback_;
    ErrorCallback error_callback_;
    ProgressCallback progress_callback_;
    };
    
    // 创建文本消息
    V2TIMMessage v2TIMMessage = V2TIMManager::GetInstance()->GetMessageManager()->CreateTextMessage("content");
    // 发送消息
    auto callback = new SendCallback{};
    callback->SetCallback(
    [=](const V2TIMMessage& message) {
    // 文本消息发送成功
    delete callback;
    },
    [=](int error_code, const V2TIMString& error_message) {
    // 文本消息发送失败
    delete callback;
    },
    [=](uint32_t progress) {
    // 文本消息不会回调进度
    });
    V2TIMManager::GetInstance()->GetMessageManager()->SendMessage(
    v2TIMMessage, "userID", {}, V2TIMMessagePriority::V2TIM_PRIORITY_NORMAL, false, {}, callback);

    群聊文本消息

    普通接口

    调用 sendGroupTextMessage (Java / Swift / Objective-C / C++) 发送群聊文本消息,直接传递消息内容、群聊的 groupID 和消息优先级即可。
    消息优先级可参考 V2TIMMessagePriority 定义。
    示例代码如下:
    Java
    Swift
    Objective-C
    C++
    // API 返回 msgID,按需使用
    String msgID = V2TIMManager.getInstance().sendGroupTextMessage("群聊文本消息", "groupID", V2TIMMessage.V2TIM_PRIORITY_NORMAL, new V2TIMValueCallback<V2TIMMessage>() {
    @Override
    public void onSuccess(V2TIMMessage message) {
    // 发送群聊文本消息成功
    }
    
    @Override
    public void onError(int code, String desc) {
    // 发送群聊文本消息失败
    }
    });
    // API 返回 msgID,按需使用
    let msgID = V2TIMManager.shared.sendGroupTextMessage(text: "this is group text message", to: "groupID", priority: .V2TIM_PRIORITY_DEFAULT, succ: nil, fail: nil)
    // API 返回 msgID,按需使用
    NSString *msgID = [[V2TIMManager sharedInstance] sendGroupTextMessage:@"群聊文本消息"
    to:@"groupID" // 群聊的 groupID
    priority:V2TIM_PRIORITY_NORMAL // 消息优先级
    succ:^{
    // 群聊文本消息发送成功
    } fail:^(int code, NSString *msg) {
    // 群聊文本消息发送失败
    }];
    class SendGroupTextMessageCallback final : public V2TIMSendCallback {
    public:
    using SuccessCallback = std::function<void(const V2TIMMessage&)>;
    using ErrorCallback = std::function<void(int, const V2TIMString&)>;
    using ProgressCallback = std::function<void(uint32_t)>;
    
    SendGroupTextMessageCallback() = default;
    ~SendGroupTextMessageCallback() override = default;
    
    void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback,
    ProgressCallbackprogress_callback) {
    success_callback_ = std::move(success_callback);
    error_callback_ = std::move(error_callback);
    progress_callback_ = std::move(progress_callback);
    }
    void OnSuccess(const V2TIMMessage& message) override {
    if (success_callback_) {
    success_callback_(message);
    }
    }
    void OnError(int error_code, const V2TIMString& error_message) override {
    if (error_callback_) {
    error_callback_(error_code, error_message);
    }
    }
    void OnProgress(uint32_t progress) override {
    if (progress_callback_) {
    progress_callback_(progress);
    }
    }
    
    private:
    SuccessCallback success_callback_;
    ErrorCallback error_callback_;
    ProgressCallback progress_callback_;
    };
    
    auto callback = new SendGroupTextMessageCallback;
    callback->SetCallback(
    [=](const V2TIMMessage& message) {
    // 发送群聊文本消息成功
    delete callback;
    },
    [=](int error_code, const V2TIMString& error_message) {
    // 发送群聊文本消息失败
    delete callback;
    },
    [=](uint32_t progress) {
    // 文本消息不会回调进度
    });
    // API 返回 msgID,按需使用
    V2TIMString msgID = V2TIMManager::GetInstance()->SendGroupTextMessage(
    "群聊文本消息", "groupID", V2TIMMessagePriority::V2TIM_PRIORITY_NORMAL, callback);

    高级接口

    调用高级接口发送群聊文本消息分两步:
    1. 调用 createTextMessage (Java / Swift / Objective-C / C++) 创建文本消息。
    2. 调用 sendMessage (Java / Swift / Objective-C / C++) 发送消息。
    示例代码如下:
    Java
    Swift
    Objective-C
    C++
    // 创建文本消息
    V2TIMMessage v2TIMMessage = V2TIMManager.getMessageManager().createTextMessage("content");
    // 发送消息
    V2TIMManager.getMessageManager().sendMessage(v2TIMMessage, null, "receiver_groupID", V2TIMMessage.V2TIM_PRIORITY_NORMAL, false, null, new V2TIMSendCallback<V2TIMMessage>() {
    @Override
    public void onProgress(int progress) {
    // 文本消息不会回调进度
    }
    
    @Override
    public void onSuccess(V2TIMMessage message) {
    // 发送群聊文本消息成功
    }
    
    @Override
    public void onError(int code, String desc) {
    // 发送群聊文本消息失败
    }
    });
    // 创建文本消息
    let msg = V2TIMManager.shared.createTextMessage(text: "content") {
    // 发送消息
    _ = V2TIMManager.shared.sendMessage(message: msg, receiver: nil, groupID: "receiver_groupID", priority:
    .V2TIM_PRIORITY_DEFAULT, onlineUserOnly: false, offlinePushInfo: nil) { progress in
    } succ: {
    print("createTextMessage & send succ.")
    } fail: { code, desc in
    print("createTextMessage &send c2c text message fail, code: \\(code), desc: \\(desc)")
    }
    }
    // 创建文本消息
    V2TIMMessage *message = [[V2TIMManager sharedInstance] createTextMessage:content];
    // 发送消息
    [V2TIMManager.sharedInstance sendMessage:message
    receiver:nil
    groupID:@"receiver_groupID" // 群聊的 groupID
    priority:V2TIM_PRIORITY_NORMAL // 消息优先级
    onlineUserOnly:NO // 仅在线用户接收
    offlinePushInfo:nil // 离线推送自定义信息
    progress:nil
    succ:^{
    // 文本消息发送成功
    }
    fail:^(int code, NSString *desc) {
    // 文本消息发送失败
    }];
    class SendCallback final : public V2TIMSendCallback {
    public:
    using SuccessCallback = std::function<void(const V2TIMMessage&)>;
    using ErrorCallback = std::function<void(int, const V2TIMString&)>;
    using ProgressCallback = std::function<void(uint32_t)>;
    
    SendCallback() = default;
    ~SendCallback() override = default;
    
    void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback,
    ProgressCallback progress_callback) {
    success_callback_ = std::move(success_callback);
    error_callback_ = std::move(error_callback);
    progress_callback_ = std::move(progress_callback);
    }
    
    void OnSuccess(const V2TIMMessage& message) override {
    if (success_callback_) {
    success_callback_(message);
    }
    }
    void OnError(int error_code, const V2TIMString& error_message) override {
    if (error_callback_) {
    error_callback_(error_code, error_message);
    }
    }
    void OnProgress(uint32_t progress) override {
    if (progress_callback_) {
    progress_callback_(progress);
    }
    }
    
    private:
    SuccessCallback success_callback_;
    ErrorCallback error_callback_;
    ProgressCallback progress_callback_;
    };
    
    // 创建文本消息
    V2TIMMessage v2TIMMessage = V2TIMManager::GetInstance()->GetMessageManager()->CreateTextMessage("content");
    // 发送消息
    auto callback = new SendCallback{};
    callback->SetCallback(
    [=](const V2TIMMessage& message) {
    // 发送群聊文本消息成功
    delete callback;
    },
    [=](int error_code, const V2TIMString& error_message) {
    // 发送群聊文本消息失败
    delete callback;
    },
    [=](uint32_t progress) {
    // 文本消息不会回调进度
    });
    V2TIMManager::GetInstance()->GetMessageManager()->SendMessage(
    v2TIMMessage, {}, "receiver_groupID", V2TIMMessagePriority::V2TIM_PRIORITY_NORMAL, false, {}, callback);

    发送自定义消息

    自定义消息区分单聊和群聊,涉及的接口或者传参有所区别。发送自定义消息可以采用两种接口:普通接口和高级接口。 高级接口即上文中已介绍过的 sendMessage (Java / Swift / Objective-C / C++),比普通接口能设置更多的发送参数(例如优先级、离线推送信息等)。

    单聊自定义消息

    普通接口

    调用 sendC2CCustomMessage (Java / Swift / Objective-C / C++) 发送单聊自定义消息,直接传递消息二进制内容、单聊接收者 userID 即可。
    示例代码如下:
    Java
    Swift
    Objective-C
    C++
    String msgID = V2TIMManager.getInstance().sendC2CCustomMessage("单聊自定义消息".getBytes(), "receiver_userID", new V2TIMValueCallback<V2TIMMessage>() {
    @Override
    public void onSuccess(V2TIMMessage message) {
    // 发送单聊自定义消息成功
    }
    
    @Override
    public void onError(int code, String desc) {
    // 发送单聊自定义消息失败
    }
    });
    let customData = "单聊自定义消息".data(using: .utf8) ?? Data()
    let msgID = V2TIMManager.shared.sendC2CCustomMessage(customData: customData, to: "receiver_userID", succ: {
    // 单聊自定义消息发送成功
    }) { code, desc in
    // 单聊自定义消息发送失败
    }
    NSData *customData = [@"单聊自定义消息" dataUsingEncoding:NSUTF8StringEncoding];
    NSString *msgID = [[V2TIMManager sharedInstance] sendC2CCustomMessage:customData
    to:@"receiver_userID" // 接收者 userID
    succ:^{
    // 单聊自定义消息发送成功
    }
    fail:^(int code, NSString *msg) {
    // 单聊自定义消息发送失败
    }];
    class SendC2CCustomMessageCallback final : public V2TIMSendCallback {
    public:
    using SuccessCallback = std::function<void(const V2TIMMessage&)>;
    using ErrorCallback = std::function<void(int, const V2TIMString&)>;
    using ProgressCallback = std::function<void(uint32_t)>;
    
    SendC2CCustomMessageCallback() = default;
    ~SendC2CCustomMessageCallback() override = default;
    
    void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback,
    ProgressCallback progress_callback) {
    success_callback_ = std::move(success_callback);
    error_callback_ = std::move(error_callback);
    progress_callback_ = std::move(progress_callback);
    }
    void OnSuccess(const V2TIMMessage& message) override {
    if (success_callback_) {
    success_callback_(message);
    }
    }
    void OnError(int error_code, const V2TIMString& error_message) override {
    if (error_callback_) {
    error_callback_(error_code, error_message);
    }
    }
    void OnProgress(uint32_t progress) override {
    if (progress_callback_) {
    progress_callback_(progress);
    }
    }
    
    private:
    SuccessCallback success_callback_;
    ErrorCallback error_callback_;
    ProgressCallback progress_callback_;
    };
    
    auto callback = new SendCallback{};
    callback->SetCallback(
    [=](const V2TIMMessage& message) {
    // 发送单聊自定义消息成功
    delete callback;
    },
    [=](int error_code, const V2TIMString& error_message) {
    // 发送单聊自定义消息失败
    delete callback;
    },
    [=](uint32_t progress) {
    // 自定义消息不会回调进度
    });
    V2TIMString str = u8"单聊自定义消息";
    V2TIMBuffer customData = {reinterpret_cast<const uint8_t*>(str.CString()), str.Size()};
    V2TIMString msgID = V2TIMManager::GetInstance()->SendC2CCustomMessage(customData, "receiver_userID", callback);

    高级接口

    调用高级接口发送单聊自定义消息分两步:
    1. 调用 createCustomMessage (Java / Swift / Objective-C / C++) 创建自定义消息。
    2. 调用 sendMessage (Java / Swift / Objective-C / C++) 发送消息。
    示例代码如下:
    Java
    Swift
    Objective-C
    C++
    // 创建自定义消息
    V2TIMMessage v2TIMMessage = V2TIMManager.getMessageManager().createCustomMessage("单聊自定义消息".getBytes());
    // 发送消息
    V2TIMManager.getMessageManager().sendMessage(v2TIMMessage, "receiver_userID", null, V2TIMMessage.V2TIM_PRIORITY_NORMAL, false, null, new V2TIMSendCallback<V2TIMMessage>() {
    @Override
    public void onProgress(int progress) {
    // 自定义消息不会回调进度
    }
    
    @Override
    public void onSuccess(V2TIMMessage message) {
    // 发送单聊自定义消息成功
    }
    
    @Override
    public void onError(int code, String desc) {
    // 发送单聊自定义消息失败
    }
    });
    if let msg = V2TIMManager.shared.createCustomMessage(data: "单聊自定义消息".data(using: .utf8) ?? Data()) {
    _ = V2TIMManager.shared.sendMessage(message: msg, receiver: "receiver_userID", groupID: nil, priority: .V2TIM_PRIORITY_DEFAULT, onlineUserOnly: false, offlinePushInfo: nil) { progress in
    } succ: {
    // 单聊自定义消息发送成功
    } fail: { code, desc in
    // 单聊自定义消息发送失败
    }
    }
    V2TIMMessage *message = [[V2TIMManager sharedInstance] createCustomMessage:data];
    [[V2TIMManager sharedInstance] sendMessage:message
    receiver:@"receiver_userID" // 接收者 userID
    groupID:nil
    priority:V2TIM_PRIORITY_DEFAULT // 消息优先级
    onlineUserOnly:NO
    offlinePushInfo:nil
    progress:nil
    succ:^{
    // 单聊自定义消息发送成功
    } fail:^(int code, NSString *desc) {
    // 单聊自定义消息发送失败
    }];
    class SendCallback final : public V2TIMSendCallback {
    public:
    using SuccessCallback = std::function<void(const V2TIMMessage&)>;
    using ErrorCallback = std::function<void(int, const V2TIMString&)>;
    using ProgressCallback = std::function<void(uint32_t)>;
    
    SendCallback() = default;
    ~SendCallback() override = default;
    
    void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback,
    ProgressCallback progress_callback) {
    success_callback_ = std::move(success_callback);
    error_callback_ = std::move(error_callback);
    progress_callback_ = std::move(progress_callback);
    }
    
    void OnSuccess(const V2TIMMessage& message) override {
    if (success_callback_) {
    success_callback_(message);
    }
    }
    void OnError(int error_code, const V2TIMString& error_message) override {
    if (error_callback_) {
    error_callback_(error_code, error_message);
    }
    }
    void OnProgress(uint32_t progress) override {
    if (progress_callback_) {
    progress_callback_(progress);
    }
    }
    
    private:
    SuccessCallback success_callback_;
    ErrorCallback error_callback_;
    ProgressCallback progress_callback_;
    };
    
    // 创建自定义消息
    V2TIMString str = u8"单聊自定义消息";
    V2TIMBuffer customData = {reinterpret_cast<const uint8_t*>(str.CString()), str.Size()};
    V2TIMMessage v2TIMMessage = V2TIMManager::GetInstance()->GetMessageManager()->CreateCustomMessage(customData);
    // 发送消息
    auto callback = new SendCallback{};
    callback->SetCallback(
    [=](const V2TIMMessage& message) {
    // 发送单聊自定义消息成功
    delete callback;
    },
    [=](int error_code, const V2TIMString& error_message) {
    // 发送单聊自定义消息失败
    delete callback;
    },
    [=](uint32_t progress) {
    // 自定义消息不会回调进度
    });
    V2TIMManager::GetInstance()->GetMessageManager()->SendMessage(
    v2TIMMessage, "receiver_userID", {}, V2TIMMessagePriority::V2TIM_PRIORITY_NORMAL, false, {}, callback);

    群聊自定义消息

    普通接口

    调用 sendGroupCustomMessage (Java / Swift / Objective-C / C++) 发送群聊自定义消息,直接传递消息二进制内容、群聊 groupID 和优先级即可。 消息优先级可参考 V2TIMMessagePriority 定义。
    代码示例如下:
    Java
    Swift
    Objective-C
    C++
    String msgID = V2TIMManager.getInstance().sendGroupCustomMessage("群聊自定义消息".getBytes(), "groupID", V2TIMMessage.V2TIM_PRIORITY_NORMAL, new V2TIMValueCallback<V2TIMMessage>() {
    @Override
    public void onSuccess(V2TIMMessage message) {
    // 发送群聊自定义消息成功
    }
    
    @Override
    public void onError(int code, String desc) {
    // 发送群聊自定义消息失败
    }
    });
    let customData = "群聊自定义消息".data(using: .utf8) ?? Data()
    let msgID = V2TIMManager.shared.sendGroupCustomMessage(customData: customData, to: "receiver_groupID",
    priority: .V2TIM_PRIORITY_DEFAULT,
    succ: {
    // 单聊自定义消息发送成功
    }) { code, desc in
    // 单聊自定义消息发送失败
    }
    NSData *customData = [@"群聊自定义消息" dataUsingEncoding:NSUTF8StringEncoding];
    NSString *msgID = [[V2TIMManager sharedInstance] sendGroupCustomMessage:customData
    to:@"receiver_groupID" // 群聊的 groupID
    priority:V2TIM_PRIORITY_HIGH // 消息优先级
    succ:^{
    // 群聊自定义消息发送成功
    } fail:^(int code, NSString *msg) {
    // 群聊自定义消息发送失败
    }];
    class SendCallback final : public V2TIMSendCallback {
    public:
    using SuccessCallback = std::function<void(const V2TIMMessage&)>;
    using ErrorCallback = std::function<void(int, const V2TIMString&)>;
    using ProgressCallback = std::function<void(uint32_t)>;
    
    SendCallback() = default;
    ~SendCallback() override = default;
    
    void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback,
    ProgressCallback progress_callback) {
    success_callback_ = std::move(success_callback);
    error_callback_ = std::move(error_callback);
    progress_callback_ = std::move(progress_callback);
    }
    
    void OnSuccess(const V2TIMMessage& message) override {
    if (success_callback_) {
    success_callback_(message);
    }
    }
    void OnError(int error_code, const V2TIMString& error_message) override {
    if (error_callback_) {
    error_callback_(error_code, error_message);
    }
    }
    void OnProgress(uint32_t progress) override {
    if (progress_callback_) {
    progress_callback_(progress);
    }
    }
    
    private:
    SuccessCallback success_callback_;
    ErrorCallback error_callback_;
    ProgressCallback progress_callback_;
    };
    
    auto callback = new SendCallback{};
    callback->SetCallback(
    [=](const V2TIMMessage& message) {
    // 发送群聊自定义消息成功
    delete callback;
    },
    [=](int error_code, const V2TIMString& error_message) {
    // 发送群聊自定义消息失败
    delete callback;
    },
    [=](uint32_t progress) {
    // 自定义消息不会回调进度
    });
    V2TIMString str = u8"群聊自定义消息";
    V2TIMBuffer customData = {reinterpret_cast<const uint8_t*>(str.CString()), str.Size()};
    V2TIMString msgID = V2TIMManager::GetInstance()->SendGroupCustomMessage(
    customData, "groupID", V2TIMMessagePriority::V2TIM_PRIORITY_NORMAL, callback);

    高级接口

    调用高级接口发送群聊自定义消息分两步:
    1. 调用 createCustomMessage (Java / Swift / Objective-C / C++) 创建自定义消息。
    2. 调用 sendMessage (Java / Swift / Objective-C / C++) 发送消息。
    代码示例如下:
    Java
    Swift
    Objective-C
    C++
    // 创建自定义消息
    V2TIMMessage v2TIMMessage = V2TIMManager.getMessageManager().createCustomMessage("群聊自定义消息".getBytes());
    // 发送消息
    V2TIMManager.getMessageManager().sendMessage(v2TIMMessage, null, "receiver_groupID", V2TIMMessage.V2TIM_PRIORITY_NORMAL, false, null, new V2TIMSendCallback<V2TIMMessage>() {
    @Override
    public void onProgress(int progress) {
    // 自定义消息不会回调进度
    }
    
    @Override
    public void onSuccess(V2TIMMessage message) {
    // 发送群聊自定义消息成功
    }
    
    @Override