更新时间: 2021-03-26

# 属性描述

消息属性 描述
消息类名 各端消息名
存储属性 存储 / 不存储
离线属性 缓存 / 不缓存
推送属性 是/否
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 -- 当有离线缓存消息时,不进行远程推送提醒
  1. 发送消息必须在成功连接融云服务器 connect 成功之后进行。
  2. 每秒最多发送 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

# 发送消息

# 文本消息

消息说明

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
# 图文消息

消息说明

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
# 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
# 正在输入状态消息

消息说明

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
# 图片消息
  • 发送图片消息只需要图片上传后的 url,和图片的略缩图。
  • 融云提供上传插件,文件默认存储到七牛云插件不包含发送消息
  • 插件提供的是上传方式, 开发者也可通过自己的方式将文件上传至自己文件服务
  • 融云默认上传文件存储有效期为 6 个月, 上传的文件不支持迁移。
# 语音消息
  1. SDK 目前不提供录音功能, 开发者需生成语音 url 后, 传入发送消息接口, 发送语音消息
  2. 语音上传请参照 文件上传 进行是实现。

消息说明

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
# 文件消息
  • 发送图片消息只需要图片上传后的 url,和图片的略缩图。
  • 融云提供上传插件,文件默认存储到七牛云插件不包含发送消息
  • 插件提供的是上传方式, 开发者也可通过自己的方式将文件上传至自己文件服务
  • 融云默认上传文件存储有效期为 6 个月, 上传的文件不支持迁移。
# 小视频消息

小视频消息需要先在 开发者后台 (opens new window)服务管理-> 小视频-> 服务设置 中开通小视频功能才可发送。

  1. 此消息类型 Web 端 SDK 仅支持解析展示,不提供录制。
  2. 如 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
# GIF 消息

消息说明

ObjectName 存储属性 计数属性 离线属性 推送属性 推送内容
RC:GIFMsg 存储 计数 存储 推送 [图片]

参数说明

参数 类型 说明
gifDataSize Number GIF 图片文件大小,单位为 byte
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

# 发送自定义消息

1. 注册自定义消息

注意事项:

  • 注册自定义消息代码必须在发送、接收该自定义消息之前
  • 推荐将所有注册自定义消息代码放在 init 方法之后, connect 方法之前
  • 注册的消息类型名, 必须多端一致, 否则消息无法互通
  • 请勿使用 RC: 开头的类型名,以免和 SDK 默认的消息名称冲突

参数说明

参数 类型 说明
messageType String 消息类型名
isPersited Boolean 是否存储
isCounted Boolean 是否计数

代码示例

// 初始化 IM 
var config = {
  appkey: ' ',
};
var im = RongIMLib.init(config);

var messageType = 's:person'; // 自定义消息类型
var isPersited = true; // 自定义消息存储属性
var isCounted = true;  // 自定义消息计数属性
im.registerMessageType(messageType, isPersited, isCounted);
已复制
1
2
3
4
5
6
7
8
9
10

2. 发送自定义消息

参数说明

参数 类型 说明
messageType String 消息类型名
content Object 消息属性对象

代码示例

var conversation = im.Conversation.get({
  targetId: '接收方的 userId',
  type: RongIMLib.CONVERSATION_TYPE.PRIVATE
});
conversation.send({
  messageType: 's:person', // 填写开发者定义的 messageType
  content: { // 填写开发者定义的消息内容
    name: 'RongCloud',
    age: 12
  }
}).then(function(message){
  console.log('发送 s:person 消息成功', message);
});
已复制
1
2
3
4
5
6
7
8
9
10
11
12
13

# 配置消息推送

# MessagePushConfig 属性介绍

从 SDK 4.0.4 版本开始支持此功能,针对每条 Message 都可以设置此属性,详细查看以下参数说明。

