Skip to content
能力中心
产品中心
应用市场
WebOffice
开发者后台

发送消息

发送消息

  1. 需要通过KIMCoreMessageFactory.MessageParamBuilder创建builder对象

  2. 调用KIMCoreMessageFactory中的createXXX方法,创建不同消息类型的,KIMCoreMessage对象

参数说明

MessageParamBuilder方法定义:

方法类型说明属性
setRefMsgrefMsg: KIMCoreMessage?MessageParamBuilder引用消息
setExtext: String?MessageParamBuilder扩展字段
setMessageConfigmessageConfig: KIMCoreMessageConfig?MessageParamBuilder消息配置
setPushConfigpushConfig: KIMCorePushConfig?MessageParamBuilder消息推送配置
setMsgNoticesmsgNotices: List<KIMCoreMsgNotice>?MessageParamBuilder消息强提醒配置

KIMCoreMessageConfig支持的参数

属性类型说明
markUnreadBoolean默认需要统计未读
true:计入未读(默认)
false:不计入未读
当前只适用于自定义消息
markRecentChatBoolean默认更新最近会话列表
true:更新
false:不更新

KIMCorePushConfig支持的参数

属性类型说明
pushTitleString离线推送显示标题
如果是内置消息类型,则无需填,默认填充
如果是自定义消息类型,必填,不然无法离线推送
pushContentString离线推送显示内容
如果是内置消息类型,则无需填,默认填充
如果是自定义消息类型,必填,不然无法离线推送
userPushTypeInt离线推送操作类型
当指定人员离线推送时,会取userList数组人员去推
Constant.UserPushType
userPushLevelInt强提醒推送级别
能够突破各个级别的免打扰配置
Constant.PushLevelType
userListList<String>强提醒指定人员列表
toAllUsersBoolean是否群聊所有人强提醒,比如@所有人
settingCfgKeyString通知配置页面的设置key
Constant.SettingCfgKey

文本消息

无需上传媒体文件时,可使用发送普通消息的接口。具体适用于以下情况:

  • 发送不涉及媒体文件上传的消息,例如 协作中台 内置消息类型中的文本消息等,或自定义的、不涉及媒体文件上传流程的自定义消息。

  • 如果不需要 SDK 负责上传媒体消息、且不需要 SDK 在上传成功后进行发送,则发送普通消息的接口也可以用于发送媒体消息,具体包括 协作中台 内置消息类型中的文件消息、图片、语音消息、视频消息等或自定义媒体消息。注意,发送时需要向 SDK 直接提供媒体上传成功后的 URL 地址或者唯一标识。

接口定义

kotlin
fun sendMessage(message: KIMCoreMessage, callback: ISendMessageCallback?)

代码示例

kotlin
val chatId = "会话id"
val text = "文本消息内容"
//创建消息实体
val builder = KIMCoreMessageFactory.MessageParamBuilder(chatId);
val pushConfig = KIMCoreMessage.KIMCorePushConfig(
    pushTitle, pushContent, pushType, pushLevel, list)
builder.setPushConfig(pushConfig);
val message = KIMCoreMessageFactory.createText(text, builder)
KIMCore.instance().sendMessage(message,object:ISendMessageCallback{
    override fun onAttached(message: KIMCoreMessage?) {
        //点击发送后,存入本地成功的回调
    }
    override fun onSuss(message: KIMCoreMessage?) {
        //发送成功之后的回调
    }
    override fun onError(message: KIMCoreMessage?, errorCode: ErrorCode) {

    }
})

媒体消息

发送媒体消息的接口一般用于发送需要上传媒体文件的消息,具体包括以下类型:

  • 发送 协作中台 内置消息类型中的文件消息、图片、语音消息、视频消息等。

发送媒体消息可支持以下使用方式:

  • 上传到默认服务器:由 SDK 上传媒体消息上传到 协作中台 默认的服务器,及负责在上传成功后发送消息。

  • 上传到自己的服务器:由 App 自行处理媒体文件上传逻辑(可上传到自己的服务器),SDK 只在上传成功后发送消息

接口定义

kotlin
fun sendMedia(
    message: KIMCoreMessage,
    file: File,
    callback: ISendMediaMessageCallback?
)

参数说明

参数类型说明
messageKIMCoreMessage消息对象
fileFile媒体文件
callbackISendMediaMessageCallback回调

代码示例

