消息发送
功能描述
| 消息属性 | 消息描述 | 消息属性 | 消息描述 |
|---|---|---|---|
| 消息类名 | 各端消息名 | 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 |
代码示例
JavaScript
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 | 否 | 附加信息,一般为消息不显示消息内容 |
代码示例
JavaScript
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 | 否 | 附加信息,一般为消息不显示消息内容 |
代码示例
JavaScript
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
代码示例
JavaScript
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);
}
});