import store from '@/store/index.js' import * as RongIMLib from '@/uni_modules/RongCloud-IMWrapper/js_sdk/index' const getMessageList = (conversationType, targetId, timeStamp, count, isForward, callback) => { // 获取消息列表 https://doc.rongcloud.cn/imserver/server/v1/message/objectname#objectName const objectNames = [ 'RC:TxtMsg', 'RC:VcMsg', 'RC:HQVCMsg', 'RC:ImgMsg', 'RC:GIFMsg', 'RC:ImgTextMsg', 'RC:FileMsg', 'RC:LBSMsg', 'RC:SightMsg', 'RC:ReferenceMsg', 'RC:CombineMsg', 'RC:GrpNtf', 'RC:InfoNtf', 'RC:RcNtf', 'RC:IWNormalMsg' ] RongIMLib.getHistoryMessagesByTimestamp( conversationType, targetId, objectNames, timeStamp, count, isForward, ({ code, messages }) => { if (code === 0) { callback(messages) } else { uni.showToast({ icon: 'error', title: code }) } } ) } // 获取好友申请列表 const getPendingList = (callback, total) => { total = total || 100 RongIMLib.getConversationList([RongIMLib.ConversationType.SYSTEM], total, 0, (res) => { if (res.code === 0) { const pendings = res.conversations.filter((item) => { return item.objectName == RongIMLib.ObjectName.ContactNotification && item.latestMessage.operation === 'Request' }) callback(pendings) } }) } // 群组申请列表,邀请列表 const getGroupPendinglist = (targetId, callback) => { const conversationType = RongIMLib.ConversationType.SYSTEM const objectNames = ['RC:ContactNtf'] RongIMLib.getHistoryMessagesByTimestamp(conversationType, targetId, objectNames, 0, 1000, true, ({ messages }) => { callback(messages) } ) } /** * 发送文本消息 * @param {number} conversationType 消息类型 * @param {string} targetId 会话id * @param {string} content 消息内容 * @param {function} callback 回调函数 */ const sentText = (conversationType, targetId, content) => { return new Promise((resolve, reject) => { const message = { conversationType: conversationType, targetId: String(targetId), content: { objectName: 'RC:TxtMsg', content: content, userInfo: store.getters.sender } } sendCommonMessage(message, (messageId) => { resolve(messageId) }, (errCode) => { reject(errCode) }) }) } /** * 发送消息 * @param {number} conversationType 消息类型 * @param {string} targetId 会话id * @param {string} voiceUrl 录音的本地路径 * @param {integer} time 录音时长 * @param {function} user 本人信息 */ const sentVoice = (conversationType, targetId, voiceUrl, time) => { return new Promise((resolve, reject) => { const msg = { conversationType: conversationType, targetId: String(targetId), content: { objectName: 'RC:HQVCMsg', local: 'file://' + plus.io.convertLocalFileSystemURL(voiceUrl), duration: time == 0 ? 1 : time, userInfo: store.getters.sender } } RongIMLib.sendMediaMessage(msg, { success: (messageId) => { if (conversationType == 3) { RongIMLib.sendReadReceiptRequest(messageId) } resolve(messageId) }, progress: (progress, messageId) => {}, cancel: (messageId) => {}, error: (errorCode, messageId) => { reject(errorCode) } }) }) } // 发送的图片,可能会涉及到一次多张,用Promise来确保前端一次性清算 const sentImage = (conversationType, targetId, imageUrl) => { return new Promise((resolve, reject) => { uni.getImageInfo({ src: imageUrl, success: (imgInfo) => { const msg = { conversationType: conversationType, targetId: String(targetId), content: { objectName: 'RC:ImgMsg', local: imgInfo.path, userInfo: store.getters.sender } } RongIMLib.sendMediaMessage(msg, { success: (messageId) => { if (conversationType == 3) { RongIMLib.sendReadReceiptRequest(messageId) } resolve(messageId) }, progress: (progress, messageId) => {}, cancel: (messageId) => {}, error: (errorCode, messageId) => { reject(errorCode) } }) } }) }) } const sentFile = (conversationType, targetId, fileUrl) => { return new Promise((resolve, reject) => { const msg = { conversationType: conversationType, targetId: String(targetId), content: { objectName: 'RC:FileMsg', local: plus.io.convertLocalFileSystemURL(fileUrl), userInfo: store.getters.sender } } RongIMLib.sendMediaMessage(msg, { success: (messageId) => { if (conversationType == 3) { RongIMLib.sendReadReceiptRequest(messageId) } resolve(messageId) }, progress: (progress, messageId) => {}, cancel: (messageId) => {}, error: (errorCode, messageId) => { reject(errorCode) } }) }) } // 发送地理位置 const sentLocation = (conversationType, targetId, location, thumbnail) => { return new Promise((resolve, reject) => { const message = { conversationType: conversationType, targetId: String(targetId), content: { customType: 2, objectName: 'RC:LBSMsg', customFields: { name: location.name, address: location.address, latitude: Number(location.latitude), longitude: Number(location.longitude), thumbnail: thumbnail }, userInfo: store.getters.sender, } } sendCommonMessage(message, (messageId) => { resolve(messageId) }, (errCode) => { reject(errCode) }) }) } /** * 发送视频通话结果 */ const sentVideo = (conversationType, targetId, status, time) => { return new Promise((resolve, reject) => { const message = { conversationType: conversationType, targetId: String(targetId), content: { customType: 2, objectName: 'RC:VideoMsg', customFields: { status: status, duration: time }, userInfo: store.getters.sender, } } sendCommonMessage(message, (messageId) => { resolve(messageId) }, (errCode) => { reject(errCode) }) }) } /** * 发送语音通话结果 */ const sentAudio = (conversationType, targetId, status, time) => { return new Promise((resolve, reject) => { const message = { conversationType: conversationType, targetId: String(targetId), content: { customType: 2, objectName: 'RC:AudioMsg', customFields: { status: status, duration: time }, userInfo: store.getters.sender, } } sendCommonMessage(message, (messageId) => { resolve(messageId) }, (errCode) => { reject(errCode) }) }) } /** * 发送普通消息 */ const sendCommonMessage = (message, success, fail) => { RongIMLib.sendMessage(message, ({ code, messageId }) => { if (code === 0) { if (message.conversationType == 3) { RongIMLib.sendReadReceiptRequest(messageId) } success(messageId) } else { uni.showToast({ icon: 'none', title: '发送失败' + code }) fail(code) } }) } export default { getMessageList, getPendingList, getGroupPendinglist, sentText, sentVoice, sentImage, sentFile, sentLocation, sentVideo, sentAudio }