tencent cloud

文档反馈

Android&iOS&Windows&Mac

最后更新时间:2024-03-20 11:14:45

    功能描述

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

    重点接口说明

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

    发送文本消息

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

    单聊文本消息

    普通接口

    调用 sendC2CTextMessage (Android / iOS & Mac / Windows) 发送单聊文本消息,直接传入消息内容和接收者的 userID 即可。
    示例代码如下:
    Android
    iOS & Mac
    Windows
    // 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,按需使用
    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 (Android / iOS & Mac / Windows) 创建文本消息。
    2. 调用 sendMessage (Android / iOS & Mac / Windows) 发送消息。
    示例代码如下:
    Android
    iOS & Mac
    Windows
    // 创建文本消息
    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) {
    // 文本消息发送失败
    }
    });
    // 创建文本消息
    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 (Android / iOS & Mac / Windows) 发送群聊文本消息,直接传递消息内容、群聊的 groupID 和消息优先级即可。
    消息优先级可参考 V2TIMMessagePriority 定义。
    示例代码如下:
    Android
    iOS & Mac
    Windows
    // 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,按需使用
    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 (Android / iOS & Mac / Windows) 创建文本消息。
    2. 调用 sendMessage (Android / iOS & Mac / Windows) 发送消息。
    示例代码如下:
    Android
    iOS & Mac
    Windows
    // 创建文本消息
    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) {
    // 发送群聊文本消息失败
    }
    });
    // 创建文本消息
    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 (Android / iOS & Mac / Windows),比普通接口能设置更多的发送参数(例如优先级、离线推送信息等)。

    单聊自定义消息

    普通接口

    调用 sendC2CCustomMessage (Android / iOS & Mac / Windows) 发送单聊自定义消息,直接传递消息二进制内容、单聊接收者 userID 即可。
    示例代码如下:
    Android
    iOS & Mac
    Windows
    
    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) {
    // 发送单聊自定义消息失败
    }
    });
    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 (Android / iOS & Mac / Windows) 创建自定义消息。
    2. 调用 sendMessage (Android / iOS & Mac / Windows) 发送消息。
    示例代码如下:
    Android
    iOS & Mac
    Windows
    // 创建自定义消息
    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) {
    // 发送单聊自定义消息失败
    }
    });
    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 (Android / iOS & Mac / Windows) 发送群聊自定义消息,直接传递消息二进制内容、群聊 groupID 和优先级即可。 消息优先级可参考 V2TIMMessagePriority 定义。
    代码示例如下:
    Android
    iOS & Mac
    Windows
    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) {
    // 发送群聊自定义消息失败
    }
    });
    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 (Android / iOS & Mac / Windows) 创建自定义消息。
    2. 调用 sendMessage (Android / iOS & Mac / Windows) 发送消息。
    代码示例如下:
    Android
    iOS & Mac
    Windows
    // 创建自定义消息
    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
    public void onError(int code, String desc) {
    // 发送群聊自定义消息失败
    }
    });
    V2TIMMessage *message = [[V2TIMManager sharedInstance] createCustomMessage:data];
    [[V2TIMManager sharedInstance] sendMessage:message
    receiver:nil
    groupID:@"receiver_groupID" // 群聊的 groupID
    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_groupID", V2TIMMessagePriority::V2TIM_PRIORITY_NORMAL, false, {}, callback);

    发送富媒体消息

    富媒体消息的发送步骤如下:
    1. 调用 createXxxMessage 创建指定类型的富媒体消息对象,其中 Xxx 表示具体的消息类型。
    2. 调用 sendMessage (Android / iOS & Mac / Windows) 发送消息。
    3. 在消息回调中获取消息是否发送成功或失败。

    图片消息

    创建图片消息需要先获取到本地图片路径。 发送消息过程中,会先将图片文件上传至服务器,同时回调上传进度。上传成功后再发送消息。
    示例代码如下:
    Android
    iOS & Mac
    Windows
    // 创建图片消息
    V2TIMMessage v2TIMMessage = V2TIMManager.getMessageManager().createImageMessage("/sdcard/xxx");
    // 发送消息
    V2TIMManager.getMessageManager().sendMessage(v2TIMMessage, "receiver_userID", null, V2TIMMessage.V2TIM_PRIORITY_NORMAL, false, null, new V2TIMSendCallback<V2TIMMessage>() {
    @Override
    public void onProgress(int progress) {
    // 图片上传进度,progress 取值 [0, 100]
    }
    
    @Override
    public void onSuccess(V2TIMMessage message) {
    // 图片消息发送成功
    }
    
    @Override
    public void onError(int code, String desc) {
    // 图片消息发送失败
    }
    });
    // 获取本地图片路径
    NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"png"];
    // 创建图片消息
    V2TIMMessage *message = [[V2TIMManager sharedInstance] createImageMessage:imagePath];
    // 发送消息
    [[V2TIMManager sharedInstance] sendMessage:message
    receiver:@"userID"
    groupID:nil
    priority:V2TIM_PRIORITY_DEFAULT
    onlineUserOnly:NO
    offlinePushInfo:nil
    progress:^(uint32_t progress) {
    // 图片上传进度,progress 取值 [0, 100]
    } 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()->CreateImageMessage("./File/Xxx.jpg");
    // 发送消息
    auto callback = new SendCallback{};
    callback->SetCallback(
    [=](const V2TIMMessage& message) {
    // 图片消息发送成功
    delete callback;
    },
    [=](int error_code, const V2TIMString& error_message) {
    // 图片消息发送失败
    delete callback;
    },
    [=](uint32_t progress) {
    // 图片上传进度,progress 取值 [0, 100]
    });
    V2TIMManager::GetInstance()->GetMessageManager()->SendMessage(
    v2TIMMessage, "receiver_userID",