发送消息
发送消息
需要通过
KIMCoreMessageFactory.MessageParamBuilder
创建builder对象调用
KIMCoreMessageFactory
中的createXXX方法,创建不同消息类型的,KIMCoreMessage
对象
参数说明
MessageParamBuilder
方法定义:
方法 | 类型 | 说明 | 属性 |
---|---|---|---|
setRefMsg | refMsg: KIMCoreMessage? | MessageParamBuilder | 引用消息 |
setExt | ext: String? | MessageParamBuilder | 扩展字段 |
setMessageConfig | messageConfig: KIMCoreMessageConfig? | MessageParamBuilder | 消息配置 |
setPushConfig | pushConfig: KIMCorePushConfig? | MessageParamBuilder | 消息推送配置 |
setMsgNotices | msgNotices: List<KIMCoreMsgNotice>? | MessageParamBuilder | 消息强提醒配置 |
KIMCoreMessageConfig
支持的参数
属性 | 类型 | 说明 |
---|---|---|
markUnread | Boolean | 默认需要统计未读 true:计入未读(默认) false:不计入未读 当前只适用于自定义消息 |
markRecentChat | Boolean | 默认更新最近会话列表 true:更新 false:不更新 |
KIMCorePushConfig
支持的参数
属性 | 类型 | 说明 |
---|---|---|
pushTitle | String | 离线推送显示标题 如果是内置消息类型,则无需填,默认填充 如果是自定义消息类型,必填,不然无法离线推送 |
pushContent | String | 离线推送显示内容 如果是内置消息类型,则无需填,默认填充 如果是自定义消息类型,必填,不然无法离线推送 |
userPushType | Int | 离线推送操作类型 当指定人员离线推送时,会取 userList 数组人员去推 Constant.UserPushType |
userPushLevel | Int | 强提醒推送级别 能够突破各个级别的免打扰配置 Constant.PushLevelType |
userList | List<String> | 强提醒指定人员列表 |
toAllUsers | Boolean | 是否群聊所有人强提醒,比如@所有人 |
settingCfgKey | String | 通知配置页面的设置key Constant.SettingCfgKey |
文本消息
无需上传媒体文件时,可使用发送普通消息的接口。具体适用于以下情况:
发送不涉及媒体文件上传的消息,例如 协作中台 内置消息类型中的文本消息等,或自定义的、不涉及媒体文件上传流程的自定义消息。
如果不需要 SDK 负责上传媒体消息、且不需要 SDK 在上传成功后进行发送,则发送普通消息的接口也可以用于发送媒体消息,具体包括 协作中台 内置消息类型中的文件消息、图片、语音消息、视频消息等或自定义媒体消息。注意,发送时需要向 SDK 直接提供媒体上传成功后的 URL 地址或者唯一标识。
接口定义
fun sendMessage(message: KIMCoreMessage, callback: ISendMessageCallback?)
代码示例
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 只在上传成功后发送消息
接口定义
fun sendMedia(
message: KIMCoreMessage,
file: File,
callback: ISendMediaMessageCallback?
)
参数说明
参数 | 类型 | 说明 |
---|---|---|
message | KIMCoreMessage | 消息对象 |
file | File | 媒体文件 |
callback | ISendMediaMessageCallback | 回调 |
代码示例
//发送
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()
}
})
文件消息
接口定义
// class KIMCoreFileMessage
fun create(
uploadIsCustom: Boolean,
storeKey: String?,
size: Long,
name: String?
): KIMCoreFileMessage
参数说明
参数 | 类型 | 说明 |
---|---|---|
uploadIsCustom | Boolean | 是否使用自定义媒体资源服务器 |
storeKey | String? | 资源唯一路径,如果uploadIsCustom 为true,由业务方自己定义 |
size | Long | 文件大小,单位byte |
name | String? | 文件名 |
代码示例
//创建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)
图片消息
接口定义
// class KIMCoreImageMessage
fun create(
uploadIsCustom: Boolean, storeKey: String?, thumbnail: String?,
size: Long, format: String?, width: Int, height: Int, name: String?
): KIMCoreImageMessage
参数说明
参数 | 类型 | 说明 |
---|---|---|
uploadIsCustom | Boolean | 是否使用自定义媒体资源服务器 |
storeKey | String? | 资源唯一路径,如果uploadIsCustom 为true,由业务方自己定义 |
thumbnail | String? | 缩略图 |
size | Long | 图片大小,单位byte |
format | String? | 图片格式,如:image/jpeg,image/png |
width | Int | 图片宽 |
height | Int | 图片高 |
name | String? | 原始文件名 |
代码示例
//创建消息内容, 图片
val content = KIMCoreImageMessage.create("image/jpeg", 100, 200)
val message = KIMCoreMessageFactory.createPic(content, builder)
视频消息
接口定义
fun create(
storeKey: String?, uploadIsCustom: Boolean, size: Long,
format: String?, codec: String?, duration: Long,
coverStoreKey: String?, coverHeight: Int, coverWidth: Int, name: String?
): KIMCoreVideoMessage
参数说明
参数 | 类型 | 说明 |
---|---|---|
storeKey | String | 资源唯一路径,如果uploadIsCustom 为true,由业务方自己定义 |
uploadIsCustom | Boolean | 是否使用自定义媒体资源服务器 |
size | Long | 视频大小,单位byte |
format | String? | 视频格式,如:mp4 mov |
codec | String? | 视频编码,如:H264AVC |
duration | Long | 视频时长,单位s |
coverStoreKey | String? | 视频封面图,资源唯一路径,如果uploadIsCustom 为true,由业务方自己定义 |
coverHeight | Int | 视频封面图宽 |
coverWidth | Int | 视频封面图高 |
name | String? | 原始文件名 |
代码示例
//创建消息内容, 视频
val content = KIMCoreVideoMessage.create("H264AVC", "mp4", 100, 100)
val message = KIMCoreMessageFactory.createVideo(content, builder);
语音消息
接口定义
fun create(
storeKey: String?, uploadIsCustom: Boolean, size: Long,
format: String?, codes: String?, duration: Long,
sampleBits: Int, sampleRate: Int, channel: Int
): KIMCoreVoiceMessage
参数 | 类型 | 说明 |
---|---|---|
storeKey | String? | 资源唯一路径,如果{@link this#uploadIsCustom} 为true,由业务方自己定义 |
uploadIsCustom | Boolean | 是否使用自定义媒体资源服务器 |
size | Long | 音频大小 |
format | String? | 音频格式 |
codes | String? | 音频编码 |
duration | Long | 音频时长,单位s |
sampleBits | Int | 音频比特率,每秒(单位时间内)钟传输的数位 |
sampleRate | Int | 音频采样率,每秒进行多少次采样 |
channel | Int | 声道 |
代码示例
//创建消息内容,语音
val content = KIMCoreVoiceMessage.create("mp3", "", 12, 1000, 1)
//创建消息实体
val message = KIMCoreMessageFactory.createVoice(content, builder)
发送图文消息
接口定义
//KIMCore
fun sendPicText(
message: KIMCoreMessage,
files: List<File?>,
callback: ISendMediaMessageCallback?
)
参数说明
参数 | 类型 | 说明 |
---|---|---|
message | KIMCoreMessage | 消息模型 |
files | List<File> | 图片本地地址 |
callback | ISendMediaMessageCallback | 回调 |
代码示例
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 数据字段,实现提及他人的强提醒消息
代码示例
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)
发送状态监听
代码示例
添加监听器
KIMCore.instance().addSendMsgStatusListener(LifecycleOwner, object : SendMsgStatusListener {
override fun onChange(status: KIMCoreMessage.KIMCoreMessageStatus?) {
}
})
解绑监听器
KIMCore.instance().removeSendMsgListener(listener)
取消发送
仅可以取消媒体消息的发送。可以取消的接口:KIMCore.instance().sendMedia
, KIMCore.instance().sendPicText
接口定义
fun cancelSendMediaMessage(msgId: Long, callback: IOperationCallback?)
参数说明
参数 | 类型 | 说明 |
---|---|---|
msgId | Long | 发送的消息id, 即KIMCoreMessage#getId |
callback | IOperationCallback? | 回调 |
代码示例
//msgId 发送的消息id, 即 {@link KIMCoreMessage#getId()}
KIMCore.instance().cancelSendMediaMessage(msgId, object : IOperationCallback {
override fun onSuccess() {
}
override fun onError(errorCode: ErrorCode) {
}
})
注意:取消成功只表示成功发起了取消请求,消息取消发送状态通过发送接口回调的 onCanceled()确认
失败消息重发
接口定义
fun resendMessage(msgId: Long, callback: ISendMediaMessageCallback?)
参数说明
参数 | 类型 | 说明 |
---|---|---|
msgId | Long | 发送失败的消息id, 通过KIMCoreMessage#getId() 获取 |
callback | ISendMediaMessageCallback? | 回调 |
代码示例
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()
}
})