tencent cloud

文档反馈

Android & iOS & Mac

最后更新时间:2022-09-08 18:18:46

    功能描述

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

    重点接口说明

    接口 sendMessage (Android / iOS & Mac) 是发送消息中最核心的接口。该接口支持发送所有类型的消息。

    说明:

    下文中提到的发消息高级接口,指的都是 sendMessage

    接口说明如下:

    方法原型:

    // 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 包含上传进度回调、发送成功回调、发送失败回调。
    注意

    如果 groupIDreceiver 同时设置,表示给 receiver 发送定向群消息。详情请参考 群定向消息

    发送文本消息

    文本消息区分单聊和群聊,涉及的接口、传参有所区别。

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

    单聊文本消息

    普通接口

    调用 sendC2CTextMessage (Android / iOS & Mac) 发送单聊文本消息,直接传入消息内容和接收者的 userID 即可。

    示例代码如下:

    // 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) {
        // 发送单聊文本消息失败
    }
    });
    

    高级接口

    调用高级接口发送单聊文本消息分两步:

    1. 调用 createTextMessage (Android / iOS & Mac) 创建文本消息。
    2. 调用 sendMessage (Android / iOS & Mac) 发送消息。

    示例代码如下:

    // 创建文本消息
    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) {
        // 文本消息发送失败
    }
    });
    

    群聊文本消息

    普通接口

    调用 sendGroupTextMessage (Android / iOS & Mac) 发送群聊文本消息,直接传递消息内容、群聊的 groupID 和消息优先级即可。

    消息优先级可参考 V2TIMMessagePriority 定义。

    示例代码如下:

    // 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) {
        // 发送群聊文本消息失败
    }
    });
    

    高级接口

    调用高级接口发送群聊文本消息分两步:

    1. 调用 createTextMessage (Android / iOS & Mac) 创建文本消息。
    2. 调用 sendMessage (Android / iOS & Mac) 发送消息。

    示例代码如下:

    // 创建文本消息
    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) {
        // 发送群聊文本消息失败
    }
    });
    

    发送自定义消息

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

    单聊自定义消息

    普通接口

    调用 sendC2CCustomMessage (Android / iOS & Mac) 发送单聊自定义消息,直接传递消息二进制内容、单聊接收者 userID 即可。

    示例代码如下:

    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) {
    // 发送单聊自定义消息失败
    }
    });

    高级接口

    调用高级接口发送单聊自定义消息分两步:

    1. 调用 createCustomMessage (Android / iOS & Mac) 创建自定义消息。
    2. 调用 sendMessage (Android / iOS & Mac) 发送消息。

    示例代码如下:

    // 创建自定义消息
    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) {
        // 发送单聊自定义消息失败
    }
    });
    

    群聊自定义消息

    普通接口

    调用 sendGroupCustomMessage (Android / iOS & Mac) 发送群聊自定义消息,直接传递消息二进制内容、群聊 groupID 和优先级即可。
    消息优先级可参考 V2TIMMessagePriority 定义。

    代码示例如下:

    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) {
    // 发送群聊自定义消息失败
    }
    });

    高级接口

    调用高级接口发送群聊自定义消息分两步:

    1. 调用 createCustomMessage (Android / iOS & Mac) 创建自定义消息。
    2. 调用 sendMessage (Android / iOS & Mac) 发送消息。

    代码示例如下:

    // 创建自定义消息
    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) {
        // 发送群聊自定义消息失败
    }
    });
    

    发送富媒体消息

    富媒体消息的发送步骤如下:

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

    图片消息

    创建图片消息需要先获取到本地图片路径。
    发送消息过程中,会先将图片文件上传至服务器,同时回调上传进度。上传成功后再发送消息。

    示例代码如下:

    // 创建图片消息
    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) {
        // 图片消息发送失败
    }
    });
    

    语音消息

    创建语音消息需要先获取到本地语音文件路径和语音时长,其中语音时长可用于接收端 UI 显示。
    发送消息过程中,会先将语音文件上传至服务器,同时回调上传进度。上传成功后再发送消息。

    示例代码如下:

    // 创建语音消息
    V2TIMMessage v2TIMMessage = V2TIMManager.getMessageManager().createSoundMessage("/sdcard/xxx", 5);
    // 发送消息
    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) {
        // 语音消息发送失败
    }
    });
    

    视频消息

    创建视频消息需要先获取到本地视频文件路径、视频时长和视频快照,其中时长和快照可用于接收端 UI 显示。
    发送消息过程中,会先将视频上传至服务器,同时回调上传进度。上传成功后再发送消息。

    示例代码如下:

    // 创建视频消息
    V2TIMMessage v2TIMMessage = V2TIMManager.getMessageManager().createVideoMessage("/sdcard/xxx", "mp4", 10, "/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) {
        // 视频消息发送失败
    }
    });
    

    文件消息

    创建文件消息需要先获取到本地文件路径。
    发送消息过程中,会先将文件上传至服务器,同时回调上传进度。上传成功后再发送消息。

    示例代码如下:

    // 创建文件消息
    V2TIMMessage v2TIMMessage = V2TIMManager.getMessageManager().createFileMessage("/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) {
        // 文件消息发送失败
    }
    });
    

    定位消息

    定位消息会直接发送经纬度,一般需要配合地图控件显示。

    示例代码如下:

    // 创建定位消息
    V2TIMMessage v2TIMMessage = V2TIMManager.getMessageManager().createLocationMessage("地理位置", 0.5, 0.5);
    // 发送消息
    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) {
        // 定位消息发送失败
    }
    });
    

    表情消息

    表情消息会直接发送表情编码,通常接收端需要将其转换成对应的表情 icon。

    示例代码如下:

    // 创建表情消息
    V2TIMMessage v2TIMMessage = V2TIMManager.getMessageManager().createFaceMessage(1, "tt00".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) {
        // 表情消息发送失败
    }
    });
    

    发送多个 Elem 的消息

    如果您的消息需要多个 elem,可以在创建 Message 对象后,通过 Message 对象的 Elem 成员调用 appendElem (Android / iOS & Mac) 方法添加下一个 elem 成员。

    appendElem 仅支持在原有的 V2TIMElem(此 Elem 类型不限)后面追加 V2TIMTextElemV2TIMCustomElemV2TIMFaceElemV2TIMLocationElem 四种类型的元素。
    因此 “图片 + 文本”、“视频 + 文本”、“位置 + 文本” 这几种形式均可支持,但是 “图片 + 图片”、“文本 + 图片” 等不支持。

    以文本消息 + 自定义消息为例,示例代码如下:

    // 创建文本消息
    V2TIMMessage v2TIMMessage = V2TIMManager.getMessageManager().createTextMessage("test");
    // 创建自定义 elem
    V2TIMCustomElem customElem = new V2TIMCustomElem();
    customElem.setData("自定义消息".getBytes());
    // 将自定义 elem 添加到 message.textElem 中
    v2TIMMessage.getTextElem().appendElem(customElem);
    // 发送消息
    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) {
        // 多 elem 消息发送成功
    }
        @Override
    public void onError(int code, String desc) {
        // 多 elem 消息发送失败
    }
    });
    

    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持