- Android
- iOS
- JavaScript
接口定义
/**
* 发送媒体消息(先上传媒体,再发送消息)
* @param content 媒体消息实体
* @param conversation 会话
* @param callback 发送回调
* @return 消息对象
*/
Message sendMediaMessage(MediaMessageContent content,
Conversation conversation,
ISendMediaMessageCallback callback);
示例代码
VideoMessage video = new VideoMessage();
video.setLocalPath("xxxxxxxxxx");
video.setSnapshotLocalPath("xxxxxxxxx");
video.setHeight(400);
video.setWidth(600);
video.setSize(1024);
video.setDuration(10);
Conversation conversation = new Conversation(Conversation.ConversationType.PRIVATE, "userid1");
IMessageManager.ISendMediaMessageCallback callback = new IMessageManager.ISendMediaMessageCallback() {
@Override
public void onProgress(int progress, Message message) {
Log.i("TAG", "onProgress");
}
@Override
public void onSuccess(Message message) {
Log.i("TAG", "send message success");
}
@Override
public void onError(Message message, int errorCode) {
Log.i("TAG", "send message error");
}
@Override
public void onCancel(Message message) {
Log.i("TAG", "onCancel");
}
};
Message message = JIM.getInstance().getMessageManager().sendMediaMessage(video, conversation, callback);
Log.i("TAG", "after send, clientMsgNo is " + message.getClientMsgNo());
接口定义
/// 发送媒体消息(先上传媒体,再发送消息)
/// - Parameters:
/// - content: 媒体消息实体
/// - conversation: 会话
/// - progressBlock: 上传进度回调
/// - successBlock: 成功回调
/// - errorBlock: 失败回调
/// - cancelBlock: 用户取消上传回调
- (JMessage *)sendMediaMessage:(JMediaMessageContent *)content
inConversation:(JConversation *)conversation
progress:(void (^)(int progress, JMessage *message))progressBlock
success:(void (^)(JMessage *message))successBlock
error:(void (^)(JErrorCode errorCode, JMessage *message))errorBlock
cancel:(void (^)(JMessage *message))cancelBlock;
示例代码
//视频消息
JConversation *conversation = [[JConversation alloc] initWithConversationType:JConversationTypePrivate conversationId:@"userid2"];
JVideoMessage *video = [JVideoMessage videoWithData:videoFileData];
JMessage *m = [JIM.shared.messageManager sendMediaMessage:voice
inConversation:conversation
progress:^(int progress, JMessage *message) {
} success:^(JMessage *message) {
} error:^(JErrorCode errorCode, JMessage *message) {
} cancel:^(JMessage *message) {
}];
NSLog(@"after send, m.clientMsgNo is %lld", m.clientMsgNo);
开发者只需传入 File 对象,发送视频方法会自动截取视频首帧作为封面,更多包含属性请参考 视频消息
参数说明
名称 | 类型 | 必填 | 默认值 | 描述 | 版本 |
---|---|---|---|---|---|
message | Object | 是 | 消息对象 | 1.0.0 | |
message.conversationType | Number | 是 | 会话类型 | 1.0.0 | |
message.conversationId | String | 是 | 会话 Id,会话类型是 PRIVATE 时,会话 Id 是接收方的 userId,会话类型是 GROUP 时是群组 Id | 1.0.0 | |
message.content | Object | 是 | 1.0.0 | ||
message.content.file | File | 是 | 视频对象 | 1.0.0 | |
message.mentionInfo | Object | 否 | 无 | conversationType 为 GROUP 时有效,设置 mentionInfo 表示本条消息是 @ 消息 | 1.0.0 |
mentionInfo.mentionType | Number | 否 | 无 | @ 类型,详细可查看 @ 消息枚举 说明 | 1.0.0 |
mentionInfo.targetIds | Array | 否 | 无 | @ 指定人列表,SDK 会优先根据 mentionType 判断消息的 @ 类型 | 1.0.0 |
callbacks 参数说明
名称 | 类型 | 必填 | 默认值 | 描述 | 版本 |
---|---|---|---|---|---|
callbacks | Object | 否 | 回调对象 | 1.0.0 | |
callbacks.onbefore | Function | 否 | 消息发送前回调,此方法触发后会返回临时消息标识 tid ,可向页面渲染消息,消息发送成功后台根据 tid 更新消息状态 | 1.0.0 | |
callbacks.onprogress | Function | 否 | 文件上传进度回调 | 1.0.0 | |
callbacks.onerror | Function | 否 | 文件上传失败,会返回具体的异常说明,消息将会停止发送 | 1.0.0 |
成功回调
名称 | 类型 | 描述 | 版本 |
---|---|---|---|
message | Object | 发送成功后返回带 messageId 和 sentTime 消息对象,消息结构请查看 Message | 1.0.0 |
失败回调
名称 | 类型 | 描述 | 版本 |
---|---|---|---|
result | Object | 发送失败后会返回对象中包含 tid 属性信息,同时包含 error 信息,可以直接查看 error.msg ,或者查看 状态码 | 1.0.0 |
示例代码
let { ConversationType } = JIM;
// 通过 <input type="file"> onchange 获取 file 对象
let file = e.target.files[0];
let message = {
conversationType: ConversationType.PRIVATE,
conversationId: 'userid02',
content: {
file: file
},
};
jim.sendVideoMessage(message, {
onbefore: (message) => {
/*
message.tid 此时可将消息渲染至页面,可通过 message.tid 做唯一标识,onprogress 触发后通过 message.tid 更新进度条
*/
},
onprogress: ({ percent, message }) => {
console.log(`${percent}%`, message);
},
onerror: (error) => {
console.log('upload file error', error);
}
}).then((msg) => {
console.log('send video message successfully', msg)
}, (result) => {
let { error, tid } = result;
// 可根据 tid 修改消息发送失败的状态, Web 端消息失败仅在 SDK 内存中保存,刷新后将无法获取到发送失败的消息
console.log(tid, error);
});