一、创建文本消息
接口
参数
参数 options 为 Object 类型,包含的属性值如下:
| 参数 | 类型 | 默认值 | 描述 |
| to | String | – | 消息接收方的 userID 或 groupID |
| conversationType | String | – | 会话类型,取值 TencentCloudChat.TYPES.CONV_C2C(端到端会话)或 TencentCloudChat.TYPES.CONV_GROUP(群组会话) |
| priority | String | TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL | 消息优先级 |
| payload | Object | – | 消息内容的容器 |
| cloudCustomData | String | '' | 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到) |
| receiverList | Array | undefined | – | 定向接收消息的群成员列表(社群和直播群不支持) |
| isSupportExtension | Boolean | false | 是否支持消息扩展,true 支持 false 不支持(需要你购买旗舰版或企业版套餐) |
payload 的描述如下:
| 参数 | 类型 | 描述 |
| text | String | 消息文本内容 |
返回值
Message
示例
// 发送文本消息,Web 端与小程序端相同// 1. 创建消息实例,接口返回的实例可以上屏let message = chat.createTextMessage({ to: 'user1', conversationType: TencentCloudChat.TYPES.CONV_C2C, // 消息优先级,用于群聊。如果某个群的消息超过了频率限制,后台会优先下发高优先级的消息 // priority: TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL, payload: { text: 'Hello world!' }, // 如果你发消息需要已读回执,需购买旗舰版或企业版套餐,并且创建消息时将 needReadReceipt 设置为 true needReadReceipt: true // 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到) // cloudCustomData: 'your cloud custom data'});// 2. 发送消息let promise = chat.sendMessage(message);promise.then(function(imResponse) { // 发送成功 console.log(imResponse);}).catch(function(imError) { // 发送失败 console.warn('sendMessage error:', imError);});
// 发送群定向消息// 注意:群定向消息不计入会话未读,receiverList 最大支持50个接收者。let message = chat.createTextMessage({ to: 'test', conversationType: TencentCloudChat.TYPES.CONV_GROUP, payload: { text: 'Hello world!' }, // 如果你需要发群定向消息,需购买旗舰版或企业版套餐,并且创建消息时通过 receiverList 指定消息接收者 receiverList: ['user0', 'user1']});// 发送消息let promise = chat.sendMessage(message);promise.then(function(imResponse) { // 发送成功 console.log(imResponse);}).catch(function(imError) { // 发送失败 console.warn('sendMessage error:', imError);});
二、创建@消息
创建可以附带 @ 提醒功能的文本消息的接口,此接口返回一个消息实例,可以在需要发送文本消息时调用 发送消息 接口发送消息实例。
接口
chat.createTextAtMessage(options);
参数
参数 options 为 Object 类型,包含的属性值如下:
| 参数 | 类型 | 默认值 | 描述 |
| to | String | – | 消息接收方的 userID 或 groupID |
| conversationType | String | – | 会话类型,取值 TencentCloudChat.TYPES.CONV_C2C(端到端会话)或 TencentCloudChat.TYPES.CONV_GROUP(群组会话) |
| priority | String | TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL | 消息优先级 |
| payload | Object | – | 消息内容的容器 |
| cloudCustomData | String | '' | 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到) |
payload 的描述如下:
| 参数 | 类型 | 描述 |
| text | String | 消息文本内容 |
| atUserList | Array | 需要 @ 的用户列表,如果需要 @ALL,请传入 TencentCloudChat.TYPES.MSG_AT_ALL 。 举个例子,假设该条文本消息希望 @ 提醒 denny 和 lucy 两个用户,同时又希望 @ 所有人,atUserList 传 ['denny', 'lucy', TencentCloudChat.TYPES.MSG_AT_ALL] |
返回值
Message
示例
// 发送文本消息,Web 端与小程序端相同// 1. 创建消息实例,接口返回的实例可以上屏let message = chat.createTextAtMessage({ to: 'group1', conversationType: TencentCloudChat.TYPES.CONV_GROUP, // 消息优先级,用于群聊 // priority: TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL, payload: { text: '@denny @lucy @所有人 今晚聚餐,收到的请回复1', // 'denny' 'lucy' 都是 userID,而非昵称 atUserList: ['denny', 'lucy', TencentCloudChat.TYPES.MSG_AT_ALL] }, // 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到) // cloudCustomData: 'your cloud custom data'});// 2. 发送消息let promise = chat.sendMessage(message);promise.then(function(imResponse) { // 发送成功 console.log(imResponse);}).catch(function(imError) { // 发送失败 console.warn('sendMessage error:', imError);});
三、创建图片消息
创建图片消息的接口,此接口返回一个消息实例,可以在需要发送图片消息时调用 发送消息 接口发送消息实例。 React Native 发送图片消息你需要集成 react-native-image-picker。
npm install react-native-image-picker –save
注意:1. 在开通 云端审核 功能后,如果你发送的图片消息内容不合规,云端审核超时后 SDK 会触发 MESSAGE_MODIFIED 事件,回调的 message 对象 hasRiskContent 值为 true。
注意:2. v3.3.0起,支持自定义消息审核策略,请参见 customModerationConfigurationID 参数的描述。
注意:3. 支持的图片类型:jpg、jpeg、gif、png、bmp、image、webp。
接口
chat.createImageMessage(options);
参数
参数 options 为 Object 类型,包含的属性值如下表所示:
| 参数 | 类型 | 默认值 | 描述 |
| to | String | – | 消息的接收方 |
| conversationType | String | – | 会话类型,取值 TencentCloudChat.TYPES.CONV_C2C(端到端会话) 或 TencentCloudChat.TYPES.CONV_GROUP(群组会话) |
| priority | String | TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL | 消息优先级 |
| payload | Object | – | 消息内容的容器 |
| onProgress | function | – | 获取上传进度的回调函数 |
| cloudCustomData | String | '' | 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到) |
| customModerationConfigurationID | String | undefined | | 消息自定义审核配置 ID(v3.3.0起支持) 在开通【云端审核】功能后,你可以请前往 控制台 > 云端审核 > 审核配置 > 自定义配置 > 添加自定义配置获取配置 ID。自定义审核配置流程请参见 云端审核功能。该字段需要发消息前设置,仅用于控制发消息时的消息审核策略,其值不会存储在漫游和本地。 |
payload 的描述如下:
| 参数 | 类型 | 描述 |
| file | HTMLInputElement | Object | File | 用于选择图片的 DOM 节点(Web)或者 File 对象(Web)或者微信小程序 wx.chooseImage 接口的 success 回调参数。SDK 会读取其中的数据并上传图片 |
返回值
Message
示例
import {launchImageLibrary} from 'react-native-image-picker';// 1. 选择图片launchImageLibrary({ mediaType: 'photo', selectionLimit: 1,}).then((result) => { const file = result.assets[0]; // 2. 创建消息实例,接口返回的实例可以上屏 let message = chat.createImageMessage({ to: 'user1', conversationType: TencentCloudChat.TYPES.CONV_C2C, payload: { file: file }, // React Native 不支持上传进度回调 // onProgress: function(event) { console.log('file uploading:', event) } }); // 3. 发送图片 let promise = chat.sendMessage(message); promise.then(function(imResponse) { // 发送成功 console.log(imResponse); }).catch(function(imError) { // 发送失败 console.warn('sendMessage error:', imError); });});
import {launchCamera} from 'react-native-image-picker';// 1. 拍照launchCamera({ mediaType: 'photo', cameraType: 'back',}).then((result) => { const file = result.assets[0]; // 2. 创建消息实例,接口返回的实例可以上屏 let message = chat.createImageMessage({ to: 'user1', conversationType: TencentCloudChat.TYPES.CONV_C2C, payload: { file: file }, // React Native 不支持上传进度回调 // onProgress: function(event) { console.log('file uploading:', event) } }); // 3. 发送图片 let promise = chat.sendMessage(message); promise.then(function(imResponse) { // 发送成功 console.log(imResponse); }).catch(function(imError) { // 发送失败 console.warn('sendMessage error:', imError); });});
四、创建音频消息
创建音频消息实例的接口,此接口返回一个消息实例,可以在需要发送音频消息时调用 发送消息 接口发送消息。React Native 发送音频消息你需要集成 react-native-audio-recorder-player。
npm install react-native-audio-recorder-player –save
注意:在开通 云端审核 功能后,如果你发送的音频消息内容不合规,云端异步审核后 SDK 会触发 MESSAGE_MODIFIED 事件,回调的 message 对象 hasRiskContent 值为 true。
接口
chat.createAudioMessage(options);
参数
参数 options 为 Object 类型,包含的属性值如下:
| 参数 | 类型 | 默认值 | 描述 |
| to | String | – | 消息的接收方 |
| conversationType | String | – | 会话类型,取值 TencentCloudChat.TYPES.CONV_C2C(端到端会话) 或 TencentCloudChat.TYPES.CONV_GROUP(群组会话) |
| priority | String | TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL | 消息优先级 |
| payload | Object | – | 消息内容的容器 |
| cloudCustomData | String | '' | 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到) |
payload 的描述如下:
| 参数 | 类型 | 描述 |
| file | Object | 录音后得到的文件信息 |
返回值
Message
示例
import AudioRecorderPlayer, {AVEncodingOption} from 'react-native-audio-recorder-player'; // 记录录音时长let duration = 0;// 记录录音文件路径let uri = ''; // 1. 开始录音const onStartRecord = async () => { await audioRecorderPlayer.startRecorder('test.aac',{ VFormatIDKeyIOS: AVEncodingOption.aac, }); audioRecorderPlayer.addRecordBackListener((e: any) => { duration = e.currentPosition; });};// 2. 结束录音const onStopRecord = async () => { uri = await audioRecorderPlayer.stopRecorder(); audioRecorderPlayer.removeRecordBackListener();};// 3. 发送语音const file = { uri: uri, duration: duration,};let message = chat.createAudioMessage({ to: 'user1', conversationType: 'C2C', payload: { file: file, }, // React Native 不支持上传进度回调 // onProgress: function(event) { console.log('file uploading:', event) }});let promise = chat.sendMessage(message);promise.then(function(imResponse) { // 发送成功 console.log(imResponse);}).catch(function(imError) { // 发送失败 console.warn('sendMessage error:', imError);});
五、创建视频消息
创建视频消息实例的接口,此接口返回一个消息实例,可以在需要发送视频消息时调用 发送消息 接口发送消息。 React Native 发送视频消息你需要集成 react-native-image-picker。
npm install react-native-image-picker –save
注意:1. 在开通 云端审核 功能后,如果你发送的视频消息内容不合规,云端异步审核后 SDK 会触发 MESSAGE_MODIFIED 事件,回调的 message 对象 hasRiskContent 值为 true。
注意:2. v3.3.0起,支持自定义消息审核策略,请参见 customModerationConfigurationID 参数的描述。
注意:3. 支持的视频类型:mp4、 quicktime、 mov。
接口
chat.createVideoMessage(options);
参数
参数 options 为 Object 类型,包含的属性值如下:
| 参数 | 类型 | 默认值 | 描述 |
| to | String | – | 消息的接收方 |
| conversationType | String | – | 会话类型,取值 TencentCloudChat.TYPES.CONV_C2C(端到端会话)或 TencentCloudChat.TYPES.CONV_GROUP(群组会话) |
| priority | String | TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL | 消息优先级 |
| payload | Object | – | 消息内容的容器 |
| cloudCustomData | String | '' | 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到) |
| customModerationConfigurationID | String | undefined | | 消息自定义审核配置 ID(v3.3.0起支持) 在开通【云端审核】功能后,你可以请前往 控制台 (云端审核 -> 审核配置 -> 自定义配置 -> 添加自定义配置) 获取配置 ID。【自定义审核】配置流程请参考 云端审核功能。该字段需要发消息前设置,仅用于控制发消息时的消息审核策略,其值不会存储在漫游和本地。 |
payload 的描述如下:
| 参数 | 类型 | 描述 |
| file | HTMLInputElement | File | Object | 自定义消息的数据字段 |
返回值
Message
示例
import {launchImageLibrary} from 'react-native-image-picker';// 1. 选择视频launchImageLibrary({ mediaType: 'video', selectionLimit: 1,}).then((result) => { const file = result.assets[0]; // 2. 创建消息实例,接口返回的实例可以上屏 let message = chat.createVideoMessage({ to: 'user1', conversationType: TencentCloudChat.TYPES.CONV_C2C, payload: { file: file }, // React Native 不支持上传进度回调 // onProgress: function(event) { console.log('file uploading:', event) } }); // 3. 发送视频 let promise = chat.sendMessage(message); promise.then(function(imResponse) { // 发送成功 console.log(imResponse); }).catch(function(imError) { // 发送失败 console.warn('sendMessage error:', imError); });});
import {launchCamera} from 'react-native-image-picker';// 1. 拍摄视频launchCamera({ mediaType: 'video', cameraType: 'back',}).then((result) => { const file = result.assets[0]; // 2. 创建消息实例,接口返回的实例可以上屏 let message = chat.createVideoMessage({ to: 'user1', conversationType: TencentCloudChat.TYPES.CONV_C2C, payload: { file: file }, // React Native 不支持上传进度回调 // onProgress: function(event) { console.log('file uploading:', event) } }); // 3. 发送视频 let promise = chat.sendMessage(message); promise.then(function(imResponse) { // 发送成功 console.log(imResponse); }).catch(function(imError) { // 发送失败 console.warn('sendMessage error:', imError); });});
六、创建自定义消息
创建自定义消息实例的接口,此接口返回一个消息实例,可以在需要发送自定义消息时调用 发送消息 接口发送消息实例。当 SDK 提供的能力不能满足你的需求时,可以使用自定义消息进行个性化定制。
接口
chat.createCustomMessage(options);
参数
参数 options 为 Object 类型,包含的属性值如下:
| 参数 | 类型 | 默认值 | 描述 |
| to | String | – | 消息接收方的 userID 或 groupID |
| conversationType | String | – | 会话类型,取值 TencentCloudChat.TYPES.CONV_C2C(端到端会话)或 TencentCloudChat.TYPES.CONV_GROUP(群组会话) |
| priority | String | TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL | 消息优先级 |
| payload | Object | – | 消息内容的容器 |
| cloudCustomData | String | '' | 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到) |
payload 的描述如下:
| 参数 | 类型 | 描述 |
| data | String | 自定义消息的数据字段 |
| description | String | 自定义消息的说明字段 |
| extension | String | 自定义消息的扩展字段 |
返回值
Message
示例
// 示例:利用自定义消息实现投骰子功能// 1. 定义随机函数function random(min, max) { return Math.floor(Math.random() * (max – min + 1) + min);}// 2. 创建消息实例,接口返回的实例可以上屏let message = chat.createCustomMessage({ to: 'user1', conversationType: TencentCloudChat.TYPES.CONV_C2C, // 消息优先级,用于群聊 // priority: TencentCloudChat.TYPES.MSG_PRIORITY_HIGH, payload: { data: 'dice', // 用于标识该消息是骰子类型消息 description: String(random(1,6)), // 获取骰子点数 extension: '' }});// 3. 发送消息let promise = chat.sendMessage(message);promise.then(function(imResponse) { // 发送成功 console.log(imResponse);}).catch(function(imError) { // 发送失败 console.warn('sendMessage error:', imError);});
七、创建表情消息
创建表情消息实例的接口,此接口返回一个消息实例,可以在需要发送表情消息时调用 发送消息 接口发送消息。
接口
chat.createFaceMessage(options);
参数
参数 options 为 Object 类型,包含的属性值如下:
| 参数 | 类型 | 默认值 | 描述 |
| to | String | – | 消息接收方的 userID 或 groupID |
| conversationType | String | – | 会话类型,取值 TencentCloudChat.TYPES.CONV_C2C 或 TencentCloudChat.TYPES.CONV_GROUP |
| priority | String | TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL | 消息优先级 |
| payload | Object | – | 消息内容的容器 |
| cloudCustomData | String | '' | 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到) |
payload 的描述如下:
| 参数 | 类型 | 描述 |
| index | Number | 表情索引,用户自定义 |
| data | String | 额外数据 |
返回值
Message
示例
// 发送表情消息,Web端与小程序端相同。// 1. 创建消息实例,接口返回的实例可以上屏let message = chat.createFaceMessage({ to: 'user1', conversationType: TencentCloudChat.TYPES.CONV_C2C, // 消息优先级,用于群聊 // priority: TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL, payload: { index: 1, // Number 表情索引,用户自定义 data: 'tt00' // String 额外数据 }, // 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到) // cloudCustomData: 'your cloud custom data'});// 2. 发送消息let promise = chat.sendMessage(message);promise.then(function(imResponse) { // 发送成功 console.log(imResponse);}).catch(function(imError) { // 发送失败 console.warn('sendMessage error:', imError);});
八、创建文件消息
创建文件消息的接口,此接口返回一个消息实例,可以在需要发送文件消息时调用 发送消息 接口发送消息实例。React Native 发送文件消息你需要集成 react-native-document-picker。
npm install react-native-document-picker –save
接口
chat.createFileMessage(options);
参数
参数 options 为 Object 类型,包含的属性值如下:
| 参数 | 类型 | 默认值 | 描述 |
| to | String | – | 消息接收方的 userID 或 groupID |
| conversationType | String | – | 会话类型,取值 TencentCloudChat.TYPES.CONV_C2C 或 TencentCloudChat.TYPES.CONV_GROUP |
| priority | String | TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL | 消息优先级 |
| payload | Object | – | 消息内容的容器 |
| onProgress | function | – | 获取上传进度的回调函数 |
| cloudCustomData | String | '' | 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到) |
payload 的描述如下:
| 参数 | 类型 | 描述 |
| file | HTMLInputElement | File | Object | 用于选择文件的 DOM 节点(Web)或者 File 对象(Web)或者 Object(uni.chooseFile 接口的 success 回调参数),SDK 会读取其中的数据并上传文件 |
返回值
Message
示例
import DocumentPicker from 'react-native-document-picker'; // 1. 选择文件DocumentPicker.pick({ type: [DocumentPicker.types.allFiles],}).then((result) => { const file = result[0]; // 2. 创建消息实例,接口返回的实例可以上屏 let message = chat.createFileMessage({ to: 'user1', conversationType: TencentCloudChat.TYPES.CONV_C2C, payload: { file: file }, // React Native 不支持上传进度回调 // onProgress: function(event) { console.log('file uploading:', event) } }); // 3. 发送文件 let promise = chat.sendMessage(message); promise.then(function(imResponse) { // 发送成功 console.log(imResponse); }).catch(function(imError) { // 发送失败 console.warn('sendMessage error:', imError); });});
// uni-app 发送文件// 1. 选择文件uni.chooseFile({ count: 1, extension:['.zip','.doc'], success: function(res) { let message = chat.createFileMessage({ to: 'user1', conversationType: TencentCloudChat.TYPES.CONV_C2C, payload: { file: res }, onProgress: function(event) { console.log('file uploading:', event) } }); // 2. 发送消息 let promise = chat.sendMessage(message); promise.then(function(imResponse) { // 发送成功 console.log(imResponse); }).catch(function(imError) { // 发送失败 console.warn('sendMessage error:', imError); }); }});
九、创建地理位置消息
创建地理位置消息的接口,此接口返回一个消息实例,可以在需要发送地理位置消息时调用 发送消息 接口发送消息。
接口
chat.createLocationMessage(options);
参数
参数 options 为 Object 类型,包含的属性值如下:
| 参数 | 类型 | 默认值 | 描述 |
| to | String | – | 消息接收方的 userID 或 groupID |
| conversationType | String | – | 会话类型,取值 TencentCloudChat.TYPES.CONV_C2C 或 TencentCloudChat.TYPES.TYPES.CONV_GROUP |
| priority | String | TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL | 消息优先级 |
| payload | Object | – | 消息内容的容器 |
| cloudCustomData | String | '' | 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到) |
payload 的描述如下:
| 参数 | 类型 | 描述 |
| description | String | 地理位置描述信息 |
| longitude | Number | 经度 |
| latitude | Number | 纬度 |
返回值
Message
示例
// 发送地理位置消息,Web 端与小程序端相同// 1. 创建消息实例,接口返回的实例可以上屏let message = chat.createLocationMessage({ to: 'user1', conversationType: TencentCloudChat.TYPES.CONV_C2C, // 消息优先级,用于群聊 // priority: TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL, payload: { description: '深圳市深南大道10000号腾讯大厦', longitude: 113.941079, // 经度 latitude: 22.546103 // 纬度 }});// 2. 发送消息let promise = chat.sendMessage(message);promise.then(function(imResponse) { // 发送成功 console.log(imResponse);}).catch(function(imError) { // 发送失败 console.warn('sendMessage error:', imError);});
十、创建合并消息
创建合并消息的接口,此接口返回一个消息实例,可以在需要发送合并消息时调用 发送消息 接口发送消息。
注意:不支持合并已发送失败的消息,如果消息列表内传入了已发送失败的消息,则创建消息接口会报错。
接口
chat.createMergerMessage(options);
参数
参数 options 为 Object 类型,包含的属性值如下:
| 参数 | 类型 | 默认值 | 描述 |
| to | String | – | 消息接收方的 userID 或 groupID |
| conversationType | String | – | 会话类型,取值 TencentCloudChat.TYPES.CONV_C2C 或 TencentCloudChat.TYPES.CONV_GROUP |
| priority | String | TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL | 消息优先级 |
| payload | Object | – | 消息内容的容器 |
| cloudCustomData | String | '' | 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到) |
payload 的描述如下:
| 参数 | 类型 | 描述 |
| messageList | Array | 合并的消息列表 |
| title | String | 合并的标题,例如:"大湾区前端人才中心的聊天记录" |
| abstractList | String | 摘要列表,不同的消息类型可以设置不同的摘要信息,例如:文本消息可以设置为:sender: text,图片消息可以设置为:sender: [图片],文件消息可以设置为:sender: [文件] |
| compatibleText | String | 兼容文本,低版本 SDK 如果不支持合并消息,默认会收到一条文本消息,文本消息的内容为 ${compatibleText},必填 |
返回值
Message
示例
// 1. 将群聊消息转发到 c2c 会话// message1 message2 message3 是群聊消息let mergerMessage = chat.createMergerMessage({ to: 'user1', conversationType: TencentCloudChat.TYPES.CONV_C2C, payload: { messageList: [message1, message2, message3], title: '大湾区前端人才中心的聊天记录', abstractList: ['allen: 666', 'iris: [图片]', 'linda: [文件]'], compatibleText: '请升级IMSDK到v2.10.1或更高版本查看此消息' }, // 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到) // cloudCustomData: 'your cloud custom data'});// 2. 发送消息let promise = chat.sendMessage(mergerMessage);promise.then(function(imResponse) { // 发送成功 console.log(imResponse);}).catch(function(imError) { // 发送失败 console.warn('sendMessage error:', imError);});
十一、下载合并消息
如果发送方发送的合并消息较大,SDK 会将此消息存储到云端,消息接收方查看消息时,需要先把消息从云端下载到本地。
接口
chat.downloadMergerMessage(message);
参数
| 参数 | 类型 | 描述 |
| message | Message | 消息实例 |
返回值
Promise
示例
// downloadKey 存在说明收到的合并消息存储在云端,需要先下载if (message.type === TencentCloudChat.TYPES.MSG_MERGER && message.payload.downloadKey !== '') { let promise = chat.downloadMergerMessage(message); promise.then(function(imResponse) { // 下载成功后,SDK会更新 message.payload.messageList 等信息 console.log(imResponse.data); }).catch(function(imError) { // 下载失败 console.warn('downloadMergerMessage error:', imError); });}
十二、逐条转发消息
如果你需要转发单条消息,可以先通过 createForwardMessage 接口创建一条和原消息内容完全一样的转发消息,再调用 sendMessage 接口把转发消息发送出去。
注意:支持单条转发和逐条转发。
接口
chat.createForwardMessage(message);
参数
| 参数 | 类型 | 描述 |
| message | Message | 消息实例 |
示例
let forwardMessage = chat.createForwardMessage({ to: 'user1', conversationType: TencentCloudChat.TYPES.CONV_C2C, // 消息优先级,用于群聊 // priority: TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL, payload: message, // 消息实例,已收到的或自己已发出的消息 // 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到) // cloudCustomData: 'your cloud custom data'});// 2. 发送消息let promise = chat.sendMessage(forwardMessage);promise.then(function(imResponse) { // 发送成功 console.log(imResponse);}).catch(function(imError) { // 发送失败 console.warn('sendMessage error:', imError);});
十三、发送消息
发送消息的接口,需先调用下列的创建消息实例的接口获取消息实例后,再调用该接口发送消息实例。
·创建文本消息
·创建 @ 消息
·创建图片消息
·创建音频消息
·创建视频消息
·创建自定义消息
·创建表情消息
·创建文件消息
·创建地理位置消息
·创建合并消息
·创建转发消息
chat.sendMessage(options);
参数
参数 options 为 Object 类型,包含的属性值如下:
| 参数 | 类型 | 描述 |
| message | Message | 消息实例 |
| options | Object | 消息发送选项(消息内容的容器),选填 |
options 的描述如下:
| 参数 | 类型 | 描述 |
| onlineUserOnly | Boolean | 消息是否仅发送给在线用户的标识,默认值为 false;设置为 true,则消息既不存漫游,也不会计入未读,也不会离线推送给接收方。适合用于发送广播通知等不重要的提示消息场景。在 AVChatRoom 发送消息不支持此选项 |
| offlinePushInfo | Object | 离线推送 配置 |
| messageControlInfo | Object | 消息控制配置 |
offlinePushInfo 的描述如下:
| 参数 | 类型 | 描述 |
| disablePush | Boolean | true 关闭离线推送;false 开启离线推送(默认) |
| disableVoipPush | Boolean | true 关闭 voip 推送(默认)false 开启 voip 推送(开启 voip 推送需要同时开启离线推送) |
| title | String | 离线推送标题,该字段为 iOS 和 Android 共用 |
| description | String | 离线推送内容,该字段会覆盖消息实例的离线推送展示文本。若发送的是自定义消息,该 description 字段会覆盖 message.payload.description。如果 description 和 message.payload.description 字段都不填,接收方将收不到该自定义消息的离线推送 |
| extension | String | 离线推送透传内容 |
| ignoreIOSBadge | Boolean | 离线推送忽略 badge 计数(仅对 iOS 生效),如果设置为 true,在 iOS 接收端,这条消息不会使 App 的应用图标未读计数增加 |
| androidOPPOChannelID | String | 离线推送设置 OPPO 手机 8.0 系统及以上的渠道 ID |
messageControlInfo 的描述如下:
| 参数 | 类型 | 描述 |
| excludedFromUnreadCount | Boolean | true 消息不更新会话 unreadCount(消息存漫游),默认值 false |
| excludedFromLastMessage | Boolean | true 消息不更新会话 lastMessage(消息存漫游),默认值 false |
| excludedFromContentModeration | Boolean | 消息是否不过内容审核(包含本地审核和云端审核)只有在开通本地审核或云端审核功能后,excludedFromContentModeration 设置才有效,设置为 true,消息不过内容审核,设置为 false 消息过内容审核。云端审核开通流程请参见 云端审核 |
返回
Promise
示例
// 如果接收方不在线,则消息将存入漫游,且进行离线推送(在接收方 App 退后台或者进程被 kill 的情况下)。// 离线推送的标题和内容使用默认值。// 离线推送的说明请参考 https://cloud.tencent.com/document/product/269/3604chat.sendMessage(message);
chat.sendMessage(message, { onlineUserOnly: true // 如果接收方不在线,则消息不存入漫游,且不会进行离线推送});
chat.sendMessage(message, { offlinePushInfo: { disablePush: true // 如果接收方不在线,则消息将存入漫游,但不进行离线推送 }});
chat.sendMessage(message, { // 如果接收方不在线,则消息将存入漫游,且进行离线推送(在接收方 App 退后台或者进程被 kill 的情况下)。 // 接入侧可自定义离线推送的标题及内容 offlinePushInfo: { title: '', // 离线推送标题 description: '', // 离线推送内容 androidOPPOChannelID: '' // 离线推送设置 OPPO 手机 8.0 系统及以上的渠道 ID }});
chat.sendMessage(message, { messageControlInfo: { excludedFromUnreadCount: true, // 消息不更新会话 unreadCount(消息存漫游) excludedFromLastMessage: true // 消息不更新会话 lastMessage(消息存漫游) }});
// 消息不过内容审核chat.sendMessage(message, { messageControlInfo: { excludedFromContentModeration: true, }});
十四、获取设备权限
React Native 发送图片、视频、文件消息需要获取相关的设备权限。
AndroidiOS在 android 目录下,找到 app/src/main/AndroidManifest.xml ,添加以下权限: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.RECORD_AUDIO" />在 ios 目录下找到 Info.plist ,添加以下权限:<key>NSCameraUsageDescription</key><string>我们需要访问你的相机以拍摄照片</string><key>NSPhotoLibraryUsageDescription</key><string>我们需要访问你的相册以选择照片</string><key>NSMicrophoneUsageDescription</key><string>我们需要访问你的麦克风以录制音频</string>
十五、接口限制
| 功能特性 | 限制项 | 限制说明 |
| 单聊/群聊/公众号消息 | 内容长度 | 单聊、群聊消息,单条消息最大长度限制为 12K。 |
| | 发送频率 | 单聊消息:客户端发送单聊消息无限制;REST API 发送有频率限制,可查看相应接口的文档。群聊消息:每个群限 40 条/秒(针对所有群类型、所有平台接口)。不同群内发消息,限频互不影响。 |
| | 接收频率 | 单聊和群聊均无限制。 |
| | 单个文件大小 | 发送文件消息时,SDK 最大支持发送单个文件大小为 100MB。 |
注意:说明:
更多限制请参见文档 使用限制。