参数 类型 说明
pushTitle String 推送标题,如果没有设置,会使用 SDK 默认的标题显示规则
pushContent String 推送内容,如果没有,则使用发送消息的 pushContent,最后则会使用 SDK 默认的标题显示规则
pushData String 远程推送附加信息,如果没有,则使用发送消息的 pushData
forceShowDetailContent boolean 是否强制显示通知详情,当目标用户设置推送不显示消息详情时,可通过此参数,强制设置该条消息显示推送详情
disablePushTitle boolean iOS 平台是否禁用推送标题
iOSConfig IOSConfig iOS 平台相关配置
androidConfig AndroidConfig Android 平台相关配置
# iOSConfig 属性介绍
参数 类型 说明
threadId String iOS 平台通知栏分组 ID,相同的 threadId 推送分为一组(iOS10 开始支持)
apnsCollapseId String iOS 平台通知覆盖 ID,apnsCollapseId 相同时,新收到的通知会覆盖老的通知,最大 64 字节(iOS10 开始支持)
# AndroidConfig 属性介绍
参数 类型 说明
notificationId String Android 平台 Push 唯一标识,目前支持小米、华为推送平台,默认开发者不需要进行设置,当消息产生推送时,消息的 messageUId 作为 notificationId 使用
channelIdMi String 小米的渠道 ID,该条消息针对小米使用的推送渠道,如开发者集成了小米推送,需要指定 channelId 时,可向 Android 端研发人员获取,channelId 由开发者自行创建
channelIdHW String 华为的渠道 ID,该条消息针对华为使用的推送渠道,如开发者集成了华为推送,需要指定 channelId 时,可向 Android 端研发人员获取,channelId 由开发者自行创建
channelIdOPPO String OPPO 的渠道 ID,该条消息针对 OPPO 使用的推送渠道,如开发者集成了 OPPO 推送,需要指定 channelId 时,可向 Android 端研发人员获取,channelId 由开发者自行创建
typeVivo String VIVO 推送通道类型,开发者集成了 VIVO 推送,需要指定推送类型时,可进行设置。 目前可选值 "0"(运营消息) 和 "1"(系统消息)

Channel ID 需要由开发者进行创建,创建方式如下:

推送通道 配置说明
华为 App 端,调用 Android SDK 创建 Channel ID 接口创建 Channel ID
小米 在小米开放平台管理台上创建 Channel ID 或通过小米服务端 API 创建
OPPO App 端,调用 Android SDK 创建 Channel ID;在 OPPO 管理台登记该 Channel ID,保持一致性
vivo 调用服务端 API 创建 Channel ID

示例代码

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' // 文本内容
  },
  pushConfig: {
    pushTitle: "推送标题",
		pushContent: "推送内容",
		pushData: "推送附加消息",
		disablePushTitle: false,
		forceShowDetailContent: false,
		iOSConfig: {
			threadId: "threadId",
			apnsCollapseId: "apnsCollapseId"
		},
		androidConfig: {
			notificationId: "notificationId",
			channelIdMi: "channelIdMi",
			channelIdHW: "channelIdHW",
			channelIdOPPO: "channelIdOPPO",
			typeVivo: "typeVivo"
		},
		templateId: "templateId"
  }
}).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
20
21
22
23
24
25
26
27
28
29
30
31

# 常见问题

Q1: 收到的表情信息无法解析, 表情显示有问题 A1: 解决方案:

  1. Web 端展示 Emoji 时, 都需要调用 emojiToHTML 转成 HTML 或者使用 symbolToEmoji 将 Unicode 转化成原生 Emoji 字符
  2. 发送消息时, 必须发送原生 Emoji 字符, 如果发送 HTML, 则认定发送的是字符串

Q2: 表情列表 每一个手机展示的表情不一样 A2: 解决方案:

  1. 消息体内的原生 Emoji 字符会被解码为对应 Unicode 码,需调用转化方法才能正确显示
  2. 不同浏览器, 不同设备, 展示的原生 Emoji 表情都不同
  3. 如需多端展示 Emoji 一致, 需使用 emojiToHTML 转化为 HTML 后再展示(此方法为以图片形式展示) 可参照考文档进行实现:emoji插件

文档是否解决您的问题 ?

如果遇到产品相关问题,您可 提交工单 寻求帮助