const RCUniIM = uni.requireNativePlugin('RongCloud-IM-V2-RCUniIMV2'); import { RCIMIWPushType, RCIMIWErrorCode } from './RCIMDefines'; import * as RCIMLog from './utils/RCIMLog'; import { AssertRules, validate } from './utils/assert'; import { RCIMIWLogLevel, } from './RCIMDefines'; const paramErrorPromise = Promise.resolve(RCIMIWErrorCode.paramError); let instance; export default class RCIMIWEngine { static _invokeMethod(name, params) { RCIMLog.log(RCIMIWLogLevel.info, `invokeMethod methodName: ${name}, params:${JSON.stringify(params)}`); return new Promise((resolve, _) => { RCUniIM.invokeMethod({ name, params }, (res) => { resolve(res); }); }); } _invokeMethod(name, callback, params) { RCIMLog.log(RCIMIWLogLevel.info, `invokeMethod methodName: ${name}, params:${JSON.stringify(params)}`); return new Promise((resolve, _) => { if (callback) { RCUniIM.invokeMethod({ name, params }, (res) => { resolve(res); }, callback); } else { RCUniIM.invokeMethod({ name, params }, (res) => { resolve(res); }); } }); } _setListener(eventName, callback) { RCIMLog.log(RCIMIWLogLevel.info, `setListener eventName: ${eventName}, callback:${callback != null}`); // 因为单个事件名只支持设置一个监听,所以要先移除已有的监听。 RCUniIM.removeAllEventListeners(eventName); if (callback) { let listener = (res) => { callback(res.data); }; RCUniIM.addEventListener(eventName, listener); } } /** * 初始化 IM 对象 * @param appKey 融云后台申请的应用 appKey * @param options 全局配置项 * @returns 创建的 IM 对象 */ static async create(appKey, options = {}) { if (instance) { return new Promise((resolve) => resolve(instance)); } let code = await RCIMIWEngine._invokeMethod('create', { appKey, options }); if (code === 0) { instance = new RCIMIWEngine(); return instance; } return new Promise((resolve) => resolve(null)); } /** * 销毁 IM 对象 */ async destroy() { let code = await this._invokeMethod('destroy', null); if (code === 0) { instance = null; } return code; } /** * 注册推送 token 给融云,用于不集成融云推送 SDK 但需使用融云消息推送能力。 * 如果是 iOS 平台时,会忽略传入的 pushType 值,只使用 pushToken 参数。 * 该方法需要在 IM 初始化后 3 秒再调用。 * @param pushType 推送厂商类型 * @param pushToken 推送 token (厂商接口 或 三方推送 SDK 提供的) * @returns 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 */ registerPushToken(pushType, pushToken) { if (!validate('pushType', pushType, AssertRules.NUMBER, true) || !validate('pushToken', pushToken, AssertRules.STRING, true)) { return paramErrorPromise; } const Platform = uni.getSystemInfoSync().platform; if (Platform == 'android' && pushType == RCIMIWPushType.iOS) { RCIMLog.log(RCIMIWLogLevel.error, 'pushType iOS only support iOS platform'); return paramErrorPromise; } return this._invokeMethod('registerPushToken', null, { pushType, pushToken }); } // /** // * 根据消息 id 获取消息体(本地数据库索引唯一值)。 // * @param messageId 消息的 messageId,可在消息对象中获取 // */ // getMessageById(messageId: number): Promise<{code: number, message: RCIMIWMessage}> { // return this._invokeMethod('getMessageById', {messageId}); // } // /** // * 通过全局唯一 id 获取消息实体。 // * @param messageUId 消息的 messageUid,可在消息对象中获取,且只有发送成功的消息才会有值。 // */ // getMessageByUId(messageUId: string): Promise<{code: number, message: RCIMIWMessage}> { // return this._invokeMethod('getMessageByUId', {messageUId}); // } /** * 注册原生自定义普通消息 * @param messageIdentifier 消息的唯一标识 * @param persistentFlag 消息的存储策略 * @return 当次接口操作的状态码。0 代表调用成功,非 0 代表当前接口调用操作失败,详细错误参考错误码 */ registerNativeCustomMessage(messageIdentifier, persistentFlag) { if (!validate('messageIdentifier', messageIdentifier, AssertRules.STRING, true) || !validate('persistentFlag', persistentFlag, AssertRules.NUMBER, true)) { return paramErrorPromise; } let resultCallback; return this._invokeMethod('registerNativeCustomMessage', resultCallback, { messageIdentifier, persistentFlag }); } /** * 注册原生自定义媒体消息 * @param messageIdentifier 消息的唯一标识 * @param persistentFlag 消息的存储策略 * @return 当次接口操作的状态码。0 代表调用成功,非 0 代表当前接口调用操作失败,详细错误参考错误码 */ registerNativeCustomMediaMessage(messageIdentifier, persistentFlag) { if (!validate('messageIdentifier', messageIdentifier, AssertRules.STRING, true) || !validate('persistentFlag', persistentFlag, AssertRules.NUMBER, true)) { return paramErrorPromise; } let resultCallback; return this._invokeMethod('registerNativeCustomMediaMessage', resultCallback, { messageIdentifier, persistentFlag, }); } /** * 连接融云服务器,在整个应用程序全局,只需要调用一次。调用此接口返回非业务错误码时,SDK 会启动重连机制进行重连;如果仍没有连接成功,会在设备网络状态变化时再次进行重连。 * @param token 调用 server api 获取到的 token * @param timeout 连接超时时间,单位:秒。 * timeLimit <= 0,则 IM 将一直连接,直到连接成功或者无法连接(如 token 非法) * timeLimit > 0,则 IM 将最多连接 timeLimit 秒 * 如果在 timeLimit 秒内连接成功,后面再发生了网络变化或前后台切换,SDK 会自动重连; 如果在 timeLimit 秒无法连接成功则不再进行重连,通过 listener 告知连接超时,您需要再自行调用 connect 接口 * @param callback 链接事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener 接口回调可以监听 [onConnected] */ connect(token, timeout, callback) { if (!validate('token', token, AssertRules.STRING, true) || !validate('timeout', timeout, AssertRules.NUMBER, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onDatabaseOpened') { let { code } = res; callback.onDatabaseOpened?.({ code }); } if (res.callbackName === 'onConnected') { let { code, userId } = res; callback.onConnected?.({ code, userId }); } }; } return this._invokeMethod('connect', resultCallback, { token, timeout }); } /** * 断开链接 * 注:因为 SDK 在前后台切换或者网络出现异常都会自动重连,保证连接可靠性。 所以除非您的 App 逻辑需要登出,否则一般不需要调用此方法进行手动断开 * @param receivePush 退出后是否接收 push,true:断开后接收远程推送,false:断开后不再接收远程推送 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 */ disconnect(receivePush) { if (!validate('receivePush', receivePush, AssertRules.BOOLEAN, true)) { return paramErrorPromise; } let resultCallback; return this._invokeMethod('disconnect', resultCallback, { receivePush }); } /** * 构建文本消息 * @param type 会话类型, * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param text 文本内容 * @return 文本消息实体 */ createTextMessage(type, targetId, channelId, text) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false) || !validate('text', text, AssertRules.STRING, true)) { return paramErrorPromise; } let resultCallback; return this._invokeMethod('createTextMessage', resultCallback, { type, targetId, channelId, text }); } /** * 构建图片消息 * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param path 图片消息的本地路径,必须为有效路径 * @return 图片消息实体 */ createImageMessage(type, targetId, channelId, path) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false) || !validate('path', path, AssertRules.STRING, true)) { return paramErrorPromise; } let resultCallback; return this._invokeMethod('createImageMessage', resultCallback, { type, targetId, channelId, path }); } /** * 构建文件消息 * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param path 文件消息的本地路径,必须为有效路径 * @return 文件消息实体 */ createFileMessage(type, targetId, channelId, path) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false) || !validate('path', path, AssertRules.STRING, true)) { return paramErrorPromise; } let resultCallback; return this._invokeMethod('createFileMessage', resultCallback, { type, targetId, channelId, path }); } /** * 构建小视频消息 * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param path 小视频消息的本地路径,必须为有效路径 * @param duration 小视频消息的视频时长 * @return 视频消息实体 */ createSightMessage(type, targetId, channelId, path, duration) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false) || !validate('path', path, AssertRules.STRING, true) || !validate('duration', duration, AssertRules.NUMBER, true)) { return paramErrorPromise; } let resultCallback; return this._invokeMethod('createSightMessage', resultCallback, { type, targetId, channelId, path, duration }); } /** * 构建语音消息 (高清语音) * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param path 语音消息的本地路径,必须为有效路径 * @param duration 语音消息的消息时长 * @return 语音消息的实体 */ createVoiceMessage(type, targetId, channelId, path, duration) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false) || !validate('path', path, AssertRules.STRING, true) || !validate('duration', duration, AssertRules.NUMBER, true)) { return paramErrorPromise; } let resultCallback; return this._invokeMethod('createVoiceMessage', resultCallback, { type, targetId, channelId, path, duration }); } /** * 构建引用消息 * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param referenceMessage 引用的消息 * @param text 引用的文本内容 * @return 引用消息实体 */ createReferenceMessage(type, targetId, channelId, referenceMessage, text) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false) || !validate('referenceMessage', referenceMessage, AssertRules.OBJECT, true) || !validate('text', text, AssertRules.STRING, true)) { return paramErrorPromise; } let resultCallback; return this._invokeMethod('createReferenceMessage', resultCallback, { type, targetId, channelId, referenceMessage, text, }); } /** * 构建 GIF 消息 * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param path GIF 消息的本地路径 * @return GIF 消息实体 */ createGIFMessage(type, targetId, channelId, path) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false) || !validate('path', path, AssertRules.STRING, true)) { return paramErrorPromise; } let resultCallback; return this._invokeMethod('createGIFMessage', resultCallback, { type, targetId, channelId, path }); } /** * 构建自定义消息 * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param policy 消息的存储策略 * @param messageIdentifier 消息的标识符,需唯一 * @param fields 消息的内容键值对 * @return 自定义消息实体 */ createCustomMessage(type, targetId, channelId, policy, messageIdentifier, fields) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false) || !validate('policy', policy, AssertRules.NUMBER, true) || !validate('messageIdentifier', messageIdentifier, AssertRules.STRING, true)) { return paramErrorPromise; } let resultCallback; return this._invokeMethod('createCustomMessage', resultCallback, { type, targetId, channelId, policy, messageIdentifier, fields, }); } /** * 构建位置消息 * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param longitude 经度 * @param latitude 纬度 * @param poiName POI 信息 * @param thumbnailPath 缩略图本地路径,必须为有效路径 * @return 位置消息实体 */ createLocationMessage(type, targetId, channelId, longitude, latitude, poiName, thumbnailPath) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false) || !validate('longitude', longitude, AssertRules.NUMBER, true) || !validate('latitude', latitude, AssertRules.NUMBER, true) || !validate('poiName', poiName, AssertRules.STRING, true) || !validate('thumbnailPath', thumbnailPath, AssertRules.STRING, true)) { return paramErrorPromise; } let resultCallback; return this._invokeMethod('createLocationMessage', resultCallback, { type, targetId, channelId, longitude, latitude, poiName, thumbnailPath, }); } /** * 构建原生自定义普通消息 * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param messageIdentifier 消息的标识符,需唯一 * @param fields 消息的内容键值对 * @return 原生自定义普通消息 */ createNativeCustomMessage(type, targetId, channelId, messageIdentifier, fields) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false) || !validate('messageIdentifier', messageIdentifier, AssertRules.STRING, true)) { return paramErrorPromise; } let resultCallback; return this._invokeMethod('createNativeCustomMessage', resultCallback, { type, targetId, channelId, messageIdentifier, fields, }); } /** * 构建原生自定义媒体消息 * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param messageIdentifier 消息的标识符,需唯一 * @param path 媒体文件的本地路径,必须为有效路径 * @param fields 消息的内容键值对 * @return 原生自定义媒体消息 */ createNativeCustomMediaMessage(type, targetId, channelId, messageIdentifier, path, fields) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false) || !validate('messageIdentifier', messageIdentifier, AssertRules.STRING, true) || !validate('path', path, AssertRules.STRING, true)) { return paramErrorPromise; } let resultCallback; return this._invokeMethod('createNativeCustomMediaMessage', resultCallback, { type, targetId, channelId, messageIdentifier, path, fields, }); } /** * 发送普通消息 * @param message 发送的消息实体 * @param callback 发送消息的事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener 接口回调可以监听 [onMessageAttached],[onMessageSent] */ sendMessage(message, callback) { if (!validate('message', message, AssertRules.OBJECT, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onMessageSaved') { let { message } = res; callback.onMessageSaved?.({ message }); } if (res.callbackName === 'onMessageSent') { let { code, message } = res; callback.onMessageSent?.({ code, message }); } }; } return this._invokeMethod('sendMessage', resultCallback, { message }); } /** * 发送媒体消息 * @param message 发送的媒体消息实体 * @param listener 发送媒体消息的事件监听 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener 接口回调可以监听 [onMediaMessageSending],[onMediaMessageAttached],[onMediaMessageSent] */ sendMediaMessage(message, listener) { if (!validate('message', message, AssertRules.OBJECT, true)) { return paramErrorPromise; } let resultCallback; if (listener) { resultCallback = (res) => { if (res.callbackName === 'onMediaMessageSaved') { let { message } = res; listener.onMediaMessageSaved?.({ message }); } if (res.callbackName === 'onMediaMessageSending') { let { message, progress } = res; listener.onMediaMessageSending?.({ message, progress }); } if (res.callbackName === 'onSendingMediaMessageCanceled') { let { message } = res; listener.onSendingMediaMessageCanceled?.({ message }); } if (res.callbackName === 'onMediaMessageSent') { let { code, message } = res; listener.onMediaMessageSent?.({ code, message }); } }; } return this._invokeMethod('sendMediaMessage', resultCallback, { message }); } /** * 取消发送媒体消息 * @param message 需要取消发送的媒体消息实体 * @param callback 取消发送媒体消息的事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener 接口回调可以监听 [onSendingMediaMessageCanceled] */ cancelSendingMediaMessage(message, callback) { if (!validate('message', message, AssertRules.OBJECT, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onCancelSendingMediaMessageCalled') { let { code, message } = res; callback.onCancelSendingMediaMessageCalled?.({ code, message }); } }; } return this._invokeMethod('cancelSendingMediaMessage', resultCallback, { message }); } /** * 下载媒体消息 * @param message 需要下载的媒体消息实体 * @param listener 下载媒体消息的事件监听 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onMediaMessageDownloaded], [onMediaMessageDownloading] */ downloadMediaMessage(message, listener) { if (!validate('message', message, AssertRules.OBJECT, true)) { return paramErrorPromise; } let resultCallback; if (listener) { resultCallback = (res) => { if (res.callbackName === 'onMediaMessageDownloading') { let { message, progress } = res; listener.onMediaMessageDownloading?.({ message, progress }); } if (res.callbackName === 'onDownloadingMediaMessageCanceled') { let { message } = res; listener.onDownloadingMediaMessageCanceled?.({ message }); } if (res.callbackName === 'onMediaMessageDownloaded') { let { code, message } = res; listener.onMediaMessageDownloaded?.({ code, message }); } }; } return this._invokeMethod('downloadMediaMessage', resultCallback, { message }); } /** * 取消下载媒体消息 * @param message 需要取消下载的媒体消息实体 * @param callback 取消下载媒体消息的事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onDownloadingMediaMessageCanceled] */ cancelDownloadingMediaMessage(message, callback) { if (!validate('message', message, AssertRules.OBJECT, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onCancelDownloadingMediaMessageCalled') { let { code, message } = res; callback.onCancelDownloadingMediaMessageCalled?.({ code, message }); } }; } return this._invokeMethod('cancelDownloadingMediaMessage', resultCallback, { message }); } /** * 加载某个会话 * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onConversationLoaded] * @deprecated 用 {@link #getConversation(RCIMIWConversationType, String, String, IRCIMIWGetConversationCallback)} 代替, 预计将在 6.x 版本删除此接口。 */ loadConversation(type, targetId, channelId) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false)) { return paramErrorPromise; } let resultCallback; return this._invokeMethod('loadConversation', resultCallback, { type, targetId, channelId }); } /** * 获取某个会话 * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可 * @param callback 获取会话事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onConversationLoaded] */ getConversation(type, targetId, channelId, callback) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onSuccess') { let { t } = res; callback.onSuccess?.({ t }); } if (res.callbackName === 'onError') { let { code } = res; callback.onError?.({ code }); } }; } return this._invokeMethod('getConversation', resultCallback, { type, targetId, channelId }); } /** * 加载某些会话 * @param conversationTypes 会话类型 * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可 * @param startTime 时间戳(毫秒),获取小于此时间戳的会话,传 0 为查询最新数据 * @param count 查询的数量, 0 < count <= 50 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onConversationsLoaded] * @deprecated 用 {@link #getConversations(List, String, long, int, IRCIMIWGetConversationsCallback)} 代替, 预计将在 6.x 版本删除此接口。 */ loadConversations(conversationTypes, channelId, startTime, count) { if (!validate('conversationTypes', conversationTypes, AssertRules.NUMBER_ARRAY, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false) || !validate('startTime', startTime, AssertRules.NUMBER, true) || !validate('count', count, AssertRules.NUMBER, true)) { return paramErrorPromise; } let resultCallback; return this._invokeMethod('loadConversations', resultCallback, { conversationTypes, channelId, startTime, count, }); } /** * 获取某些会话 * @param conversationTypes 会话类型 * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可 * @param startTime 时间戳(毫秒),获取小于此时间戳的会话,传 0 为查询最新数据 * @param count 查询的数量, 0 < count <= 50 * @param callback 获取会话列表事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onConversationsLoaded] */ getConversations(conversationTypes, channelId, startTime, count, callback) { if (!validate('conversationTypes', conversationTypes, AssertRules.NUMBER_ARRAY, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false) || !validate('startTime', startTime, AssertRules.NUMBER, true) || !validate('count', count, AssertRules.NUMBER, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onSuccess') { let { t } = res; callback.onSuccess?.({ t }); } if (res.callbackName === 'onError') { let { code } = res; callback.onError?.({ code }); } }; } return this._invokeMethod('getConversations', resultCallback, { conversationTypes, channelId, startTime, count, }); } /** * 获取指定类型的含有未读消息的会话列表 * @param conversationTypes 支持单聊、群聊、系统会话 * @param callback 获取会话列表事件回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 */ getUnreadConversations(conversationTypes, callback) { if (!validate('conversationTypes', conversationTypes, AssertRules.NUMBER_ARRAY, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onSuccess') { let { t } = res; callback.onSuccess?.({ t }); } if (res.callbackName === 'onError') { let { code } = res; callback.onError?.({ code }); } }; } return this._invokeMethod('getUnreadConversations', resultCallback, { conversationTypes }); } /** * 移除某个会话 * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可 * @param callback 移除会话事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onConversationRemoved] */ removeConversation(type, targetId, channelId, callback) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onConversationRemoved') { let { code } = res; callback.onConversationRemoved?.({ code }); } }; } return this._invokeMethod('removeConversation', resultCallback, { type, targetId, channelId }); } /** * 根据会话类型移除会话 * @param conversationTypes 会话类型集合 * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param callback 移除会话列表事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onConversationsRemoved] */ removeConversations(conversationTypes, channelId, callback) { if (!validate('conversationTypes', conversationTypes, AssertRules.NUMBER_ARRAY, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onConversationsRemoved') { let { code } = res; callback.onConversationsRemoved?.({ code }); } }; } return this._invokeMethod('removeConversations', resultCallback, { conversationTypes, channelId }); } /** * 加载某个会话的未读数 * 注:不支持聊天室! * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onUnreadCountLoaded] * @deprecated 用 {@link #getUnreadCount(RCIMIWConversationType, String, String, IRCIMIWGetUnreadCountCallback)} 代替, 预计将在 6.x 版本删除此接口。 */ loadUnreadCount(type, targetId, channelId) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false)) { return paramErrorPromise; } let resultCallback; return this._invokeMethod('loadUnreadCount', resultCallback, { type, targetId, channelId }); } /** * 获取某个会话的未读数 * 注:不支持聊天室! * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param callback 获取会话未读数事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onUnreadCountLoaded] */ getUnreadCount(type, targetId, channelId, callback) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onSuccess') { let { t } = res; callback.onSuccess?.({ t }); } if (res.callbackName === 'onError') { let { code } = res; callback.onError?.({ code }); } }; } return this._invokeMethod('getUnreadCount', resultCallback, { type, targetId, channelId }); } /** * 加载所有未读数 * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onTotalUnreadCountLoaded] * @deprecated 用 {@link #getTotalUnreadCount(String, IRCIMIWGetTotalUnreadCountCallback)} 代替, 预计将在 6.x 版本删除此接口。 */ loadTotalUnreadCount(channelId) { if (!validate('channelId', channelId, AssertRules.ONLY_STRING, false)) { return paramErrorPromise; } let resultCallback; return this._invokeMethod('loadTotalUnreadCount', resultCallback, { channelId }); } /** * 获取所有未读数 * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param callback 获取所有未读数事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onTotalUnreadCountLoaded] */ getTotalUnreadCount(channelId, callback) { if (!validate('channelId', channelId, AssertRules.ONLY_STRING, false)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onSuccess') { let { t } = res; callback.onSuccess?.({ t }); } if (res.callbackName === 'onError') { let { code } = res; callback.onError?.({ code }); } }; } return this._invokeMethod('getTotalUnreadCount', resultCallback, { channelId }); } /** * 加载会话中未读的 @ 消息数量。 * 注:不支持聊天室! * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onUnreadMentionedCountLoaded] * @deprecated 用 {@link #getUnreadMentionedCount(RCIMIWConversationType, String, String, IRCIMIWGetUnreadMentionedCountCallback)} 代替, 预计将在 6.x 版本删除此接口。 */ loadUnreadMentionedCount(type, targetId, channelId) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false)) { return paramErrorPromise; } let resultCallback; return this._invokeMethod('loadUnreadMentionedCount', resultCallback, { type, targetId, channelId }); } /** * 获取会话中未读的 @ 消息数量。 * 注:不支持聊天室! * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param callback 获取会话中未读的 @ 消息数量事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onUnreadMentionedCountLoaded] */ getUnreadMentionedCount(type, targetId, channelId, callback) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onSuccess') { let { t } = res; callback.onSuccess?.({ t }); } if (res.callbackName === 'onError') { let { code } = res; callback.onError?.({ code }); } }; } return this._invokeMethod('getUnreadMentionedCount', resultCallback, { type, targetId, channelId }); } /** * 加载当前用户加入的所有超级群会话的未读消息数的总和。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onUltraGroupAllUnreadCountLoaded] * @deprecated 用 {@link #getUltraGroupAllUnreadCount(IRCIMIWGetUltraGroupAllUnreadCountCallback)} 代替, 预计将在 6.x 版本删除此接口。 */ loadUltraGroupAllUnreadCount() { let resultCallback; return this._invokeMethod('loadUltraGroupAllUnreadCount', resultCallback, {}); } /** * 获取当前用户加入的所有超级群会话的未读消息数的总和。 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onUltraGroupAllUnreadCountLoaded] */ getUltraGroupAllUnreadCount(callback) { let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onSuccess') { let { t } = res; callback.onSuccess?.({ t }); } if (res.callbackName === 'onError') { let { code } = res; callback.onError?.({ code }); } }; } return this._invokeMethod('getUltraGroupAllUnreadCount', resultCallback, {}); } /** * 加载当前用户加入的所有超级群会话中的未读 @ 消息数的总和。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onUltraGroupAllUnreadMentionedCountLoaded] * @deprecated 用 {@link #getUltraGroupAllUnreadMentionedCount(IRCIMIWGetUltraGroupAllUnreadMentionedCountCallback)} 代替, 预计将在 6.x 版本删除此接口。 */ loadUltraGroupAllUnreadMentionedCount() { let resultCallback; return this._invokeMethod('loadUltraGroupAllUnreadMentionedCount', resultCallback, {}); } /** * 获取当前用户加入的所有超级群会话中的未读 @ 消息数的总和。 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onUltraGroupAllUnreadMentionedCountLoaded] */ getUltraGroupAllUnreadMentionedCount(callback) { let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onSuccess') { let { t } = res; callback.onSuccess?.({ t }); } if (res.callbackName === 'onError') { let { code } = res; callback.onError?.({ code }); } }; } return this._invokeMethod('getUltraGroupAllUnreadMentionedCount', resultCallback, {}); } /** * 获取指定会话的未读消息数 * @param targetId 会话 ID * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onUltraGroupUnreadCountLoaded] * @deprecated 用 {@link #getUltraGroupUnreadCount(String, IRCIMIWGetUltraGroupUnreadCountCallback)} 代替, 预计将在 6.x 版本删除此接口。 */ loadUltraGroupUnreadCount(targetId) { if (!validate('targetId', targetId, AssertRules.STRING, true)) { return paramErrorPromise; } let resultCallback; return this._invokeMethod('loadUltraGroupUnreadCount', resultCallback, { targetId }); } /** * 获取指定会话的未读消息数 * @param targetId 会话 ID * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onUltraGroupUnreadCountLoaded] */ getUltraGroupUnreadCount(targetId, callback) { if (!validate('targetId', targetId, AssertRules.STRING, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onSuccess') { let { t } = res; callback.onSuccess?.({ t }); } if (res.callbackName === 'onError') { let { code } = res; callback.onError?.({ code }); } }; } return this._invokeMethod('getUltraGroupUnreadCount', resultCallback, { targetId }); } /** * 获取超级群会话中被 @ 的消息数 * @param targetId 会话 ID * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onUltraGroupUnreadMentionedCountLoaded] * @deprecated 用 {@link #getUltraGroupUnreadMentionedCount(String, IRCIMIWGetUltraGroupUnreadMentionedCountCallback)} 代替, 预计将在 6.x 版本删除此接口。 */ loadUltraGroupUnreadMentionedCount(targetId) { if (!validate('targetId', targetId, AssertRules.STRING, true)) { return paramErrorPromise; } let resultCallback; return this._invokeMethod('loadUltraGroupUnreadMentionedCount', resultCallback, { targetId }); } /** * 获取超级群会话中被 @ 的消息数 * @param targetId 会话 ID * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onUltraGroupUnreadMentionedCountLoaded] */ getUltraGroupUnreadMentionedCount(targetId, callback) { if (!validate('targetId', targetId, AssertRules.STRING, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onSuccess') { let { t } = res; callback.onSuccess?.({ t }); } if (res.callbackName === 'onError') { let { code } = res; callback.onError?.({ code }); } }; } return this._invokeMethod('getUltraGroupUnreadMentionedCount', resultCallback, { targetId }); } /** * 根据会话类型加载未读数 * 注:不支持聊天室! * @param conversationTypes 会话类型集合 * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param contain 是否包含免打扰消息的未读消息数。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onUnreadCountByConversationTypesLoaded] * @deprecated 用 {@link #getUnreadCountByConversationTypes(List, String, boolean, IRCIMIWGetUnreadCountByConversationTypesCallback)} 代替, 预计将在 6.x 版本删除此接口。 */ loadUnreadCountByConversationTypes(conversationTypes, channelId, contain) { if (!validate('conversationTypes', conversationTypes, AssertRules.NUMBER_ARRAY, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false) || !validate('contain', contain, AssertRules.BOOLEAN, true)) { return paramErrorPromise; } let resultCallback; return this._invokeMethod('loadUnreadCountByConversationTypes', resultCallback, { conversationTypes, channelId, contain, }); } /** * 根据会话类型加载未读数 * 注:不支持聊天室! * @param conversationTypes 会话类型集合 * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param contain 是否包含免打扰消息的未读消息数。 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onUnreadCountByConversationTypesLoaded] */ getUnreadCountByConversationTypes(conversationTypes, channelId, contain, callback) { if (!validate('conversationTypes', conversationTypes, AssertRules.NUMBER_ARRAY, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false) || !validate('contain', contain, AssertRules.BOOLEAN, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onSuccess') { let { t } = res; callback.onSuccess?.({ t }); } if (res.callbackName === 'onError') { let { code } = res; callback.onError?.({ code }); } }; } return this._invokeMethod('getUnreadCountByConversationTypes', resultCallback, { conversationTypes, channelId, contain, }); } /** * 清除某个会话中的未读消息数。 * 注:不支持聊天室! * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param timestamp 该会话已阅读的最后一条消息的发送时间戳,清除所有传入当前最新时间戳 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onUnreadCountCleared] */ clearUnreadCount(type, targetId, channelId, timestamp, callback) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false) || !validate('timestamp', timestamp, AssertRules.NUMBER, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onUnreadCountCleared') { let { code } = res; callback.onUnreadCountCleared?.({ code }); } }; } return this._invokeMethod('clearUnreadCount', resultCallback, { type, targetId, channelId, timestamp }); } /** * 保存会话草稿信息。 * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param draft 草稿的文字内容。 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onDraftMessageSaved] */ saveDraftMessage(type, targetId, channelId, draft, callback) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false) || !validate('draft', draft, AssertRules.STRING, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onDraftMessageSaved') { let { code } = res; callback.onDraftMessageSaved?.({ code }); } }; } return this._invokeMethod('saveDraftMessage', resultCallback, { type, targetId, channelId, draft }); } /** * 加载会话中的草稿信息。 * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onDraftMessageLoaded] * @deprecated 用 {@link #getDraftMessage(RCIMIWConversationType, String, String, IRCIMIWGetDraftMessageCallback)} 代替, 预计将在 6.x 版本删除此接口。 */ loadDraftMessage(type, targetId, channelId) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false)) { return paramErrorPromise; } let resultCallback; return this._invokeMethod('loadDraftMessage', resultCallback, { type, targetId, channelId }); } /** * 获取会话中的草稿信息。 * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onDraftMessageLoaded] */ getDraftMessage(type, targetId, channelId, callback) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onSuccess') { let { t } = res; callback.onSuccess?.({ t }); } if (res.callbackName === 'onError') { let { code } = res; callback.onError?.({ code }); } }; } return this._invokeMethod('getDraftMessage', resultCallback, { type, targetId, channelId }); } /** * 删除指定会话中的草稿信息。 * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onDraftMessageCleared] */ clearDraftMessage(type, targetId, channelId, callback) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onDraftMessageCleared') { let { code } = res; callback.onDraftMessageCleared?.({ code }); } }; } return this._invokeMethod('clearDraftMessage', resultCallback, { type, targetId, channelId }); } /** * 加载免打扰的会话列表。 * @param conversationTypes 会话类型集合 * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onBlockedConversationsLoaded] * @deprecated 用 {@link #getBlockedConversations(List, String, IRCIMIWGetBlockedConversationsCallback)} 代替, 预计将在 6.x 版本删除此接口。 */ loadBlockedConversations(conversationTypes, channelId) { if (!validate('conversationTypes', conversationTypes, AssertRules.NUMBER_ARRAY, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false)) { return paramErrorPromise; } let resultCallback; return this._invokeMethod('loadBlockedConversations', resultCallback, { conversationTypes, channelId }); } /** * 获取免打扰的会话列表。 * @param conversationTypes 会话类型集合 * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onBlockedConversationsLoaded] */ getBlockedConversations(conversationTypes, channelId, callback) { if (!validate('conversationTypes', conversationTypes, AssertRules.NUMBER_ARRAY, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onSuccess') { let { t } = res; callback.onSuccess?.({ t }); } if (res.callbackName === 'onError') { let { code } = res; callback.onError?.({ code }); } }; } return this._invokeMethod('getBlockedConversations', resultCallback, { conversationTypes, channelId }); } /** * 设置会话的置顶状态。若会话不存在,调用此方法 SDK 自动创建会话并置顶。 * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param top 是否置顶 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onConversationTopStatusChanged] */ changeConversationTopStatus(type, targetId, channelId, top, callback) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false) || !validate('top', top, AssertRules.BOOLEAN, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onConversationTopStatusChanged') { let { code } = res; callback.onConversationTopStatusChanged?.({ code }); } }; } return this._invokeMethod('changeConversationTopStatus', resultCallback, { type, targetId, channelId, top }); } /** * 加载会话的置顶状态 * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onConversationTopStatusLoaded] * @deprecated 用 {@link #getConversationTopStatus(RCIMIWConversationType, String, String, IRCIMIWGetConversationTopStatusCallback)} 代替, 预计将在 6.x 版本删除此接口。 */ loadConversationTopStatus(type, targetId, channelId) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false)) { return paramErrorPromise; } let resultCallback; return this._invokeMethod('loadConversationTopStatus', resultCallback, { type, targetId, channelId }); } /** * 获取会话的置顶状态 * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onConversationTopStatusLoaded] */ getConversationTopStatus(type, targetId, channelId, callback) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onSuccess') { let { t } = res; callback.onSuccess?.({ t }); } if (res.callbackName === 'onError') { let { code } = res; callback.onError?.({ code }); } }; } return this._invokeMethod('getConversationTopStatus', resultCallback, { type, targetId, channelId }); } /** * 同步会话阅读状态。 * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param timestamp 会话中已读的最后一条消息的发送时间戳 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onConversationReadStatusSynced] */ syncConversationReadStatus(type, targetId, channelId, timestamp, callback) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false) || !validate('timestamp', timestamp, AssertRules.NUMBER, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onConversationReadStatusSynced') { let { code } = res; callback.onConversationReadStatusSynced?.({ code }); } }; } return this._invokeMethod('syncConversationReadStatus', resultCallback, { type, targetId, channelId, timestamp, }); } /** * 向会话中发送正在输入的状态,目前只支持单聊。 * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param currentType 当前的状态 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 */ sendTypingStatus(type, targetId, channelId, currentType) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false) || !validate('currentType', currentType, AssertRules.STRING, true)) { return paramErrorPromise; } let resultCallback; return this._invokeMethod('sendTypingStatus', resultCallback, { type, targetId, channelId, currentType }); } /** * 加载历史消息 * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param sentTime 当前消息时间戳 * @param order 获取消息的方向。BEFORE:获取 sentTime 之前的消息 (时间递减),AFTER:获取 sentTime 之后的消息 (时间递增) * @param policy 消息的加载策略。LOCAL:只加载本地,REMOTE:只加载远端,LOCAL_REMOTE:本地远端都加载 * @param count 获取的消息数量,0 < count <= 20 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onMessagesLoaded] * @deprecated 用 {@link #getMessages(RCIMIWConversationType, String, String, long, RCIMIWTimeOrder, RCIMIWMessageOperationPolicy, int, IRCIMIWGetMessagesCallback)} 代替, 预计将在 6.x 版本删除此接口。 */ loadMessages(type, targetId, channelId, sentTime, order, policy, count) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false) || !validate('sentTime', sentTime, AssertRules.NUMBER, true) || !validate('order', order, AssertRules.NUMBER, true) || !validate('policy', policy, AssertRules.NUMBER, true) || !validate('count', count, AssertRules.NUMBER, true)) { return paramErrorPromise; } let resultCallback; return this._invokeMethod('loadMessages', resultCallback, { type, targetId, channelId, sentTime, order, policy, count, }); } /** * 加载历史消息 * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param sentTime 当前消息时间戳 * @param order 获取消息的方向。BEFORE:获取 sentTime 之前的消息 (时间递减),AFTER:获取 sentTime 之后的消息 (时间递增) * @param policy 消息的加载策略。LOCAL:只加载本地,REMOTE:只加载远端,LOCAL_REMOTE:本地远端都加载 * @param count 获取的消息数量,0 < count <= 20 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onMessagesLoaded] */ getMessages(type, targetId, channelId, sentTime, order, policy, count, callback) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false) || !validate('sentTime', sentTime, AssertRules.NUMBER, true) || !validate('order', order, AssertRules.NUMBER, true) || !validate('policy', policy, AssertRules.NUMBER, true) || !validate('count', count, AssertRules.NUMBER, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onSuccess') { let { t } = res; callback.onSuccess?.({ t }); } if (res.callbackName === 'onError') { let { code } = res; callback.onError?.({ code }); } }; } return this._invokeMethod('getMessages', resultCallback, { type, targetId, channelId, sentTime, order, policy, count, }); } /** * 根据消息 id 获取消息体(本地数据库索引唯一值)。 * @param messageId 消息的 messageId,可在消息对象中获取 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 */ getMessageById(messageId, callback) { if (!validate('messageId', messageId, AssertRules.NUMBER, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onSuccess') { let { t } = res; callback.onSuccess?.({ t }); } if (res.callbackName === 'onError') { let { code } = res; callback.onError?.({ code }); } }; } return this._invokeMethod('getMessageById', resultCallback, { messageId }); } /** * 通过全局唯一 id 获取消息实体。 * @param messageUId 消息的 messageUid,可在消息对象中获取,且只有发送成功的消息才会有值。 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 */ getMessageByUId(messageUId, callback) { if (!validate('messageUId', messageUId, AssertRules.STRING, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onSuccess') { let { t } = res; callback.onSuccess?.({ t }); } if (res.callbackName === 'onError') { let { code } = res; callback.onError?.({ code }); } }; } return this._invokeMethod('getMessageByUId', resultCallback, { messageUId }); } /** * 加载第一条未读消息。 * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onFirstUnreadMessageLoaded] * @deprecated 用 {@link #getFirstUnreadMessage(RCIMIWConversationType, String, String, IRCIMIWGetFirstUnreadMessageCallback)} 代替, 预计将在 6.x 版本删除此接口。 */ loadFirstUnreadMessage(type, targetId, channelId) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false)) { return paramErrorPromise; } let resultCallback; return this._invokeMethod('loadFirstUnreadMessage', resultCallback, { type, targetId, channelId }); } /** * 获取第一条未读消息。 * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onFirstUnreadMessageLoaded] */ getFirstUnreadMessage(type, targetId, channelId, callback) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onSuccess') { let { t } = res; callback.onSuccess?.({ t }); } if (res.callbackName === 'onError') { let { code } = res; callback.onError?.({ code }); } }; } return this._invokeMethod('getFirstUnreadMessage', resultCallback, { type, targetId, channelId }); } /** * 加载会话中未读的 @ 消息。 * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onUnreadMentionedMessagesLoaded] * @deprecated 用 {@link #getUnreadMentionedMessages(RCIMIWConversationType, String, String, IRCIMIWGetUnreadMentionedMessagesCallback)} 代替, 预计将在 6.x 版本删除此接口。 */ loadUnreadMentionedMessages(type, targetId, channelId) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false)) { return paramErrorPromise; } let resultCallback; return this._invokeMethod('loadUnreadMentionedMessages', resultCallback, { type, targetId, channelId }); } /** * 获取会话中未读的 @ 消息。 * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onUnreadMentionedMessagesLoaded] */ getUnreadMentionedMessages(type, targetId, channelId, callback) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onSuccess') { let { t } = res; callback.onSuccess?.({ t }); } if (res.callbackName === 'onError') { let { code } = res; callback.onError?.({ code }); } }; } return this._invokeMethod('getUnreadMentionedMessages', resultCallback, { type, targetId, channelId }); } /** * 插入一条消息 * @param message 插入的消息 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onMessageInserted] */ insertMessage(message, callback) { if (!validate('message', message, AssertRules.OBJECT, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onMessageInserted') { let { code, message } = res; callback.onMessageInserted?.({ code, message }); } }; } return this._invokeMethod('insertMessage', resultCallback, { message }); } /** * 插入多条消息,不支持超级群 * @param messages 插入的消息集合 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onMessagesInserted] */ insertMessages(messages, callback) { if (!validate('messages', messages, AssertRules.ARRAY, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onMessagesInserted') { let { code, messages } = res; callback.onMessagesInserted?.({ code, messages }); } }; } return this._invokeMethod('insertMessages', resultCallback, { messages }); } /** * 清除消息 * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param timestamp 清除消息截止时间戳,0 <= recordTime <= 当前会话最后一条消息的 sentTime, 0 清除所有消息,其他值清除小于等于 recordTime 的消息 * @param policy 清除的策略 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onMessagesCleared] */ clearMessages(type, targetId, channelId, timestamp, policy, callback) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false) || !validate('timestamp', timestamp, AssertRules.NUMBER, true) || !validate('policy', policy, AssertRules.NUMBER, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onMessagesCleared') { let { code } = res; callback.onMessagesCleared?.({ code }); } }; } return this._invokeMethod('clearMessages', resultCallback, { type, targetId, channelId, timestamp, policy }); } /** * 删除本地消息 * @param messages 消息集合 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onLocalMessagesDeleted] */ deleteLocalMessages(messages, callback) { if (!validate('messages', messages, AssertRules.ARRAY, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onLocalMessagesDeleted') { let { code, messages } = res; callback.onLocalMessagesDeleted?.({ code, messages }); } }; } return this._invokeMethod('deleteLocalMessages', resultCallback, { messages }); } /** * 删除消息 * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param messages 消息集合 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onMessagesDeleted] */ deleteMessages(type, targetId, channelId, messages, callback) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false) || !validate('messages', messages, AssertRules.ARRAY, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onMessagesDeleted') { let { code, messages } = res; callback.onMessagesDeleted?.({ code, messages }); } }; } return this._invokeMethod('deleteMessages', resultCallback, { type, targetId, channelId, messages }); } /** * 撤回消息 * @param message 需要被撤回的消息 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onMessageRecalled] */ recallMessage(message, callback) { if (!validate('message', message, AssertRules.OBJECT, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onMessageRecalled') { let { code, message } = res; callback.onMessageRecalled?.({ code, message }); } }; } return this._invokeMethod('recallMessage', resultCallback, { message }); } /** * 发送某个会话中的消息阅读回执 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param timestamp 该会话中已读的最后一条消息的发送时间戳 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onPrivateReadReceiptMessageSent] */ sendPrivateReadReceiptMessage(targetId, channelId, timestamp, callback) { if (!validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false) || !validate('timestamp', timestamp, AssertRules.NUMBER, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onPrivateReadReceiptMessageSent') { let { code } = res; callback.onPrivateReadReceiptMessageSent?.({ code }); } }; } return this._invokeMethod('sendPrivateReadReceiptMessage', resultCallback, { targetId, channelId, timestamp }); } /** * 发起群聊消息已读回执请求 * @param message 需要请求已读回执的消息 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onGroupReadReceiptRequestSent] */ sendGroupReadReceiptRequest(message, callback) { if (!validate('message', message, AssertRules.OBJECT, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onGroupReadReceiptRequestSent') { let { code, message } = res; callback.onGroupReadReceiptRequestSent?.({ code, message }); } }; } return this._invokeMethod('sendGroupReadReceiptRequest', resultCallback, { message }); } /** * 发送群聊已读回执 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param messages 会话中需要发送已读回执的消息列表 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onGroupReadReceiptResponseSent] */ sendGroupReadReceiptResponse(targetId, channelId, messages, callback) { if (!validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false) || !validate('messages', messages, AssertRules.ARRAY, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onGroupReadReceiptResponseSent') { let { code, message } = res; callback.onGroupReadReceiptResponseSent?.({ code, message }); } }; } return this._invokeMethod('sendGroupReadReceiptResponse', resultCallback, { targetId, channelId, messages }); } /** * 更新消息扩展信息 * 每条消息携带扩展信息键值对最大值 300个,单次设置扩展信息键值对最大值 20个 * @param messageUId 消息的 messageUid,可在消息对象中获取,且只有发送成功的消息才会有值 * @param expansion 要更新的消息扩展信息键值对,类型是 HashMap;Key 支持大小写英文字母、数字、部分特殊符号 + = - _ 的组合方式,不支持汉字。Value 可以输入空格 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onMessageExpansionUpdated] */ updateMessageExpansion(messageUId, expansion, callback) { if (!validate('messageUId', messageUId, AssertRules.STRING, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onMessageExpansionUpdated') { let { code } = res; callback.onMessageExpansionUpdated?.({ code }); } }; } return this._invokeMethod('updateMessageExpansion', resultCallback, { messageUId, expansion }); } /** * 删除消息扩展信息中特定的键值对 * @param messageUId 消息的 messageUid,可在消息对象中获取,且只有发送成功的消息才会有值 * @param keys 消息扩展信息中待删除的 key 的列表,类型是 ArrayList * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onMessageExpansionForKeysRemoved] */ removeMessageExpansionForKeys(messageUId, keys, callback) { if (!validate('messageUId', messageUId, AssertRules.STRING, true) || !validate('keys', keys, AssertRules.ARRAY, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onMessageExpansionForKeysRemoved') { let { code } = res; callback.onMessageExpansionForKeysRemoved?.({ code }); } }; } return this._invokeMethod('removeMessageExpansionForKeys', resultCallback, { messageUId, keys }); } /** * 设置消息发送状态。 * @param messageId 消息的 messageId,可在消息对象中获取 * @param sentStatus 要修改的状态 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onMessageSentStatusChanged] */ changeMessageSentStatus(messageId, sentStatus, callback) { if (!validate('messageId', messageId, AssertRules.NUMBER, true) || !validate('sentStatus', sentStatus, AssertRules.NUMBER, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onMessageSentStatusChanged') { let { code } = res; callback.onMessageSentStatusChanged?.({ code }); } }; } return this._invokeMethod('changeMessageSentStatus', resultCallback, { messageId, sentStatus }); } /** * 设置消息接收状态。 * @param messageId 消息的 messageId,可在消息对象中获取 * @param receivedStatus 要修改的状态 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onMessageReceiveStatusChanged] */ changeMessageReceiveStatus(messageId, receivedStatus, callback) { if (!validate('messageId', messageId, AssertRules.NUMBER, true) || !validate('receivedStatus', receivedStatus, AssertRules.NUMBER, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onMessageReceiveStatusChanged') { let { code } = res; callback.onMessageReceiveStatusChanged?.({ code }); } }; } return this._invokeMethod('changeMessageReceiveStatus', resultCallback, { messageId, receivedStatus }); } /** * 加入聊天室。 * @param targetId 聊天室会话 ID * @param messageCount 进入聊天室拉取消息数目,-1 时不拉取任何消息,0 时拉取 10 条消息,最多只能拉取 50 * @param autoCreate 是否创建聊天室,TRUE 如果聊天室不存在,sdk 会创建聊天室并加入,如果已存在,则直接加入 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onChatRoomJoined] */ joinChatRoom(targetId, messageCount, autoCreate, callback) { if (!validate('targetId', targetId, AssertRules.STRING, true) || !validate('messageCount', messageCount, AssertRules.NUMBER, true) || !validate('autoCreate', autoCreate, AssertRules.BOOLEAN, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onChatRoomJoined') { let { code, targetId } = res; callback.onChatRoomJoined?.({ code, targetId }); } }; } return this._invokeMethod('joinChatRoom', resultCallback, { targetId, messageCount, autoCreate }); } /** * 退出聊天室。 * @param targetId 聊天室会话 ID * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onChatRoomLeft] */ leaveChatRoom(targetId, callback) { if (!validate('targetId', targetId, AssertRules.STRING, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onChatRoomLeft') { let { code, targetId } = res; callback.onChatRoomLeft?.({ code, targetId }); } }; } return this._invokeMethod('leaveChatRoom', resultCallback, { targetId }); } /** * 加载聊天室历史消息记录。 * 注:必须先开通聊天室消息云存储功能。 * @param targetId 聊天室会话 ID * @param timestamp 起始的消息发送时间戳 * @param order 拉取顺序 0:倒序,1:正序 * @param count 要获取的消息数量,0 < count <= 50。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onChatRoomMessagesLoaded] * @deprecated 用 {@link #getChatRoomMessages(String, long, RCIMIWTimeOrder, int, IRCIMIWGetChatRoomMessagesCallback)} 代替, 预计将在 6.x 版本删除此接口。 */ loadChatRoomMessages(targetId, timestamp, order, count) { if (!validate('targetId', targetId, AssertRules.STRING, true) || !validate('timestamp', timestamp, AssertRules.NUMBER, true) || !validate('order', order, AssertRules.NUMBER, true) || !validate('count', count, AssertRules.NUMBER, true)) { return paramErrorPromise; } let resultCallback; return this._invokeMethod('loadChatRoomMessages', resultCallback, { targetId, timestamp, order, count }); } /** * 获取聊天室历史消息记录。 * 注:必须先开通聊天室消息云存储功能。 * @param targetId 聊天室会话 ID * @param timestamp 起始的消息发送时间戳 * @param order 拉取顺序 0:倒序,1:正序 * @param count 要获取的消息数量,0 < count <= 50。 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onChatRoomMessagesLoaded] */ getChatRoomMessages(targetId, timestamp, order, count, callback) { if (!validate('targetId', targetId, AssertRules.STRING, true) || !validate('timestamp', timestamp, AssertRules.NUMBER, true) || !validate('order', order, AssertRules.NUMBER, true) || !validate('count', count, AssertRules.NUMBER, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onSuccess') { let { t } = res; callback.onSuccess?.({ t }); } if (res.callbackName === 'onError') { let { code } = res; callback.onError?.({ code }); } }; } return this._invokeMethod('getChatRoomMessages', resultCallback, { targetId, timestamp, order, count }); } /** * 设置聊天室自定义属性。 * @param targetId 聊天室会话 ID * @param key 聊天室属性名称,Key 支持大小写英文字母、数字、部分特殊符号 + = - _ 的组合方式,最大长度 128 个字符 * @param value 聊天室属性对应的值,最大长度 4096 个字符 * @param deleteWhenLeft 用户掉线或退出时,是否自动删除该 Key、Value 值 * @param overwrite 如果当前 key 存在,是否进行覆盖 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onChatRoomEntryAdded] */ addChatRoomEntry(targetId, key, value, deleteWhenLeft, overwrite, callback) { if (!validate('targetId', targetId, AssertRules.STRING, true) || !validate('key', key, AssertRules.STRING, true) || !validate('value', value, AssertRules.STRING, true) || !validate('deleteWhenLeft', deleteWhenLeft, AssertRules.BOOLEAN, true) || !validate('overwrite', overwrite, AssertRules.BOOLEAN, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onChatRoomEntryAdded') { let { code } = res; callback.onChatRoomEntryAdded?.({ code }); } }; } return this._invokeMethod('addChatRoomEntry', resultCallback, { targetId, key, value, deleteWhenLeft, overwrite, }); } /** * 批量设置聊天室自定义属性 * @param targetId 聊天室会话 ID * @param entries 聊天室属性 * @param deleteWhenLeft 用户掉线或退出时,是否自动删除该 Key、Value 值 * @param overwrite 是否强制覆盖 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onChatRoomEntriesAdded] */ addChatRoomEntries(targetId, entries, deleteWhenLeft, overwrite, callback) { if (!validate('targetId', targetId, AssertRules.STRING, true) || !validate('deleteWhenLeft', deleteWhenLeft, AssertRules.BOOLEAN, true) || !validate('overwrite', overwrite, AssertRules.BOOLEAN, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onChatRoomEntriesAdded') { let { code, errors } = res; callback.onChatRoomEntriesAdded?.({ code, errors }); } }; } return this._invokeMethod('addChatRoomEntries', resultCallback, { targetId, entries, deleteWhenLeft, overwrite, }); } /** * 加载聊天室单个属性。 * @param targetId 聊天室会话 ID * @param key 聊天室属性键值 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onChatRoomEntryLoaded] * @deprecated 用 {@link #getChatRoomEntry(String, String, IRCIMIWGetChatRoomEntryCallback)} 代替, 预计将在 6.x 版本删除此接口。 */ loadChatRoomEntry(targetId, key) { if (!validate('targetId', targetId, AssertRules.STRING, true) || !validate('key', key, AssertRules.STRING, true)) { return paramErrorPromise; } let resultCallback; return this._invokeMethod('loadChatRoomEntry', resultCallback, { targetId, key }); } /** * 获取聊天室单个属性。 * @param targetId 聊天室会话 ID * @param key 聊天室属性键值 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onChatRoomEntryLoaded] */ getChatRoomEntry(targetId, key, callback) { if (!validate('targetId', targetId, AssertRules.STRING, true) || !validate('key', key, AssertRules.STRING, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onSuccess') { let { t } = res; callback.onSuccess?.({ t }); } if (res.callbackName === 'onError') { let { code } = res; callback.onError?.({ code }); } }; } return this._invokeMethod('getChatRoomEntry', resultCallback, { targetId, key }); } /** * 加载聊天室所有属性。 * @param targetId 聊天室会话 ID * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onChatRoomAllEntriesLoaded] * @deprecated 用 {@link #getChatRoomAllEntries(String, IRCIMIWGetChatRoomAllEntriesCallback)} 代替, 预计将在 6.x 版本删除此接口。 */ loadChatRoomAllEntries(targetId) { if (!validate('targetId', targetId, AssertRules.STRING, true)) { return paramErrorPromise; } let resultCallback; return this._invokeMethod('loadChatRoomAllEntries', resultCallback, { targetId }); } /** * 获取聊天室所有属性。 * @param targetId 聊天室会话 ID * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onChatRoomAllEntriesLoaded] */ getChatRoomAllEntries(targetId, callback) { if (!validate('targetId', targetId, AssertRules.STRING, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onSuccess') { let { t } = res; callback.onSuccess?.({ t }); } if (res.callbackName === 'onError') { let { code } = res; callback.onError?.({ code }); } }; } return this._invokeMethod('getChatRoomAllEntries', resultCallback, { targetId }); } /** * 删除聊天室自定义属性。 * @param targetId 聊天室会话 ID * @param key 聊天室属性键值 * @param force 是否强制删除 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onChatRoomEntryRemoved] */ removeChatRoomEntry(targetId, key, force, callback) { if (!validate('targetId', targetId, AssertRules.STRING, true) || !validate('key', key, AssertRules.STRING, true) || !validate('force', force, AssertRules.BOOLEAN, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onChatRoomEntryRemoved') { let { code } = res; callback.onChatRoomEntryRemoved?.({ code }); } }; } return this._invokeMethod('removeChatRoomEntry', resultCallback, { targetId, key, force }); } /** * 批量删除聊天室自定义属性 * @param targetId 聊天室会话 ID * @param keys 聊天室属性 * @param force 是否强制覆盖 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onChatRoomEntriesRemoved] */ removeChatRoomEntries(targetId, keys, force, callback) { if (!validate('targetId', targetId, AssertRules.STRING, true) || !validate('keys', keys, AssertRules.ARRAY, true) || !validate('force', force, AssertRules.BOOLEAN, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onChatRoomEntriesRemoved') { let { code } = res; callback.onChatRoomEntriesRemoved?.({ code }); } }; } return this._invokeMethod('removeChatRoomEntries', resultCallback, { targetId, keys, force }); } /** * 将某个用户加入黑名单。 * 当你把对方加入黑名单后,对方再发消息时,就会提示“已被加入黑名单,消息发送失败”。 但你依然可以发消息个对方。 * @param userId 用户 Id * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onBlacklistAdded] */ addToBlacklist(userId, callback) { if (!validate('userId', userId, AssertRules.STRING, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onBlacklistAdded') { let { code, userId } = res; callback.onBlacklistAdded?.({ code, userId }); } }; } return this._invokeMethod('addToBlacklist', resultCallback, { userId }); } /** * 将某个用户从黑名单中移出。 * @param userId 用户 Id * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onBlacklistRemoved] */ removeFromBlacklist(userId, callback) { if (!validate('userId', userId, AssertRules.STRING, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onBlacklistRemoved') { let { code, userId } = res; callback.onBlacklistRemoved?.({ code, userId }); } }; } return this._invokeMethod('removeFromBlacklist', resultCallback, { userId }); } /** * 获取某用户是否在黑名单中。 * @param userId 用户 Id * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onBlacklistStatusLoaded] * @deprecated 用 {@link #getBlacklistStatus(String, IRCIMIWGetBlacklistStatusCallback)} 代替, 预计将在 6.x 版本删除此接口。 */ loadBlacklistStatus(userId) { if (!validate('userId', userId, AssertRules.STRING, true)) { return paramErrorPromise; } let resultCallback; return this._invokeMethod('loadBlacklistStatus', resultCallback, { userId }); } /** * 获取某用户是否在黑名单中。 * @param userId 用户 Id * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onBlacklistStatusLoaded] */ getBlacklistStatus(userId, callback) { if (!validate('userId', userId, AssertRules.STRING, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onSuccess') { let { t } = res; callback.onSuccess?.({ t }); } if (res.callbackName === 'onError') { let { code } = res; callback.onError?.({ code }); } }; } return this._invokeMethod('getBlacklistStatus', resultCallback, { userId }); } /** * 加载当前用户设置的黑名单列表。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onBlacklistLoaded] * @deprecated 用 {@link #getBlacklist(IRCIMIWGetBlacklistCallback)} 代替, 预计将在 6.x 版本删除此接口。 */ loadBlacklist() { let resultCallback; return this._invokeMethod('loadBlacklist', resultCallback, {}); } /** * 获取当前用户设置的黑名单列表。 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onBlacklistLoaded] */ getBlacklist(callback) { let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onSuccess') { let { t } = res; callback.onSuccess?.({ t }); } if (res.callbackName === 'onError') { let { code } = res; callback.onError?.({ code }); } }; } return this._invokeMethod('getBlacklist', resultCallback, {}); } /** * 根据关键字搜索指定会话中的消息。 * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param keyword 搜索的关键字 * @param startTime 查询 beginTime 之前的消息, 传 0 时从最新消息开始搜索,从该时间往前搜索。 * @param count 查询的数量,0 < count <= 50。 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onMessagesSearched] */ searchMessages(type, targetId, channelId, keyword, startTime, count, callback) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false) || !validate('keyword', keyword, AssertRules.STRING, true) || !validate('startTime', startTime, AssertRules.NUMBER, true) || !validate('count', count, AssertRules.NUMBER, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onSuccess') { let { t } = res; callback.onSuccess?.({ t }); } if (res.callbackName === 'onError') { let { code } = res; callback.onError?.({ code }); } }; } return this._invokeMethod('searchMessages', resultCallback, { type, targetId, channelId, keyword, startTime, count, }); } /** * 根据关键字搜索指定会话中某个时间段的消息。 * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param keyword 搜索的关键字 * @param startTime 开始时间 * @param endTime 结束时间 * @param offset 偏移量 * @param count 返回的搜索结果数量,0 < count <= 50。 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onMessagesSearchedByTimeRange] */ searchMessagesByTimeRange(type, targetId, channelId, keyword, startTime, endTime, offset, count, callback) { if (!validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false) || !validate('keyword', keyword, AssertRules.STRING, true) || !validate('startTime', startTime, AssertRules.NUMBER, true) || !validate('endTime', endTime, AssertRules.NUMBER, true) || !validate('offset', offset, AssertRules.NUMBER, true) || !validate('count', count, AssertRules.NUMBER, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onSuccess') { let { t } = res; callback.onSuccess?.({ t }); } if (res.callbackName === 'onError') { let { code } = res; callback.onError?.({ code }); } }; } return this._invokeMethod('searchMessagesByTimeRange', resultCallback, { type, targetId, channelId, keyword, startTime, endTime, offset, count, }); } /** * 根据用户 id 搜索指定会话中的消息。 * @param userId 用户 id * @param type 会话类型 * @param targetId 会话 ID * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param startTime 查询记录的起始时间, 传 0 时从最新消息开始搜索,从该时间往前搜索。 * @param count 返回的搜索结果数量 0 < count <= 50。 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onMessagesSearchedByUserId] */ searchMessagesByUserId(userId, type, targetId, channelId, startTime, count, callback) { if (!validate('userId', userId, AssertRules.STRING, true) || !validate('type', type, AssertRules.NUMBER, true) || !validate('targetId', targetId, AssertRules.STRING, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false) || !validate('startTime', startTime, AssertRules.NUMBER, true) || !validate('count', count, AssertRules.NUMBER, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onSuccess') { let { t } = res; callback.onSuccess?.({ t }); } if (res.callbackName === 'onError') { let { code } = res; callback.onError?.({ code }); } }; } return this._invokeMethod('searchMessagesByUserId', resultCallback, { userId, type, targetId, channelId, startTime, count, }); } /** * 根据关键字搜索会话。 * @param conversationTypes 会话类型集合 * @param channelId 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 * @param messageTypes 搜索的消息类型 * @param keyword 搜索的关键字。 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onConversationsSearched] */ searchConversations(conversationTypes, channelId, messageTypes, keyword, callback) { if (!validate('conversationTypes', conversationTypes, AssertRules.NUMBER_ARRAY, true) || !validate('channelId', channelId, AssertRules.ONLY_STRING, false) || !validate('messageTypes', messageTypes, AssertRules.NUMBER_ARRAY, true) || !validate('keyword', keyword, AssertRules.STRING, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onSuccess') { let { t } = res; callback.onSuccess?.({ t }); } if (res.callbackName === 'onError') { let { code } = res; callback.onError?.({ code }); } }; } return this._invokeMethod('searchConversations', resultCallback, { conversationTypes, channelId, messageTypes, keyword, }); } /** * 屏蔽某个时间段的消息提醒 * @param startTime 开始消息免打扰时间,格式为 HH:MM:SS * @param spanMinutes 需要消息免打扰分钟数,0 < spanMinutes < 1440( 比如,您设置的起始时间是 00:00, 结束时间为 01:00,则 spanMinutes 为 60 分钟。设置为 1439 代表全天免打扰 (23 60 + 59 = 1439 )) * @param level 消息通知级别 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onNotificationQuietHoursChanged] */ changeNotificationQuietHours(startTime, spanMinutes, level, callback) { if (!validate('startTime', startTime, AssertRules.STRING, true) || !validate('spanMinutes', spanMinutes, AssertRules.NUMBER, true) || !validate('level', level, AssertRules.NUMBER, true)) { return paramErrorPromise; } let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onNotificationQuietHoursChanged') { let { code } = res; callback.onNotificationQuietHoursChanged?.({ code }); } }; } return this._invokeMethod('changeNotificationQuietHours', resultCallback, { startTime, spanMinutes, level }); } /** * 删除已设置的全局时间段消息提醒屏蔽 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onNotificationQuietHoursRemoved] */ removeNotificationQuietHours(callback) { let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onNotificationQuietHoursRemoved') { let { code } = res; callback.onNotificationQuietHoursRemoved?.({ code }); } }; } return this._invokeMethod('removeNotificationQuietHours', resultCallback, {}); } /** * 加载已设置的时间段消息提醒屏蔽 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onNotificationQuietHoursLoaded] * @deprecated 用 {@link #getNotificationQuietHours(IRCIMIWGetNotificationQuietHoursCallback)} 代替, 预计将在 6.x 版本删除此接口。 */ loadNotificationQuietHours() { let resultCallback; return this._invokeMethod('loadNotificationQuietHours', resultCallback, {}); } /** * 获取已设置的时间段消息提醒屏蔽 * @param callback 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式,预计将在 6.x 版本删除此其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 * @return 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 * @listener [onNotificationQuietHoursLoaded] */ getNotificationQuietHours(callback) { let resultCallback; if (callback) { resultCallback = (res) => { if (res.callbackName === 'onSuccess') { let { startTime, spanMinutes, level } = res; callback.onSuccess?.({ startTime, spanMinutes, level }); } if (res.callbackName === 'onError') { let { code } = res; callback.onError?.({ code }); } }; } return this._invokeMethod('getNotificationQuietHours', resultCallback, {}); } /** * 设置会话的消息提醒状态 * 注:超级群调用该接口,channelId 为空时,相当于设置了 channelId 为空的频道的免打扰,不会屏蔽整个超级群会话下所有频道的免打扰 * @param type 会话类型。请注意以下限制: