本文档提供消息相关的类型和接口使用说明。API 接口详细文档参看 Android API 参考、iOS API 参考。

消息类型

BIMMessage 为 IMSDK 的消息内容承载类,在使用 IMSDK 的过程中会频繁的使用该类。
IMSDK 支持如下消息:

消息分类消息类型说明
文本消息BIM_MESSAGE_TYPE_TEXT普通文本消息
图片消息BIM_MESSAGE_TYPE_IMAGE图片消息,含原始图,缩略图
视频消息BIM_MESSAGE_TYPE_VIDEO视频文件以及视频封面图
语音消息BIM_MESSAGE_TYPE_AUDIO不超过 60s 的语音文件
文件消息BIM_MESSAGE_TYPE_FILE文件消息,最大不超过 100M
自定义消息BIM_MESSAGE_TYPE_CUSTOM开发者自定义字符串发送,IMSDK 透传
创建消息
创建文本消息

使用 BIMClient 中的 createTextMessage 方法创建文本消息。

BIMMessage textMessage = BIMClient.getInstance().createTextMessage("消息内容");
java
BIMMessage *textMessage = [[BIMClient sharedInstance] createTextMessage:@"消息内容"];
objectivec
创建图片消息

使用 BIMClient 中的 createImageMessage 方法创建图片消息,其中 path 为当前发送图片文件的本地路径。

BIMMessage imageMessage = BIMClient.getInstance().createImageMessage(path);
java
BIMMessage *imageMessage = [[BIMClient sharedInstance] createImageMessage:path];
objectivec
创建语音消息

使用 BIMClient 中的 createVoiceMessage 方法创建语音消息,其中 path 为当前语音文件的本地路径。

BIMMessage audioMessage = BIMClient.getInstance().createAudioMessage(path);
java
BIMMessage *audioMessage = [[BIMClient sharedInstance] createAudioMessage:path duration:duration];
objectivec
创建视频消息

使用 BIMClient 中的 createVideoMessage 方法创建视频消息,其中 path 为当前视频文件的本地路径。

BIMMessage videoMessage = BIMClient.getInstance().createVideoMessage(path);
java
BIMMessage *videoMessage = [[BIMClient sharedInstance] createVideoMessage:path];
objectivec
创建文件消息

使用 BIMClient 中的 createFileMessage 方法创建文件消息,其中 path 为当前文件的本地路径,uri 为当前文件本地 uri,path 和 uri 可以二选一使用(iOS 只有 path),推荐优先使用 path。

/**
 * 创建文件消息
 * @param uri      文件uri
 * @param path     文件路径
 * @param fileName 文件名称
 * @param length   文件大小
 * @return
 */
 BIMMessage fileMessage = BIMClient.getInstance().createFileMessage(uri, path, fileName, length);
java
BIMMessage *fileMessage = [[BIMClient sharedInstance] createFileMessage:path fileName:fileName];
objectivec
创建自定义消息

使用 BIMClient 中的 createCustomMessage 方法创建文件消息,其中 data 参数为自定义消息内容,通常为 json 格式数据。

/**
 * 创建自定义消息
 * @param data 自定义消息内容
 * @return
 */
BIMMessage customMessage = BIMClient.getInstance().createCustomMessage(data);
java
BIMMessage *customMessage = [[BIMClient sharedInstance] createCustomMessage:data];
objectivec
发送消息

发送消息的方法在 BIMClient 中,使用 sendMessage 接口可实现,示例代码如下。

/**
 * @param message
 * @param conversationId 会话id
 * @param callback       回调
 */
BIMClient.getInstance().sendMessage(msg, conversationId, new BIMSendCallback() {

    @Override
    public void onAdd(BIMMessage message) {
        //媒体消息回调,方便媒体消息上屏
    }

    @Override
    public void onProgress(BIMMessage message, int progress) {
        //媒体消息回调,上传进度
    }

    @Override
    public void onSaved(BIMMessage bimMessage) {
       //媒体消息回调,消息已经入库
    }

    @Override
    public void onSuccess(BIMMessage bimMessage) {
       //发送成功
    }

    @Override
    public void onAsync(BIMMessage bimMessage, boolean isUpdate) {
        //发送风控回调
    }

    @Override
    public void onError(BIMMessage bimMessage, int code, String desc) {
        //发送失败
    }
})
java
//发送消息
[[BIMClient sharedInstance] sendMessage:sendMessage conversationId:self.conversation.conversationID saved:nil completion:^(BIMMessage * _Nonnull message, BIMError * _Nullable error) {
        
}];
objectivec
接收消息

使用 BIMClient 中的 addMessageListener 设置消息监听,可通过 bimMessage.getMsgType() 获取消息类型属性。

BIMClient.getInstance().addMessageListener(new BIMMessageListener() {
    @Override
    public void onReceiveMessage(BIMMessage bimMessage) {
        //收到消息回调
    }

    @Override
    public void onSendMessage(BIMMessage bimMessage) {
        //本地发出消息回调
    }

    @Override
    public void onDeleteMessage(BIMMessage bimMessage) {
        //删除消息回调
    }

    @Override
    public void onRecallMessage(BIMMessage bimMessage) {
        //撤回消息回调
    }

    @Override
    public void onUpdateMessage(BIMMessage bimMessage) {
        //消息更新回调
    }
});
java
[[BIMClient sharedInstance] addMessageListener:<#(nonnull id<BIMMessageListener>)#>];

/// 收到新消息
- (void)onReceiveMessage:(BIMMessage *)message {
    
}

/// 收到消息被删除
- (void)onDeleteMessage:(NSString *)msgID {

}

/// 收到消息撤回
- (void)onRecallMessage:(BIMMessage *)message {
    
}

/// 消息被修改(内容+扩展)
- (void)onUpdateMessage:(BIMMessage *)message {
    
}

/// 发送消息入库完成
- (void)onSendMessage:(BIMMessage *)message {
    
}
objectivec