V2TIMManager
和 V2TIMMessageManager(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 | 包含上传进度回调、发送成功回调、发送失败回调。 |
注意如果
groupID
和receiver
同时设置,表示给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) {
// 发送单聊文本消息失败
}
});
调用高级接口发送单聊文本消息分两步:
示例代码如下:
// 创建文本消息
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) {
// 发送群聊文本消息失败
}
});
调用高级接口发送群聊文本消息分两步:
示例代码如下:
// 创建文本消息
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) {
// 发送单聊自定义消息失败
}
});
调用高级接口发送单聊自定义消息分两步:
示例代码如下:
// 创建自定义消息
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) {
// 发送群聊自定义消息失败
}
});
调用高级接口发送群聊自定义消息分两步:
代码示例如下:
// 创建自定义消息
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) {
// 发送群聊自定义消息失败
}
});
富媒体消息的发送步骤如下:
createXxxMessage
创建指定类型的富媒体消息对象,其中 Xxx 表示具体的消息类型。sendMessage
(Android / iOS & Mac) 发送消息。创建图片消息需要先获取到本地图片路径。
发送消息过程中,会先将图片文件上传至服务器,同时回调上传进度。上传成功后再发送消息。
示例代码如下:
// 创建图片消息
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,可以在创建 Message 对象后,通过 Message 对象的 Elem 成员调用 appendElem
(Android / iOS & Mac) 方法添加下一个 elem 成员。
appendElem
仅支持在原有的 V2TIMElem
(此 Elem 类型不限)后面追加 V2TIMTextElem
、V2TIMCustomElem
、V2TIMFaceElem
和 V2TIMLocationElem
四种类型的元素。
因此 “图片 + 文本”、“视频 + 文本”、“位置 + 文本” 这几种形式均可支持,但是 “图片 + 图片”、“文本 + 图片” 等不支持。
以文本消息 + 自定义消息为例,示例代码如下:
// 创建文本消息
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 消息发送失败
}
});
本页内容是否解决了您的问题?