kotlin
//发送
KIMCore.instance().sendMedia(message, file, object : ISendMediaMessageCallback {
    override fun onProgress(message: KIMCoreMessage?, i: Int) {
        TODO()
    }
    override fun onCanceled(message: KIMCoreMessage?) {
        TODO()
    }
    override fun onAttached(message: KIMCoreMessage?) {
        TODO()
    }
    override fun onSuss(message: KIMCoreMessage?) {
        TODO()
    }
    override fun onError(message: KIMCoreMessage?, errorCode: ErrorCode) {
        TODO()
    }
})

文件消息

接口定义
kotlin
// class KIMCoreFileMessage
fun create(
    uploadIsCustom: Boolean,
    storeKey: String?,
    size: Long,
    name: String?
): KIMCoreFileMessage
参数说明
参数类型说明
uploadIsCustomBoolean是否使用自定义媒体资源服务器
storeKeyString?资源唯一路径,如果uploadIsCustom为true,由业务方自己定义
sizeLong文件大小,单位byte
nameString?文件名
代码示例
kotlin
//创建builder对象
val builder = MessageParamBuilder(curChatId)
val pushConfig = KIMCorePushConfig(
    pushTitle, pushContent, pushType, pushLevel, list
)
builder.setPushConfig(pushConfig)
//创建消息内容, 文件
val content = create()
//创建KIMCoreMessage对象
val message = createFile(content, builder)

图片消息

接口定义
kotlin
// class KIMCoreImageMessage
fun create(
    uploadIsCustom: Boolean, storeKey: String?, thumbnail: String?,
    size: Long, format: String?, width: Int, height: Int, name: String?
): KIMCoreImageMessage
参数说明
参数类型说明
uploadIsCustomBoolean是否使用自定义媒体资源服务器
storeKeyString?资源唯一路径,如果uploadIsCustom为true,由业务方自己定义
thumbnailString?缩略图
sizeLong图片大小,单位byte
formatString?图片格式,如:image/jpeg,image/png
widthInt图片宽
heightInt图片高
nameString?原始文件名
代码示例
kotlin
//创建消息内容, 图片
val content = KIMCoreImageMessage.create("image/jpeg", 100, 200)
val message = KIMCoreMessageFactory.createPic(content, builder)

视频消息

接口定义
kotlin
fun create(
    storeKey: String?, uploadIsCustom: Boolean, size: Long,
    format: String?, codec: String?, duration: Long,
    coverStoreKey: String?, coverHeight: Int, coverWidth: Int, name: String?
): KIMCoreVideoMessage
参数说明
参数类型说明
storeKeyString资源唯一路径,如果uploadIsCustom为true,由业务方自己定义
uploadIsCustomBoolean是否使用自定义媒体资源服务器
sizeLong视频大小,单位byte
formatString?视频格式,如:mp4 mov
codecString?视频编码,如:H264AVC
durationLong视频时长,单位s
coverStoreKeyString?视频封面图,资源唯一路径,如果uploadIsCustom为true,由业务方自己定义
coverHeightInt视频封面图宽
coverWidthInt视频封面图高
nameString?原始文件名
代码示例
kotlin
//创建消息内容, 视频
val content = KIMCoreVideoMessage.create("H264AVC", "mp4", 100, 100)
val message = KIMCoreMessageFactory.createVideo(content, builder);

语音消息

