消息发送
功能描述
消息属性 | 消息描述 | 消息属性 | 消息描述 |
---|---|---|---|
消息类名 | 各端消息名 | ObjectName | 传输层名称,与消息类名一一对应 |
存储属性 | 存储 / 不存储 | 计数属性 | 计数 / 不计数 |
离线属性 | 缓存 / 不缓存 | 消息尺寸 | 128 KB |
推送属性 | 是/否 | 推送内容 | 详见各消息类送方式 |
存储属性
存储属性 | 存储分类 | 支持平台 | 详细描述 |
---|---|---|---|
存储 | 客户端 | Android、iOS | 发送、接收该消息后,本地数据库存储 Web 端 和 小程序端因本地存储不可靠,不支持客户端消息存储,但可通过历史消息云存储服务获取历史记录 |
存储 | 云端 | Android、iOS、Web | 默认不在云端进行存储,需开通历史消息云存储服务,开通后,可在融云服务端存储 6 个月的历史消息,供客户端按需拉取 |
不存储 | 客户端 | Android、iOS | 发送、接收该消息后,本地数据库不存储 |
不存储 | 云端 | Android、iOS、Web | 无论是否开通历 史消息云存储服务,该消息均不存储 |
计数属性
接收收到消息时,会话是否累计未读数。
计数属性 | 支持平台 | 详细描述 |
---|---|---|
计数 | iOS、Android、Web | 会话未读消息数 + 1,该属性只影响会话列表未读数计数,App 应用角标可根据每个会话列表未读数累加获得 |
不计数 | iOS、Android、Web | 会话未读消息数不变 |
离线属性
接收人当前不在线时,是否进行离线缓存。
离线属性 | 详细描述 |
---|---|
存储 | 消息进行离线缓存,默认 7 天。接收人在 7 天内上线,均可接收到该消息。超过 7 天后,消息被离线缓存淘汰。如有需要,可通过云端存储拉取到该消息 |
不存储 | 消息不进行离线缓存,所以只有接收人在线时,才可收到该消息。该消息不进行历史消息云存储、不进入云端存储( Log 日志 )、不进行消息同步( 消息路由 ) |
推送属性
接收人是否接收推送,当离线属性为 存储 时,该属性生效。离线属性为 不存储 时属性无效。
由于 Web、小程序、PC 端没有推送平台,无法收到推送提醒。
推送属性 | 平台 | 推送方式 | 详细描述 |
---|---|---|---|
推送 | iOS、Android | APNS、华为、小米、魅族、OPPO、vivo、FCM、融云 | 当有离线缓存消息时,进行远程推送提醒,内容为该推送提醒显示的内容 |
不推送 | iOS、Android | -- | 当有离线缓存消息时,不进行远程推送提醒 |
- 发送消息必须在成功连接融云服务器成功之后进行。
- 每秒最多发送 5 条消息。
发送普通消息
API 参考:sendMessage
参数需按顺序传入,顺序为参数说明中的字段顺序。
sendMessage 参数说明
参数 | 类型 | 必填 | 说明 | 最低版本 |
---|---|---|---|---|
conversationType | Number | 是 | 会话类型,单聊会话传入 RongIMLib.ConversationType.PRIVATE | 2.2.0 |
targetId | String | 是 | 单聊会话 ID | 2.2.0 |
msg | Object | 是 | 消息 | 2.2.0 |
callback | Object | 是 | 回调对象 | 2.2.0 |
callback.onSuccess | Function | 是 | 成功回调 | 2.2.0 |
callback.onError | Function | 是 | 失败回调 | 2.2.0 |
isMentioned | Boolean | 否 | 是否为 @ 消息 | 2.2.0 |
pushContent | String | 否 | Push 显示内容 | 2.2.0 |
pushData | String | 否 | Push 通知时附加信息 | 2.2.0 |
Number | 否 | 该参数已废弃 | 2.6.0 | |
config | Object | 否 | 其他设置项 | 2.5.3 |
config
说明:
参数 | 类型 | 必填 | 说明 | 最低版本 |
---|---|---|---|---|
userIds | Array | 否 | 接收定向消息的用户 id | 2.2.0 |
isVoipPush | Boolean | 否 | 为 true 时, 对端不在线的 iOS 会收到 Voip Push. Android 无影响 | 2.5.3 |
disableNotification | Boolean | 否 | 是否发送静默消息,设置为 true 后不会发送 Push 信息和本地通知提醒 | 2.5.9 |
canIncludeExpansion | Boolean | 否 | 是否支持扩展 | 2.6.0 |
expansion | Object | 否 | 扩展内容 | 2.6.0 |
isStatusMessage | Boolean | 否 | 是否为状态消息 | 2.6.0 |
Boolean | 否 | 该参数已废弃,请使用 isStatusMessage 替代该参数。在 isStatusMessage 有值的情况下,该参数将失效 | 2.6.0 |
代码示例
var conversationType = RongIMLib.ConversationType.PRIVATE; // 群聊, 其他会话选择相应的消息类型即可
var targetId = '接收方的 userId'; // 目标 Id
var msg = new RongIMLib.TextMessage({ content: 'hello RongCloud!', extra: '附加信息'});
var callBack = {
onSuccess: function (message) {
// message 为发送的消息对象并且包含服务器返回的消息唯一 id 和发送消息时间戳
console.log('发送文本消息成功', message);
},
onError: function (errorCode) {
console.log('发送文本消息失败', errorCode);
}
};
var isMentioned = false; // @ 消息
var pushContent = 'user 发送了一条消息'; // Push 显示内容
var methodType = null; // 已经逐步废弃,填写null即可
var pushData = null; // Push 通知时附加信息, 可不填
var config = {
isVoipPush: true, // 发送 voip push
disableNotification: true // 发送静默消息, 设置为 true 后移动端不会收到 Push 信息和本地通知提醒
};
RongIMClient.getInstance().sendMessage(conversationType, targetId, msg, callBack, isMentioned, pushContent, pushData, methodType, config);
message 属性说明
字段名 | 类型 | 说明 |
---|---|---|
conversationType | Number | 会话类型,单聊会话传入 RongIMLib.ConversationType.PRIVATE |
targetId | String | 单聊会话 ID |
senderUserId | String | 发送者 id |
content | Object | 消息内容 |
objectName | String | 消息的消息标识,融云内置消息以 "RC:" 开头 |
messageType | String | 消息类型 |
messageId | Number | 本地生成的消息 id |
messageUId | String | 服 务端存储的消息 id |
messageDirection | Number | 消息方向, 发送: 1, 接收: 2, 枚举值通过 RongIMLib.MessageDirection 获取 |
offLineMessage | Boolean | 是否为离线消息 |
sentStatus | Number | 发送状态, 枚举值通过 RongIMLib.SentStatus 获取, PC 端有效,Web 端无效 |
sentTime | Number | 消息在融云服务端的发送时间 |
receivedStatus | Number | 接收状态, 枚举值通过RongIMLib.ReceivedStatus 获取 |
receivedTime | Number | 接收时间 |
disableNotification | Boolean | 消息是否静默,静默消息不会发送 Push 信息和本地通知提醒 |
文本消息
API 参考:sendMessage
消息说明
消息类名 | ObjectName | 存储属性 | 计数属性 | 离线属性 | 推送属性 | 推送内容 |
---|---|---|---|---|---|---|
TextMessage | RC:TxtMsg | 存储 | 计数 | 存储 | 推送 | 消息内容 |
TextMessage 参数说明
属性名称 | 属性类型 | 是否必填 | 属性说明 |
---|---|---|---|
content | String | 是 | 文本消息内容 |
extra | String | 否 | 附加信息,一般为消息不显示消息内容 |
代码示例
var textMessageInfo = {
content: 'hello RongCloud!',
extra: '附加信息'
}
var msg = new RongIMLib.TextMessage(textMessageInfo);
var conversationType = RongIMLib.ConversationType.PRIVATE;
var targetId = '单聊会话 ID'; // 目标 ID
RongIMClient.getInstance().sendMessage(conversationType, targetId, msg, {
onSuccess: function (message) {
// message 为发送的消息对象并且包含服务器返回的消息唯一 id 和发送消息时间戳
console.log('发送文本消息成功', message);
},
onError: function (errorCode) {
console.log('发送文本消息失败', errorCode);
}
});
图文消息
API 参考:sendMessage
消息说明
消息类名 | ObjectName | 存储属性 | 计数属性 | 离线属性 | 推送属性 | 推送内容 |
---|---|---|---|---|---|---|
RichContentMessage | RC:ImgTextMsg | 存储 | 计数 | 存储 | 推送 | 消息内容 |
参数说明
属性名称 | 属性类型 | 是否必填 | 属性说明 |
---|---|---|---|
content | String | 是 | 图文内容 |
title | String | 是 | 图文标题 |
imageUri | String | 是 | 图片上传到服务器的 url |
url | String | 是 | 富文本消息点击后打开的 URL |
extra | String | 否 | 附加信息,一般为消息不显示消息内容 |
代码示例
var msg = new RongIMLib.RichContentMessage({
title: '图文标题',
content: '图文内容',
imageUri: '图片上传到服务器的 url',
url: '富文本消息点击后打开的 URL'
});
var conversationType = RongIMLib.ConversationType.PRIVATE;
var targetId = '单聊会话 ID';
RongIMClient.getInstance().sendMessage(conversationType, targetId, msg, {
onSuccess: function (message) {
console.log('发送富文本消息成功', message);
},
onError: function (errorCode) {
console.log('发送富文本消息失败', errorCode);
}
});
Emoji 消息
- web 端发送 Emoji 消息,开发者直接使用文本消息发送即可。
- 融云提供 Emoji 插件,内置了 128 个 Emoji 表情的图片, 做消息输入框的表情选项, 也可自行扩展配置。
- 发消息时, 必须直接发送 Emoji 原生字符. 如:😀 , 转换方法:
symbolToEmoji
。 - Web SDK 接收消息时接收到的是 Unicode 编码格式, 如:”ef600” 需要转化才能正确显示原生 Emoji。
API 参考:sendMessage
代码示例
var textMessageInfo = { content: '😀' }
var msg = new RongIMLib.TextMessage(textMessageInfo);
var conversationType = RongIMLib.ConversationType.PRIVATE;
var targetId = '单聊会话 ID'; // 目标 ID
RongIMClient.getInstance().sendMessage(conversationType, targetId, msg, {
onSuccess: function (message) {
// message 为发送的消息对象并且包含服务器返回的消息唯一 id 和发送消息时间戳
console.log('发送 Emoji 消息成功', message);
},
onError: function (errorCode) {
console.log('发送 Emoji 消息失败', errorCode);
}
});
Emoji 插件
插件兼容性
Chrome | Firefox | Safari | IE | Edge | iPhone | Android |
---|---|---|---|---|---|---|
30+ | 30+ | 10+ | 7+ | ✔️ | iOS 8.0+ 的Safari浏览器以及微信浏览器 | 4.4+系统的Chrome浏览器以及微信浏览器 |
Emoji 插件引入
<!-- HTTP -->
<script src="http://cdn.ronghub.com/RongEmoji-2.2.11.js"></script>
<!-- HTTPS -->
<script src="https://cdn.ronghub.com/RongEmoji-2.2.11.js"></script>
<!-- 压缩版 -->
<script src="https://cdn.ronghub.com/RongEmoji-2.2.11.min.js"></script>
Emoji 代码示例 : https://rongcloud.github.io/web-emoji-demo/src/index.html
- 使用
import * as RongIMLib from '@rongcloud/imlib-v2-adapter'
方式引入 SDK 时表情插件调用需要使用window
前缀。例 如:window.RongIMLib.RongIMEmoji.init()
- RongEmoji 插件仅支持 cdn 引入方式,暂不支持 npm 引入
Emoji 初始化:默认参数初始化
RongIMLib.RongIMEmoji.init();
Emoji 初始化:自定义表情配置初始化
config
参数说明:
参数 | 类型 | 必填 | 说明 | 最 低版本 |
---|---|---|---|---|
size | Number | 否 | 表情大小, 默认 24, 建议 18 - 58 | 2.2.6 |
url | String | 否 | Emoji 背景图片 url | 2.2.6 |
lang | String | 否 | Emoji 对应名称语言, 默认 zh | 2.2.6 |
extension | Object | 否 | 扩展表情 | 2.2.6 |
// 表情信息可参考 http://unicode.org/emoji/charts/full-emoji-list.html
var config = {
size: 25,
url: '//f2e.cn.ronghub.com/sdk/emoji-48.png',
lang: 'en',
extension: {
dataSource: {
u1F914: { // 自定义 u1F914 对应的表情
en: 'thinking face', // 英文名称
zh: '思考', // 中文名称
tag: '🤔', // 原生 Emoji
position: '0 0' // 所在背景图位置坐标
}
},
url: '//cdn.ronghub.com/thinking-face.png' // 新增 Emoji 背景图 url
}
};
RongIMLib.RongIMEmoji.init(config);
获取列表
var list = RongIMLib.RongIMEmoji.list;
/*list => [{
unicode: 'u1F600',
emoji: '😀',
node: span,
symbol: '[笑嘻嘻]'
}]
*/
Emoji 转文字
在不支持原生 Emoji 渲染时,可显示对应名称,适用于消息输入。
var message = '😀😁测试 Emoji';
// 将 message 中的原生 Emoji 转化为对应名称
RongIMLib.RongIMEmoji.emojiToSymbol(message);
// => '[笑嘻嘻][露齿而笑]测试 Emoji'
文字转 Emoji
发送消息时,消息体里必须使用原生 Emoji 字符。
var message = '[笑嘻嘻][露齿而笑]测试 Emoji';
// 将 message 中的 Emoji 对应名称转化为原生 Emoji
RongIMLib.RongIMEmoji.symbolToEmoji(message);
// => '😀😁测试 Emoji'
Emoji 转 HTML
Web SDK 接收消息后,消息体内的原生 Emoji 字符会被解码为对应 Unicode 码,需调用转化方法才能正确显示。
var message = '\uf600测试 Emoji';
// 将 message 中的原生 Emoji (包含 Unicode ) 转化为 HTML
RongIMLib.RongIMEmoji.emojiToHTML(message);
// => "<span class='rong-emoji-content' name='[笑嘻嘻]'>😀</span>测试 Emoji"
文字 转 HTML
var message = '[露齿而笑]测试 Emoji';
// 将 message 中的 Emoji 对应名称转化为 HTML
RongIMLib.RongIMEmoji.symbolToHTML(message);
// => "<span class='rong-emoji-content' name='[露齿而笑]'>😁</span>测试 Emoji"
位置消息
API 参考:sendMessage
消息说明
消息类名 | ObjectName | 存储属性 | 计数属性 | 离线属性 | 推送属性 | 推送内容 |
---|---|---|---|---|---|---|
LocationMessage | RC:LBSMsg | 存储 | 计数 | 存储 | 推送 | [位置] |
LocationMessage 参数说明
属性名称 | 属性类型 | 是否必填 | 属性说明 |
---|---|---|---|
longitude | Number | 是 | 经度 |
latitude | Number | 是 | 纬度 |
poi | String | 是 | 位置信息 |
content | String | 是 | 位置缩略图,图片需要是不带前缀的 base64 字符串 |
extra | String | 否 | 附加信息,一般为消息不显示消息内容 |
代码示例
var locatMessageInfo = {
latitude: 40.0317727,
longitude: 116.4175057,
poi: '融云',
content: '/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDABsSFBcUERsXFhceHBsgKE', // 位置图片 base64
}
var msg = new RongIMLib.LocationMessage(locatMessageInfo);
var conversationType = RongIMLib.ConversationType.PRIVATE;
var targetId = '单聊会话 ID'; // 目标 ID
RongIMClient.getInstance().sendMessage(conversationType, targetId, msg, {
onSuccess: function (message) {
console.log('发送位置消息成功', message);
},
onError: function (errorCode) {
console.log('发送位置消息失败', errorCode);
}
});
正在输入状态消息
API 参考:sendMessage
消息说明
消息类名 | ObjectName | 存储属性 | 计数属性 | 离线属性 | 推送属性 | 推送内容 |
---|---|---|---|---|---|---|
TypingStatusMessage | RC:TypSts | 不存储 | 不计数 | 不存储 | 不推送 | 无 |
TypingStatusMessage 参数说明
属性名称 | 属性类型 | 是否必填 | 属性说明 |
---|---|---|---|
typingContentType | String | 是 | 正在输入的消息 ObjectName |
data | String | 否 | 携带信息 |
代码示例
var typingContentType = 'RC:TxtMsg';
var msg = new RongIMLib.TypingStatusMessage({ typingContentType: typingContentType});
var conversationType = RongIMLib.ConversationType.PRIVATE;
var targetId = '单聊会话 ID'; // 目标 Id
RongIMClient.getInstance().sendMessage(conversationType, targetId, msg, {
onSuccess: function (message) {
console.log('发送已读通知成功', message);
},
onError: function (errorCode) {
console.log('发送已读通知失败', errorCode);
}
});
发送媒体消息
API 参考:sendMessage
sendMessage 参数说明
参数 | 类型 | 必填 | 说明 | 最低版本 |
---|---|---|---|---|
conversationType | Number | 是 | 会话类型,单聊会话传入 RongIMLib.ConversationType.PRIVATE | 2.2.0 |
targetId | String | 是 | 单聊会话 ID | 2.2.0 |
msg | Object | 是 | 消息 | 2.2.0 |
callback | Object | 是 | 回调对象 | 2.2.0 |
callback.onSuccess | Function | 是 | 成功回调 | 2.2.0 |
callback.onError | Function | 是 | 失败回调 | 2.2.0 |
isMentioned | Boolean | 否 | 是否为 @ 消息 | 2.2.0 |
pushContent | String | 否 | Push 显示内容 | 2.2.0 |
pushData | String | 否 | Push 通知时附加信息 | 2.2.0 |
Number | 否 | 该参数已废弃 | 2.6.0 | |
config | Object | 否 | 其他设置项 | 2.5.3 |
config
说明:
参数 | 类型 | 必填 | 说明 | 最低版本 |
---|---|---|---|---|
userIds | Array | 否 | 接收定向消息的用户 id | 2.2.0 |
isVoipPush | Boolean | 否 | 为 true 时, 对端不在线的 iOS 会收到 Voip Push. Android 无影响 | 2.5.3 |
disableNotification | Boolean | 否 | 是否发送静默消息,设置为 true 后不会发送 Push 信息和本地通知提醒 | 2.5.9 |
canIncludeExpansion | Boolean | 否 | 是否支持扩展 | 2.6.0 |
expansion | Object | 否 | 扩展内容 | 2.6.0 |
isStatusMessage | Boolean | 否 | 是否为状态消息 | 2.6.0 |
Boolean | 否 | 该参数已废弃,请使用 isStatusMessage 替代该参数。在 isStatusMessage 有值的情况下,该参数将失效 | 2.6.0 |
代码示例
var conversationType = RongIMLib.ConversationType.PRIVATE;
var targetId = '接收方的 userId'; // 目标 ID
var base64Str = '/9j/4AAQSBAAD/2wBDDBAYEBAQEB....'; // 压缩 后的 base64 略缩图, 用来快速展示图片
var imageUri = 'https://www.rongcloud.cn/images/newVersion/log_wx.png'; // 上传到服务器的 url. 用来展示高清图片
var msg = new RongIMLib.ImageMessage({content: base64Str, imageUri: imageUri});
var callBack = {
onSuccess: function (message) {
console.log('发送图片消息成功', message);
},
onError: function (errorCode) {
console.log('发送图片消息失败', errorCode);
}
};
var isMentioned = false; // @ 消息
var pushContent = 'user 发送了一条消息'; // Push 显示内容
var pushData = null; // Push 通知时附加信息, 可不填
var config = {
isVoipPush: true // 发送 voip push
};
RongIMClient.getInstance().sendMessage(conversationType, targetId, msg, callBack, isMentioned, pushContent, pushData, config);
message 属性说明
字段名 | 类型 | 说明 |
---|---|---|
conversationType | Number | 会话类型,单聊会话传入 RongIMLib.ConversationType.PRIVATE |
targetId | String | 单聊会话 ID |
senderUserId | String | 发送者 id |
content | Object | 消息内容 |
objectName | String | 消息的消息标识,融云内置消息以 "RC:" 开头 |
messageType | String | 消息类型 |
messageId | Number | 本地生成的消息 id |
messageUId | String | 服务端存储的消息 id |
messageDirection | Number | 消息方向, 发送: 1, 接收: 2, 枚举值通过 RongIMLib.MessageDirection 获取 |
offLineMessage | Boolean | 是否为离线消息 |
sentStatus | Number | 发送状态, 枚举值通过 RongIMLib.SentStatus 获取, PC 端有效,Web 端无效 |
sentTime | Number | 消息在融云服务端的发送时间 |
receivedStatus | Number | 接收状态, 枚举值通过RongIMLib.ReceivedStatus 获取 |
receivedTime | Number | 接收时间 |
disableNotification | Boolean | 消息是否静默,静默消息不会发送 Push 信息和本地通知提醒 |
图片消息
- 发送图片消息只需要图片上传后的 url,和图片的略缩图。
- 融云提供上传插件,文件存储到优先级高的云存储,插件不包含发送消息。
- 插件提供的是上传方式,开发者也可通过自己的方式将文件上传至自己文件服务。
- 融云默认上传文件存储有效期为
6
个月, 上传的文件不支持迁移。
API 参考:sendMessage
消息发送
消息说明
消息类名 | ObjectName | 存储属性 | 计数属性 | 离线属性 | 推送属性 | 推送内容 |
---|---|---|---|---|---|---|
ImageMessage | RC:ImgMsg | 存储 | 计数 | 存储 | 推送 | [图片] |
ImageMessage 参数说明
属性名称 | 属性类型 | 是否必填 | 属性说明 |
---|---|---|---|
content | String | 是 | 图片的略缩图,必须是 base64 字符串, 类型必须为 jpg,base64 字符串大小不可超过 10 KB,base64 略缩图必须不带前缀 |
imageUri | String | 是 | 上传到服务器的 url. 用来展示高清图片 |
extra | String | 否 | 附加信息,一般为消息不显示消息内容 |
代码示例
var base64Str = '/9j/4AAQSBAAD/2wBDDBAYEBAQEB....'; // 压缩后的 base64 略缩图, 用来快速展示图片
var imageUri = 'https://www.rongcloud.cn/images/newVersion/log_wx.png'; // 上传到服务器的 url. 用来展示高清图片
var msg = new RongIMLib.ImageMessage({content: base64Str, imageUri: imageUri});
var conversationType = RongIMLib.ConversationType.PRIVATE;
var targetId = '单聊会话 ID'; // 目标 Id
var callback = {
onSuccess: function (message) {
console.log('发送图片消息成功', message);
},
onError: function (errorCode) {
console.log('发送图片消息失败', errorCode);
}
};
RongIMClient.getInstance().sendMessage(conversationType, targetId, msg, callback);
图片上传
兼容性
Chrome | Firefox | Safari | IE | Edge |
---|---|---|---|---|
49+ | 52+ | ✔️ | 10+ | ✔️ |
引入
<script src = "./send-data.js"></script>
<script src = "../upload.js"></script>
<script src="./init.js"></script>
上传 token
必须 IM SDK 连接成功后, 才能使用此方法
API 参考:getFileToken
参数说明:
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
fileType | Number | 是 | 上传类型, 通过 RongIMLib.FileType 获取 |
callbacks | Object | 是 | 回调对象 |
fileName | String | 否 | 原文件名 |
代码示例:
var fileType = RongIMLib.FileType.IMAGE;
RongIMClient.getInstance().getFileToken(fileType, {
onSuccess: function(data) {
console.log('上传 token 为', data.token);
},
onError: function(error) {
console.log('get file token error', error);
}
}, fileName)
开始上传
config
参数说明:
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
domain | String | 是 | 上传地址, 默认为七牛:https://upload.qiniup.com |
fileType | Number | 是 | 上传类型 |
getToken | Function | 是 | 获取 token 回调 |
代码示例:
<!-- 创建 input 上传按钮 -->
<input id="uploadFile" type="file">
var file;
var fileType = RongIMLib.FileType.IMAGE;
var uploadEl = document.getElementById("uploadFile");
var getFileType = function(filename) {
// 默认支持两种图片格式,可自行扩展
var imageType = {
'jpg': 1,
'png': 2,
}
var index = filename.lastIndexOf('.') + 1,
type = filename.substring(index);
return type in imageType ? 'image': 'file';
};
var config = {
domain: '',
fileType,
getToken: function(callback) {
var caback={
onSuccess: function(data){
callback(data.token);
},
onError: function(){
console.error('get file token error', error);
}
}
RongIMClient.getInstance().getFileToken(fileType, caback, fileName);
}
};
var callback = {
onProgress: function(loaded, total) {
var percent = Math.floor(loaded / total * 100);
console.log('已上传: ', percent);
},
onCompleted: function(data) {
// 上传完成, 调用 getFileUrl 获取文件下载 url
console.log('上传成功: ', data);
},
onError: function(error) {
console.error('上传失败', error);
}
};
var initType = {
file: function(_file){
config.fileType = RongIMLib.FileType.FILE;
UploadClient.initFile(config, function(uploadFile){
uploadFile.upload(_file, callback);
});
},
image: function(_file){
UploadClient.initImage(config, function(uploadFile){
uploadFile.upload(_file, callback);
});
}
};
uploadEl.onchange = function() {
// 根据文件名选择不同的初始化方式
file = this.files[0]; // 上传的 file 对象;
initType[getFileType(file.name)](file);
}
下载 url
fileType 值需与
getFileToken
时传入的 fileType 值一致
API 参考:getFileUrl
参数说明:
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
fileType | Number | 是 | 上传类型, 通过 RongIMLib.FileType 获取 |
filename | String | 是 | 上传后的文件名, 上传成功后可通过 uploadCallbacks 的 onCompleted 中返回的 data 获取 ,对应属性 data.filename |
oriname | String | 是 | 文件原名, 上传成功后可通过 uploadCallbacks 的 onCompleted 中返回的 data 获取 , 对应属性 data.name |
callbacks | Object | 是 | 回调对象 |
data | Object | 否 | uploadCallbacks.onCompleted 回调返回数据 |
uploadMethod | String | 否 | 服务器类型,上传成功后可通过 uploadCallbacks 的 onCompleted 中返回的 data 获取,对应属性data.uploadMethod |
代码示例:
// data 通过 uploadFile.upload 获取
var fileType ; // 文件类型
var filename = data.filename; // 通过 uploadCallbacks 的 onCompleted 中返回的 data 获取
var oriname = data.name; // 通过 uploadCallbacks 的 onCompleted 中返回的 data 获取
var uploadMethod = data.uploadMethod;
RongIMClient.getInstance().getFileUrl(fileType, filename, oriname, {
onSuccess: function(data) {
console.log('文件 url 为: ', data.downloadUrl);
},
onError: function(error) {
console.log('get file url error', error);
}
}, data,uploadMethod)
语音消息
- 语音上传请参照 文件上传 进行是实现。
- HQVoiceMessage 消息支持版本: v2.5.0 及以上。
API 参考:sendMessage
消息说明
消息类名 | ObjectName | 存储属性 | 计数属性 | 离线属性 | 推送属性 | 推送内容 |
---|---|---|---|---|---|---|
HQVoiceMessage | RC:HQVCMsg | 存储 | 计数 | 存储 | 推送 | [语音] |
HQVoiceMessage 参数说明
属性名称 | 属性类型 | 是否必填 | 属性说明 |
---|---|---|---|
remoteUrl | String | 是 | 媒体内容上传服务器后的网络地址 |
type | String | 否 | 编解码类型,默认为 aac 音频 |
duration | Number | 否 | 语音消息的时长,最长为 60 秒(单位:秒) |
extra | String | 否 | 附加信息,一般为消息不显示消息内容 |
代码示例
var messageInfo = {
remoteUrl: 'http://rongcloud-file.ronghub.com/1e0e4743249cd9653b.aac',//此地址为模拟地址仅作为示例使用
duration: 22,
extra: '附加信息'
}
var msg = new RongIMLib.HQVoiceMessage(messageInfo);
var conversationType = RongIMLib.ConversationType.PRIVATE;
var targetId = '单聊会话 ID'; // 目标 ID
RongIMClient.getInstance().sendMessage(conversationType, targetId, msg, {
onSuccess: function (message) {
// message 为发送的消息对象并且包含服务器返回的消息唯一 ID 和发送消息时间戳
console.log('发送语音消息成功', message);
},
onError: function (errorCode) {
console.log('发送语音消息失败', errorCode);
}
});
文件消息
- 发送图片消息只需要图片上传后的 url,和图片的略缩图。
- 融云提供上传插件,文件默认存储到七牛云,插件不包含发送消息。
- 插件提供的是上传方式,开发者也可通过自己的方式将文件上传至自己文件服务。
- 融云默认上传文件存储有效期为
6
个月, 上传的文件不支持迁移。
API 参考:sendMessage
消息发送
消息类名 | ObjectName | 存储属性 | 计数属性 | 离线属性 | 推送属性 | 推送内容 |
---|---|---|---|---|---|---|
FileMessage | RC:FileMsg | 存储 | 计数 | 存储 | 推送 | [文件] + 文件名,如:[文件] 123.txt |
FileMessage 参数说明
属性名称 | 属性类型 | 是否必填 | 属性说明 |
---|---|---|---|
name | String | 是 | 文件名称 |
size | Number | 是 | 文件尺寸,单位: Byte |
type | String | 是 | 文件类型 |
fileUrl | String | 是 | 上传到服务器的 url |
extra | String | 否 | 附加信息,一般为消息不显示消息内容 |
代码示例
var msg = new RongIMLib.FileMessage({
name: 'RongIMLib.js', // 文件名,
size: 1024, // 文件大小单位 bytes
type: 'js', // 文件类型
fileUrl: 'https://cdn.ronghub.com/RongIMLib.js' // 文件地址
});
var conversationType = RongIMLib.ConversationType.PRIVATE;
var targetId = '单聊会话 ID'; // 目标 ID
var callback = {
onSuccess: function (message) {
console.log('发送文件消息成功', message);
},
onError: function (errorCode) {
console.log('发送文件消息失败', errorCode);
}
};
RongIMClient.getInstance().sendMessage(conversationType, targetId, msg, callback);
文件上传
兼容性
Chrome | Firefox | Safari | IE | Edge |
---|---|---|---|---|
49+ | 52+ | ✔️ | 10+ | ✔️ |
引入
<script src = "./send-data.js"></script>
<script src = "../upload.js"></script>
<script src="./init.js"></script>