( 最近更新时间:2020-04-28 19:00:00 )
# 属性描述
消息属性 | 描述 |
---|---|
消息类名 | 各端消息名 |
存储属性 | 存储 / 不存储 |
离线属性 | 缓存 / 不缓存 |
推送属性 | 是/否 |
ObjectName | 传输层名称,与消息类名一一对应 |
计数属性 | 计数 / 不计数 |
消息尺寸 | 128 KB |
推送内容 | 详见各消息类送方式 |
# 存储属性
存储属性 | 存储分类 | 支持平台 | 详细描述 |
---|---|---|---|
存储 | 客户端 | Android、iOS | 发送、接收该消息后,本地数据库存储 Web 端 和 小程序端因本地存储不可靠,不支持客户端消息存储,但可通过历史消息云存储服务获取历史记录 |
存储 | 云端 | Android、iOS、Web | 默认不在云端进行存储,需开通单群聊消息云存储 (opens new window)服务,开通后,可在融云服务端存储 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 | -- | 当有离线缓存消息时,不进行远程推送提醒 |
- 发送消息必须在成功连接融云服务器 connect 成功之后进行。
- 每秒最多发送 5 条消息。
# 消息结构
字段名 | 类型 | 说明 |
---|---|---|
type | Number | 会话类型 |
targetId | String | 接收方的 userId |
senderUserId | String | 发送者 id |
content | Object | 消息内容 |
messageType | String | 消息标识 |
messageUId | String | 服务端存储的消息 id |
messageDirection | Number | 消息方向。 发送: 1, 接收: 2 |
isOffLineMessage | Boolean | 是否为离线消息 |
sentTime | Number | 消息在融云服务端的发送时间 |
receivedTime | Number | 消息接收时间. isOffLineMessage 为 true 时, receivedTime 无效 |
isPersited | Boolean | 消息是否存储在服务端 |
isCounted | Boolean | 消息是否计数 |
disableNotification | Boolean | 消息是否静默,静默消息不会发送 Push 信息和本地通知提醒 |
# 参数说明
参数 | 类型 | 必填 | 默认值 | 说明 | 最低版本 |
---|---|---|---|---|---|
messageType | String | 是 | -- | 消息类型. 与移动端 ObjectName 一致 | 3.0.0 |
content | String | 是 | -- | 消息内容 | 3.0.0 |
isPersited | Boolean | 否 | true | 是否存储在服务端 | 3.0.0 |
isCounted | Boolean | 否 | true | 是否计数. 计数消息接收端接收后未读数加 1 | 3.0.0 |
pushContent | String | 否 | -- | Push 显示内容 | 3.0.0 |
pushData | String | 否 | -- | Push 通知时附加信息 | 3.0.0 |
isVoipPush | String | 否 | false | 为 ture 时, 对端不在线的 iOS 会收到 Voip Push. Android 无影响 | 3.0.0 |
isStatusMessage | Boolean | 否 | false | 是否发送状态消息,设置为 true 后 isPersited 和 isCounted 属性失效 | 3.0.0 |
disableNotification | Boolean | 否 | false | 是否发送静默消息,设置为 true 后不会发送 Push 信息和本地通知提醒 | 3.0.5 |
发送代码示例
var conversation = im.Conversation.get({ targetId: '接收方的 userId', type: RongIMLib.CONVERSATION_TYPE.PRIVATE }); conversation.send({ messageType: 's:person', // 填写开发者定义的 messageType content: { // 填写开发者定义的消息内容 name: 'RongCloud', age: 12 }, isPersited: true,// 是否存储在服务端,默认为 true isCounted: true, // 是否计数. 计数消息接收端接收后未读数加 1,默认为 true pushContent:'user 发送了一条消息', // Push 显示内容 pushData: 'Push 通知时附加信息', // Push 通知时附加信息, 可不填 isStatusMessage: false // 设置为 true 后 isPersited 和 isCounted 属性失效 disableNotification: false // 设置为 true 后移动端不会收到 Push 信息和本地通知提醒 }).then(function(message){ console.log('发送 s:person 消息成功', message); });
已复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 发送消息
# 文本消息
消息说明
messageType 与移动端 ObjectName 相对应。
messageType | 存储属性 | 计数属性 | 离线属性 | 推送属性 | 推送内容 |
---|---|---|---|---|---|
RC:TxtMsg | 存储 | 计数 | 存储 | 推送 | 消息内容 |
参数说明
属性名称 | 属性类型 | 是否必填 | 属性说明 |
---|---|---|---|
content | String | 是 | 文本消息内容 |
extra | String | 否 | 附加信息,一般为消息不显示消息内容 |
代码示例
var conversation = im.Conversation.get({ targetId: '接收方的 userId', type: RongIMLib.CONVERSATION_TYPE.PRIVATE }); conversation.send({ messageType: RongIMLib.MESSAGE_TYPE.TEXT, // 'RC:TxtMsg' content: { content: 'Hello RongCloud' // 文本内容 } }).then(function(message){ console.log('发送文字消息成功', message); });
已复制
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 图文消息
消息说明
messageType | 存储属性 | 计数属性 | 离线属性 | 推送属性 | 推送内容 |
---|---|---|---|---|---|
RC:ImgTextMsg | 存储 | 计数 | 存储 | 推送 | 消息内容 |
参数说明
属性名称 | 属性类型 | 是否必填 | 属性说明 |
---|---|---|---|
content | String | 是 | 图文内容 |
title | String | 是 | 图文标题 |
imageUri | String | 是 | 图片上传到服务器的 url |
url | String | 是 | 富文本消息点击后打开的 URL |
extra | String | 否 | 附加信息,一般为消息不显示消息内容 |
代码示例
var conversation = im.Conversation.get({ targetId: '接收方的 userId', type: RongIMLib.CONVERSATION_TYPE.PRIVATE }); conversation.send({ messageType: RongIMLib.MESSAGE_TYPE.RICH_CONTENT, // 'RC:ImgTextMsg' content: { title: '图文标题', content: '图文内容', imageUri: '图片上传到服务器的 url', url: '富文本消息点击后打开的 URL' } }).then(function(message){ console.log('发送图文消息成功', message); });
已复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Emoji 消息
- web 端发送 Emoji 消息,开发者直接使用 文本消息 发送即可。
- 融云提供 Emoji 插件,内置了 128 个 Emoji 表情的图片, 做消息输入框的表情选项, 也可自行扩展配置。
- 发消息时, 必须直接发送 Emoji 原生字符. 如:😀 , 转换方法:
symbolToEmoji
。 - Web SDK 接收消息时接收到的是 Unicode 编码格式, 如:”ef600” 需要转化才能正确显示原生 Emoji。
# 位置消息
消息说明
messageType 与移动端 ObjectName 相对应。
messageType | 存储属性 | 计数属性 | 离线属性 | 推送属性 | 推送内容 |
---|---|---|---|---|---|
RC:LBSMsg | 存储 | 计数 | 存储 | 推送 | [位置] |
参数说明
属性名称 | 属性类型 | 是否必填 | 属性说明 |
---|---|---|---|
longitude | Number | 是 | 经度 |
latitude | Number | 是 | 维度 |
poi | String | 是 | 位置信息 |
content | String | 是 | 位置缩略图,图片需要是不带前缀的 base64 字符串 |
extra | String | 否 | 附加信息,一般为消息不显示消息内容 |
代码示例
var conversation = im.Conversation.get({ targetId: '接收方的 userId', type: RongIMLib.CONVERSATION_TYPE.PRIVATE }); var latitude = 40.0317727; var longitude = 116.4175057; var poi = '北苑路 融云'; var content = '/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDABsSFBcUERsXFhceHBsgKE'; // 位置图片 base64 conversation.send({ messageType: RongIMLib.MESSAGE_TYPE.LOCATION, // 'RC:LBSMsg' content: { latitude: latitude, longitude: longitude, poi: poi, content: content } }).then(function(message){ console.log('发送位置消息成功', message); });
已复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 正在输入状态消息
消息说明
messageType 与移动端 ObjectName 相对应。
messageType | 存储属性 | 计数属性 | 离线属性 | 推送属性 | 推送内容 |
---|---|---|---|---|---|
RC:TypSts | 不存储 | 不计数 | 不存储 | 不推送 | 无 |
参数说明
属性名称 | 属性类型 | 是否必填 | 属性说明 |
---|---|---|---|
typingContentType | String | 是 | 正在输入的消息 ObjectName |
data | String | 否 | 携带信息 |
代码示例
var conversation = im.Conversation.get({ targetId: '接收方的 userId', type: RongIMLib.CONVERSATION_TYPE.PRIVATE }); conversation.send({ messageType: 'RC:TypSts', content: { typingContentType: 'RC:TxtMsg' // 正在输入的消息类型 }, isStatusMessage: true // 正在输入建议发送状态消息, 不存储、不计数, 且仅在线用户可收到 }).then(function(message){ console.log('发送正在输入消息成功', message); });
已复制
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 图片消息
- 发送图片消息只需要图片上传后的 url,和图片的略缩图。
- 融云提供上传插件,文件默认存储到
七牛云
,插件不包含发送消息。 - 插件提供的是上传方式,
开发者也可通过自己的方式将文件上传至自己文件服务
。 - 融云默认上传文件存储有效期为
6 个月
, 上传的文件不支持迁移。
# 语音消息
- SDK 目前不提供录音功能, 开发者需生成语音 url 后, 传入发送消息接口, 发送语音消息
- 语音上传请参照 文件上传 进行是实现。
消息说明
messageType | 存储属性 | 计数属性 | 离线属性 | 推送属性 | 推送内容 |
---|---|---|---|---|---|
RC:HQVCMsg | 存储 | 计数 | 存储 | 推送 | [语音] |
参数说明
属性名称 | 属性类型 | 是否必填 | 属性说明 |
---|---|---|---|
remoteUrl | String | 是 | 媒体内容上传服务器后的网络地址 |
type | String | 否 | 编解码类型,默认为 aac 音频 |
duration | Number | 否 | 语音消息的时长,最长为 60 秒(单位:秒) |
extra | String | 否 | 附加信息,一般为消息不显示消息内容 |
代码示例
var conversation = im.Conversation.get({ targetId: '接收方的 userId', type: RongIMLib.CONVERSATION_TYPE.PRIVATE }); conversation.send({ messageType: RongIMLib.MESSAGE_TYPE.HQ_VOICE, // 'RC:HQVCMsg' content: { remoteUrl: 'https://rongcloud-audio.cn.ronghub.com/audio_amr__RC-2020-03-17_42_1584413950049.aac?e=1599965952&token=CddrKW5AbOMQaDRwc3ReDNvo3-sL_SO1fSUBKV3H:CDngyWj7ZApNmAfoecng7L_3SaU=', // 音频 url, 建议格式: aac duration: 6, // 音频时长 type: 'aac' } }).then(function(message){ console.log('发送语音消息成功', message); });
已复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 文件消息
- 发送图片消息只需要图片上传后的 url,和图片的略缩图。
- 融云提供上传插件,文件默认存储到
七牛云
,插件不包含发送消息。 - 插件提供的是上传方式,
开发者也可通过自己的方式将文件上传至自己文件服务
。 - 融云默认上传文件存储有效期为
6 个月
, 上传的文件不支持迁移。
# 小视频消息
小视频消息需要先在 开发者后台 (opens new window) 的 服务管理-> 小视频-> 服务设置
中开通小视频功能才可发送。
- 此消息类型 Web 端 SDK 仅支持解析展示,不提供录制。
- 如 Web 端需要发送小视频消息,小视频录制需要开发者自行实现。
消息说明
messageType | 存储属性 | 计数属性 | 离线属性 | 推送属性 | 推送内容 |
---|---|---|---|---|---|
RC:SightMsg | 存储 | 计数 | 存储 | 推送 | [小视频] |
参数说明
参数 | 类型 | 说明 |
---|---|---|
sightUrl | Number | 上传到文件服务器的小视频地址 |
content | String | 小视频首帧的缩略图进行 Base64 编码的结果值,格式为 JPG,注意在 Base64 进行 Encode 后需要将所有 \r\n 和 \r 和 \n 替换成空 |
duration | Object | 视频时长,单位:秒 |
size | Object | 视频大小单位 bytes |
name | Function | 发送端视频的文件名,小视频文件格式为 mp4。 |
代码示例
var conversation = im.Conversation.get({ targetId: '接收方的 userId', type: RongIMLib.CONVERSATION_TYPE.PRIVATE }); conversation.send({ messageType: RongIMLib.MESSAGE_TYPE.SIGHT, // 'RC:SightMsg' content: { content: "/9j/4AAQSkZ/2wB...hDSaSiimB//9k=" sightUrl: "http://rongcloud...com/video...", duration: 10, size: 734320, name: "video_xx.mp4", } }).then(function(message){ console.log('发送小视频消息成功', message); });
已复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# GIF 消息
消息说明
ObjectName | 存储属性 | 计数属性 | 离线属性 | 推送属性 | 推送内容 |
---|---|---|---|---|---|
RC:GIFMsg | 存储 | 计数 | 存储 | 推送 | [图片] |
参数说明
参数 | 类型 | 说明 |
---|---|---|
gifDataSize | Number | GIF 图片文件大小,单位为 KB |
remoteUrl | String | GIF 图片的服务器地址 |
width | Number | GIF 图的宽 |
height | Number | GIF 图的高 |
代码示例
var conversation = im.Conversation.get({ targetId: '接收方的 userId', type: RongIMLib.CONVERSATION_TYPE.PRIVATE }); conversation.send({ messageType: RongIMLib.MESSAGE_TYPE.GIF, // 'RC:GIFMsg' content: { gifDataSize:34563, height:246, remoteUrl:"https://rongcloud-image.cn.ronghub.com/image_jpe64562665566.gif", width:263, } }).then(function(message){ console.log('发送 GIF 消息成功', message); });
已复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 发送自定义消息
# 常见问题
Q1: 收到的表情信息无法解析, 表情显示有问题 A1: 解决方案:
- Web 端展示 Emoji 时, 都需要调用
emojiToHTML
转成 HTML 或者使用symbolToEmoji
将 Unicode 转化成原生 Emoji 字符- 发送消息时, 必须发送原生 Emoji 字符, 如果发送 HTML, 则认定发送的是字符串
Q2: 表情列表 每一个手机展示的表情不一样 A2: 解决方案:
- 消息体内的原生 Emoji 字符会被解码为对应 Unicode 码,需调用转化方法才能正确显示
- 不同浏览器, 不同设备, 展示的原生 Emoji 表情都不同
- 如需多端展示 Emoji 一致, 需使用
emojiToHTML
转化为 HTML 后再展示(此方法为以图片形式展示) 可参照考文档进行实现:https://docs.rongcloud.cn/im/imlib/web/plugin/emoji/#emoji-to-symbol