接口定义
kotlin
fun create(
    storeKey: String?, uploadIsCustom: Boolean, size: Long,
    format: String?, codes: String?, duration: Long,
    sampleBits: Int, sampleRate: Int, channel: Int
): KIMCoreVoiceMessage
参数类型说明
storeKeyString?资源唯一路径,如果{@link this#uploadIsCustom} 为true,由业务方自己定义
uploadIsCustomBoolean是否使用自定义媒体资源服务器
sizeLong音频大小
formatString?音频格式
codesString?音频编码
durationLong音频时长,单位s
sampleBitsInt音频比特率,每秒(单位时间内)钟传输的数位
sampleRateInt音频采样率,每秒进行多少次采样
channelInt声道
代码示例
kotlin
//创建消息内容,语音
val content = KIMCoreVoiceMessage.create("mp3", "", 12, 1000, 1)
//创建消息实体
val message = KIMCoreMessageFactory.createVoice(content, builder)

发送图文消息

接口定义
kotlin
//KIMCore
fun sendPicText(
    message: KIMCoreMessage,
    files: List<File?>,
    callback: ISendMediaMessageCallback?
)
参数说明
参数类型说明
messageKIMCoreMessage消息模型
filesList<File>图片本地地址
callbackISendMediaMessageCallback回调
代码示例
kotlin
val file = File("图片本地地址")
val file2 = File("图片本地地址")
val picTextMessage = KIMCorePicTextMessage.create()
//构建图文内容
val imageMessage = KIMCoreImageMessage.create(
        "", 100, 100)
picTextMessage.addItem(imageMessage)
val textMessage = KIMCoreTextMessage.create("图文混排消息:文字部分")
picTextMessage.addItem(textMessage)
val imageMessage2 = KIMCoreImageMessage.create(
        "", 100, 100)
picTextMessage.addItem(imageMessage2)
val textMessage2 = KIMCoreTextMessage.create("图文混排消息:文字部分2")
picTextMessage.addItem(textMessage2)
val builder =  KIMCoreMessageFactory.MessageParamBuilder(curChatId)
val pushConfig =  KIMCoreMessage.KIMCorePushConfig(
    pushTitle, pushContent, pushType, pushLevel, list);
builder.setPushConfig(pushConfig)
//创建消息实体
val message = KIMCoreMessageFactory.createPicText(picTextMessage, builder)
//发送
KIMCore.instance().sendPicText(message, Arrays.asList(file, file2), object : ISendMessageCallback {
        override fun onAttached(message: KIMCoreMessage?) {
            //点击发送后,存入本地成功的回调
        }
        override fun onSuss(message: KIMCoreMessage?) {
            //发送成功之后的回调
        }
        override fun onError(message: KIMCoreMessage?, errorCode: ErrorCode) {
        }
    })

发送强提醒属性

用户在发消息的时候,可以通过在消息中携带 KIMCoreMsgNotice 数据字段,实现提及他人的强提醒消息

代码示例

kotlin
val notice = KIMCoreMsgNotice(noticeType, isAll, toUserList)
val customizeMessage = KIMCoreCustomizeMessage.create(content, opType)
val builder =  KIMCoreMessageFactory.MessageParamBuilder(curChatId)
builder.setMessageConfig(KIMCoreMessage.KIMCoreMessageConfig(markUnread, markRecent))
builder.setMsgNotices(Arrays.asList(notice))
val message = KIMCoreMessageFactory.createCustomize(customizeMessage, builder)
KIMCore.instance().sendMessage(message, callback)

发送状态监听

代码示例

添加监听器

kotlin
KIMCore.instance().addSendMsgStatusListener(LifecycleOwner, object : SendMsgStatusListener {
    override fun onChange(status: KIMCoreMessage.KIMCoreMessageStatus?) {
    }
})

解绑监听器

kotlin
 KIMCore.instance().removeSendMsgListener(listener)

取消发送

仅可以取消媒体消息的发送。可以取消的接口:KIMCore.instance().sendMedia, KIMCore.instance().sendPicText

接口定义

kotlin
fun cancelSendMediaMessage(msgId: Long, callback: IOperationCallback?)

参数说明

参数类型说明
msgIdLong发送的消息id, 即KIMCoreMessage#getId
callbackIOperationCallback?回调

代码示例

kotlin
//msgId 发送的消息id, 即 {@link KIMCoreMessage#getId()}
KIMCore.instance().cancelSendMediaMessage(msgId, object : IOperationCallback {
    override fun onSuccess() {
    }
    override fun onError(errorCode: ErrorCode) {
    }
})

注意:取消成功只表示成功发起了取消请求,消息取消发送状态通过发送接口回调的 onCanceled()确认

失败消息重发

接口定义

kotlin
fun resendMessage(msgId: Long, callback: ISendMediaMessageCallback?)

参数说明

参数类型说明
msgIdLong发送失败的消息id, 通过KIMCoreMessage#getId()获取
callbackISendMediaMessageCallback?回调

代码示例

kotlin
KIMCore.instance().resendMessage(msgId, object : ISendMediaMessageCallback {
    override fun onProgress(message: KIMCoreMessage?, i: Int) {
        TODO()
    }
    override fun onCanceled(message: KIMCoreMessage?) {
        TODO()
    }
    override fun onAttached(message: KIMCoreMessage?) {
        TODO()
    }
    override fun onSuss(message: KIMCoreMessage?) {
        TODO()
    }
    override fun onError(message: KIMCoreMessage?, errorCode: ErrorCode) {
        TODO()
    }
})