fix:修改图标和其他

This commit is contained in:
2026-03-07 02:02:22 +07:00
parent d874620a83
commit 67495ea864
653 changed files with 78983 additions and 816 deletions

View File

@@ -0,0 +1,43 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>AvailableLibraries</key>
<array>
<dict>
<key>BinaryPath</key>
<string>RongIMWrapper.framework/RongIMWrapper</string>
<key>LibraryIdentifier</key>
<string>ios-x86_64-simulator</string>
<key>LibraryPath</key>
<string>RongIMWrapper.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>x86_64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
<key>SupportedPlatformVariant</key>
<string>simulator</string>
</dict>
<dict>
<key>BinaryPath</key>
<string>RongIMWrapper.framework/RongIMWrapper</string>
<key>LibraryIdentifier</key>
<string>ios-arm64</string>
<key>LibraryPath</key>
<string>RongIMWrapper.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
</dict>
</array>
<key>CFBundlePackageType</key>
<string>XFWK</string>
<key>XCFrameworkFormatVersion</key>
<string>1.0</string>
</dict>
</plist>

View File

@@ -0,0 +1,46 @@
//
// RCIMIWBlockedMessageInfo.h
// RongIMWrapper
//
// Created by RongCloud on 3/20/22.
// Copyright © 2022 RongCloud. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <RongIMWrapper/RCIMIWDefines.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWBlockedMessageInfo : NSObject
/**
* 会话类型
*/
@property (nonatomic, assign, readonly) RCIMIWConversationType conversationType;
/**
* 会话 ID
*/
@property (nonatomic, copy, readonly) NSString *targetId;
/**
* 被拦截的消息 ID
*/
@property (nonatomic, copy, readonly) NSString *blockedMsgUId;
/**
* 拦截原因
* 1,全局敏感词:命中了融云内置的全局敏感词
* 2,自定义敏感词拦截:命中了客户在融云自定义的敏感词
* 3,第三方审核拦截:命中了第三方(数美)或模板路由决定不下发的状态
*/
@property (nonatomic, assign, readonly) RCIMIWMessageBlockType blockType;
/**
* 附加信息
*/
@property (nonatomic, copy, readonly) NSString *extra;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,27 @@
//
// RCIMIWChatRoomMemberAction.h
// RongIMWrapper
//
// Created by RongCloud on 2/23/22.
//
#import <Foundation/Foundation.h>
#import <RongIMWrapper/RCIMIWDefines.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWChatRoomMemberAction : NSObject
/*!
成员 ID
*/
@property (nonatomic, copy, readonly) NSString *userId;
/*!
成员加入或者退出
*/
@property (nonatomic, assign, readonly) RCIMIWChatRoomMemberActionType actionType;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,36 @@
//
// RCIMIWCommandMessage.h
// RongIMWrapper
//
// Created by RongCloud on 3/9/22.
//
#import <RongIMWrapper/RCIMIWMessage.h>
NS_ASSUME_NONNULL_BEGIN
/*!
命令消息类
@discussion 命令消息类,此消息不存储不计入未读消息数。
与 RCIMIWCommandNotificationMessage 的区别是,此消息不存储,也不会在界面上显示。
@remarks 通知类消息
*/
@interface RCIMIWCommandMessage : RCIMIWMessage
/*!
命令的名称
*/
@property (nonatomic, copy, readonly) NSString *name;
/*!
命令的扩展数据
@discussion 命令的扩展数据可以为任意字符串如存放您定义的json数据。
*/
@property (nonatomic, copy, readonly) NSString *data;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,36 @@
//
// RCIMIWCommandNotificationMessage.h
// RongIMWrapper
//
// Created by RongCloud on 3/9/22.
//
#import <RongIMWrapper/RCIMIWMessage.h>
NS_ASSUME_NONNULL_BEGIN
/*!
命令提醒消息类
@discussion 命令消息类,此消息会进行存储,但不计入未读消息数。
与 RCIMIWCommandMessage 的区别是,此消息会进行存储并在界面上显示。
@remarks 通知类消息
*/
@interface RCIMIWCommandNotificationMessage : RCIMIWMessage
/*!
命令提醒的名称
*/
@property (nonatomic, copy, readonly) NSString *name;
/*!
命令提醒消息的扩展数据
@discussion 命令提醒消息的扩展数据,可以为任意字符串,如存放您定义的 json 数据。
*/
@property (nonatomic, copy, readonly) NSString *data;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,43 @@
//
// RCIMIWCompressOptions.h
// RongIMWrapper
//
// Created by RongCloud on 3/21/22.
// Copyright © 2022 RongCloud. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWCompressOptions : NSObject
/*!
原图质量压缩比 0 ~ 100内部需要除 100
*/
@property (nonatomic, assign) int originalImageQuality;
/*!
原图最大尺寸 对应的 width height
*/
@property (nonatomic, assign) int originalImageSize;
// 原图最大限制,如果图片大小不超过此值,发送原图,超过则进行压缩
@property (nonatomic, assign) int originalImageMaxSize;
// 缩略图 0 ~ 1
@property (nonatomic, assign) int thumbnailQuality;
@property (nonatomic, assign) int thumbnailMaxSize;
@property (nonatomic, assign) int thumbnailMinSize;
@property (nonatomic, assign) int sightCompressWidth;
@property (nonatomic, assign) int sightCompressHeight;
/**
位置消息预览图压缩比 0 ~ 100
*/
@property (nonatomic, assign) int locationThumbnailQuality;
@property (nonatomic, assign) int locationThumbnailWidth;
@property (nonatomic, assign) int locationThumbnailHeight;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,73 @@
//
// Created by RongCloud on 2/16/22.
//
#import <Foundation/Foundation.h>
#import <RongIMWrapper/RCIMIWDefines.h>
@class RCIMIWMessage;
@interface RCIMIWConversation : NSObject
/*!
会话类型
*/
@property (nonatomic, assign, readonly) RCIMIWConversationType conversationType;
/*!
会话 ID
*/
@property (nonatomic, copy, readonly) NSString *targetId;
/*!
该会话的业务标识,长度限制 20 字符
*/
@property (nonatomic, copy, readonly) NSString *channelId;
/*!
会话中的未读消息数量
*/
@property (nonatomic, assign, readonly) NSInteger unreadCount;
/*!
会话中 @ 消息的个数
@discussion 在清除会话未读数clearMessagesUnreadStatus:targetId:)的时候,会将此值置成 0。
*/
@property (nonatomic, assign, readonly) NSInteger mentionedCount;
/*!
是否置顶,默认值为 NO
@discussion
如果设置了置顶,在 IMKit 的 RCConversationListViewController 中会将此会话置顶显示。
*/
@property (nonatomic, assign, readonly) BOOL top;
/*!
会话中存在的草稿
*/
@property (nonatomic, copy, readonly) NSString *draft;
/*!
会话中最后一条消息的内容
*/
@property (nonatomic, strong, readonly) RCIMIWMessage *lastMessage;
/*!
免打扰级别
*/
@property (nonatomic, assign, readonly) RCIMIWPushNotificationLevel notificationLevel;
/*!
会话中第一条未读消息时间戳Unix时间戳、毫秒
仅支持 超级群会话
@Since 5.2.5
*/
@property (nonatomic, assign, readonly) long long firstUnreadMsgSendTime;
/// 对应原生会话对象的 sentTime
@property (nonatomic, assign, readonly) long long operationTime;
@end

View File

@@ -0,0 +1,27 @@
//
// RCIMIWConversationTagInfo.h
// RongIMWrapper
//
// Created by RongCloud on 3/10/22.
//
#import <Foundation/Foundation.h>
@class RCIMIWTagInfo;
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWConversationTagInfo : NSObject
/*!
标签 ID
*/
@property (nonatomic, strong) RCIMIWTagInfo *tagInfo;
/*!
会话是否置顶
*/
@property (nonatomic, assign) BOOL top;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,26 @@
//
// RCIMIWCustomMessage.h
// RongIMWrapper
//
// Created by RongCloud on 3/9/22.
//
#import <RongIMWrapper/RCIMIWMessage.h>
#import <RongIMWrapper/RCIMIWDefines.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWCustomMessage : RCIMIWMessage
@property (nonatomic, copy, readonly) NSString *identifier;
@property (nonatomic, assign, readonly) RCIMIWCustomMessagePolicy policy;
/*!
消息字段
*/
@property (nonatomic, strong, readonly) NSDictionary<NSString*, NSString*> *fields;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,592 @@
//
// RCIMIWDefines.h
// RongIMWrapper
//
// Created by RongCloud on 2/24/22.
//
#ifndef RCIMIWDefines_h
#define RCIMIWDefines_h
#pragma mark 错误码
typedef NS_ENUM(NSInteger, RCIMIWErrorCode) {
RCIMIWErrorCodeSuccess = 0,
RCIMIWErrorCodeParamError = -101,
RCIMIWErrorCodeEngineDestroyed = -102,
RCIMIWErrorCodeNativeOperationError = -103,
RCIMIWErrorCodeResultUnknown = -104,
};
#pragma mark 连接状态
typedef NS_ENUM(NSInteger, RCIMIWConnectionStatus) {
/*!
连接过程中,当前设备网络不可用
@discussion 当网络恢复可用时SDK 会做好自动重连,开发者无须处理。
*/
RCIMIWConnectionStatusNetworkUnavailable = 0,
/*!
连接成功
*/
RCIMIWConnectionStatusConnected = 1,
/*!
连接中
*/
RCIMIWConnectionStatusConnecting = 2,
/*!
连接失败或未连接
*/
RCIMIWConnectionStatusUnconnected = 3,
/*!
当前用户在其他设备上登录,此设备被踢下线
*/
RCIMIWConnectionStatusKickedOfflineByOtherClient = 4,
/*!
Token无效
@discussion
Token 无效一般有两种原因。一是 token 错误,请您检查客户端初始化使用的 AppKey 和您服务器获取 token 使用的 AppKey
是否一致;二是 token 过期,是因为您在开发者后台设置了 token 过期时间,您需要请求您的服务器重新获取 token
并再次用新的 token 建立连接。
*/
RCIMIWConnectionStatusTokenIncorrect = 5,
/*!
与服务器的连接已断开,用户被封禁
*/
RCIMIWConnectionStatusConnUserBlocked = 6,
/*!
已登出
*/
RCIMIWConnectionStatusSignOut = 7,
/*!
连接暂时挂起多是由于网络问题导致SDK 会在合适时机进行自动重连
*/
RCIMIWConnectionStatusSuspend = 8,
/*!
自动连接超时SDK 将不会继续连接,用户需要做超时处理,再自行调用 connectWithToken 接口进行连接
*/
RCIMIWConnectionStatusTimeout = 9,
/*!
未知状态
@discussion 建立连接中出现异常的临时状态SDK 会做好自动重连,开发者无须处理。
*/
RCIMIWConnectionStatusUnknown = 10,
};
#pragma mark 会话类型
typedef NS_ENUM(NSInteger, RCIMIWConversationType) {
/*!
无效类型
*/
RCIMIWConversationTypeInvalid = 0,
/*!
单聊
*/
RCIMIWConversationTypePrivate = 1,
/*!
群组
*/
RCIMIWConversationTypeGroup = 2,
/*!
聊天室
*/
RCIMIWConversationTypeChatroom = 3,
/*!
系统会话
*/
RCIMIWConversationTypeSystem = 4,
/*!
超级群
*/
RCIMIWConversationTypeUltraGroup = 5,
};
#pragma mark 消息类型
typedef NS_ENUM(NSInteger, RCIMIWMessageType) {
/*!
未知消息
*/
RCIMIWMessageTypeUnknown = 0,
/*!
自定义
*/
RCIMIWMessageTypeCustom = 1,
/*!
文本
*/
RCIMIWMessageTypeText = 2,
/*!
语音
*/
RCIMIWMessageTypeVoice = 3,
/*!
图片
*/
RCIMIWMessageTypeImage = 4,
/*!
其他文件
*/
RCIMIWMessageTypeFile = 5,
/*!
小视频
*/
RCIMIWMessageTypeSight = 6,
/*!
动图
*/
RCIMIWMessageTypeGIF = 7,
/*!
撤回
*/
RCIMIWMessageTypeRecall = 8,
/*!
引用消息
*/
RCIMIWMessageTypeReference = 9,
/*!
命令消息
*/
RCIMIWMessageTypeCommand = 10,
/*!
命令通知消息
*/
RCIMIWMessageTypeCommandNotification = 11,
/*!
位置消息
*/
RCIMIWMessageTypeLocation = 12,
/*!
用户自定义消息
*/
RCIMIWMessageTypeUserCustom = 13,
/*!
原生自定义普通消息
*/
RCIMIWMessageTypeNativeCustom = 14,
/*!
原生自定义媒体消息
*/
RCIMIWMessageTypeNativeCustomMedia = 15,
};
#pragma mark 自定义消息的类别
typedef NS_ENUM(NSUInteger, RCIMIWCustomMessagePolicy) {
RCIMIWCustomMessagePolicyCommand = 0,
RCIMIWCustomMessagePolicyNormal,
RCIMIWCustomMessagePolicyStatus,
RCIMIWCustomMessagePolicyStorage,
};
typedef NS_ENUM(NSUInteger, RCIMIWNativeCustomMessagePersistentFlag) {
RCIMIWNativeCustomMessagePersistentNone,
/// 在本地只存储,但不计入未读数
RCIMIWNativeCustomMessagePersistentPersisted,
/// 在本地进行存储并计入未读数
RCIMIWNativeCustomMessagePersistentCounted,
/// 在本地不存储,不计入未读数,并且如果对方不在线,服务器会直接丢弃该消息,对方如果之后再上线也不会再收到此消息。
/// 一般用于发送输入状态之类的消息。
RCIMIWNativeCustomMessagePersistentStatus,
};
#pragma mark 消息的方向
typedef NS_ENUM(NSUInteger, RCIMIWMessageDirection) {
/*!
* 发送
*/
RCIMIWMessageDirectionSend = 0,
/*!
* 接收
*/
RCIMIWMessageDirectionReceive = 1,
};
/*!
* 消息的发送状态
*/
typedef NS_ENUM(NSUInteger, RCIMIWSentStatus) {
/*!
* 发送中
*/
RCIMIWSentStatusSending = 0,
/*!
* 发送失败
*/
RCIMIWSentStatusFailed = 1,
/*!
* \~chinese
已发送成功
*/
RCIMIWSentStatusSent = 2,
/*!
* \~chinese
对方已接收
*/
RCIMIWSentStatusReceived = 3,
/*!
* \~chinese
对方已阅读
*/
RCIMIWSentStatusRead = 4,
/*!
* \~chinese
对方已销毁
*/
RCIMIWSentStatusDestroyed = 5,
/*!
* \~chinese
发送已取消
*/
RCIMIWSentStatusCanceled = 6,
};
#pragma mark 消息的接收状态
typedef NS_ENUM(NSUInteger, RCIMIWReceivedStatus) {
/*!
* \~chinese
未读
*/
RCIMIWReceivedStatusUnread = 0,
/*!
* \~chinese
已读
*/
RCIMIWReceivedStatusRead = 1,
/*!
* \~chinese
已听
@discussion 仅用于语音消息
*/
RCIMIWReceivedStatusListened = 2,
/*!
* \~chinese
已下载
*/
RCIMIWReceivedStatusDownloaded = 3,
/*!
* \~chinese
该消息已经被其他登录的多端收取过。(即该消息已经被其他端收取过后。当前端才登录,并重新拉取了这条消息。客户可以通过这个状态更新
UI比如不再提示
*/
RCIMIWReceivedStatusRetrieved = 4,
/*!
* 该消息是被多端同时收取的。(即其他端正同时登录,一条消息被同时发往多端。客户可以通过这个状态值更新自己的某些 UI
* 状态)。
*/
RCIMIWReceivedStatusMultipleReceive = 5,
};
#pragma mark @消息的类型
typedef NS_ENUM(NSUInteger, RCIMIWMentionedType) {
/*!
@ 所有人
*/
RCIMIWMentionedTypeAll = 0,
/*!
@ 部分人
*/
RCIMIWMentionedTypePart = 1,
};
#pragma mark 时间顺序
typedef NS_ENUM(NSUInteger, RCIMIWTimeOrder) {
/*
以前的时间
*/
RCIMIWTimeOrderBefore = 0,
/*
以后的时间
*/
RCIMIWTimeOrderAfter = 1,
};
#pragma mark 加载消息策略
typedef NS_ENUM(NSUInteger, RCIMIWMessageOperationPolicy) {
RCIMIWMessageOperationPolicyLocal = 0,
RCIMIWMessageOperationPolicyRemote = 1,
RCIMIWMessageOperationPolicyLocalRemote = 2,
};
#pragma mark 聊天室状态
typedef NS_ENUM(NSUInteger, RCIMIWChatRoomStatus) {
RCIMIWChatRoomStatusReset = 0,
RCIMIWChatRoomStatusDestroyManual = 1,
RCIMIWChatRoomStatusDestroyAuto = 2,
};
#pragma mark 聊天室成员加入或者退出
typedef NS_ENUM(NSInteger, RCIMIWChatRoomMemberActionType) {
RCIMIWChatRoomMemberActionTypeUnknown = 0,
/*!
聊天室成员加入
*/
RCIMIWChatRoomMemberActionTypeJoin = 1,
/*!
聊天室成员退出
*/
RCIMIWChatRoomMemberActionTypeLeave = 2,
};
typedef NS_ENUM(NSInteger, RCIMIWBlacklistStatus) {
RCIMIWBlacklistStatusUnknown = 0,
RCIMIWBlacklistStatusInBlacklist = 1,
RCIMIWBlacklistStatusNotInBlacklist = 2,
};
#pragma mark 消息被拦截类型
typedef NS_ENUM(NSUInteger, RCIMIWMessageBlockType) {
RCIMIWMessageBlockTypeUnknown = 0,
/*!
全局敏感词:命中了融云内置的全局敏感词
*/
RCIMIWMessageBlockTypeGlobal,
/*!
自定义敏感词拦截:命中了客户在融云自定义的敏感词
*/
RCIMIWMessageBlockTypeCustom,
/*!
第三方审核拦截:命中了第三方(数美)或模板路由决定不下发的状态
*/
RCIMIWMessageBlockTypeThirdParty,
};
#pragma mark 通知状态
typedef NS_ENUM(NSInteger, RCIMIWNotificationStatus) {
RCIMIWNotificationStatusUnknown = 0,
RCIMIWNotificationStatusMute = 1,
RCIMIWNotificationStatusUnmute = 2,
};
typedef NS_ENUM(NSUInteger, RCIMIWUltraGroupTypingStatus) {
/*!
正在输入文本
*/
RCIMIWUltraGroupTypingStatusText = 0,
};
/**
VIVO 推送通道类options.typeVivo型
*/
typedef NS_ENUM(NSUInteger, RCIMIWVIVOPushType) {
/**
运营消息
*/
RCIMIWVIVOPushTypeOperate,
/**
系统消息
*/
RCIMIWVIVOPushTypeSystem,
};
#pragma mark 日志级别
/*!
日志级别
*/
typedef NS_ENUM(NSUInteger, RCIMIWLogLevel) {
/*!
* 不输出任何日志
*/
RCIMIWLogLevelNone = 0,
/*!
* 只输出错误的日志
*/
RCIMIWLogLevelError = 1,
/*!
* 输出错误和警告的日志
*/
RCIMIWLogLevelWarn = 2,
/*!
* 输出错误、警告和一般的日志
*/
RCIMIWLogLevelInfo = 3,
/*!
* 输出输出错误、警告和一般的日志以及 debug 日志
*/
RCIMIWLogLevelDebug = 4,
/*!
* 输出所有日志
*/
RCIMIWLogLevelVerbose = 5,
};
#pragma mark 消息免打扰级别
/*!
消息免打扰级别
*/
typedef NS_ENUM(NSInteger, RCIMIWPushNotificationQuietHoursLevel) {
/*!
未设置向上查询群或者APP级别设置
*/
RCIMIWPushNotificationQuietHoursLevelNone = 0,
/*!
群聊超级群仅@消息通知,单聊代表消息不通知
*/
RCIMIWPushNotificationQuietHoursLevelMention = 1,
/*!
消息通知被屏蔽,即不接收消息通知
*/
RCIMIWPushNotificationQuietHoursLevelBlocked = 5,
};
#pragma mark 消息通知级别
/*!
消息通知级别
*/
typedef NS_ENUM(NSInteger, RCIMIWPushNotificationLevel) {
/*!
全部消息通知(接收全部消息通知 -- 显示指定关闭免打扰功能)
*/
RCIMIWPushNotificationLevelAllMessage = -1,
/*!
未设置向上查询群或者APP级别设置,存量数据中0表示未设置
*/
RCIMIWPushNotificationLevelNone = 0,
/*!
群聊,超级群 @所有人 或者 @成员列表有自己 时通知;单聊代表消息不通知
*/
RCIMIWPushNotificationLevelMention = 1,
/*!
群聊,超级群 @成员列表有自己时通知,@所有人不通知;单聊代表消息不通知
*/
RCIMIWPushNotificationLevelMentionUsers = 2,
/*!
群聊,超级群 @所有人通知,其他情况都不通知;单聊代表消息不通知
*/
RCIMIWPushNotificationLevelMentionAll = 4,
/*!
消息通知被屏蔽,即不接收消息通知
*/
RCIMIWPushNotificationLevelBlocked = 5,
};
typedef NS_ENUM(NSUInteger, RCIMIWChatRoomEntriesOperationType) {
RCIMIWChatRoomEntriesOperationTypeUpdate = 0,
RCIMIWChatRoomEntriesOperationTypeRemove = 1,
};
/**
华为推送消息级别
*/
typedef NS_ENUM(NSUInteger, RCIMIWImportanceHW) {
/*!
华为推送消息级别 NORMAL表示消息为服务与通讯类。消息提醒方式为锁屏+铃声+震动。
*/
RCIMIWImportanceHWNormal = 0,
/*!
华为推送消息级别 LOW, 表示消息为资讯营销类。消息提醒方式为静默通知,仅在下拉通知栏展示。
*/
RCIMIWImportanceHWLow = 1,
};
/**
荣耀推送消息级别
*/
typedef NS_ENUM(NSUInteger, RCIMIWImportanceHonor) {
/*!
华为推送消息级别 NORMAL表示消息为服务与通讯类。消息提醒方式为锁屏+铃声+震动。
*/
RCIMIWImportanceHonorNormal = 0,
/*!
华为推送消息级别 LOW, 表示消息为资讯营销类。消息提醒方式为静默通知,仅在下拉通知栏展示。
*/
RCIMIWImportanceHonorLow = 1,
};
typedef NS_ENUM(NSUInteger, RCIMIWAreaCode) {
/// 默认值,北京数据中心
RCIMIWAreaCodeBJ = 1,
/// 新加坡数据中心
RCIMIWAreaCodeSG = 2,
/// 北美数据中心
RCIMIWAreaCodeNA = 3,
/// 新增的新加坡数据中心
RCIMIWAreaCodeSGB = 4,
/// 沙特数据中心
RCIMIWAreaCodeSA = 5,
};
#endif /* RCIMIWDefines_h */

View File

@@ -0,0 +1,664 @@
//
// RCIMIWEngineDelegate.h
// RongIMWrapper
//
// Created by RongCloud on 2/15/22.
//
#import <Foundation/Foundation.h>
#import <RongIMWrapper/RCIMIWConversation.h>
#import <RongIMWrapper/RCIMIWChatRoomMemberAction.h>
#import <RongIMWrapper/RCIMIWDefines.h>
@class RCIMIWMessage;
@class RCIMIWMediaMessage;
@class RCIMIWConversation;
@class RCIMIWTypingStatus;
@class RCIMIWTagInfo;
@class RCIMIWConversationTagInfo;
@class RCIMIWBlockedMessageInfo;
@class RCIMIWUltraGroupTypingStatusInfo;
@class RCIMIWSearchConversationResult;
#ifndef RCIMIWEngineDelegate_h
#define RCIMIWEngineDelegate_h
NS_ASSUME_NONNULL_BEGIN
@protocol RCIMIWEngineDelegate <NSObject>
@optional
#pragma mark - 事件监听
/*!
连接状态监听
*/
- (void)onConnectionStatusChanged:(RCIMIWConnectionStatus)status;
/*!
接收消息的回调方法
@param message 当前接收到的消息
@param left 还剩余的未接收的消息数left>=0
@param offline 是否是离线消息
@param hasPackage SDK 拉取服务器的消息以包(package)的形式批量拉取,有 package 存在就意味着远端服务器还有消息尚未被 SDK
拉取
@discussion 和上面的 - (void)onReceived:(RCMessage *)message left:(int)nLeft object:(id)object 功能完全一致,额外把
offline 和 hasPackage 参数暴露,开发者可以根据 nLeft、offline、hasPackage 来决定何时的时机刷新 UI ;建议当 hasPackage=0
并且 nLeft=0 时刷新 UI
@warning 如果使用此方法,那么就不能再使用 RCIM 中 - (void)onReceived:(RCMessage *)message left:(int)nLeft
object:(id)object 的使用,否则会出现重复操作的情形
*/
- (void)onMessageReceived:(RCIMIWMessage *)message
left:(NSInteger)left
offline:(BOOL)offline
hasPackage:(BOOL)hasPackage;
#pragma mark - 接口调用回调
- (void)onConnected:(NSInteger)code userId:(nullable NSString *)userId;
- (void)onDatabaseOpened:(NSInteger)code;
// 消息插入本地数据库
- (void)onMessageAttached:(RCIMIWMessage *)message;
- (void)onMediaMessageAttached:(RCIMIWMediaMessage *)message;
- (void)onMessageSent:(NSInteger)code message:(nullable RCIMIWMessage *)message;
- (void)onMediaMessageSent:(NSInteger)code message:(RCIMIWMediaMessage *)message;
- (void)onMediaMessageSending:(RCIMIWMediaMessage*)message progress:(int)progress;
- (void)onSendingMediaMessageCanceled:(NSInteger)code message:(RCIMIWMediaMessage *)message;
- (void)onMediaMessageDownloading:(RCIMIWMediaMessage *)message progress:(int)progress;
- (void)onMediaMessageDownloaded:(NSInteger)code message:(RCIMIWMediaMessage *)message;
- (void)onDownloadingMediaMessageCanceled:(NSInteger)code message:(RCIMIWMediaMessage *)message;
- (void)onGroupMessageToDesignatedUsersAttached:(RCIMIWMessage *)message;
- (void)onGroupMessageToDesignatedUsersSent:(NSInteger)code message:(RCIMIWMessage *)message;
#pragma mark - 获取历史消息
- (void)onMessagesLoaded:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
sentTime:(long long)sentTime
order:(RCIMIWTimeOrder)order
messages:(nullable NSArray<RCIMIWMessage *> *)messages;
- (void)onUnreadMentionedMessagesLoaded:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
messages:(NSArray<RCIMIWMessage *> *)messages;
- (void)onFirstUnreadMessageLoaded:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
message:(RCIMIWMessage *)message;
#pragma mark - 插入消息
- (void)onMessageInserted:(NSInteger)code message:(RCIMIWMessage *)message;
/*!
批量插入消息
*/
- (void)onMessagesInserted:(NSInteger)code messages:(NSArray<RCIMIWMessage *> *)messages;
#pragma mark - 删除消息
- (void)onMessagesCleared:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
timestamp:(long long)recordTime;
- (void)onLocalMessagesDeleted:(NSInteger)code messages:(NSArray<RCIMIWMessage *> *)messages;
- (void)onMessagesDeleted:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
messages:(NSArray<RCIMIWMessage *> *)messages;
#pragma mark - 撤回消息
/*!
本端调用撤回消息的回调
*/
- (void)onMessageRecalled:(NSInteger)code message:(RCIMIWMessage *)message;
/*!
远端撤回消息
*/
- (void)onRemoteMessageRecalled:(RCIMIWMessage *)message;
- (void)onPrivateReadReceiptMessageSent:(NSInteger)code
targetId:(NSString *)targetId
channelId:(NSString *)channelId
timestamp:(long long)timestamp;
- (void)onMessageExpansionUpdated:(NSInteger)code
messageUId:(NSString *)messageUId
expansion:(NSDictionary<NSString *, NSString *> *)expansion;
- (void)onMessageExpansionForKeysRemoved:(NSInteger)code
messageUId:(NSString *)messageUId
keys:(NSArray<NSString *> *)keys;
/**
远端更改消息扩展信息的回调
@param expansion 消息扩展信息中更新的键值对
@param message 消息
@discussion expansionDic 只包含更新的键值对,不是全部的数据。如果想获取全部的键值对,请使用 message 的 expansion 属性。
*/
- (void)onRemoteMessageExpansionUpdated:(NSDictionary<NSString *,NSString *> *)expansion message:(RCIMIWMessage *)message;
/**
远端删除消息扩展信息的回调
*/
- (void)onRemoteMessageExpansionForKeyRemoved:(RCIMIWMessage *)message keys:(NSArray<NSString *> *)keys;
- (void)onMessageReceiveStatusChanged:(NSInteger)code messageId:(long)messageId;
- (void)onMessageSentStatusChanged:(NSInteger)code messageId:(long)messageId;
- (void)onMessageBlocked:(RCIMIWBlockedMessageInfo *)info;
#pragma mark - Conversation
- (void)onConversationLoaded:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
conversation:(nullable RCIMIWConversation *)conversation;
- (void)onConversationsLoaded:(NSInteger)code
conversationTypes:(NSArray<NSNumber *> *)conversationTypes
channelId:(NSString *)channelId
startTime:(long long)startTime
count:(int)count
conversations:(nullable NSArray<RCIMIWConversation *> *)conversations;
- (void)onConversationRemoved:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId;
- (void)onConversationsRemoved:(NSInteger)code
conversationTypes:(NSArray<NSNumber *> *)conversationTypes
channelId:(NSString *)channelId;
- (void)onMessageCountLoaded:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
count:(int)count;
- (void)onTotalUnreadCountLoaded:(NSInteger)code channelId:(NSString *)channelId count:(NSInteger)count;
- (void)onUnreadCountLoaded:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
count:(NSInteger)count;
- (void)onUnreadCountByConversationTypesLoaded:(NSInteger)code
conversationTypes:(NSArray<NSNumber *> *)conversationTypes
channelId:(NSString *)channelId
contain:(BOOL)contain
count:(NSInteger)count;
- (void)onUnreadMentionedCountLoaded:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
count:(NSInteger)count;
- (void)onUnreadCountCleared:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
timestamp:(long long)timestamp;
#pragma mark - 会话草稿
- (void)onDraftMessageSaved:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
draft:(NSString *)draft;
- (void)onDraftMessageLoaded:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
draft:(NSString *)draft;
- (void)onDraftMessageCleared:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId;
#pragma mark - 会话免打扰
- (void)onConversationNotificationLevelChanged:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
level:(RCIMIWPushNotificationLevel)level;
- (void)onConversationNotificationLevelLoaded:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
level:(RCIMIWPushNotificationLevel)level;
- (void)onBlockedConversationsLoaded:(NSInteger)code
conversationTypes:(NSArray<NSNumber *> *)conversationTypes
channelId:(NSString *)channelId
conversations:(nullable NSArray<RCIMIWConversation *> *)conversations;
- (void)onConversationNotificationLevelSynced:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
level:(RCIMIWPushNotificationLevel)level;
- (void)onConversationTypeNotificationLevelChanged:(NSInteger)code
type:(RCIMIWConversationType)type
level:(RCIMIWPushNotificationLevel)level;
- (void)onConversationTypeNotificationLevelLoaded:(NSInteger)code
type:(RCIMIWConversationType)type
level:(RCIMIWPushNotificationLevel)level;
#pragma mark - 会话置顶
- (void)onConversationTopStatusChanged:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
top:(BOOL)top;
- (void)onConversationTopStatusLoaded:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
top:(BOOL)top;
- (void)onTopConversationsLoaded:(NSInteger)code
conversationTypes:(NSArray<NSNumber *> *)conversationTypes
channelId:(NSString *)channelId
conversations:(nullable NSArray<RCIMIWConversation *> *)conversations;
- (void)onConversationTopStatusSynced:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
top:(BOOL)top;
#pragma mark - 多端状态同步
- (void)onConversationReadStatusSynced:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
timestamp:(long long)timestamp;
#pragma mark - 单聊回执
- (void)onPrivateReadReceiptReceived:(NSString *)targetId
channelId:(NSString *)channelId
timestamp:(long long)timestamp;
/**
* 收到自己登录的其他端消息同步阅读状态
* @param type 会话类型
* @param targetId 目标 ID
* 消息时间戳,表示小于或等于此时间戳之前的消息为已读
*/
- (void)onConversationReadStatusSyncMessageReceived:(RCIMIWConversationType)type
targetId:(NSString *)targetId
timestamp:(long long)timestamp;
#pragma mark - 群聊回执
/*!
发起回执请求
*/
- (void)onGroupReadReceiptRequestSent:(NSInteger)code message:(RCIMIWMessage *)message;
/*!
发起回执响应
*/
- (void)onGroupReadReceiptResponseSent:(NSInteger)code
targetId:(NSString *)targetId
channelId:(NSString *)channelId
messages:(NSArray <RCIMIWMessage *> *)messages;
/*!
群聊消息回执请求监听
*/
- (void)onGroupMessageReadReceiptRequestReceived:(NSString *)targetId messageUId:(NSString *)messageUId;
/*!
群聊消息回执响应监听
*/
- (void)onGroupMessageReadReceiptResponseReceived:(NSString *)targetId messageUId:(NSString *)messageUId respondUserIds:(NSDictionary<NSString *, NSNumber *> *)respondUserIds;
#pragma mark - 输入状态
- (void)onTypingStatusChanged:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
userTypingStatus:(NSArray<RCIMIWTypingStatus *> *)userTypingStatus;
#pragma mark - 聊天室
- (void)onChatRoomJoining:(NSString *)targetId;
- (void)onChatRoomJoined:(NSInteger)code targetId:(NSString *)targetId;
- (void)onChatRoomLeft:(NSInteger)code targetId:(NSString *)targetId;
- (void)onChatRoomStatusChanged:(NSString *)targetId status:(RCIMIWChatRoomStatus)status;
- (void)onChatRoomMemberChanged:(NSString *)targetId actions:(NSArray<RCIMIWChatRoomMemberAction *> *)actions;
- (void)onChatRoomMessagesLoaded:(NSInteger)code
targetId:(NSString *)targetId
messages:(NSArray<RCIMIWMessage *> *)messages
syncTime:(long long)syncTime;
- (void)onChatRoomEntryAdded:(NSInteger)code targetId:(NSString *)targetId key:(NSString *)key;
- (void)onChatRoomEntriesAdded:(NSInteger)code
targetId:(NSString *)targetId
entries:(NSDictionary<NSString *, NSString *> *)entries
errorEntries:(NSDictionary<NSString *, NSNumber *> *)errorEntries;
- (void)onChatRoomEntryLoaded:(NSInteger)code targetId:(NSString *)targetId entry:(NSDictionary<NSString *, NSString *> *)entry;
- (void)onChatRoomAllEntriesLoaded:(NSInteger)code
targetId:(NSString *)targetId
entries:(NSDictionary<NSString *, NSString*> *)entries;
- (void)onChatRoomEntryRemoved:(NSInteger)code targetId:(NSString *)targetId key:(NSString *)key;
- (void)onChatRoomEntriesRemoved:(NSInteger)code targetId:(NSString *)targetId keys:(NSArray<NSString *> *)keys;
// kv 同步完成
- (void)onChatRoomEntriesSynced:(NSString *)roomId;
// kv 改变回调,包含更新和删除
- (void)onChatRoomEntriesChanged:(RCIMIWChatRoomEntriesOperationType)operationType
roomId:(NSString *)roomId
entries:(NSDictionary<NSString *, NSString*> *)entries;
#pragma mark - 用户管理
- (void)onBlacklistAdded:(NSInteger)code userId:(NSString *)userId;
- (void)onBlacklistRemoved:(NSInteger)code userId:(NSString *)userId;
- (void)onBlacklistLoaded:(NSInteger)code userIds:(NSArray<NSString *> *)userIds;
- (void)onBlacklistStatusLoaded:(NSInteger)code userId:(NSString *)userId status:(RCIMIWBlacklistStatus)status;
#pragma mark - 搜索消息
- (void)onMessagesSearched:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
keyword:(NSString *)keyword
startTime:(long long)startTime
count:(int)count
messages:(NSArray<RCIMIWMessage *> *)messages;
- (void)onMessagesSearchedByTimeRange:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
keyword:(NSString *)keyword
startTime:(long long)startTime
endTime:(long long)endTime
offset:(int)offset
count:(int)count
messages:(NSArray<RCIMIWMessage *> *)messages;
- (void)onMessagesSearchedByUserId:(NSInteger)code
userId:(NSString *)userId
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
startTime:(long long)startTime
count:(int)count
messages:(NSArray<RCIMIWMessage *> *)messages;
- (void)onConversationsSearched:(NSInteger)code
conversationTypes:(NSArray<NSNumber *> *)conversationTypes
channelId:(NSString *)channelId
messageTypes:(NSArray <NSNumber *>*)messageTypes
keyword:(NSString *)keyword
conversations:(NSArray<RCIMIWSearchConversationResult *> *)conversations;
#pragma mark - 会话标签
- (void)onTagCreated:(NSInteger)code tagId:(NSString *)tagId tagName:(NSString *)tagName;
- (void)onTagRemoved:(NSInteger)code tagId:(NSString *)tagId;
- (void)onTagNameUpdatedByName:(NSInteger)code tagId:(NSString *)tagId newName:(NSString *)newName;
- (void)onTagsLoaded:(NSInteger)code tags:(NSArray<RCIMIWTagInfo *> *)tags;
- (void)onConversationsAddedToTag:(NSInteger)code
tagId:(NSString *)tagId
conversationType:(RCIMIWConversationType)type
targetId:(NSString *)targetId;
- (void)onConversationsRemovedFromTag:(NSInteger)code
tagId:(NSString *)tagId
conversationType: (RCIMIWConversationType)type
targetId:(NSString *)targetId;
- (void)onTagsRemovedFromConversation:(NSInteger)code
conversationType:(RCIMIWConversationType)type
targetId:(NSString *)targetId
tagIds:(NSArray<NSString *> *)tagIds;
- (void)onTagsLoadedFromConversation:(NSInteger)code
tags:(NSArray<RCIMIWConversationTagInfo *> *)tags
conversationType:(RCIMIWConversationType)type
targetId:(NSString *)targetId;
- (void)onConversationsLoadedFromTagByPage:(NSInteger)code
tagId:(NSString *)tagId
timestamp:(long long)timestamp
count:(int)count;
- (void)onUnreadCountLoadedByTag:(NSInteger)code
count:(NSInteger)count
tagId:(NSString *)tagId
containBlocked:(BOOL)containBlocked;
- (void)onConversationTopStatusChangedInTag:(NSInteger)code
tagId:(NSString *)tagId
conversationType:(RCIMIWConversationType)type
targetId:(NSString *)targetId
top:(BOOL)top;
- (void)onConversationTopStatusLoadedInTag:(NSInteger)code
tagId:(NSString *)tagId
conversationType:(RCIMIWConversationType)type
targetId:(NSString *)targetId
top:(BOOL)top;
- (void)onMessagesUnreadStatusClearedByTag:(NSInteger)code
tagId:(NSString *)tagId;
- (void)onConversationClearedByTag:(NSInteger)code
tagId:(NSString *)tagId
deleteMessage:(BOOL)deleteMessage;
#pragma mark - 全局免打扰
- (void)onNotificationQuietHoursChanged:(NSInteger)code
startTime:(NSString *)startTime
spanMinutes:(int)spanMinutes
level:(RCIMIWPushNotificationQuietHoursLevel)level;
- (void)onNotificationQuietHoursRemoved:(NSInteger)code;
- (void)onNotificationQuietHoursLoaded:(NSInteger)code
startTime:(NSString *)startTime
spanMinutes:(int)spanMinutes
level:(RCIMIWPushNotificationQuietHoursLevel)level;
- (void)onPushContentShowStatusChanged:(NSInteger)code showContent:(BOOL)showContent;
- (void)onPushLanguageChanged:(NSInteger)code language:(NSString *)language;
- (void)onPushReceiveStatusChanged:(NSInteger)code receive:(BOOL)receive;
#pragma mark - 超级群
- (void)onUltraGroupConversationsSynced;
- (void)onUltraGroupReadStatusSynced:(NSInteger)code
targetId:(NSString *)targetId
channelId:(NSString *)channelId
timestamp:(long long)timestamp;
- (void)onConversationsLoadedForAllChannel:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
conversations:(NSArray<RCIMIWConversation *> *)conversations;
- (void)onUltraGroupMessageModified:(NSInteger)code messageUId:(NSString *)messageUId;
- (void)onUltraGroupMessageRecalled:(NSInteger)code message:(RCIMIWMessage *)message deleteRemote:(BOOL)deleteRemote;
- (void)onUltraGroupMessagesCleared:(NSInteger)code
targetId:(NSString *)targetId
channelId:(NSString *)channelId
timestamp:(long long)timestamp
policy:(RCIMIWMessageOperationPolicy)policy;
- (void)onUltraGroupMessagesClearedForAllChannel:(NSInteger)code
targetId:(NSString *)targetId
timestamp:(long long)timestamp;
- (void)onUltraGroupTypingStatusSent:(NSInteger)code
targetId:(NSString *)targetId
channelId:(NSString *)channelId
typingStatus:(RCIMIWUltraGroupTypingStatus)typingStatus;
- (void)onBatchRemoteUltraGroupMessagesLoaded:(NSInteger)code
matchedMessages:(NSArray<RCIMIWMessage *> *)matchedMessages
notMatchedMessages:(NSArray<RCIMIWMessage *> *)notMatchMessages;
- (void)onUltraGroupMessageExpansionUpdated:(NSInteger)code
expansion:(NSDictionary<NSString *, NSString *> *)expansion
messageUId:(NSString *)messageUId;
- (void)onUltraGroupMessageExpansionForKeysRemoved:(NSInteger)code
messageUId:(NSString *)messageUId
keys:(NSArray<NSString *> *)keys;
/**
超级群已读时间同步
@param targetId 会话 ID
@param channelId 频道 ID
@param timestamp 已读时间
*/
- (void)onUltraGroupReadTimeReceived:(NSString *)targetId channelId:(NSString *)channelId timestamp:(long long)timestamp;
/**
超级群远端更新消息扩展的回调
*/
- (void)onRemoteUltraGroupMessageExpansionUpdated:(NSArray<RCIMIWMessage *> *)messages;
/**
超级群远端修改消息的回调
*/
- (void)onRemoteUltraGroupMessageModified:(NSArray<RCIMIWMessage *> *)messages;
- (void)onRemoteUltraGroupMessageRecalled:(NSArray<RCIMIWMessage *> *)messages;
- (void)onUltraGroupTypingStatusChanged:(NSArray<RCIMIWUltraGroupTypingStatusInfo *> *)info;
/*!
设置超级群的默认消息状态
@param targetId 会话 ID
@param level 消息通知级别
*/
- (void)onUltraGroupDefaultNotificationLevelChanged:(NSInteger)code
targetId:(NSString *)targetId
level:(RCIMIWPushNotificationLevel)level;
/*!
获取超级群的默认消息状态
@param targetId 会话 ID
*/
- (void)onUltraGroupDefaultNotificationLevelLoaded:(NSInteger)code
targetId:(NSString *)targetId
level:(RCIMIWPushNotificationLevel)level;
/*!
设置超级群频道的默认消息状态
@param targetId 会话 ID
@param channelId 频道 ID
@param level 消息通知级别
*/
- (void)onUltraGroupChannelDefaultNotificationLevelChanged:(NSInteger)code
targetId:(NSString *)targetId
channelId:(NSString *)channelId
level:(RCIMIWPushNotificationLevel)level;
/*!
获取超级群频道的默认消息状态
@param targetId 会话 ID
@param channelId 频道 ID
*/
- (void)onUltraGroupChannelDefaultNotificationLevelLoaded:(NSInteger)code
targetId:(NSString *)targetId
channelId:(NSString *)channelId
level:(RCIMIWPushNotificationLevel)level;
// 获取超级群所有会话的未读消息数
- (void)onUltraGroupAllUnreadCountLoaded:(NSInteger)code count:(NSInteger)count;
// 获取超级群所有会话的未读 @ 消息数
- (void)onUltraGroupAllUnreadMentionedCountLoaded:(NSInteger)code count:(NSInteger)count;
// 获取超级群指定会话的未读消息数
- (void)onUltraGroupUnreadCountLoaded:(NSInteger)code
targetId:(NSString *)targetId
count:(NSInteger)count;
// 获取指定会话的未读 @ 消息数
- (void)onUltraGroupUnreadMentionedCountLoaded:(NSInteger)code
targetId:(NSString *)targetId
count:(NSInteger)count;
@end
NS_ASSUME_NONNULL_END
#endif /* RCIMIWEngineDelegate_h */

View File

@@ -0,0 +1,51 @@
//
// RCIMIWEngineOptions.h
// RongIMWrapper
//
// Created by RongCloud on 2/15/22.
//
#import <Foundation/Foundation.h>
#import "RCIMIWDefines.h"
@class RCIMIWCompressOptions;
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWEngineOptions : NSObject
/*!
导航服务器地址
*/
@property (nonatomic, copy) NSString *naviServer;
/*!
文件服务器地址
*/
@property (nonatomic, copy) NSString *fileServer;
/*!
统计服务器地址
*/
@property (nonatomic, copy) NSString *statisticServer;
/// 区域码
///
/// 默认为北京数据中心用户可以根据实际情况设置区域码设置之后SDK 将会使用特定区域的服务地址
/// 每个数据中心都会有对应的 naviServer 、statisticServer 、logServer
/// 如果开发者手动设置了本类的 naviServer 、statisticServer 、logServer 将会覆盖对应区域的配置
/// 例如:设置 areaCode 为北美数据中心,同时又设置了此处的 naviServer ,那么最终会使用此处的 naviServer 而不是北美数据中心的 naviServer
@property (nonatomic, assign) RCIMIWAreaCode areaCode;
/*!
是否踢出重连设备
*/
@property (nonatomic, assign) BOOL kickReconnectDevice;
@property (nonatomic, strong) RCIMIWCompressOptions *compressOptions;
@property (nonatomic, assign) RCIMIWLogLevel logLevel;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,32 @@
//
// RCIMIWFileMessage.h
// RongIMWrapper
//
// Created by RongCloud on 3/7/22.
//
#import <RongIMWrapper/RCIMIWMediaMessage.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWFileMessage : RCIMIWMediaMessage
/**
文件名
*/
@property (nonatomic, copy) NSString *name;
/**
文件类型
*/
@property (nonatomic, copy, readonly) NSString *fileType;
/**
文件大小
*/
@property (nonatomic, assign, readonly) long long size;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,31 @@
//
// RCIMIWGIFMessage.h
// RongIMWrapper
//
// Created by RongCloud on 3/8/22.
//
#import <RongIMWrapper/RCIMIWMediaMessage.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWGIFMessage : RCIMIWMediaMessage
/*!
GIF 图的大小,单位字节
*/
@property (nonatomic, assign, readonly) long long dataSize;
/*!
GIF 图的宽
*/
@property (nonatomic, assign, readonly) long width;
/*!
GIF 图的高
*/
@property (nonatomic, assign, readonly) long height;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,32 @@
//
// RCIMIWGroupReadReceiptInfo.h
// RongIMWrapper
//
// Created by RongCloud on 4/7/22.
// Copyright © 2022 RongCloud. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWGroupReadReceiptInfo : NSObject
/*!
是否需要回执消息
*/
@property (nonatomic, assign, readonly) BOOL readReceiptMessage;
/**
是否已经发送回执
*/
@property (nonatomic, assign, readonly) BOOL hasRespond;
/*!
发送回执的用户 ID 列表
*/
@property (nonatomic, strong, readonly) NSDictionary<NSString *, NSNumber *> *respondUserIds;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,28 @@
//
// RCIMIWImageMessage.h
// RongIMWrapper
//
// Created by RongCloud on 3/7/22.
//
#import <RongIMWrapper/RCIMIWMediaMessage.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWImageMessage : RCIMIWMediaMessage
/*!
图片消息的缩略图
*/
@property (nonatomic, copy, readonly) NSString *thumbnailBase64String;
/*!
是否发送原图
@discussion 在发送图片的时候,是否发送原图,默认值为 NO。
*/
@property (nonatomic, assign) BOOL original;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,37 @@
//
// RCIMIWLocationMessage.h
// RongIMWrapper
//
// Created by RongCloud on 8/15/22.
// Copyright © 2022 RongCloud. All rights reserved.
//
#import <RongIMWrapper/RCIMIWMessage.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWLocationMessage : RCIMIWMessage
/**
经度
*/
@property(nonatomic, assign) double longitude;
/**
纬度
*/
@property(nonatomic, assign) double latitude;
/**
兴趣点名称
*/
@property(nonatomic, copy) NSString *poiName;
/*!
地理位置的缩略图
*/
@property (nonatomic, copy) NSString *thumbnailPath;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,20 @@
//
// RCIMIWMediaMessage.h
// RongIMWrapper
//
// Created by RongCloud on 2/15/22.
//
#import <Foundation/Foundation.h>
#import <RongIMWrapper/RCIMIWMessage.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWMediaMessage : RCIMIWMessage
@property (nonatomic, copy, readonly) NSString *local;
@property (nonatomic, copy, readonly) NSString *remote;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,34 @@
//
// RCIMIWMentionedInfo.h
// RongIMWrapper
//
// Created by RongCloud on 2/18/22.
//
#import <Foundation/Foundation.h>
#import <RongIMWrapper/RCIMIWDefines.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWMentionedInfo : NSObject
/*!
@ 提醒的类型
*/
@property (nonatomic, assign) RCIMIWMentionedType type;
/*!
@ 的用户 ID 列表
@discussion 如果 type 是 @ 所有人,则可以传 nil
*/
@property (nonatomic, copy) NSArray<NSString *> *userIdList;
/*!
包含 @ 提醒的消息,本地通知和远程推送显示的内容
*/
@property (nonatomic, copy) NSString *mentionedContent;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,110 @@
//
// RCIMIWMessage.h
// RongIMWrapper
//
// Created by RongCloud on 2/15/22.
//
#import <Foundation/Foundation.h>
#import <RongIMWrapper/RCIMIWMessagePushOptions.h>
#import <RongIMWrapper/RCIMIWConversation.h>
#import <RongIMWrapper/RCIMIWMentionedInfo.h>
#import <RongIMWrapper/RCIMIWDefines.h>
@class RCIMIWUserInfo;
@class RCIMIWGroupReadReceiptInfo;
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWMessage : NSObject
/*!
* 会话类型
*/
@property (nonatomic, assign, readonly) RCIMIWConversationType conversationType;
/*!
* 消息类型
*/
@property (nonatomic, assign, readonly) RCIMIWMessageType messageType;
/*!
* 会话 ID
*/
@property (nonatomic, copy, readonly) NSString *targetId;
/*!
* 所属会话的业务标识,长度限制 20 字符
*/
@property (nonatomic, copy, readonly) NSString *channelId;
/*!
* 消息的 ID
@discussion 本地存储的消息的唯一值(数据库索引唯一值)
*/
@property (nonatomic, assign, readonly) long messageId;
@property (nonatomic, copy, readonly) NSString *messageUId;
/*!
* 是否是离线消息,只在接收消息的回调方法中有效,如果消息为离线消息,则为 YES ,其他情况均为 NO
*/
@property(nonatomic, assign, readonly) BOOL offLine;
@property(nonatomic, strong, readonly) RCIMIWGroupReadReceiptInfo *groupReadReceiptInfo;
/*!
* 消息的接收时间Unix 时间戳、毫秒)
*/
@property (nonatomic, assign) long long receivedTime;
/*!
* 消息的发送时间Unix 时间戳、毫秒)
*/
@property (nonatomic, assign) long long sentTime;
/*!
* 消息的接收状态
*/
@property (nonatomic, assign) RCIMIWReceivedStatus receivedStatus;
/*!
* 消息的发送状态
*/
@property (nonatomic, assign) RCIMIWSentStatus sentStatus;
/*!
* 消息的发送者 ID
*/
@property (nonatomic, copy) NSString *senderUserId;
/*!
* 消息的方向
*/
@property (nonatomic, assign) RCIMIWMessageDirection direction;
@property (nonatomic, strong) RCIMIWUserInfo *userInfo;
@property (nonatomic, strong) RCIMIWMentionedInfo *mentionedInfo;
@property (nonatomic, strong) RCIMIWMessagePushOptions *pushOptions;
/*!
* 消息的附加字段
*/
@property (nonatomic, copy) NSString *extra;
/*!
* 消息扩展信息列表
@discussion 扩展信息只支持单聊和群组,其它会话类型不能设置扩展信息。
* 如果消息发送后需要更新扩展信息,必须在消息发送前设置此值不为空。
@discussion 默认消息扩展字典 key 长度不超过 32 value 长度不超过 64 ,单次设置扩展数量最大为 20消息的扩展总数不能超过 300
*/
@property (nonatomic, strong) NSDictionary<NSString *, NSString *> *expansion;
//- (instancetype)init __attribute__((unavailable("请使用 RCIMIWEngine 中 createXXMessage 系列方法创建对应的 message ")));
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,225 @@
//
// RCIMIWMessagePushOptions.h
// RongIMWrapper
//
// Created by RongCloud on 2/15/22.
//
#import <Foundation/Foundation.h>
#import <RongIMWrapper/RCIMIWDefines.h>
@class RCIMIWIOSPushOptions;
@class RCIMIWAndroidPushOptions;
NS_ASSUME_NONNULL_BEGIN
#pragma mark - RCIMIWMessagePushOptions
@interface RCIMIWMessagePushOptions : NSObject
/*!
是否关闭通知
YES: 关闭通知(不发送通知)
NO: 不关闭通知(发送通知)
默认 NO
*/
@property (nonatomic, assign) BOOL disableNotification;
/*!
是否屏蔽通知标题
YES: 不显示通知标题
NO: 显示通知标题
@discussion 默认情况下融云单聊消息通知标题为用户名、群聊消息为群名称,设置后不会再显示通知标题。
@discussion 此属性只针目标用户为 iOS 平台时有效Android 第三方推送平台的通知标题为必填项,所以暂不支持。
*/
@property (nonatomic, assign) BOOL disablePushTitle;
/*!
推送标题
如果没有设置,会使用下面的默认标题显示规则
默认标题显示规则:
内置消息:单聊通知标题显示为发送者名称,群聊通知标题显示为群名称。
自定义消息:默认不显示标题。
*/
@property (nonatomic, copy) NSString *pushTitle;
/*!
推送内容
优先使用 RCIMIWMessagePushOptions 的 pushContent。如果一个接口 RCIMIWMessage 和 pushContent 同时存在,且 RCIMIWMessagePushOptions.pushContent 为有效值,会优先使用 RCIMIWMessagePushOptions.pushContent 当做最终的 pushContent例如 sendMessage 、 sendMediaMessage、recallMessage 接口。
*/
@property (nonatomic, copy) NSString *pushContent;
/*!
远程推送附加信息
优先使用 MessagePushConfig 的 pushData。如果一个接口 RCMessage 和 pushData 同时存在,且 MessagePushConfig.pushData 为有效值,会优先使用 MessagePushConfig.pushData 当做最终的 pushData例如 sendMessage 、 sendMediaMessage 接口。
*/
@property (nonatomic, copy) NSString *pushData;
/*!
是否强制显示通知详情
当目标用户通过 RCIMIWEngine 中的 changePushContentShowStatus 设置推送不显示消息详情时,可通过此参数,强制设置该条消息显示推送详情。
*/
@property (nonatomic, assign) BOOL forceShowDetailContent;
/*!
推送模板 ID设置后根据目标用户通过 SDK 的 changePushLanguage 设置的语言环境,匹配模板中设置的语言内容进行推送,未匹配成功时使用默认内容进行推送,模板内容在“开发者后台-自定义推送文案”中进行设置。
注: pushTitle 和 pushContent 优先级高于模板 IDtemplateId中对应的标题和推送内容。
*/
@property (nonatomic, copy) NSString *templateId;
@property (nonatomic, assign) BOOL voIPPush;
/*!
iOS 平台相关配置
*/
@property (nonatomic, strong) RCIMIWIOSPushOptions *iOSPushOptions;
/*!
Android 平台相关配置
*/
@property (nonatomic, strong) RCIMIWAndroidPushOptions *androidPushOptions;
@end
#pragma mark - RCIMIWIOSPushOptions
@interface RCIMIWIOSPushOptions : NSObject
/*!
iOS 平台通知栏分组 ID
相同的 thread-id 推送分为一组
iOS10 开始支持
*/
@property (nonatomic, copy) NSString *threadId;
/*!
iOS 标识推送的类型
如果不设置后台默认取消息类型字符串,如 RC:TxtMsg
*/
@property (nonatomic, copy) NSString *category;
/*!
iOS 平台通知覆盖 ID
apnsCollapseId 相同时,新收到的通知会覆盖老的通知,最大 64 字节
iOS10 开始支持
*/
@property (nonatomic, copy) NSString *apnsCollapseId;
/*!
iOS 富文本推送内容
*/
@property (nonatomic, copy) NSString *richMediaUri;
@end
#pragma mark - RCIMIWAndroidPushOptions
@interface RCIMIWAndroidPushOptions : NSObject
/*!
Android 平台 Push 唯一标识
目前支持小米、华为推送平台,默认开发者不需要进行设置,当消息产生推送时,消息的 messageUId 作为 notificationId 使用。
*/
@property (nonatomic, copy) NSString *notificationId;
/*!
小米的渠道 ID
该条消息针对小米使用的推送渠道,如开发者集成了小米推送,需要指定 channelId 时,可向 Android 端研发人员获取channelId 由开发者自行创建。
*/
@property (nonatomic, copy) NSString *channelIdMi;
/*!
华为的渠道 ID
该条消息针对华为使用的推送渠道,如开发者集成了华为推送,需要指定 channelId 时,可向 Android 端研发人员获取channelId 由开发者自行创建。
*/
@property (nonatomic, copy) NSString *channelIdHW;
/*!
华为推送消息分类
社交通讯:即时通讯[IM],音频、视频通话[VOIP]
服务提醒:订阅[SUBSCRIPTION],出行[TRAVEL],健康[HEALTH],工作事项提醒[WORK],帐号动态[ACCOUNT],订单&物流[EXPRESS],财务[FINANCE],系统提示[SYSTEM_REMINDER],邮件[MAIL]
资讯营销类:内容资讯/新闻/财经动态/生活资讯/社交动态/调研/其他[MARKETING]
营销活动:产品促销/功能推荐/运营活动/MARKETING
更多信息请参考华为消息分类标准文档: https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/message-classification-0000001149358835
@discussion 默认值为 null如果为 null则以服务配置为准
@since 5.4.0
*/
@property (nonatomic, copy) NSString *categoryHW;
/*!
OPPO 的渠道 ID
该条消息针对 OPPO 使用的推送渠道,如开发者集成了 OPPO 推送,需要指定 channelId 时,可向 Android 端研发人员获取channelId 由开发者自行创建。
*/
@property (nonatomic, copy) NSString *channelIdOPPO;
/*!
VIVO 推送通道类型
开发者集成了 VIVO 推送,需要指定推送类型时,可进行设置。
目前可选值 "0"(运营消息) 和 "1"(系统消息)
*/
@property (nonatomic, assign) RCIMIWVIVOPushType pushTypeVIVO;
/*!
FCM 通知类型推送时所使用的分组 id
*/
@property (nonatomic, copy) NSString *collapseKeyFCM;
/*!
FCM 通知类型的推送所使用的通知图片 url
*/
@property (nonatomic, copy) NSString *imageUrlFCM;
/*!
华为推送消息级别
*/
@property (nonatomic, assign) RCIMIWImportanceHW importanceHW;
/*!
华为通知栏消息右侧大图标 URL
如果不设置则不展示通知栏右侧图标。URL使用的协议必须是HTTPS协议取值样例https://example.com/image.png。
图标文件须小于 512KB图标建议规格大小40dp x 40dp弧角大小为 8dp超出建议规格大小的图标会存在图片压缩或显示不全的情况。
*/
@property (nonatomic, copy) NSString *imageUrlHW;
/*!
小米 Large icon 链接
Large icon 可以出现在大图版和多字版消息中,显示在右边。国内版仅 MIUI12 以上版本支持,以下版本均不支持;国际版支持。图片要求:大小 120 * 120px格式为 png 或者 jpg 格式。
*/
@property (nonatomic, copy) NSString *imageUrlMi;
/*!
FCM 通知的频道 ID
该应用程序必须使用此频道 ID 创建一个频道,然后才能收到带有该频道 ID 的任何通知。如果您未在请求中发送此频道 ID或者如果应用尚未创建提供的频道 ID则 FCM 使用应用清单中指定的频道 ID。
*/
@property (nonatomic, copy) NSString *channelIdFCM;
/*!
Vivo 推送消息分类
系统消息分类
即时消息[IM],账号与资产[ACCOUNT],日程待办[TODO],设备信息[DEVICE_REMINDER],订单与物流[ORDER],订阅提醒[SUBSCRIPTION]
运营消息分类
新闻[NEWS],内容推荐[CONTENT],运营活动[MARKETING],社交动态[SOCIAL]
更多信息请参考 Vivo 消息分类标准文档: https://dev.vivo.com.cn/documentCenter/doc/359
@discussion 默认值为 null如果为 null则以服务配置为准
@since 5.4.3
*/
@property (nonatomic, copy) NSString *categoryVivo;
/*!
荣耀推送消息级别
*/
@property (nonatomic, assign) RCIMIWImportanceHonor importanceHonor;
@property (nonatomic, copy) NSString *imageUrlHonor;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,26 @@
//
// RCIMIWNativeCustomMediaMessage.h
// RongIMWrapper
//
// Created by Lang on 2024/6/3.
// Copyright © 2024 RongCloud. All rights reserved.
//
#import <RongIMWrapper/RCIMIWMediaMessage.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWNativeCustomMediaMessage : RCIMIWMediaMessage
/// 自定义消息的内容
@property (nonatomic, copy) NSDictionary<NSString *, NSString *> *fields;
/// 消息搜索关键字
@property (nonatomic, copy) NSArray<NSString *> *searchableWords;
/// 消息类型名
@property (nonatomic, copy, readonly) NSString *messageIdentifier;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,26 @@
//
// RCIMIWNativeCustomMessage.h
// RongIMWrapper
//
// Created by Lang on 2024/5/30.
// Copyright © 2024 RongCloud. All rights reserved.
//
#import <RongIMWrapper/RCIMIWMessage.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWNativeCustomMessage : RCIMIWMessage
/// 自定义消息的 json 内容
@property (nonatomic, copy) NSDictionary<NSString *, NSString *> *fields;
/// 消息搜索关键字
@property (nonatomic, copy) NSArray<NSString *> *searchableWords;
/// 消息类型名
@property (nonatomic, copy, readonly) NSString *messageIdentifier;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,99 @@
//
// RCIMIWPlatformConverter.h
// RongIMWrapper
//
// Created by zhangyifan on 2022/5/10.
// Copyright © 2022 RongCloud. All rights reserved.
//
#import <Foundation/Foundation.h>
@class RCIMIWChatRoomMemberAction;
@class RCIMIWBlockedMessageInfo;
@class RCIMIWGroupReadReceiptInfo;
@class RCIMIWBlockedMessageInfo;
@class RCIMIWTypingStatus;
@class RCIMIWUltraGroupTypingStatusInfo;
@class RCIMIWMessage;
@class RCIMIWMediaMessage;
@class RCIMIWMessagePushOptions;
@class RCIMIWCompressOptions;
@class RCIMIWEngineOptions;
@class RCIMIWSearchConversationResult;
@class RCIMIWAndroidPushOptions;
@class RCIMIWIOSPushOptions;
@class RCIMIWConversation;
@class RCIMIWTagInfo;
@class RCIMIWConversationTagInfo;
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWPlatformConverter : NSObject
// ChatRoomMemberAction
+ (NSDictionary *)convertChatRoomMemberActionToDict:(RCIMIWChatRoomMemberAction *)chatRoomMemberAction;
+ (RCIMIWChatRoomMemberAction *)convertChatRoomMemberActionFromDict:(NSDictionary *)chatRoomMemberAction;
// BlockedMessageInfo
+ (NSDictionary *)convertBlockedMessageInfoToDict:(RCIMIWBlockedMessageInfo *)blockedMessageInfo;
+ (RCIMIWBlockedMessageInfo *)convertBlockedMessageInfoFromDict:(NSDictionary *)blockedMessageInfo;
// GroupReadReceiptInfo
+ (NSDictionary *)convertGroupReadReceiptInfoToDict:(RCIMIWGroupReadReceiptInfo *)groupReadReceiptInfo;
+ (RCIMIWGroupReadReceiptInfo *)convertGroupReadReceiptInfoFromDict:(NSDictionary *)groupReadReceiptInfo;
// TypingStatus
+ (NSDictionary *)convertTypingStatusToDict:(RCIMIWTypingStatus *)typingStatus;
+ (RCIMIWTypingStatus *)convertTypingStatusFromDict:(NSDictionary *)typingStatus;
// UltraGroupTypingStatusInfo
+ (NSDictionary *)convertUltraGroupTypingStatusInfoToDict:(RCIMIWUltraGroupTypingStatusInfo *)ultraGroupTypingStatusInfo;
+ (RCIMIWUltraGroupTypingStatusInfo *)convertUltraGroupTypingStatusInfoFromDict:(NSDictionary *)ultraGroupTypingStatusInfo;
// Message
+ (NSDictionary *)convertMessageToDict:(RCIMIWMessage *)message;
+ (RCIMIWMessage *)convertMessageFromDict:(NSDictionary *)message;
+ (NSDictionary *)convertMediaMessageToDict:(RCIMIWMediaMessage *)message;
+ (RCIMIWMediaMessage *)convertMediaMessageFromDict:(NSDictionary *)message;
// AndroidPushOptions
//+ (NSDictionary *)convertAndroidPushOptionsToDict:(RCIMIWAndroidPushOptions *)androidPushOptions;
//+ (RCIMIWAndroidPushOptions *)convertAndroidPushOptionsFromDict:(NSDictionary *)androidPushOptions;
// EngineOptions
+ (NSDictionary *)convertEngineOptionsToDict:(RCIMIWEngineOptions *)engineOptions;
+ (RCIMIWEngineOptions *)convertEngineOptionsFromDict:(NSDictionary *)engineOptions;
// IOSPushOptions
//+ (NSDictionary *)convertIOSPushOptionsToDict:(RCIMIWIOSPushOptions *)iosPushOptions;
//+ (RCIMIWIOSPushOptions *)convertIOSPushOptionsFromDict:(NSDictionary *)iosPushOptions;
// MessagePushOptions
+ (NSDictionary *)convertMessagePushOptionsToDict:(RCIMIWMessagePushOptions *)messagePushOptions;
+ (RCIMIWMessagePushOptions *)convertMessagePushOptionsFromDict:(NSDictionary *)messagePushOptions;
// Conversation
+ (NSDictionary *)convertConversationToDict:(RCIMIWConversation *)conversation;
// SearchConversationResult
+ (NSDictionary *)convertSearchConversationResultToDict:(RCIMIWSearchConversationResult *)searchConversationResult;
// SearchConversationResult
+ (NSDictionary *)convertTagInfoToDict:(RCIMIWTagInfo *)tagInfo;
// SearchConversationResult
+ (NSDictionary *)convertConversationTagInfoToDict:(RCIMIWConversationTagInfo *)tagInfo;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,47 @@
//
// RCIMIWRecallNotificationMessage.h
// RongIMWrapper
//
// Created by RongCloud on 3/9/22.
//
#import <RongIMWrapper/RCIMIWMessage.h>
NS_ASSUME_NONNULL_BEGIN
/*!
撤回通知消息类
@discussion 撤回通知消息,此消息会进行本地存储,但不计入未读消息数。
@remarks 通知类消息
*/
@interface RCIMIWRecallNotificationMessage : RCIMIWMessage
/*!
是否是管理员操作
*/
@property (nonatomic, assign, readonly) BOOL admin;
/*!
是否删除
*/
@property (nonatomic, assign, readonly) BOOL deleted;
/*!
撤回的时间(毫秒)
*/
@property (nonatomic, assign, readonly) long long recallTime;
/*!
撤回动作的时间(毫秒)
*/
@property (nonatomic, assign, readonly) long long recallActionTime;
/*!
被撤回的原消息
*/
@property (nonatomic, strong, readonly) RCIMIWMessage *originalMessage;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,26 @@
//
// RCIMIWReferenceMessage.h
// RongIMWrapper
//
// Created by RongCloud on 3/8/22.
//
#import <RongIMWrapper/RCIMIWMessage.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWReferenceMessage : RCIMIWMessage
/*!
文本
*/
@property (nonatomic, strong, readonly) NSString *text;
/*!
被引用消息体
*/
@property (nonatomic, strong, readonly) RCIMIWMessage *referenceMessage;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,29 @@
//
// RCIMIWSearchConversationResult.h
// RongIMWrapper
//
// Created by RongCloud on 3/17/22.
// Copyright © 2022 RongCloud. All rights reserved.
//
#import <Foundation/Foundation.h>
@class RCIMIWConversation;
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWSearchConversationResult : NSObject
/*!
匹配的会话对象
*/
@property (nonatomic, strong, readonly) RCIMIWConversation *conversation;
/*
会话匹配的消息条数
*/
@property (nonatomic, assign, readonly) int count;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,33 @@
//
// RCIMIWSightMessage.h
// RongIMWrapper
//
// Created by RongCloud on 3/7/22.
//
#import <RongIMWrapper/RCIMIWMediaMessage.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWSightMessage : RCIMIWMediaMessage
/**
视频时长,以秒为单位
*/
@property (nonatomic, assign, readonly) NSUInteger duration;
/**
文件大小
*/
@property (nonatomic, assign, readonly) long long size;
/**
小视频文件名
*/
@property (nonatomic, copy, readonly) NSString *name;
@property (nonatomic, copy, readonly) NSString *thumbnailBase64String;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,45 @@
//
// RCIMIWTagInfo.h
// RongIMWrapper
//
// Created by RongCloud on 3/3/22.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWTagInfo : NSObject
/*!
标签 ID
*/
@property (nonatomic, copy, readonly) NSString *tagId;
/*!
标签名称
*/
@property (nonatomic, copy, readonly) NSString *tagName;
/*!
该标签下的会话个数
*/
@property (nonatomic, assign, readonly) NSInteger count;
/*!
标签创建时间
*/
@property (nonatomic, assign, readonly) long long timestamp;
/*!
初始化方法
@param tagId 标签 id
@param tagName 标签名称
*/
- (instancetype)initWithTagId:(NSString *)tagId
tagName:(NSString *)tagName;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,18 @@
//
// RCIMIWTextMessage.h
// RongIMWrapper
//
// Created by RongCloud on 3/7/22.
//
#import <RongIMWrapper/RCIMIWMessage.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWTextMessage : RCIMIWMessage
@property (nonatomic, copy) NSString *text;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,29 @@
//
// RCIMIWTypingStatus.h
// RongIMWrapper
//
// Created by RongCloud on 3/3/22.
//
#import <Foundation/Foundation.h>
#import <RongIMWrapper/RCIMIWDefines.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWTypingStatus : NSObject
/*!
当前正在输入的用户 ID
*/
@property (nonatomic, copy, readonly) NSString *userId;
/*!
当前正在输入的消息类型名
*/
@property (nonatomic, copy, readonly) NSString *contentType;
@property (nonatomic, assign, readonly) long long sentTime;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,48 @@
//
// RCIMIWUltraGroupTypingStatusInfo.h
// RongIMWrapper
//
// Created by RongCloud on 3/21/22.
// Copyright © 2022 RongCloud. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <RongIMWrapper/RCIMIWDefines.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWUltraGroupTypingStatusInfo : NSObject
/*!
会话 ID
*/
@property (nonatomic, copy, readonly) NSString *targetId;
/*!
所属会话的业务标识
*/
@property (nonatomic, copy, readonly) NSString *channelId;
/*!
用户id
*/
@property (nonatomic, copy, readonly) NSString *userId;
/*!
用户数
*/
@property (nonatomic, assign, readonly) NSInteger userNums;
/*!
输入状态
*/
@property (nonatomic, assign, readonly) RCIMIWUltraGroupTypingStatus status;
/*!
服务端收到用户操作的上行时间.
*/
@property (nonatomic, assign, readonly) long long timestamp;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,19 @@
//
// RCIMIWUnknownMessage.h
// RongIMWrapper
//
// Created by RongCloud on 3/9/22.
//
#import <RongIMWrapper/RCIMIWMessage.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWUnknownMessage : RCIMIWMessage
@property (nonatomic, copy, readonly) NSString *rawData;
@property (nonatomic, copy, readonly) NSString *objectName;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,51 @@
//
// RCIMIWUserInfo.h
// RongIMWrapper
//
// Created by RongCloud on 2/18/22.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWUserInfo : NSObject
/*!
用户 ID
*/
@property (nonatomic, copy) NSString *userId;
/*!
用户名称
*/
@property (nonatomic, copy) NSString *name;
/*!
用户头像的 URL
*/
@property (nonatomic, copy) NSString *portrait;
/*!
用户备注
*/
@property (nonatomic, copy) NSString *alias;
/**
用户信息附加字段
*/
@property (nonatomic, copy) NSString *extra;
/*!
用户信息的初始化方法
@param userId 用户 ID
@param name 用户名称
@param portraitUri 用户头像的 URL
@return 用户信息对象
*/
- (instancetype)initWithUserId:(NSString *)userId name:(NSString *)name portraitUri:(NSString *)portraitUri;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,21 @@
//
// RCIMIWVoiceMessage.h
// RongIMWrapper
//
// Created by RongCloud on 3/7/22.
//
#import <RongIMWrapper/RCIMIWMediaMessage.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWVoiceMessage : RCIMIWMediaMessage
/**
语音时长,以秒为单位
*/
@property (nonatomic, assign, readonly) NSUInteger duration;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,57 @@
//
// RongIMWrapper.h
// RongIMWrapper
//
// Created by RongCloud on 2/15/22.
//
#import <Foundation/Foundation.h>
//! Project version number for RongIMWrapper.
FOUNDATION_EXPORT double RongIMWrapperVersionNumber;
//! Project version string for RongIMWrapper.
FOUNDATION_EXPORT const unsigned char RongIMWrapperVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <RongIMWrapper/PublicHeader.h>
#import <RongIMWrapper/RCIMIWEngine.h>
#import <RongIMWrapper/RCIMIWEngineOptions.h>
#import <RongIMWrapper/RCIMIWMessagePushOptions.h>
#import <RongIMWrapper/RCIMIWCompressOptions.h>
#import <RongIMWrapper/RCIMIWMessage.h>
#import <RongIMWrapper/RCIMIWMediaMessage.h>
#import <RongIMWrapper/RCIMIWTextMessage.h>
#import <RongIMWrapper/RCIMIWImageMessage.h>
#import <RongIMWrapper/RCIMIWVoiceMessage.h>
#import <RongIMWrapper/RCIMIWSightMessage.h>
#import <RongIMWrapper/RCIMIWFileMessage.h>
#import <RongIMWrapper/RCIMIWGIFMessage.h>
#import <RongIMWrapper/RCIMIWCustomMessage.h>
#import <RongIMWrapper/RCIMIWCommandMessage.h>
#import <RongIMWrapper/RCIMIWReferenceMessage.h>
#import <RongIMWrapper/RCIMIWCommandNotificationMessage.h>
#import <RongIMWrapper/RCIMIWRecallNotificationMessage.h>
#import <RongIMWrapper/RCIMIWLocationMessage.h>
#import <RongIMWrapper/RCIMIWUnknownMessage.h>
#import <RongIMWrapper/RCIMIWNativeCustomMessage.h>
#import <RongIMWrapper/RCIMIWNativeCustomMediaMessage.h>
#import <RongIMWrapper/RCIMIWConversation.h>
#import <RongIMWrapper/RCIMIWSearchConversationResult.h>
#import <RongIMWrapper/RCIMIWGroupReadReceiptInfo.h>
#import <RongIMWrapper/RCIMIWBlockedMessageInfo.h>
#import <RongIMWrapper/RCIMIWMentionedInfo.h>
#import <RongIMWrapper/RCIMIWUserInfo.h>
#import <RongIMWrapper/RCIMIWTypingStatus.h>
#import <RongIMWrapper/RCIMIWTagInfo.h>
#import <RongIMWrapper/RCIMIWConversationTagInfo.h>
#import <RongIMWrapper/RCIMIWUltraGroupTypingStatusInfo.h>
#import <RongIMWrapper/RCIMIWPlatformConverter.h>
#import <RongIMWrapper/RCIMIWDefines.h>

View File

@@ -0,0 +1,6 @@
framework module RongIMWrapper {
umbrella header "RongIMWrapper.h"
export *
module * { export * }
}

View File

@@ -0,0 +1,657 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>files</key>
<dict>
<key>Headers/RCIMIWBlockedMessageInfo.h</key>
<data>
oFtw97CuFfdFacaQCYa0vlc7X8w=
</data>
<key>Headers/RCIMIWChatRoomMemberAction.h</key>
<data>
Irj/sfQvPSbDI155s7oeMqPcawg=
</data>
<key>Headers/RCIMIWCommandMessage.h</key>
<data>
Qx757Ked5q26cEvzSx+fAp6GI9M=
</data>
<key>Headers/RCIMIWCommandNotificationMessage.h</key>
<data>
OG3jeKw+nw3SaLkg9FWDi2X3lrc=
</data>
<key>Headers/RCIMIWCompressOptions.h</key>
<data>
xHum9csO4h31oM4ThiqfGWmExVE=
</data>
<key>Headers/RCIMIWConversation.h</key>
<data>
9eTyDyAkPaqkeLDtc3BXetXSxYY=
</data>
<key>Headers/RCIMIWConversationTagInfo.h</key>
<data>
C5vgJNgPATsesPBQufy4L5gpSnQ=
</data>
<key>Headers/RCIMIWCustomMessage.h</key>
<data>
rrUBcrcJmz829fv4diEcXP4H5YE=
</data>
<key>Headers/RCIMIWDefines.h</key>
<data>
eol/yMMWxD5sCT05wcGeXcYmqUM=
</data>
<key>Headers/RCIMIWEngine.h</key>
<data>
64Y+xrsLW0p1FIexk8K8ICOLCw0=
</data>
<key>Headers/RCIMIWEngineDelegate.h</key>
<data>
ZyHi3S2t7/25g9YxWxmKpUVHm9w=
</data>
<key>Headers/RCIMIWEngineOptions.h</key>
<data>
ud+wnRuziaUxwXm6wxNrhO2bBRc=
</data>
<key>Headers/RCIMIWFileMessage.h</key>
<data>
UPDum8Tj3FXB+ldQidm+r+tr01s=
</data>
<key>Headers/RCIMIWGIFMessage.h</key>
<data>
mpVdornL+JqEIlGXyJ7F9b7MJZ4=
</data>
<key>Headers/RCIMIWGroupReadReceiptInfo.h</key>
<data>
03Hkay3rOYHjnhURsy8rsK2tX/k=
</data>
<key>Headers/RCIMIWImageMessage.h</key>
<data>
KYDTFZHSu5lEYa4l+lg1KBxDKOs=
</data>
<key>Headers/RCIMIWLocationMessage.h</key>
<data>
5mU4FWewcdpZyIUwjF8GOXihTmQ=
</data>
<key>Headers/RCIMIWMediaMessage.h</key>
<data>
Jqjv39goLbc6GSwraJ9Wspz/vpA=
</data>
<key>Headers/RCIMIWMentionedInfo.h</key>
<data>
2LvZ0xCmos1SX4KawuSJY1Tkd98=
</data>
<key>Headers/RCIMIWMessage.h</key>
<data>
KUjzmIGwOMx9PT8vTkFgWYjdSwU=
</data>
<key>Headers/RCIMIWMessagePushOptions.h</key>
<data>
INZw8eqQqHxDVlRDBufb3BzB0zw=
</data>
<key>Headers/RCIMIWNativeCustomMediaMessage.h</key>
<data>
TtJvIjR75Xsdwui1Xgi2LDy7sQo=
</data>
<key>Headers/RCIMIWNativeCustomMessage.h</key>
<data>
jl/KqekfUeoiPBsnZx9uSXwL604=
</data>
<key>Headers/RCIMIWPlatformConverter.h</key>
<data>
qBfombP/fhIyPE4YuBePNjby9DI=
</data>
<key>Headers/RCIMIWRecallNotificationMessage.h</key>
<data>
hfpwloo0psjA3Do5qKerrEEGxwI=
</data>
<key>Headers/RCIMIWReferenceMessage.h</key>
<data>
grgrdiQxBQgcjcv5n0veJ+CAziI=
</data>
<key>Headers/RCIMIWSearchConversationResult.h</key>
<data>
qxxZUH0k9fzbrwHlwWHhHBxJ5R0=
</data>
<key>Headers/RCIMIWSightMessage.h</key>
<data>
sHEoJgaWKxvOUA1AsuPuaXTQZOM=
</data>
<key>Headers/RCIMIWTagInfo.h</key>
<data>
nay+4cxqaKWFfJAFjRSFwhInC/8=
</data>
<key>Headers/RCIMIWTextMessage.h</key>
<data>
Rm8BdDUpfiiOteZNWkBihhndJ9k=
</data>
<key>Headers/RCIMIWTypingStatus.h</key>
<data>
akJLOB7HKoppJFBl7M+CRqVnzsE=
</data>
<key>Headers/RCIMIWUltraGroupTypingStatusInfo.h</key>
<data>
bbwfwGtOchVmLKU/iOe3eDHptik=
</data>
<key>Headers/RCIMIWUnknownMessage.h</key>
<data>
qgUrjxdq+sCU6/1/T4I9sq4LcHA=
</data>
<key>Headers/RCIMIWUserInfo.h</key>
<data>
5g7vzLQk3tcFraYj6LiXTofflNA=
</data>
<key>Headers/RCIMIWVoiceMessage.h</key>
<data>
qsVZR8GP7n2O5FqQcKtBfAChfbM=
</data>
<key>Headers/RongIMWrapper.h</key>
<data>
YdH8Ujk85GPUJ+MR6roHGiP+3tU=
</data>
<key>Info.plist</key>
<data>
JEjrQsRzdqV0hZBP0cKNNZUHjkI=
</data>
<key>Modules/module.modulemap</key>
<data>
Vh9vdNQkaXreFCi1krLgoYVDvCg=
</data>
</dict>
<key>files2</key>
<dict>
<key>Headers/RCIMIWBlockedMessageInfo.h</key>
<dict>
<key>hash</key>
<data>
oFtw97CuFfdFacaQCYa0vlc7X8w=
</data>
<key>hash2</key>
<data>
nNHHGlz3h+zRUQ/VsvRQ0Xyqx9kgRY4NHDprJKhsDO4=
</data>
</dict>
<key>Headers/RCIMIWChatRoomMemberAction.h</key>
<dict>
<key>hash</key>
<data>
Irj/sfQvPSbDI155s7oeMqPcawg=
</data>
<key>hash2</key>
<data>
dJEENT/QimJq1ZJ8juxcIs3g2V+UwfgDdKPLV6JWzKE=
</data>
</dict>
<key>Headers/RCIMIWCommandMessage.h</key>
<dict>
<key>hash</key>
<data>
Qx757Ked5q26cEvzSx+fAp6GI9M=
</data>
<key>hash2</key>
<data>
A9QP8rCAngk9gKWqr4RNV6DGmW5fLwrb7DPjG0eEcAQ=
</data>
</dict>
<key>Headers/RCIMIWCommandNotificationMessage.h</key>
<dict>
<key>hash</key>
<data>
OG3jeKw+nw3SaLkg9FWDi2X3lrc=
</data>
<key>hash2</key>
<data>
d7RxZ/a+a2wBKPE09QvuXYbEoFH9QbpPuiPKgkLJLIw=
</data>
</dict>
<key>Headers/RCIMIWCompressOptions.h</key>
<dict>
<key>hash</key>
<data>
xHum9csO4h31oM4ThiqfGWmExVE=
</data>
<key>hash2</key>
<data>
Xb4YsZJJ9PUPGBvsmbDufy2NBIti11o4QSQQFC4fUZo=
</data>
</dict>
<key>Headers/RCIMIWConversation.h</key>
<dict>
<key>hash</key>
<data>
9eTyDyAkPaqkeLDtc3BXetXSxYY=
</data>
<key>hash2</key>
<data>
Ce0mpcf06Wl3c56Ree9dpQJxyw0eXrQFSOSbW6aWe90=
</data>
</dict>
<key>Headers/RCIMIWConversationTagInfo.h</key>
<dict>
<key>hash</key>
<data>
C5vgJNgPATsesPBQufy4L5gpSnQ=
</data>
<key>hash2</key>
<data>
yLRPC+dWbAoNGPmwjd8jVNHZIlaphbKuehQWY93v28w=
</data>
</dict>
<key>Headers/RCIMIWCustomMessage.h</key>
<dict>
<key>hash</key>
<data>
rrUBcrcJmz829fv4diEcXP4H5YE=
</data>
<key>hash2</key>
<data>
g1szSyNUGQlIdSQREcs8KG0fudaJVU5WO83PHR7lABM=
</data>
</dict>
<key>Headers/RCIMIWDefines.h</key>
<dict>
<key>hash</key>
<data>
eol/yMMWxD5sCT05wcGeXcYmqUM=
</data>
<key>hash2</key>
<data>
BVGBRSwY5wKEat5PE4nFqps1FVWTbwCiBdItmLNcK8o=
</data>
</dict>
<key>Headers/RCIMIWEngine.h</key>
<dict>
<key>hash</key>
<data>
64Y+xrsLW0p1FIexk8K8ICOLCw0=
</data>
<key>hash2</key>
<data>
UrxJREgUJC9UUYi/wE70/8Fgbg8xckI7i9xH1h/Wc54=
</data>
</dict>
<key>Headers/RCIMIWEngineDelegate.h</key>
<dict>
<key>hash</key>
<data>
ZyHi3S2t7/25g9YxWxmKpUVHm9w=
</data>
<key>hash2</key>
<data>
YrXKrToIMLnsY3hFS4qYUPmJAxQxIU7sWDyF/7qLBac=
</data>
</dict>
<key>Headers/RCIMIWEngineOptions.h</key>
<dict>
<key>hash</key>
<data>
ud+wnRuziaUxwXm6wxNrhO2bBRc=
</data>
<key>hash2</key>
<data>
fx4bU9ekLddFW8qP+iwvOFcOUPzUBbAxoTLD8Cq0PyM=
</data>
</dict>
<key>Headers/RCIMIWFileMessage.h</key>
<dict>
<key>hash</key>
<data>
UPDum8Tj3FXB+ldQidm+r+tr01s=
</data>
<key>hash2</key>
<data>
EXIbvs8fvoqaNmk6DEtStlqa1b/GSwp/IMD+q+Uzqyg=
</data>
</dict>
<key>Headers/RCIMIWGIFMessage.h</key>
<dict>
<key>hash</key>
<data>
mpVdornL+JqEIlGXyJ7F9b7MJZ4=
</data>
<key>hash2</key>
<data>
9gw+eXxC5N3mDzYscVLCwN3YlIHO+Chge5egYeGrKDA=
</data>
</dict>
<key>Headers/RCIMIWGroupReadReceiptInfo.h</key>
<dict>
<key>hash</key>
<data>
03Hkay3rOYHjnhURsy8rsK2tX/k=
</data>
<key>hash2</key>
<data>
mO8PiMP6mtcgKMmAHp0RtXS3S2DWkw/zJebC7+B576g=
</data>
</dict>
<key>Headers/RCIMIWImageMessage.h</key>
<dict>
<key>hash</key>
<data>
KYDTFZHSu5lEYa4l+lg1KBxDKOs=
</data>
<key>hash2</key>
<data>
9vSrnft9SHddZuUKxnqwi3dqhwEcDSeDqpGrXGPjWy4=
</data>
</dict>
<key>Headers/RCIMIWLocationMessage.h</key>
<dict>
<key>hash</key>
<data>
5mU4FWewcdpZyIUwjF8GOXihTmQ=
</data>
<key>hash2</key>
<data>
4aN0WFOisK9iWsIfPYpaiemEqSkLKjSBHp0AKzwFDbI=
</data>
</dict>
<key>Headers/RCIMIWMediaMessage.h</key>
<dict>
<key>hash</key>
<data>
Jqjv39goLbc6GSwraJ9Wspz/vpA=
</data>
<key>hash2</key>
<data>
UYTeVsVzOiRxW6tvDrjUCFzDtAJ59EcdumZOhPe6fuc=
</data>
</dict>
<key>Headers/RCIMIWMentionedInfo.h</key>
<dict>
<key>hash</key>
<data>
2LvZ0xCmos1SX4KawuSJY1Tkd98=
</data>
<key>hash2</key>
<data>
a8e+yr5CJavd91kN/ceqjRtkVqnL3WGKd96FSaIYn1M=
</data>
</dict>
<key>Headers/RCIMIWMessage.h</key>
<dict>
<key>hash</key>
<data>
KUjzmIGwOMx9PT8vTkFgWYjdSwU=
</data>
<key>hash2</key>
<data>
8+94KpgMMid7dfHc81WzTIFeRWUvKg9FOfB0i45IOXQ=
</data>
</dict>
<key>Headers/RCIMIWMessagePushOptions.h</key>
<dict>
<key>hash</key>
<data>
INZw8eqQqHxDVlRDBufb3BzB0zw=
</data>
<key>hash2</key>
<data>
H0JJfmDTazbk58Jx/4KfuloerPu+JFrxF8b7kwmAGqw=
</data>
</dict>
<key>Headers/RCIMIWNativeCustomMediaMessage.h</key>
<dict>
<key>hash</key>
<data>
TtJvIjR75Xsdwui1Xgi2LDy7sQo=
</data>
<key>hash2</key>
<data>
x0bXk2B/V8CSuGyipr38ldRg4z5VlJewFFik2dIfKQc=
</data>
</dict>
<key>Headers/RCIMIWNativeCustomMessage.h</key>
<dict>
<key>hash</key>
<data>
jl/KqekfUeoiPBsnZx9uSXwL604=
</data>
<key>hash2</key>
<data>
zJCZ22Musnlgmz168nQy/X2928Pf0VqeH3OBJJ0ALA8=
</data>
</dict>
<key>Headers/RCIMIWPlatformConverter.h</key>
<dict>
<key>hash</key>
<data>
qBfombP/fhIyPE4YuBePNjby9DI=
</data>
<key>hash2</key>
<data>
Qp/Je6EMWPamGGqKOzxdrGy0S8nJgak5S/PNUKIj2VY=
</data>
</dict>
<key>Headers/RCIMIWRecallNotificationMessage.h</key>
<dict>
<key>hash</key>
<data>
hfpwloo0psjA3Do5qKerrEEGxwI=
</data>
<key>hash2</key>
<data>
gihBvLY/5dIi3+f0eAk+x/6AP3p7qmm23Las654a+pE=
</data>
</dict>
<key>Headers/RCIMIWReferenceMessage.h</key>
<dict>
<key>hash</key>
<data>
grgrdiQxBQgcjcv5n0veJ+CAziI=
</data>
<key>hash2</key>
<data>
p7uOCVt34XJnhVyZuh3WEsfeEtytZqBrCro2sjG3HGQ=
</data>
</dict>
<key>Headers/RCIMIWSearchConversationResult.h</key>
<dict>
<key>hash</key>
<data>
qxxZUH0k9fzbrwHlwWHhHBxJ5R0=
</data>
<key>hash2</key>
<data>
BILRIt1LsrKPy8ElRc5Iwhi/2lKbizV4Pq4sqJuRLzA=
</data>
</dict>
<key>Headers/RCIMIWSightMessage.h</key>
<dict>
<key>hash</key>
<data>
sHEoJgaWKxvOUA1AsuPuaXTQZOM=
</data>
<key>hash2</key>
<data>
4CmK0XgLeudMWN1ykqHcl7IdgL02aWI+jYabboUNE1M=
</data>
</dict>
<key>Headers/RCIMIWTagInfo.h</key>
<dict>
<key>hash</key>
<data>
nay+4cxqaKWFfJAFjRSFwhInC/8=
</data>
<key>hash2</key>
<data>
OvNot8iVhndDHQ1NSkK/1XvSCv8+FZiwVSSJTR3zcVk=
</data>
</dict>
<key>Headers/RCIMIWTextMessage.h</key>
<dict>
<key>hash</key>
<data>
Rm8BdDUpfiiOteZNWkBihhndJ9k=
</data>
<key>hash2</key>
<data>
AYeHN9oWIpMsiyefGcxC7jFEpauDhASYP4RcxB9Kl08=
</data>
</dict>
<key>Headers/RCIMIWTypingStatus.h</key>
<dict>
<key>hash</key>
<data>
akJLOB7HKoppJFBl7M+CRqVnzsE=
</data>
<key>hash2</key>
<data>
YPGPyuROOdLhtyhf3E331BOPgHc5YfeK1PN7idp54Cc=
</data>
</dict>
<key>Headers/RCIMIWUltraGroupTypingStatusInfo.h</key>
<dict>
<key>hash</key>
<data>
bbwfwGtOchVmLKU/iOe3eDHptik=
</data>
<key>hash2</key>
<data>
0AdngedKL3OJA0QFjGXRtRR1hwUdvsTWcoEvcyaEPTc=
</data>
</dict>
<key>Headers/RCIMIWUnknownMessage.h</key>
<dict>
<key>hash</key>
<data>
qgUrjxdq+sCU6/1/T4I9sq4LcHA=
</data>
<key>hash2</key>
<data>
7p4NYJJwAMXAwYqWwWuhBA438tLXAy24c4QzH5/IZDk=
</data>
</dict>
<key>Headers/RCIMIWUserInfo.h</key>
<dict>
<key>hash</key>
<data>
5g7vzLQk3tcFraYj6LiXTofflNA=
</data>
<key>hash2</key>
<data>
V10qEawgeZq8vDYhIOHCHovrNnRR7oXom02wtpweU6I=
</data>
</dict>
<key>Headers/RCIMIWVoiceMessage.h</key>
<dict>
<key>hash</key>
<data>
qsVZR8GP7n2O5FqQcKtBfAChfbM=
</data>
<key>hash2</key>
<data>
b6rItb69TZZsbwvHeE4AtW3UE1msdPiF/u+hCT1jJ9k=
</data>
</dict>
<key>Headers/RongIMWrapper.h</key>
<dict>
<key>hash</key>
<data>
YdH8Ujk85GPUJ+MR6roHGiP+3tU=
</data>
<key>hash2</key>
<data>
FMIRQbrWJ0ecIdMZivMktP0aloY6adherETYM/denrQ=
</data>
</dict>
<key>Modules/module.modulemap</key>
<dict>
<key>hash</key>
<data>
Vh9vdNQkaXreFCi1krLgoYVDvCg=
</data>
<key>hash2</key>
<data>
6yfqbvnbVio5ptAdCyz4sU2INYt+rvxvT8q9gkJ+AkQ=
</data>
</dict>
</dict>
<key>rules</key>
<dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^version.plist$</key>
<true/>
</dict>
<key>rules2</key>
<dict>
<key>.*\.dSYM($|/)</key>
<dict>
<key>weight</key>
<real>11</real>
</dict>
<key>^(.*/)?\.DS_Store$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>2000</real>
</dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^Info\.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^PkgInfo$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^embedded\.provisionprofile$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^version\.plist$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
</dict>
</dict>
</plist>

View File

@@ -0,0 +1,46 @@
//
// RCIMIWBlockedMessageInfo.h
// RongIMWrapper
//
// Created by RongCloud on 3/20/22.
// Copyright © 2022 RongCloud. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <RongIMWrapper/RCIMIWDefines.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWBlockedMessageInfo : NSObject
/**
* 会话类型
*/
@property (nonatomic, assign, readonly) RCIMIWConversationType conversationType;
/**
* 会话 ID
*/
@property (nonatomic, copy, readonly) NSString *targetId;
/**
* 被拦截的消息 ID
*/
@property (nonatomic, copy, readonly) NSString *blockedMsgUId;
/**
* 拦截原因
* 1,全局敏感词:命中了融云内置的全局敏感词
* 2,自定义敏感词拦截:命中了客户在融云自定义的敏感词
* 3,第三方审核拦截:命中了第三方(数美)或模板路由决定不下发的状态
*/
@property (nonatomic, assign, readonly) RCIMIWMessageBlockType blockType;
/**
* 附加信息
*/
@property (nonatomic, copy, readonly) NSString *extra;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,27 @@
//
// RCIMIWChatRoomMemberAction.h
// RongIMWrapper
//
// Created by RongCloud on 2/23/22.
//
#import <Foundation/Foundation.h>
#import <RongIMWrapper/RCIMIWDefines.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWChatRoomMemberAction : NSObject
/*!
成员 ID
*/
@property (nonatomic, copy, readonly) NSString *userId;
/*!
成员加入或者退出
*/
@property (nonatomic, assign, readonly) RCIMIWChatRoomMemberActionType actionType;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,36 @@
//
// RCIMIWCommandMessage.h
// RongIMWrapper
//
// Created by RongCloud on 3/9/22.
//
#import <RongIMWrapper/RCIMIWMessage.h>
NS_ASSUME_NONNULL_BEGIN
/*!
命令消息类
@discussion 命令消息类,此消息不存储不计入未读消息数。
与 RCIMIWCommandNotificationMessage 的区别是,此消息不存储,也不会在界面上显示。
@remarks 通知类消息
*/
@interface RCIMIWCommandMessage : RCIMIWMessage
/*!
命令的名称
*/
@property (nonatomic, copy, readonly) NSString *name;
/*!
命令的扩展数据
@discussion 命令的扩展数据可以为任意字符串如存放您定义的json数据。
*/
@property (nonatomic, copy, readonly) NSString *data;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,36 @@
//
// RCIMIWCommandNotificationMessage.h
// RongIMWrapper
//
// Created by RongCloud on 3/9/22.
//
#import <RongIMWrapper/RCIMIWMessage.h>
NS_ASSUME_NONNULL_BEGIN
/*!
命令提醒消息类
@discussion 命令消息类,此消息会进行存储,但不计入未读消息数。
与 RCIMIWCommandMessage 的区别是,此消息会进行存储并在界面上显示。
@remarks 通知类消息
*/
@interface RCIMIWCommandNotificationMessage : RCIMIWMessage
/*!
命令提醒的名称
*/
@property (nonatomic, copy, readonly) NSString *name;
/*!
命令提醒消息的扩展数据
@discussion 命令提醒消息的扩展数据,可以为任意字符串,如存放您定义的 json 数据。
*/
@property (nonatomic, copy, readonly) NSString *data;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,43 @@
//
// RCIMIWCompressOptions.h
// RongIMWrapper
//
// Created by RongCloud on 3/21/22.
// Copyright © 2022 RongCloud. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWCompressOptions : NSObject
/*!
原图质量压缩比 0 ~ 100内部需要除 100
*/
@property (nonatomic, assign) int originalImageQuality;
/*!
原图最大尺寸 对应的 width height
*/
@property (nonatomic, assign) int originalImageSize;
// 原图最大限制,如果图片大小不超过此值,发送原图,超过则进行压缩
@property (nonatomic, assign) int originalImageMaxSize;
// 缩略图 0 ~ 1
@property (nonatomic, assign) int thumbnailQuality;
@property (nonatomic, assign) int thumbnailMaxSize;
@property (nonatomic, assign) int thumbnailMinSize;
@property (nonatomic, assign) int sightCompressWidth;
@property (nonatomic, assign) int sightCompressHeight;
/**
位置消息预览图压缩比 0 ~ 100
*/
@property (nonatomic, assign) int locationThumbnailQuality;
@property (nonatomic, assign) int locationThumbnailWidth;
@property (nonatomic, assign) int locationThumbnailHeight;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,73 @@
//
// Created by RongCloud on 2/16/22.
//
#import <Foundation/Foundation.h>
#import <RongIMWrapper/RCIMIWDefines.h>
@class RCIMIWMessage;
@interface RCIMIWConversation : NSObject
/*!
会话类型
*/
@property (nonatomic, assign, readonly) RCIMIWConversationType conversationType;
/*!
会话 ID
*/
@property (nonatomic, copy, readonly) NSString *targetId;
/*!
该会话的业务标识,长度限制 20 字符
*/
@property (nonatomic, copy, readonly) NSString *channelId;
/*!
会话中的未读消息数量
*/
@property (nonatomic, assign, readonly) NSInteger unreadCount;
/*!
会话中 @ 消息的个数
@discussion 在清除会话未读数clearMessagesUnreadStatus:targetId:)的时候,会将此值置成 0。
*/
@property (nonatomic, assign, readonly) NSInteger mentionedCount;
/*!
是否置顶,默认值为 NO
@discussion
如果设置了置顶,在 IMKit 的 RCConversationListViewController 中会将此会话置顶显示。
*/
@property (nonatomic, assign, readonly) BOOL top;
/*!
会话中存在的草稿
*/
@property (nonatomic, copy, readonly) NSString *draft;
/*!
会话中最后一条消息的内容
*/
@property (nonatomic, strong, readonly) RCIMIWMessage *lastMessage;
/*!
免打扰级别
*/
@property (nonatomic, assign, readonly) RCIMIWPushNotificationLevel notificationLevel;
/*!
会话中第一条未读消息时间戳Unix时间戳、毫秒
仅支持 超级群会话
@Since 5.2.5
*/
@property (nonatomic, assign, readonly) long long firstUnreadMsgSendTime;
/// 对应原生会话对象的 sentTime
@property (nonatomic, assign, readonly) long long operationTime;
@end

View File

@@ -0,0 +1,27 @@
//
// RCIMIWConversationTagInfo.h
// RongIMWrapper
//
// Created by RongCloud on 3/10/22.
//
#import <Foundation/Foundation.h>
@class RCIMIWTagInfo;
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWConversationTagInfo : NSObject
/*!
标签 ID
*/
@property (nonatomic, strong) RCIMIWTagInfo *tagInfo;
/*!
会话是否置顶
*/
@property (nonatomic, assign) BOOL top;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,26 @@
//
// RCIMIWCustomMessage.h
// RongIMWrapper
//
// Created by RongCloud on 3/9/22.
//
#import <RongIMWrapper/RCIMIWMessage.h>
#import <RongIMWrapper/RCIMIWDefines.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWCustomMessage : RCIMIWMessage
@property (nonatomic, copy, readonly) NSString *identifier;
@property (nonatomic, assign, readonly) RCIMIWCustomMessagePolicy policy;
/*!
消息字段
*/
@property (nonatomic, strong, readonly) NSDictionary<NSString*, NSString*> *fields;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,592 @@
//
// RCIMIWDefines.h
// RongIMWrapper
//
// Created by RongCloud on 2/24/22.
//
#ifndef RCIMIWDefines_h
#define RCIMIWDefines_h
#pragma mark 错误码
typedef NS_ENUM(NSInteger, RCIMIWErrorCode) {
RCIMIWErrorCodeSuccess = 0,
RCIMIWErrorCodeParamError = -101,
RCIMIWErrorCodeEngineDestroyed = -102,
RCIMIWErrorCodeNativeOperationError = -103,
RCIMIWErrorCodeResultUnknown = -104,
};
#pragma mark 连接状态
typedef NS_ENUM(NSInteger, RCIMIWConnectionStatus) {
/*!
连接过程中,当前设备网络不可用
@discussion 当网络恢复可用时SDK 会做好自动重连,开发者无须处理。
*/
RCIMIWConnectionStatusNetworkUnavailable = 0,
/*!
连接成功
*/
RCIMIWConnectionStatusConnected = 1,
/*!
连接中
*/
RCIMIWConnectionStatusConnecting = 2,
/*!
连接失败或未连接
*/
RCIMIWConnectionStatusUnconnected = 3,
/*!
当前用户在其他设备上登录,此设备被踢下线
*/
RCIMIWConnectionStatusKickedOfflineByOtherClient = 4,
/*!
Token无效
@discussion
Token 无效一般有两种原因。一是 token 错误,请您检查客户端初始化使用的 AppKey 和您服务器获取 token 使用的 AppKey
是否一致;二是 token 过期,是因为您在开发者后台设置了 token 过期时间,您需要请求您的服务器重新获取 token
并再次用新的 token 建立连接。
*/
RCIMIWConnectionStatusTokenIncorrect = 5,
/*!
与服务器的连接已断开,用户被封禁
*/
RCIMIWConnectionStatusConnUserBlocked = 6,
/*!
已登出
*/
RCIMIWConnectionStatusSignOut = 7,
/*!
连接暂时挂起多是由于网络问题导致SDK 会在合适时机进行自动重连
*/
RCIMIWConnectionStatusSuspend = 8,
/*!
自动连接超时SDK 将不会继续连接,用户需要做超时处理,再自行调用 connectWithToken 接口进行连接
*/
RCIMIWConnectionStatusTimeout = 9,
/*!
未知状态
@discussion 建立连接中出现异常的临时状态SDK 会做好自动重连,开发者无须处理。
*/
RCIMIWConnectionStatusUnknown = 10,
};
#pragma mark 会话类型
typedef NS_ENUM(NSInteger, RCIMIWConversationType) {
/*!
无效类型
*/
RCIMIWConversationTypeInvalid = 0,
/*!
单聊
*/
RCIMIWConversationTypePrivate = 1,
/*!
群组
*/
RCIMIWConversationTypeGroup = 2,
/*!
聊天室
*/
RCIMIWConversationTypeChatroom = 3,
/*!
系统会话
*/
RCIMIWConversationTypeSystem = 4,
/*!
超级群
*/
RCIMIWConversationTypeUltraGroup = 5,
};
#pragma mark 消息类型
typedef NS_ENUM(NSInteger, RCIMIWMessageType) {
/*!
未知消息
*/
RCIMIWMessageTypeUnknown = 0,
/*!
自定义
*/
RCIMIWMessageTypeCustom = 1,
/*!
文本
*/
RCIMIWMessageTypeText = 2,
/*!
语音
*/
RCIMIWMessageTypeVoice = 3,
/*!
图片
*/
RCIMIWMessageTypeImage = 4,
/*!
其他文件
*/
RCIMIWMessageTypeFile = 5,
/*!
小视频
*/
RCIMIWMessageTypeSight = 6,
/*!
动图
*/
RCIMIWMessageTypeGIF = 7,
/*!
撤回
*/
RCIMIWMessageTypeRecall = 8,
/*!
引用消息
*/
RCIMIWMessageTypeReference = 9,
/*!
命令消息
*/
RCIMIWMessageTypeCommand = 10,
/*!
命令通知消息
*/
RCIMIWMessageTypeCommandNotification = 11,
/*!
位置消息
*/
RCIMIWMessageTypeLocation = 12,
/*!
用户自定义消息
*/
RCIMIWMessageTypeUserCustom = 13,
/*!
原生自定义普通消息
*/
RCIMIWMessageTypeNativeCustom = 14,
/*!
原生自定义媒体消息
*/
RCIMIWMessageTypeNativeCustomMedia = 15,
};
#pragma mark 自定义消息的类别
typedef NS_ENUM(NSUInteger, RCIMIWCustomMessagePolicy) {
RCIMIWCustomMessagePolicyCommand = 0,
RCIMIWCustomMessagePolicyNormal,
RCIMIWCustomMessagePolicyStatus,
RCIMIWCustomMessagePolicyStorage,
};
typedef NS_ENUM(NSUInteger, RCIMIWNativeCustomMessagePersistentFlag) {
RCIMIWNativeCustomMessagePersistentNone,
/// 在本地只存储,但不计入未读数
RCIMIWNativeCustomMessagePersistentPersisted,
/// 在本地进行存储并计入未读数
RCIMIWNativeCustomMessagePersistentCounted,
/// 在本地不存储,不计入未读数,并且如果对方不在线,服务器会直接丢弃该消息,对方如果之后再上线也不会再收到此消息。
/// 一般用于发送输入状态之类的消息。
RCIMIWNativeCustomMessagePersistentStatus,
};
#pragma mark 消息的方向
typedef NS_ENUM(NSUInteger, RCIMIWMessageDirection) {
/*!
* 发送
*/
RCIMIWMessageDirectionSend = 0,
/*!
* 接收
*/
RCIMIWMessageDirectionReceive = 1,
};
/*!
* 消息的发送状态
*/
typedef NS_ENUM(NSUInteger, RCIMIWSentStatus) {
/*!
* 发送中
*/
RCIMIWSentStatusSending = 0,
/*!
* 发送失败
*/
RCIMIWSentStatusFailed = 1,
/*!
* \~chinese
已发送成功
*/
RCIMIWSentStatusSent = 2,
/*!
* \~chinese
对方已接收
*/
RCIMIWSentStatusReceived = 3,
/*!
* \~chinese
对方已阅读
*/
RCIMIWSentStatusRead = 4,
/*!
* \~chinese
对方已销毁
*/
RCIMIWSentStatusDestroyed = 5,
/*!
* \~chinese
发送已取消
*/
RCIMIWSentStatusCanceled = 6,
};
#pragma mark 消息的接收状态
typedef NS_ENUM(NSUInteger, RCIMIWReceivedStatus) {
/*!
* \~chinese
未读
*/
RCIMIWReceivedStatusUnread = 0,
/*!
* \~chinese
已读
*/
RCIMIWReceivedStatusRead = 1,
/*!
* \~chinese
已听
@discussion 仅用于语音消息
*/
RCIMIWReceivedStatusListened = 2,
/*!
* \~chinese
已下载
*/
RCIMIWReceivedStatusDownloaded = 3,
/*!
* \~chinese
该消息已经被其他登录的多端收取过。(即该消息已经被其他端收取过后。当前端才登录,并重新拉取了这条消息。客户可以通过这个状态更新
UI比如不再提示
*/
RCIMIWReceivedStatusRetrieved = 4,
/*!
* 该消息是被多端同时收取的。(即其他端正同时登录,一条消息被同时发往多端。客户可以通过这个状态值更新自己的某些 UI
* 状态)。
*/
RCIMIWReceivedStatusMultipleReceive = 5,
};
#pragma mark @消息的类型
typedef NS_ENUM(NSUInteger, RCIMIWMentionedType) {
/*!
@ 所有人
*/
RCIMIWMentionedTypeAll = 0,
/*!
@ 部分人
*/
RCIMIWMentionedTypePart = 1,
};
#pragma mark 时间顺序
typedef NS_ENUM(NSUInteger, RCIMIWTimeOrder) {
/*
以前的时间
*/
RCIMIWTimeOrderBefore = 0,
/*
以后的时间
*/
RCIMIWTimeOrderAfter = 1,
};
#pragma mark 加载消息策略
typedef NS_ENUM(NSUInteger, RCIMIWMessageOperationPolicy) {
RCIMIWMessageOperationPolicyLocal = 0,
RCIMIWMessageOperationPolicyRemote = 1,
RCIMIWMessageOperationPolicyLocalRemote = 2,
};
#pragma mark 聊天室状态
typedef NS_ENUM(NSUInteger, RCIMIWChatRoomStatus) {
RCIMIWChatRoomStatusReset = 0,
RCIMIWChatRoomStatusDestroyManual = 1,
RCIMIWChatRoomStatusDestroyAuto = 2,
};
#pragma mark 聊天室成员加入或者退出
typedef NS_ENUM(NSInteger, RCIMIWChatRoomMemberActionType) {
RCIMIWChatRoomMemberActionTypeUnknown = 0,
/*!
聊天室成员加入
*/
RCIMIWChatRoomMemberActionTypeJoin = 1,
/*!
聊天室成员退出
*/
RCIMIWChatRoomMemberActionTypeLeave = 2,
};
typedef NS_ENUM(NSInteger, RCIMIWBlacklistStatus) {
RCIMIWBlacklistStatusUnknown = 0,
RCIMIWBlacklistStatusInBlacklist = 1,
RCIMIWBlacklistStatusNotInBlacklist = 2,
};
#pragma mark 消息被拦截类型
typedef NS_ENUM(NSUInteger, RCIMIWMessageBlockType) {
RCIMIWMessageBlockTypeUnknown = 0,
/*!
全局敏感词:命中了融云内置的全局敏感词
*/
RCIMIWMessageBlockTypeGlobal,
/*!
自定义敏感词拦截:命中了客户在融云自定义的敏感词
*/
RCIMIWMessageBlockTypeCustom,
/*!
第三方审核拦截:命中了第三方(数美)或模板路由决定不下发的状态
*/
RCIMIWMessageBlockTypeThirdParty,
};
#pragma mark 通知状态
typedef NS_ENUM(NSInteger, RCIMIWNotificationStatus) {
RCIMIWNotificationStatusUnknown = 0,
RCIMIWNotificationStatusMute = 1,
RCIMIWNotificationStatusUnmute = 2,
};
typedef NS_ENUM(NSUInteger, RCIMIWUltraGroupTypingStatus) {
/*!
正在输入文本
*/
RCIMIWUltraGroupTypingStatusText = 0,
};
/**
VIVO 推送通道类options.typeVivo型
*/
typedef NS_ENUM(NSUInteger, RCIMIWVIVOPushType) {
/**
运营消息
*/
RCIMIWVIVOPushTypeOperate,
/**
系统消息
*/
RCIMIWVIVOPushTypeSystem,
};
#pragma mark 日志级别
/*!
日志级别
*/
typedef NS_ENUM(NSUInteger, RCIMIWLogLevel) {
/*!
* 不输出任何日志
*/
RCIMIWLogLevelNone = 0,
/*!
* 只输出错误的日志
*/
RCIMIWLogLevelError = 1,
/*!
* 输出错误和警告的日志
*/
RCIMIWLogLevelWarn = 2,
/*!
* 输出错误、警告和一般的日志
*/
RCIMIWLogLevelInfo = 3,
/*!
* 输出输出错误、警告和一般的日志以及 debug 日志
*/
RCIMIWLogLevelDebug = 4,
/*!
* 输出所有日志
*/
RCIMIWLogLevelVerbose = 5,
};
#pragma mark 消息免打扰级别
/*!
消息免打扰级别
*/
typedef NS_ENUM(NSInteger, RCIMIWPushNotificationQuietHoursLevel) {
/*!
未设置向上查询群或者APP级别设置
*/
RCIMIWPushNotificationQuietHoursLevelNone = 0,
/*!
群聊超级群仅@消息通知,单聊代表消息不通知
*/
RCIMIWPushNotificationQuietHoursLevelMention = 1,
/*!
消息通知被屏蔽,即不接收消息通知
*/
RCIMIWPushNotificationQuietHoursLevelBlocked = 5,
};
#pragma mark 消息通知级别
/*!
消息通知级别
*/
typedef NS_ENUM(NSInteger, RCIMIWPushNotificationLevel) {
/*!
全部消息通知(接收全部消息通知 -- 显示指定关闭免打扰功能)
*/
RCIMIWPushNotificationLevelAllMessage = -1,
/*!
未设置向上查询群或者APP级别设置,存量数据中0表示未设置
*/
RCIMIWPushNotificationLevelNone = 0,
/*!
群聊,超级群 @所有人 或者 @成员列表有自己 时通知;单聊代表消息不通知
*/
RCIMIWPushNotificationLevelMention = 1,
/*!
群聊,超级群 @成员列表有自己时通知,@所有人不通知;单聊代表消息不通知
*/
RCIMIWPushNotificationLevelMentionUsers = 2,
/*!
群聊,超级群 @所有人通知,其他情况都不通知;单聊代表消息不通知
*/
RCIMIWPushNotificationLevelMentionAll = 4,
/*!
消息通知被屏蔽,即不接收消息通知
*/
RCIMIWPushNotificationLevelBlocked = 5,
};
typedef NS_ENUM(NSUInteger, RCIMIWChatRoomEntriesOperationType) {
RCIMIWChatRoomEntriesOperationTypeUpdate = 0,
RCIMIWChatRoomEntriesOperationTypeRemove = 1,
};
/**
华为推送消息级别
*/
typedef NS_ENUM(NSUInteger, RCIMIWImportanceHW) {
/*!
华为推送消息级别 NORMAL表示消息为服务与通讯类。消息提醒方式为锁屏+铃声+震动。
*/
RCIMIWImportanceHWNormal = 0,
/*!
华为推送消息级别 LOW, 表示消息为资讯营销类。消息提醒方式为静默通知,仅在下拉通知栏展示。
*/
RCIMIWImportanceHWLow = 1,
};
/**
荣耀推送消息级别
*/
typedef NS_ENUM(NSUInteger, RCIMIWImportanceHonor) {
/*!
华为推送消息级别 NORMAL表示消息为服务与通讯类。消息提醒方式为锁屏+铃声+震动。
*/
RCIMIWImportanceHonorNormal = 0,
/*!
华为推送消息级别 LOW, 表示消息为资讯营销类。消息提醒方式为静默通知,仅在下拉通知栏展示。
*/
RCIMIWImportanceHonorLow = 1,
};
typedef NS_ENUM(NSUInteger, RCIMIWAreaCode) {
/// 默认值,北京数据中心
RCIMIWAreaCodeBJ = 1,
/// 新加坡数据中心
RCIMIWAreaCodeSG = 2,
/// 北美数据中心
RCIMIWAreaCodeNA = 3,
/// 新增的新加坡数据中心
RCIMIWAreaCodeSGB = 4,
/// 沙特数据中心
RCIMIWAreaCodeSA = 5,
};
#endif /* RCIMIWDefines_h */

View File

@@ -0,0 +1,664 @@
//
// RCIMIWEngineDelegate.h
// RongIMWrapper
//
// Created by RongCloud on 2/15/22.
//
#import <Foundation/Foundation.h>
#import <RongIMWrapper/RCIMIWConversation.h>
#import <RongIMWrapper/RCIMIWChatRoomMemberAction.h>
#import <RongIMWrapper/RCIMIWDefines.h>
@class RCIMIWMessage;
@class RCIMIWMediaMessage;
@class RCIMIWConversation;
@class RCIMIWTypingStatus;
@class RCIMIWTagInfo;
@class RCIMIWConversationTagInfo;
@class RCIMIWBlockedMessageInfo;
@class RCIMIWUltraGroupTypingStatusInfo;
@class RCIMIWSearchConversationResult;
#ifndef RCIMIWEngineDelegate_h
#define RCIMIWEngineDelegate_h
NS_ASSUME_NONNULL_BEGIN
@protocol RCIMIWEngineDelegate <NSObject>
@optional
#pragma mark - 事件监听
/*!
连接状态监听
*/
- (void)onConnectionStatusChanged:(RCIMIWConnectionStatus)status;
/*!
接收消息的回调方法
@param message 当前接收到的消息
@param left 还剩余的未接收的消息数left>=0
@param offline 是否是离线消息
@param hasPackage SDK 拉取服务器的消息以包(package)的形式批量拉取,有 package 存在就意味着远端服务器还有消息尚未被 SDK
拉取
@discussion 和上面的 - (void)onReceived:(RCMessage *)message left:(int)nLeft object:(id)object 功能完全一致,额外把
offline 和 hasPackage 参数暴露,开发者可以根据 nLeft、offline、hasPackage 来决定何时的时机刷新 UI ;建议当 hasPackage=0
并且 nLeft=0 时刷新 UI
@warning 如果使用此方法,那么就不能再使用 RCIM 中 - (void)onReceived:(RCMessage *)message left:(int)nLeft
object:(id)object 的使用,否则会出现重复操作的情形
*/
- (void)onMessageReceived:(RCIMIWMessage *)message
left:(NSInteger)left
offline:(BOOL)offline
hasPackage:(BOOL)hasPackage;
#pragma mark - 接口调用回调
- (void)onConnected:(NSInteger)code userId:(nullable NSString *)userId;
- (void)onDatabaseOpened:(NSInteger)code;
// 消息插入本地数据库
- (void)onMessageAttached:(RCIMIWMessage *)message;
- (void)onMediaMessageAttached:(RCIMIWMediaMessage *)message;
- (void)onMessageSent:(NSInteger)code message:(nullable RCIMIWMessage *)message;
- (void)onMediaMessageSent:(NSInteger)code message:(RCIMIWMediaMessage *)message;
- (void)onMediaMessageSending:(RCIMIWMediaMessage*)message progress:(int)progress;
- (void)onSendingMediaMessageCanceled:(NSInteger)code message:(RCIMIWMediaMessage *)message;
- (void)onMediaMessageDownloading:(RCIMIWMediaMessage *)message progress:(int)progress;
- (void)onMediaMessageDownloaded:(NSInteger)code message:(RCIMIWMediaMessage *)message;
- (void)onDownloadingMediaMessageCanceled:(NSInteger)code message:(RCIMIWMediaMessage *)message;
- (void)onGroupMessageToDesignatedUsersAttached:(RCIMIWMessage *)message;
- (void)onGroupMessageToDesignatedUsersSent:(NSInteger)code message:(RCIMIWMessage *)message;
#pragma mark - 获取历史消息
- (void)onMessagesLoaded:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
sentTime:(long long)sentTime
order:(RCIMIWTimeOrder)order
messages:(nullable NSArray<RCIMIWMessage *> *)messages;
- (void)onUnreadMentionedMessagesLoaded:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
messages:(NSArray<RCIMIWMessage *> *)messages;
- (void)onFirstUnreadMessageLoaded:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
message:(RCIMIWMessage *)message;
#pragma mark - 插入消息
- (void)onMessageInserted:(NSInteger)code message:(RCIMIWMessage *)message;
/*!
批量插入消息
*/
- (void)onMessagesInserted:(NSInteger)code messages:(NSArray<RCIMIWMessage *> *)messages;
#pragma mark - 删除消息
- (void)onMessagesCleared:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
timestamp:(long long)recordTime;
- (void)onLocalMessagesDeleted:(NSInteger)code messages:(NSArray<RCIMIWMessage *> *)messages;
- (void)onMessagesDeleted:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
messages:(NSArray<RCIMIWMessage *> *)messages;
#pragma mark - 撤回消息
/*!
本端调用撤回消息的回调
*/
- (void)onMessageRecalled:(NSInteger)code message:(RCIMIWMessage *)message;
/*!
远端撤回消息
*/
- (void)onRemoteMessageRecalled:(RCIMIWMessage *)message;
- (void)onPrivateReadReceiptMessageSent:(NSInteger)code
targetId:(NSString *)targetId
channelId:(NSString *)channelId
timestamp:(long long)timestamp;
- (void)onMessageExpansionUpdated:(NSInteger)code
messageUId:(NSString *)messageUId
expansion:(NSDictionary<NSString *, NSString *> *)expansion;
- (void)onMessageExpansionForKeysRemoved:(NSInteger)code
messageUId:(NSString *)messageUId
keys:(NSArray<NSString *> *)keys;
/**
远端更改消息扩展信息的回调
@param expansion 消息扩展信息中更新的键值对
@param message 消息
@discussion expansionDic 只包含更新的键值对,不是全部的数据。如果想获取全部的键值对,请使用 message 的 expansion 属性。
*/
- (void)onRemoteMessageExpansionUpdated:(NSDictionary<NSString *,NSString *> *)expansion message:(RCIMIWMessage *)message;
/**
远端删除消息扩展信息的回调
*/
- (void)onRemoteMessageExpansionForKeyRemoved:(RCIMIWMessage *)message keys:(NSArray<NSString *> *)keys;
- (void)onMessageReceiveStatusChanged:(NSInteger)code messageId:(long)messageId;
- (void)onMessageSentStatusChanged:(NSInteger)code messageId:(long)messageId;
- (void)onMessageBlocked:(RCIMIWBlockedMessageInfo *)info;
#pragma mark - Conversation
- (void)onConversationLoaded:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
conversation:(nullable RCIMIWConversation *)conversation;
- (void)onConversationsLoaded:(NSInteger)code
conversationTypes:(NSArray<NSNumber *> *)conversationTypes
channelId:(NSString *)channelId
startTime:(long long)startTime
count:(int)count
conversations:(nullable NSArray<RCIMIWConversation *> *)conversations;
- (void)onConversationRemoved:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId;
- (void)onConversationsRemoved:(NSInteger)code
conversationTypes:(NSArray<NSNumber *> *)conversationTypes
channelId:(NSString *)channelId;
- (void)onMessageCountLoaded:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
count:(int)count;
- (void)onTotalUnreadCountLoaded:(NSInteger)code channelId:(NSString *)channelId count:(NSInteger)count;
- (void)onUnreadCountLoaded:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
count:(NSInteger)count;
- (void)onUnreadCountByConversationTypesLoaded:(NSInteger)code
conversationTypes:(NSArray<NSNumber *> *)conversationTypes
channelId:(NSString *)channelId
contain:(BOOL)contain
count:(NSInteger)count;
- (void)onUnreadMentionedCountLoaded:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
count:(NSInteger)count;
- (void)onUnreadCountCleared:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
timestamp:(long long)timestamp;
#pragma mark - 会话草稿
- (void)onDraftMessageSaved:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
draft:(NSString *)draft;
- (void)onDraftMessageLoaded:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
draft:(NSString *)draft;
- (void)onDraftMessageCleared:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId;
#pragma mark - 会话免打扰
- (void)onConversationNotificationLevelChanged:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
level:(RCIMIWPushNotificationLevel)level;
- (void)onConversationNotificationLevelLoaded:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
level:(RCIMIWPushNotificationLevel)level;
- (void)onBlockedConversationsLoaded:(NSInteger)code
conversationTypes:(NSArray<NSNumber *> *)conversationTypes
channelId:(NSString *)channelId
conversations:(nullable NSArray<RCIMIWConversation *> *)conversations;
- (void)onConversationNotificationLevelSynced:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
level:(RCIMIWPushNotificationLevel)level;
- (void)onConversationTypeNotificationLevelChanged:(NSInteger)code
type:(RCIMIWConversationType)type
level:(RCIMIWPushNotificationLevel)level;
- (void)onConversationTypeNotificationLevelLoaded:(NSInteger)code
type:(RCIMIWConversationType)type
level:(RCIMIWPushNotificationLevel)level;
#pragma mark - 会话置顶
- (void)onConversationTopStatusChanged:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
top:(BOOL)top;
- (void)onConversationTopStatusLoaded:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
top:(BOOL)top;
- (void)onTopConversationsLoaded:(NSInteger)code
conversationTypes:(NSArray<NSNumber *> *)conversationTypes
channelId:(NSString *)channelId
conversations:(nullable NSArray<RCIMIWConversation *> *)conversations;
- (void)onConversationTopStatusSynced:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
top:(BOOL)top;
#pragma mark - 多端状态同步
- (void)onConversationReadStatusSynced:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
timestamp:(long long)timestamp;
#pragma mark - 单聊回执
- (void)onPrivateReadReceiptReceived:(NSString *)targetId
channelId:(NSString *)channelId
timestamp:(long long)timestamp;
/**
* 收到自己登录的其他端消息同步阅读状态
* @param type 会话类型
* @param targetId 目标 ID
* 消息时间戳,表示小于或等于此时间戳之前的消息为已读
*/
- (void)onConversationReadStatusSyncMessageReceived:(RCIMIWConversationType)type
targetId:(NSString *)targetId
timestamp:(long long)timestamp;
#pragma mark - 群聊回执
/*!
发起回执请求
*/
- (void)onGroupReadReceiptRequestSent:(NSInteger)code message:(RCIMIWMessage *)message;
/*!
发起回执响应
*/
- (void)onGroupReadReceiptResponseSent:(NSInteger)code
targetId:(NSString *)targetId
channelId:(NSString *)channelId
messages:(NSArray <RCIMIWMessage *> *)messages;
/*!
群聊消息回执请求监听
*/
- (void)onGroupMessageReadReceiptRequestReceived:(NSString *)targetId messageUId:(NSString *)messageUId;
/*!
群聊消息回执响应监听
*/
- (void)onGroupMessageReadReceiptResponseReceived:(NSString *)targetId messageUId:(NSString *)messageUId respondUserIds:(NSDictionary<NSString *, NSNumber *> *)respondUserIds;
#pragma mark - 输入状态
- (void)onTypingStatusChanged:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
userTypingStatus:(NSArray<RCIMIWTypingStatus *> *)userTypingStatus;
#pragma mark - 聊天室
- (void)onChatRoomJoining:(NSString *)targetId;
- (void)onChatRoomJoined:(NSInteger)code targetId:(NSString *)targetId;
- (void)onChatRoomLeft:(NSInteger)code targetId:(NSString *)targetId;
- (void)onChatRoomStatusChanged:(NSString *)targetId status:(RCIMIWChatRoomStatus)status;
- (void)onChatRoomMemberChanged:(NSString *)targetId actions:(NSArray<RCIMIWChatRoomMemberAction *> *)actions;
- (void)onChatRoomMessagesLoaded:(NSInteger)code
targetId:(NSString *)targetId
messages:(NSArray<RCIMIWMessage *> *)messages
syncTime:(long long)syncTime;
- (void)onChatRoomEntryAdded:(NSInteger)code targetId:(NSString *)targetId key:(NSString *)key;
- (void)onChatRoomEntriesAdded:(NSInteger)code
targetId:(NSString *)targetId
entries:(NSDictionary<NSString *, NSString *> *)entries
errorEntries:(NSDictionary<NSString *, NSNumber *> *)errorEntries;
- (void)onChatRoomEntryLoaded:(NSInteger)code targetId:(NSString *)targetId entry:(NSDictionary<NSString *, NSString *> *)entry;
- (void)onChatRoomAllEntriesLoaded:(NSInteger)code
targetId:(NSString *)targetId
entries:(NSDictionary<NSString *, NSString*> *)entries;
- (void)onChatRoomEntryRemoved:(NSInteger)code targetId:(NSString *)targetId key:(NSString *)key;
- (void)onChatRoomEntriesRemoved:(NSInteger)code targetId:(NSString *)targetId keys:(NSArray<NSString *> *)keys;
// kv 同步完成
- (void)onChatRoomEntriesSynced:(NSString *)roomId;
// kv 改变回调,包含更新和删除
- (void)onChatRoomEntriesChanged:(RCIMIWChatRoomEntriesOperationType)operationType
roomId:(NSString *)roomId
entries:(NSDictionary<NSString *, NSString*> *)entries;
#pragma mark - 用户管理
- (void)onBlacklistAdded:(NSInteger)code userId:(NSString *)userId;
- (void)onBlacklistRemoved:(NSInteger)code userId:(NSString *)userId;
- (void)onBlacklistLoaded:(NSInteger)code userIds:(NSArray<NSString *> *)userIds;
- (void)onBlacklistStatusLoaded:(NSInteger)code userId:(NSString *)userId status:(RCIMIWBlacklistStatus)status;
#pragma mark - 搜索消息
- (void)onMessagesSearched:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
keyword:(NSString *)keyword
startTime:(long long)startTime
count:(int)count
messages:(NSArray<RCIMIWMessage *> *)messages;
- (void)onMessagesSearchedByTimeRange:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
keyword:(NSString *)keyword
startTime:(long long)startTime
endTime:(long long)endTime
offset:(int)offset
count:(int)count
messages:(NSArray<RCIMIWMessage *> *)messages;
- (void)onMessagesSearchedByUserId:(NSInteger)code
userId:(NSString *)userId
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
channelId:(NSString *)channelId
startTime:(long long)startTime
count:(int)count
messages:(NSArray<RCIMIWMessage *> *)messages;
- (void)onConversationsSearched:(NSInteger)code
conversationTypes:(NSArray<NSNumber *> *)conversationTypes
channelId:(NSString *)channelId
messageTypes:(NSArray <NSNumber *>*)messageTypes
keyword:(NSString *)keyword
conversations:(NSArray<RCIMIWSearchConversationResult *> *)conversations;
#pragma mark - 会话标签
- (void)onTagCreated:(NSInteger)code tagId:(NSString *)tagId tagName:(NSString *)tagName;
- (void)onTagRemoved:(NSInteger)code tagId:(NSString *)tagId;
- (void)onTagNameUpdatedByName:(NSInteger)code tagId:(NSString *)tagId newName:(NSString *)newName;
- (void)onTagsLoaded:(NSInteger)code tags:(NSArray<RCIMIWTagInfo *> *)tags;
- (void)onConversationsAddedToTag:(NSInteger)code
tagId:(NSString *)tagId
conversationType:(RCIMIWConversationType)type
targetId:(NSString *)targetId;
- (void)onConversationsRemovedFromTag:(NSInteger)code
tagId:(NSString *)tagId
conversationType: (RCIMIWConversationType)type
targetId:(NSString *)targetId;
- (void)onTagsRemovedFromConversation:(NSInteger)code
conversationType:(RCIMIWConversationType)type
targetId:(NSString *)targetId
tagIds:(NSArray<NSString *> *)tagIds;
- (void)onTagsLoadedFromConversation:(NSInteger)code
tags:(NSArray<RCIMIWConversationTagInfo *> *)tags
conversationType:(RCIMIWConversationType)type
targetId:(NSString *)targetId;
- (void)onConversationsLoadedFromTagByPage:(NSInteger)code
tagId:(NSString *)tagId
timestamp:(long long)timestamp
count:(int)count;
- (void)onUnreadCountLoadedByTag:(NSInteger)code
count:(NSInteger)count
tagId:(NSString *)tagId
containBlocked:(BOOL)containBlocked;
- (void)onConversationTopStatusChangedInTag:(NSInteger)code
tagId:(NSString *)tagId
conversationType:(RCIMIWConversationType)type
targetId:(NSString *)targetId
top:(BOOL)top;
- (void)onConversationTopStatusLoadedInTag:(NSInteger)code
tagId:(NSString *)tagId
conversationType:(RCIMIWConversationType)type
targetId:(NSString *)targetId
top:(BOOL)top;
- (void)onMessagesUnreadStatusClearedByTag:(NSInteger)code
tagId:(NSString *)tagId;
- (void)onConversationClearedByTag:(NSInteger)code
tagId:(NSString *)tagId
deleteMessage:(BOOL)deleteMessage;
#pragma mark - 全局免打扰
- (void)onNotificationQuietHoursChanged:(NSInteger)code
startTime:(NSString *)startTime
spanMinutes:(int)spanMinutes
level:(RCIMIWPushNotificationQuietHoursLevel)level;
- (void)onNotificationQuietHoursRemoved:(NSInteger)code;
- (void)onNotificationQuietHoursLoaded:(NSInteger)code
startTime:(NSString *)startTime
spanMinutes:(int)spanMinutes
level:(RCIMIWPushNotificationQuietHoursLevel)level;
- (void)onPushContentShowStatusChanged:(NSInteger)code showContent:(BOOL)showContent;
- (void)onPushLanguageChanged:(NSInteger)code language:(NSString *)language;
- (void)onPushReceiveStatusChanged:(NSInteger)code receive:(BOOL)receive;
#pragma mark - 超级群
- (void)onUltraGroupConversationsSynced;
- (void)onUltraGroupReadStatusSynced:(NSInteger)code
targetId:(NSString *)targetId
channelId:(NSString *)channelId
timestamp:(long long)timestamp;
- (void)onConversationsLoadedForAllChannel:(NSInteger)code
type:(RCIMIWConversationType)type
targetId:(NSString *)targetId
conversations:(NSArray<RCIMIWConversation *> *)conversations;
- (void)onUltraGroupMessageModified:(NSInteger)code messageUId:(NSString *)messageUId;
- (void)onUltraGroupMessageRecalled:(NSInteger)code message:(RCIMIWMessage *)message deleteRemote:(BOOL)deleteRemote;
- (void)onUltraGroupMessagesCleared:(NSInteger)code
targetId:(NSString *)targetId
channelId:(NSString *)channelId
timestamp:(long long)timestamp
policy:(RCIMIWMessageOperationPolicy)policy;
- (void)onUltraGroupMessagesClearedForAllChannel:(NSInteger)code
targetId:(NSString *)targetId
timestamp:(long long)timestamp;
- (void)onUltraGroupTypingStatusSent:(NSInteger)code
targetId:(NSString *)targetId
channelId:(NSString *)channelId
typingStatus:(RCIMIWUltraGroupTypingStatus)typingStatus;
- (void)onBatchRemoteUltraGroupMessagesLoaded:(NSInteger)code
matchedMessages:(NSArray<RCIMIWMessage *> *)matchedMessages
notMatchedMessages:(NSArray<RCIMIWMessage *> *)notMatchMessages;
- (void)onUltraGroupMessageExpansionUpdated:(NSInteger)code
expansion:(NSDictionary<NSString *, NSString *> *)expansion
messageUId:(NSString *)messageUId;
- (void)onUltraGroupMessageExpansionForKeysRemoved:(NSInteger)code
messageUId:(NSString *)messageUId
keys:(NSArray<NSString *> *)keys;
/**
超级群已读时间同步
@param targetId 会话 ID
@param channelId 频道 ID
@param timestamp 已读时间
*/
- (void)onUltraGroupReadTimeReceived:(NSString *)targetId channelId:(NSString *)channelId timestamp:(long long)timestamp;
/**
超级群远端更新消息扩展的回调
*/
- (void)onRemoteUltraGroupMessageExpansionUpdated:(NSArray<RCIMIWMessage *> *)messages;
/**
超级群远端修改消息的回调
*/
- (void)onRemoteUltraGroupMessageModified:(NSArray<RCIMIWMessage *> *)messages;
- (void)onRemoteUltraGroupMessageRecalled:(NSArray<RCIMIWMessage *> *)messages;
- (void)onUltraGroupTypingStatusChanged:(NSArray<RCIMIWUltraGroupTypingStatusInfo *> *)info;
/*!
设置超级群的默认消息状态
@param targetId 会话 ID
@param level 消息通知级别
*/
- (void)onUltraGroupDefaultNotificationLevelChanged:(NSInteger)code
targetId:(NSString *)targetId
level:(RCIMIWPushNotificationLevel)level;
/*!
获取超级群的默认消息状态
@param targetId 会话 ID
*/
- (void)onUltraGroupDefaultNotificationLevelLoaded:(NSInteger)code
targetId:(NSString *)targetId
level:(RCIMIWPushNotificationLevel)level;
/*!
设置超级群频道的默认消息状态
@param targetId 会话 ID
@param channelId 频道 ID
@param level 消息通知级别
*/
- (void)onUltraGroupChannelDefaultNotificationLevelChanged:(NSInteger)code
targetId:(NSString *)targetId
channelId:(NSString *)channelId
level:(RCIMIWPushNotificationLevel)level;
/*!
获取超级群频道的默认消息状态
@param targetId 会话 ID
@param channelId 频道 ID
*/
- (void)onUltraGroupChannelDefaultNotificationLevelLoaded:(NSInteger)code
targetId:(NSString *)targetId
channelId:(NSString *)channelId
level:(RCIMIWPushNotificationLevel)level;
// 获取超级群所有会话的未读消息数
- (void)onUltraGroupAllUnreadCountLoaded:(NSInteger)code count:(NSInteger)count;
// 获取超级群所有会话的未读 @ 消息数
- (void)onUltraGroupAllUnreadMentionedCountLoaded:(NSInteger)code count:(NSInteger)count;
// 获取超级群指定会话的未读消息数
- (void)onUltraGroupUnreadCountLoaded:(NSInteger)code
targetId:(NSString *)targetId
count:(NSInteger)count;
// 获取指定会话的未读 @ 消息数
- (void)onUltraGroupUnreadMentionedCountLoaded:(NSInteger)code
targetId:(NSString *)targetId
count:(NSInteger)count;
@end
NS_ASSUME_NONNULL_END
#endif /* RCIMIWEngineDelegate_h */

View File

@@ -0,0 +1,51 @@
//
// RCIMIWEngineOptions.h
// RongIMWrapper
//
// Created by RongCloud on 2/15/22.
//
#import <Foundation/Foundation.h>
#import "RCIMIWDefines.h"
@class RCIMIWCompressOptions;
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWEngineOptions : NSObject
/*!
导航服务器地址
*/
@property (nonatomic, copy) NSString *naviServer;
/*!
文件服务器地址
*/
@property (nonatomic, copy) NSString *fileServer;
/*!
统计服务器地址
*/
@property (nonatomic, copy) NSString *statisticServer;
/// 区域码
///
/// 默认为北京数据中心用户可以根据实际情况设置区域码设置之后SDK 将会使用特定区域的服务地址
/// 每个数据中心都会有对应的 naviServer 、statisticServer 、logServer
/// 如果开发者手动设置了本类的 naviServer 、statisticServer 、logServer 将会覆盖对应区域的配置
/// 例如:设置 areaCode 为北美数据中心,同时又设置了此处的 naviServer ,那么最终会使用此处的 naviServer 而不是北美数据中心的 naviServer
@property (nonatomic, assign) RCIMIWAreaCode areaCode;
/*!
是否踢出重连设备
*/
@property (nonatomic, assign) BOOL kickReconnectDevice;
@property (nonatomic, strong) RCIMIWCompressOptions *compressOptions;
@property (nonatomic, assign) RCIMIWLogLevel logLevel;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,32 @@
//
// RCIMIWFileMessage.h
// RongIMWrapper
//
// Created by RongCloud on 3/7/22.
//
#import <RongIMWrapper/RCIMIWMediaMessage.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWFileMessage : RCIMIWMediaMessage
/**
文件名
*/
@property (nonatomic, copy) NSString *name;
/**
文件类型
*/
@property (nonatomic, copy, readonly) NSString *fileType;
/**
文件大小
*/
@property (nonatomic, assign, readonly) long long size;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,31 @@
//
// RCIMIWGIFMessage.h
// RongIMWrapper
//
// Created by RongCloud on 3/8/22.
//
#import <RongIMWrapper/RCIMIWMediaMessage.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWGIFMessage : RCIMIWMediaMessage
/*!
GIF 图的大小,单位字节
*/
@property (nonatomic, assign, readonly) long long dataSize;
/*!
GIF 图的宽
*/
@property (nonatomic, assign, readonly) long width;
/*!
GIF 图的高
*/
@property (nonatomic, assign, readonly) long height;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,32 @@
//
// RCIMIWGroupReadReceiptInfo.h
// RongIMWrapper
//
// Created by RongCloud on 4/7/22.
// Copyright © 2022 RongCloud. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWGroupReadReceiptInfo : NSObject
/*!
是否需要回执消息
*/
@property (nonatomic, assign, readonly) BOOL readReceiptMessage;
/**
是否已经发送回执
*/
@property (nonatomic, assign, readonly) BOOL hasRespond;
/*!
发送回执的用户 ID 列表
*/
@property (nonatomic, strong, readonly) NSDictionary<NSString *, NSNumber *> *respondUserIds;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,28 @@
//
// RCIMIWImageMessage.h
// RongIMWrapper
//
// Created by RongCloud on 3/7/22.
//
#import <RongIMWrapper/RCIMIWMediaMessage.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWImageMessage : RCIMIWMediaMessage
/*!
图片消息的缩略图
*/
@property (nonatomic, copy, readonly) NSString *thumbnailBase64String;
/*!
是否发送原图
@discussion 在发送图片的时候,是否发送原图,默认值为 NO。
*/
@property (nonatomic, assign) BOOL original;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,37 @@
//
// RCIMIWLocationMessage.h
// RongIMWrapper
//
// Created by RongCloud on 8/15/22.
// Copyright © 2022 RongCloud. All rights reserved.
//
#import <RongIMWrapper/RCIMIWMessage.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWLocationMessage : RCIMIWMessage
/**
经度
*/
@property(nonatomic, assign) double longitude;
/**
纬度
*/
@property(nonatomic, assign) double latitude;
/**
兴趣点名称
*/
@property(nonatomic, copy) NSString *poiName;
/*!
地理位置的缩略图
*/
@property (nonatomic, copy) NSString *thumbnailPath;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,20 @@
//
// RCIMIWMediaMessage.h
// RongIMWrapper
//
// Created by RongCloud on 2/15/22.
//
#import <Foundation/Foundation.h>
#import <RongIMWrapper/RCIMIWMessage.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWMediaMessage : RCIMIWMessage
@property (nonatomic, copy, readonly) NSString *local;
@property (nonatomic, copy, readonly) NSString *remote;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,34 @@
//
// RCIMIWMentionedInfo.h
// RongIMWrapper
//
// Created by RongCloud on 2/18/22.
//
#import <Foundation/Foundation.h>
#import <RongIMWrapper/RCIMIWDefines.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWMentionedInfo : NSObject
/*!
@ 提醒的类型
*/
@property (nonatomic, assign) RCIMIWMentionedType type;
/*!
@ 的用户 ID 列表
@discussion 如果 type 是 @ 所有人,则可以传 nil
*/
@property (nonatomic, copy) NSArray<NSString *> *userIdList;
/*!
包含 @ 提醒的消息,本地通知和远程推送显示的内容
*/
@property (nonatomic, copy) NSString *mentionedContent;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,110 @@
//
// RCIMIWMessage.h
// RongIMWrapper
//
// Created by RongCloud on 2/15/22.
//
#import <Foundation/Foundation.h>
#import <RongIMWrapper/RCIMIWMessagePushOptions.h>
#import <RongIMWrapper/RCIMIWConversation.h>
#import <RongIMWrapper/RCIMIWMentionedInfo.h>
#import <RongIMWrapper/RCIMIWDefines.h>
@class RCIMIWUserInfo;
@class RCIMIWGroupReadReceiptInfo;
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWMessage : NSObject
/*!
* 会话类型
*/
@property (nonatomic, assign, readonly) RCIMIWConversationType conversationType;
/*!
* 消息类型
*/
@property (nonatomic, assign, readonly) RCIMIWMessageType messageType;
/*!
* 会话 ID
*/
@property (nonatomic, copy, readonly) NSString *targetId;
/*!
* 所属会话的业务标识,长度限制 20 字符
*/
@property (nonatomic, copy, readonly) NSString *channelId;
/*!
* 消息的 ID
@discussion 本地存储的消息的唯一值(数据库索引唯一值)
*/
@property (nonatomic, assign, readonly) long messageId;
@property (nonatomic, copy, readonly) NSString *messageUId;
/*!
* 是否是离线消息,只在接收消息的回调方法中有效,如果消息为离线消息,则为 YES ,其他情况均为 NO
*/
@property(nonatomic, assign, readonly) BOOL offLine;
@property(nonatomic, strong, readonly) RCIMIWGroupReadReceiptInfo *groupReadReceiptInfo;
/*!
* 消息的接收时间Unix 时间戳、毫秒)
*/
@property (nonatomic, assign) long long receivedTime;
/*!
* 消息的发送时间Unix 时间戳、毫秒)
*/
@property (nonatomic, assign) long long sentTime;
/*!
* 消息的接收状态
*/
@property (nonatomic, assign) RCIMIWReceivedStatus receivedStatus;
/*!
* 消息的发送状态
*/
@property (nonatomic, assign) RCIMIWSentStatus sentStatus;
/*!
* 消息的发送者 ID
*/
@property (nonatomic, copy) NSString *senderUserId;
/*!
* 消息的方向
*/
@property (nonatomic, assign) RCIMIWMessageDirection direction;
@property (nonatomic, strong) RCIMIWUserInfo *userInfo;
@property (nonatomic, strong) RCIMIWMentionedInfo *mentionedInfo;
@property (nonatomic, strong) RCIMIWMessagePushOptions *pushOptions;
/*!
* 消息的附加字段
*/
@property (nonatomic, copy) NSString *extra;
/*!
* 消息扩展信息列表
@discussion 扩展信息只支持单聊和群组,其它会话类型不能设置扩展信息。
* 如果消息发送后需要更新扩展信息,必须在消息发送前设置此值不为空。
@discussion 默认消息扩展字典 key 长度不超过 32 value 长度不超过 64 ,单次设置扩展数量最大为 20消息的扩展总数不能超过 300
*/
@property (nonatomic, strong) NSDictionary<NSString *, NSString *> *expansion;
//- (instancetype)init __attribute__((unavailable("请使用 RCIMIWEngine 中 createXXMessage 系列方法创建对应的 message ")));
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,225 @@
//
// RCIMIWMessagePushOptions.h
// RongIMWrapper
//
// Created by RongCloud on 2/15/22.
//
#import <Foundation/Foundation.h>
#import <RongIMWrapper/RCIMIWDefines.h>
@class RCIMIWIOSPushOptions;
@class RCIMIWAndroidPushOptions;
NS_ASSUME_NONNULL_BEGIN
#pragma mark - RCIMIWMessagePushOptions
@interface RCIMIWMessagePushOptions : NSObject
/*!
是否关闭通知
YES: 关闭通知(不发送通知)
NO: 不关闭通知(发送通知)
默认 NO
*/
@property (nonatomic, assign) BOOL disableNotification;
/*!
是否屏蔽通知标题
YES: 不显示通知标题
NO: 显示通知标题
@discussion 默认情况下融云单聊消息通知标题为用户名、群聊消息为群名称,设置后不会再显示通知标题。
@discussion 此属性只针目标用户为 iOS 平台时有效Android 第三方推送平台的通知标题为必填项,所以暂不支持。
*/
@property (nonatomic, assign) BOOL disablePushTitle;
/*!
推送标题
如果没有设置,会使用下面的默认标题显示规则
默认标题显示规则:
内置消息:单聊通知标题显示为发送者名称,群聊通知标题显示为群名称。
自定义消息:默认不显示标题。
*/
@property (nonatomic, copy) NSString *pushTitle;
/*!
推送内容
优先使用 RCIMIWMessagePushOptions 的 pushContent。如果一个接口 RCIMIWMessage 和 pushContent 同时存在,且 RCIMIWMessagePushOptions.pushContent 为有效值,会优先使用 RCIMIWMessagePushOptions.pushContent 当做最终的 pushContent例如 sendMessage 、 sendMediaMessage、recallMessage 接口。
*/
@property (nonatomic, copy) NSString *pushContent;
/*!
远程推送附加信息
优先使用 MessagePushConfig 的 pushData。如果一个接口 RCMessage 和 pushData 同时存在,且 MessagePushConfig.pushData 为有效值,会优先使用 MessagePushConfig.pushData 当做最终的 pushData例如 sendMessage 、 sendMediaMessage 接口。
*/
@property (nonatomic, copy) NSString *pushData;
/*!
是否强制显示通知详情
当目标用户通过 RCIMIWEngine 中的 changePushContentShowStatus 设置推送不显示消息详情时,可通过此参数,强制设置该条消息显示推送详情。
*/
@property (nonatomic, assign) BOOL forceShowDetailContent;
/*!
推送模板 ID设置后根据目标用户通过 SDK 的 changePushLanguage 设置的语言环境,匹配模板中设置的语言内容进行推送,未匹配成功时使用默认内容进行推送,模板内容在“开发者后台-自定义推送文案”中进行设置。
注: pushTitle 和 pushContent 优先级高于模板 IDtemplateId中对应的标题和推送内容。
*/
@property (nonatomic, copy) NSString *templateId;
@property (nonatomic, assign) BOOL voIPPush;
/*!
iOS 平台相关配置
*/
@property (nonatomic, strong) RCIMIWIOSPushOptions *iOSPushOptions;
/*!
Android 平台相关配置
*/
@property (nonatomic, strong) RCIMIWAndroidPushOptions *androidPushOptions;
@end
#pragma mark - RCIMIWIOSPushOptions
@interface RCIMIWIOSPushOptions : NSObject
/*!
iOS 平台通知栏分组 ID
相同的 thread-id 推送分为一组
iOS10 开始支持
*/
@property (nonatomic, copy) NSString *threadId;
/*!
iOS 标识推送的类型
如果不设置后台默认取消息类型字符串,如 RC:TxtMsg
*/
@property (nonatomic, copy) NSString *category;
/*!
iOS 平台通知覆盖 ID
apnsCollapseId 相同时,新收到的通知会覆盖老的通知,最大 64 字节
iOS10 开始支持
*/
@property (nonatomic, copy) NSString *apnsCollapseId;
/*!
iOS 富文本推送内容
*/
@property (nonatomic, copy) NSString *richMediaUri;
@end
#pragma mark - RCIMIWAndroidPushOptions
@interface RCIMIWAndroidPushOptions : NSObject
/*!
Android 平台 Push 唯一标识
目前支持小米、华为推送平台,默认开发者不需要进行设置,当消息产生推送时,消息的 messageUId 作为 notificationId 使用。
*/
@property (nonatomic, copy) NSString *notificationId;
/*!
小米的渠道 ID
该条消息针对小米使用的推送渠道,如开发者集成了小米推送,需要指定 channelId 时,可向 Android 端研发人员获取channelId 由开发者自行创建。
*/
@property (nonatomic, copy) NSString *channelIdMi;
/*!
华为的渠道 ID
该条消息针对华为使用的推送渠道,如开发者集成了华为推送,需要指定 channelId 时,可向 Android 端研发人员获取channelId 由开发者自行创建。
*/
@property (nonatomic, copy) NSString *channelIdHW;
/*!
华为推送消息分类
社交通讯:即时通讯[IM],音频、视频通话[VOIP]
服务提醒:订阅[SUBSCRIPTION],出行[TRAVEL],健康[HEALTH],工作事项提醒[WORK],帐号动态[ACCOUNT],订单&物流[EXPRESS],财务[FINANCE],系统提示[SYSTEM_REMINDER],邮件[MAIL]
资讯营销类:内容资讯/新闻/财经动态/生活资讯/社交动态/调研/其他[MARKETING]
营销活动:产品促销/功能推荐/运营活动/MARKETING
更多信息请参考华为消息分类标准文档: https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/message-classification-0000001149358835
@discussion 默认值为 null如果为 null则以服务配置为准
@since 5.4.0
*/
@property (nonatomic, copy) NSString *categoryHW;
/*!
OPPO 的渠道 ID
该条消息针对 OPPO 使用的推送渠道,如开发者集成了 OPPO 推送,需要指定 channelId 时,可向 Android 端研发人员获取channelId 由开发者自行创建。
*/
@property (nonatomic, copy) NSString *channelIdOPPO;
/*!
VIVO 推送通道类型
开发者集成了 VIVO 推送,需要指定推送类型时,可进行设置。
目前可选值 "0"(运营消息) 和 "1"(系统消息)
*/
@property (nonatomic, assign) RCIMIWVIVOPushType pushTypeVIVO;
/*!
FCM 通知类型推送时所使用的分组 id
*/
@property (nonatomic, copy) NSString *collapseKeyFCM;
/*!
FCM 通知类型的推送所使用的通知图片 url
*/
@property (nonatomic, copy) NSString *imageUrlFCM;
/*!
华为推送消息级别
*/
@property (nonatomic, assign) RCIMIWImportanceHW importanceHW;
/*!
华为通知栏消息右侧大图标 URL
如果不设置则不展示通知栏右侧图标。URL使用的协议必须是HTTPS协议取值样例https://example.com/image.png。
图标文件须小于 512KB图标建议规格大小40dp x 40dp弧角大小为 8dp超出建议规格大小的图标会存在图片压缩或显示不全的情况。
*/
@property (nonatomic, copy) NSString *imageUrlHW;
/*!
小米 Large icon 链接
Large icon 可以出现在大图版和多字版消息中,显示在右边。国内版仅 MIUI12 以上版本支持,以下版本均不支持;国际版支持。图片要求:大小 120 * 120px格式为 png 或者 jpg 格式。
*/
@property (nonatomic, copy) NSString *imageUrlMi;
/*!
FCM 通知的频道 ID
该应用程序必须使用此频道 ID 创建一个频道,然后才能收到带有该频道 ID 的任何通知。如果您未在请求中发送此频道 ID或者如果应用尚未创建提供的频道 ID则 FCM 使用应用清单中指定的频道 ID。
*/
@property (nonatomic, copy) NSString *channelIdFCM;
/*!
Vivo 推送消息分类
系统消息分类
即时消息[IM],账号与资产[ACCOUNT],日程待办[TODO],设备信息[DEVICE_REMINDER],订单与物流[ORDER],订阅提醒[SUBSCRIPTION]
运营消息分类
新闻[NEWS],内容推荐[CONTENT],运营活动[MARKETING],社交动态[SOCIAL]
更多信息请参考 Vivo 消息分类标准文档: https://dev.vivo.com.cn/documentCenter/doc/359
@discussion 默认值为 null如果为 null则以服务配置为准
@since 5.4.3
*/
@property (nonatomic, copy) NSString *categoryVivo;
/*!
荣耀推送消息级别
*/
@property (nonatomic, assign) RCIMIWImportanceHonor importanceHonor;
@property (nonatomic, copy) NSString *imageUrlHonor;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,26 @@
//
// RCIMIWNativeCustomMediaMessage.h
// RongIMWrapper
//
// Created by Lang on 2024/6/3.
// Copyright © 2024 RongCloud. All rights reserved.
//
#import <RongIMWrapper/RCIMIWMediaMessage.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWNativeCustomMediaMessage : RCIMIWMediaMessage
/// 自定义消息的内容
@property (nonatomic, copy) NSDictionary<NSString *, NSString *> *fields;
/// 消息搜索关键字
@property (nonatomic, copy) NSArray<NSString *> *searchableWords;
/// 消息类型名
@property (nonatomic, copy, readonly) NSString *messageIdentifier;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,26 @@
//
// RCIMIWNativeCustomMessage.h
// RongIMWrapper
//
// Created by Lang on 2024/5/30.
// Copyright © 2024 RongCloud. All rights reserved.
//
#import <RongIMWrapper/RCIMIWMessage.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWNativeCustomMessage : RCIMIWMessage
/// 自定义消息的 json 内容
@property (nonatomic, copy) NSDictionary<NSString *, NSString *> *fields;
/// 消息搜索关键字
@property (nonatomic, copy) NSArray<NSString *> *searchableWords;
/// 消息类型名
@property (nonatomic, copy, readonly) NSString *messageIdentifier;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,99 @@
//
// RCIMIWPlatformConverter.h
// RongIMWrapper
//
// Created by zhangyifan on 2022/5/10.
// Copyright © 2022 RongCloud. All rights reserved.
//
#import <Foundation/Foundation.h>
@class RCIMIWChatRoomMemberAction;
@class RCIMIWBlockedMessageInfo;
@class RCIMIWGroupReadReceiptInfo;
@class RCIMIWBlockedMessageInfo;
@class RCIMIWTypingStatus;
@class RCIMIWUltraGroupTypingStatusInfo;
@class RCIMIWMessage;
@class RCIMIWMediaMessage;
@class RCIMIWMessagePushOptions;
@class RCIMIWCompressOptions;
@class RCIMIWEngineOptions;
@class RCIMIWSearchConversationResult;
@class RCIMIWAndroidPushOptions;
@class RCIMIWIOSPushOptions;
@class RCIMIWConversation;
@class RCIMIWTagInfo;
@class RCIMIWConversationTagInfo;
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWPlatformConverter : NSObject
// ChatRoomMemberAction
+ (NSDictionary *)convertChatRoomMemberActionToDict:(RCIMIWChatRoomMemberAction *)chatRoomMemberAction;
+ (RCIMIWChatRoomMemberAction *)convertChatRoomMemberActionFromDict:(NSDictionary *)chatRoomMemberAction;
// BlockedMessageInfo
+ (NSDictionary *)convertBlockedMessageInfoToDict:(RCIMIWBlockedMessageInfo *)blockedMessageInfo;
+ (RCIMIWBlockedMessageInfo *)convertBlockedMessageInfoFromDict:(NSDictionary *)blockedMessageInfo;
// GroupReadReceiptInfo
+ (NSDictionary *)convertGroupReadReceiptInfoToDict:(RCIMIWGroupReadReceiptInfo *)groupReadReceiptInfo;
+ (RCIMIWGroupReadReceiptInfo *)convertGroupReadReceiptInfoFromDict:(NSDictionary *)groupReadReceiptInfo;
// TypingStatus
+ (NSDictionary *)convertTypingStatusToDict:(RCIMIWTypingStatus *)typingStatus;
+ (RCIMIWTypingStatus *)convertTypingStatusFromDict:(NSDictionary *)typingStatus;
// UltraGroupTypingStatusInfo
+ (NSDictionary *)convertUltraGroupTypingStatusInfoToDict:(RCIMIWUltraGroupTypingStatusInfo *)ultraGroupTypingStatusInfo;
+ (RCIMIWUltraGroupTypingStatusInfo *)convertUltraGroupTypingStatusInfoFromDict:(NSDictionary *)ultraGroupTypingStatusInfo;
// Message
+ (NSDictionary *)convertMessageToDict:(RCIMIWMessage *)message;
+ (RCIMIWMessage *)convertMessageFromDict:(NSDictionary *)message;
+ (NSDictionary *)convertMediaMessageToDict:(RCIMIWMediaMessage *)message;
+ (RCIMIWMediaMessage *)convertMediaMessageFromDict:(NSDictionary *)message;
// AndroidPushOptions
//+ (NSDictionary *)convertAndroidPushOptionsToDict:(RCIMIWAndroidPushOptions *)androidPushOptions;
//+ (RCIMIWAndroidPushOptions *)convertAndroidPushOptionsFromDict:(NSDictionary *)androidPushOptions;
// EngineOptions
+ (NSDictionary *)convertEngineOptionsToDict:(RCIMIWEngineOptions *)engineOptions;
+ (RCIMIWEngineOptions *)convertEngineOptionsFromDict:(NSDictionary *)engineOptions;
// IOSPushOptions
//+ (NSDictionary *)convertIOSPushOptionsToDict:(RCIMIWIOSPushOptions *)iosPushOptions;
//+ (RCIMIWIOSPushOptions *)convertIOSPushOptionsFromDict:(NSDictionary *)iosPushOptions;
// MessagePushOptions
+ (NSDictionary *)convertMessagePushOptionsToDict:(RCIMIWMessagePushOptions *)messagePushOptions;
+ (RCIMIWMessagePushOptions *)convertMessagePushOptionsFromDict:(NSDictionary *)messagePushOptions;
// Conversation
+ (NSDictionary *)convertConversationToDict:(RCIMIWConversation *)conversation;
// SearchConversationResult
+ (NSDictionary *)convertSearchConversationResultToDict:(RCIMIWSearchConversationResult *)searchConversationResult;
// SearchConversationResult
+ (NSDictionary *)convertTagInfoToDict:(RCIMIWTagInfo *)tagInfo;
// SearchConversationResult
+ (NSDictionary *)convertConversationTagInfoToDict:(RCIMIWConversationTagInfo *)tagInfo;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,47 @@
//
// RCIMIWRecallNotificationMessage.h
// RongIMWrapper
//
// Created by RongCloud on 3/9/22.
//
#import <RongIMWrapper/RCIMIWMessage.h>
NS_ASSUME_NONNULL_BEGIN
/*!
撤回通知消息类
@discussion 撤回通知消息,此消息会进行本地存储,但不计入未读消息数。
@remarks 通知类消息
*/
@interface RCIMIWRecallNotificationMessage : RCIMIWMessage
/*!
是否是管理员操作
*/
@property (nonatomic, assign, readonly) BOOL admin;
/*!
是否删除
*/
@property (nonatomic, assign, readonly) BOOL deleted;
/*!
撤回的时间(毫秒)
*/
@property (nonatomic, assign, readonly) long long recallTime;
/*!
撤回动作的时间(毫秒)
*/
@property (nonatomic, assign, readonly) long long recallActionTime;
/*!
被撤回的原消息
*/
@property (nonatomic, strong, readonly) RCIMIWMessage *originalMessage;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,26 @@
//
// RCIMIWReferenceMessage.h
// RongIMWrapper
//
// Created by RongCloud on 3/8/22.
//
#import <RongIMWrapper/RCIMIWMessage.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWReferenceMessage : RCIMIWMessage
/*!
文本
*/
@property (nonatomic, strong, readonly) NSString *text;
/*!
被引用消息体
*/
@property (nonatomic, strong, readonly) RCIMIWMessage *referenceMessage;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,29 @@
//
// RCIMIWSearchConversationResult.h
// RongIMWrapper
//
// Created by RongCloud on 3/17/22.
// Copyright © 2022 RongCloud. All rights reserved.
//
#import <Foundation/Foundation.h>
@class RCIMIWConversation;
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWSearchConversationResult : NSObject
/*!
匹配的会话对象
*/
@property (nonatomic, strong, readonly) RCIMIWConversation *conversation;
/*
会话匹配的消息条数
*/
@property (nonatomic, assign, readonly) int count;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,33 @@
//
// RCIMIWSightMessage.h
// RongIMWrapper
//
// Created by RongCloud on 3/7/22.
//
#import <RongIMWrapper/RCIMIWMediaMessage.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWSightMessage : RCIMIWMediaMessage
/**
视频时长,以秒为单位
*/
@property (nonatomic, assign, readonly) NSUInteger duration;
/**
文件大小
*/
@property (nonatomic, assign, readonly) long long size;
/**
小视频文件名
*/
@property (nonatomic, copy, readonly) NSString *name;
@property (nonatomic, copy, readonly) NSString *thumbnailBase64String;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,45 @@
//
// RCIMIWTagInfo.h
// RongIMWrapper
//
// Created by RongCloud on 3/3/22.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWTagInfo : NSObject
/*!
标签 ID
*/
@property (nonatomic, copy, readonly) NSString *tagId;
/*!
标签名称
*/
@property (nonatomic, copy, readonly) NSString *tagName;
/*!
该标签下的会话个数
*/
@property (nonatomic, assign, readonly) NSInteger count;
/*!
标签创建时间
*/
@property (nonatomic, assign, readonly) long long timestamp;
/*!
初始化方法
@param tagId 标签 id
@param tagName 标签名称
*/
- (instancetype)initWithTagId:(NSString *)tagId
tagName:(NSString *)tagName;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,18 @@
//
// RCIMIWTextMessage.h
// RongIMWrapper
//
// Created by RongCloud on 3/7/22.
//
#import <RongIMWrapper/RCIMIWMessage.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWTextMessage : RCIMIWMessage
@property (nonatomic, copy) NSString *text;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,29 @@
//
// RCIMIWTypingStatus.h
// RongIMWrapper
//
// Created by RongCloud on 3/3/22.
//
#import <Foundation/Foundation.h>
#import <RongIMWrapper/RCIMIWDefines.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWTypingStatus : NSObject
/*!
当前正在输入的用户 ID
*/
@property (nonatomic, copy, readonly) NSString *userId;
/*!
当前正在输入的消息类型名
*/
@property (nonatomic, copy, readonly) NSString *contentType;
@property (nonatomic, assign, readonly) long long sentTime;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,48 @@
//
// RCIMIWUltraGroupTypingStatusInfo.h
// RongIMWrapper
//
// Created by RongCloud on 3/21/22.
// Copyright © 2022 RongCloud. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <RongIMWrapper/RCIMIWDefines.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWUltraGroupTypingStatusInfo : NSObject
/*!
会话 ID
*/
@property (nonatomic, copy, readonly) NSString *targetId;
/*!
所属会话的业务标识
*/
@property (nonatomic, copy, readonly) NSString *channelId;
/*!
用户id
*/
@property (nonatomic, copy, readonly) NSString *userId;
/*!
用户数
*/
@property (nonatomic, assign, readonly) NSInteger userNums;
/*!
输入状态
*/
@property (nonatomic, assign, readonly) RCIMIWUltraGroupTypingStatus status;
/*!
服务端收到用户操作的上行时间.
*/
@property (nonatomic, assign, readonly) long long timestamp;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,19 @@
//
// RCIMIWUnknownMessage.h
// RongIMWrapper
//
// Created by RongCloud on 3/9/22.
//
#import <RongIMWrapper/RCIMIWMessage.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWUnknownMessage : RCIMIWMessage
@property (nonatomic, copy, readonly) NSString *rawData;
@property (nonatomic, copy, readonly) NSString *objectName;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,51 @@
//
// RCIMIWUserInfo.h
// RongIMWrapper
//
// Created by RongCloud on 2/18/22.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWUserInfo : NSObject
/*!
用户 ID
*/
@property (nonatomic, copy) NSString *userId;
/*!
用户名称
*/
@property (nonatomic, copy) NSString *name;
/*!
用户头像的 URL
*/
@property (nonatomic, copy) NSString *portrait;
/*!
用户备注
*/
@property (nonatomic, copy) NSString *alias;
/**
用户信息附加字段
*/
@property (nonatomic, copy) NSString *extra;
/*!
用户信息的初始化方法
@param userId 用户 ID
@param name 用户名称
@param portraitUri 用户头像的 URL
@return 用户信息对象
*/
- (instancetype)initWithUserId:(NSString *)userId name:(NSString *)name portraitUri:(NSString *)portraitUri;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,21 @@
//
// RCIMIWVoiceMessage.h
// RongIMWrapper
//
// Created by RongCloud on 3/7/22.
//
#import <RongIMWrapper/RCIMIWMediaMessage.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCIMIWVoiceMessage : RCIMIWMediaMessage
/**
语音时长,以秒为单位
*/
@property (nonatomic, assign, readonly) NSUInteger duration;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,57 @@
//
// RongIMWrapper.h
// RongIMWrapper
//
// Created by RongCloud on 2/15/22.
//
#import <Foundation/Foundation.h>
//! Project version number for RongIMWrapper.
FOUNDATION_EXPORT double RongIMWrapperVersionNumber;
//! Project version string for RongIMWrapper.
FOUNDATION_EXPORT const unsigned char RongIMWrapperVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <RongIMWrapper/PublicHeader.h>
#import <RongIMWrapper/RCIMIWEngine.h>
#import <RongIMWrapper/RCIMIWEngineOptions.h>
#import <RongIMWrapper/RCIMIWMessagePushOptions.h>
#import <RongIMWrapper/RCIMIWCompressOptions.h>
#import <RongIMWrapper/RCIMIWMessage.h>
#import <RongIMWrapper/RCIMIWMediaMessage.h>
#import <RongIMWrapper/RCIMIWTextMessage.h>
#import <RongIMWrapper/RCIMIWImageMessage.h>
#import <RongIMWrapper/RCIMIWVoiceMessage.h>
#import <RongIMWrapper/RCIMIWSightMessage.h>
#import <RongIMWrapper/RCIMIWFileMessage.h>
#import <RongIMWrapper/RCIMIWGIFMessage.h>
#import <RongIMWrapper/RCIMIWCustomMessage.h>
#import <RongIMWrapper/RCIMIWCommandMessage.h>
#import <RongIMWrapper/RCIMIWReferenceMessage.h>
#import <RongIMWrapper/RCIMIWCommandNotificationMessage.h>
#import <RongIMWrapper/RCIMIWRecallNotificationMessage.h>
#import <RongIMWrapper/RCIMIWLocationMessage.h>
#import <RongIMWrapper/RCIMIWUnknownMessage.h>
#import <RongIMWrapper/RCIMIWNativeCustomMessage.h>
#import <RongIMWrapper/RCIMIWNativeCustomMediaMessage.h>
#import <RongIMWrapper/RCIMIWConversation.h>
#import <RongIMWrapper/RCIMIWSearchConversationResult.h>
#import <RongIMWrapper/RCIMIWGroupReadReceiptInfo.h>
#import <RongIMWrapper/RCIMIWBlockedMessageInfo.h>
#import <RongIMWrapper/RCIMIWMentionedInfo.h>
#import <RongIMWrapper/RCIMIWUserInfo.h>
#import <RongIMWrapper/RCIMIWTypingStatus.h>
#import <RongIMWrapper/RCIMIWTagInfo.h>
#import <RongIMWrapper/RCIMIWConversationTagInfo.h>
#import <RongIMWrapper/RCIMIWUltraGroupTypingStatusInfo.h>
#import <RongIMWrapper/RCIMIWPlatformConverter.h>
#import <RongIMWrapper/RCIMIWDefines.h>

View File

@@ -0,0 +1,6 @@
framework module RongIMWrapper {
umbrella header "RongIMWrapper.h"
export *
module * { export * }
}

View File

@@ -0,0 +1,61 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Location</key>
<dict>
<key>LocationImageQuality</key>
<real>0.7</real>
<key>LocationImageWidth</key>
<string>480</string>
<key>LocationImageHeight</key>
<string>240</string>
</dict>
<key>File</key>
<dict>
<key>RelativePath</key>
<string>Documents/MyFile</string>
<key>MaxRangeUnit</key>
<real>1048576</real>
</dict>
<key>Voice</key>
<dict>
<key>AudioEncodingBitRate</key>
<real>7950</real>
</dict>
<key>Image</key>
<dict>
<key>ThumbnailQuality</key>
<string>0.3</string>
<key>ThumbnailMaxSize</key>
<string>240</string>
<key>ThumbnailMinSize</key>
<string>100</string>
<key>ImageQuality</key>
<real>0.85</real>
<key>ImageWidth</key>
<integer>1080</integer>
<key>ImageHeight</key>
<integer>1080</integer>
</dict>
<key>CustomerService</key>
<dict>
<key>SuspendWhenLeave</key>
<true/>
</dict>
<key>Download</key>
<dict>
<key>DownloadSliceSize</key>
<real>20971520</real>
</dict>
<key>Sight</key>
<dict>
<key>SightCompressWidth</key>
<integer>540</integer>
<key>SightCompressHeight</key>
<integer>960</integer>
</dict>
<key>HeartBeatInterval</key>
<integer>15</integer>
</dict>
</plist>

View File

@@ -0,0 +1,672 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>files</key>
<dict>
<key>Headers/RCIMIWBlockedMessageInfo.h</key>
<data>
oFtw97CuFfdFacaQCYa0vlc7X8w=
</data>
<key>Headers/RCIMIWChatRoomMemberAction.h</key>
<data>
Irj/sfQvPSbDI155s7oeMqPcawg=
</data>
<key>Headers/RCIMIWCommandMessage.h</key>
<data>
Qx757Ked5q26cEvzSx+fAp6GI9M=
</data>
<key>Headers/RCIMIWCommandNotificationMessage.h</key>
<data>
OG3jeKw+nw3SaLkg9FWDi2X3lrc=
</data>
<key>Headers/RCIMIWCompressOptions.h</key>
<data>
xHum9csO4h31oM4ThiqfGWmExVE=
</data>
<key>Headers/RCIMIWConversation.h</key>
<data>
9eTyDyAkPaqkeLDtc3BXetXSxYY=
</data>
<key>Headers/RCIMIWConversationTagInfo.h</key>
<data>
C5vgJNgPATsesPBQufy4L5gpSnQ=
</data>
<key>Headers/RCIMIWCustomMessage.h</key>
<data>
rrUBcrcJmz829fv4diEcXP4H5YE=
</data>
<key>Headers/RCIMIWDefines.h</key>
<data>
eol/yMMWxD5sCT05wcGeXcYmqUM=
</data>
<key>Headers/RCIMIWEngine.h</key>
<data>
64Y+xrsLW0p1FIexk8K8ICOLCw0=
</data>
<key>Headers/RCIMIWEngineDelegate.h</key>
<data>
ZyHi3S2t7/25g9YxWxmKpUVHm9w=
</data>
<key>Headers/RCIMIWEngineOptions.h</key>
<data>
ud+wnRuziaUxwXm6wxNrhO2bBRc=
</data>
<key>Headers/RCIMIWFileMessage.h</key>
<data>
UPDum8Tj3FXB+ldQidm+r+tr01s=
</data>
<key>Headers/RCIMIWGIFMessage.h</key>
<data>
mpVdornL+JqEIlGXyJ7F9b7MJZ4=
</data>
<key>Headers/RCIMIWGroupReadReceiptInfo.h</key>
<data>
03Hkay3rOYHjnhURsy8rsK2tX/k=
</data>
<key>Headers/RCIMIWImageMessage.h</key>
<data>
KYDTFZHSu5lEYa4l+lg1KBxDKOs=
</data>
<key>Headers/RCIMIWLocationMessage.h</key>
<data>
5mU4FWewcdpZyIUwjF8GOXihTmQ=
</data>
<key>Headers/RCIMIWMediaMessage.h</key>
<data>
Jqjv39goLbc6GSwraJ9Wspz/vpA=
</data>
<key>Headers/RCIMIWMentionedInfo.h</key>
<data>
2LvZ0xCmos1SX4KawuSJY1Tkd98=
</data>
<key>Headers/RCIMIWMessage.h</key>
<data>
KUjzmIGwOMx9PT8vTkFgWYjdSwU=
</data>
<key>Headers/RCIMIWMessagePushOptions.h</key>
<data>
INZw8eqQqHxDVlRDBufb3BzB0zw=
</data>
<key>Headers/RCIMIWNativeCustomMediaMessage.h</key>
<data>
TtJvIjR75Xsdwui1Xgi2LDy7sQo=
</data>
<key>Headers/RCIMIWNativeCustomMessage.h</key>
<data>
jl/KqekfUeoiPBsnZx9uSXwL604=
</data>
<key>Headers/RCIMIWPlatformConverter.h</key>
<data>
qBfombP/fhIyPE4YuBePNjby9DI=
</data>
<key>Headers/RCIMIWRecallNotificationMessage.h</key>
<data>
hfpwloo0psjA3Do5qKerrEEGxwI=
</data>
<key>Headers/RCIMIWReferenceMessage.h</key>
<data>
grgrdiQxBQgcjcv5n0veJ+CAziI=
</data>
<key>Headers/RCIMIWSearchConversationResult.h</key>
<data>
qxxZUH0k9fzbrwHlwWHhHBxJ5R0=
</data>
<key>Headers/RCIMIWSightMessage.h</key>
<data>
sHEoJgaWKxvOUA1AsuPuaXTQZOM=
</data>
<key>Headers/RCIMIWTagInfo.h</key>
<data>
nay+4cxqaKWFfJAFjRSFwhInC/8=
</data>
<key>Headers/RCIMIWTextMessage.h</key>
<data>
Rm8BdDUpfiiOteZNWkBihhndJ9k=
</data>
<key>Headers/RCIMIWTypingStatus.h</key>
<data>
akJLOB7HKoppJFBl7M+CRqVnzsE=
</data>
<key>Headers/RCIMIWUltraGroupTypingStatusInfo.h</key>
<data>
bbwfwGtOchVmLKU/iOe3eDHptik=
</data>
<key>Headers/RCIMIWUnknownMessage.h</key>
<data>
qgUrjxdq+sCU6/1/T4I9sq4LcHA=
</data>
<key>Headers/RCIMIWUserInfo.h</key>
<data>
5g7vzLQk3tcFraYj6LiXTofflNA=
</data>
<key>Headers/RCIMIWVoiceMessage.h</key>
<data>
qsVZR8GP7n2O5FqQcKtBfAChfbM=
</data>
<key>Headers/RongIMWrapper.h</key>
<data>
YdH8Ujk85GPUJ+MR6roHGiP+3tU=
</data>
<key>Info.plist</key>
<data>
HTOWT29pO5aqD+CmuzFlvT9wnww=
</data>
<key>Modules/module.modulemap</key>
<data>
Vh9vdNQkaXreFCi1krLgoYVDvCg=
</data>
<key>RCConfig.plist</key>
<data>
QA7nn/q1j2Y4AJbaGtBBs8g71xE=
</data>
</dict>
<key>files2</key>
<dict>
<key>Headers/RCIMIWBlockedMessageInfo.h</key>
<dict>
<key>hash</key>
<data>
oFtw97CuFfdFacaQCYa0vlc7X8w=
</data>
<key>hash2</key>
<data>
nNHHGlz3h+zRUQ/VsvRQ0Xyqx9kgRY4NHDprJKhsDO4=
</data>
</dict>
<key>Headers/RCIMIWChatRoomMemberAction.h</key>
<dict>
<key>hash</key>
<data>
Irj/sfQvPSbDI155s7oeMqPcawg=
</data>
<key>hash2</key>
<data>
dJEENT/QimJq1ZJ8juxcIs3g2V+UwfgDdKPLV6JWzKE=
</data>
</dict>
<key>Headers/RCIMIWCommandMessage.h</key>
<dict>
<key>hash</key>
<data>
Qx757Ked5q26cEvzSx+fAp6GI9M=
</data>
<key>hash2</key>
<data>
A9QP8rCAngk9gKWqr4RNV6DGmW5fLwrb7DPjG0eEcAQ=
</data>
</dict>
<key>Headers/RCIMIWCommandNotificationMessage.h</key>
<dict>
<key>hash</key>
<data>
OG3jeKw+nw3SaLkg9FWDi2X3lrc=
</data>
<key>hash2</key>
<data>
d7RxZ/a+a2wBKPE09QvuXYbEoFH9QbpPuiPKgkLJLIw=
</data>
</dict>
<key>Headers/RCIMIWCompressOptions.h</key>
<dict>
<key>hash</key>
<data>
xHum9csO4h31oM4ThiqfGWmExVE=
</data>
<key>hash2</key>
<data>
Xb4YsZJJ9PUPGBvsmbDufy2NBIti11o4QSQQFC4fUZo=
</data>
</dict>
<key>Headers/RCIMIWConversation.h</key>
<dict>
<key>hash</key>
<data>
9eTyDyAkPaqkeLDtc3BXetXSxYY=
</data>
<key>hash2</key>
<data>
Ce0mpcf06Wl3c56Ree9dpQJxyw0eXrQFSOSbW6aWe90=
</data>
</dict>
<key>Headers/RCIMIWConversationTagInfo.h</key>
<dict>
<key>hash</key>
<data>
C5vgJNgPATsesPBQufy4L5gpSnQ=
</data>
<key>hash2</key>
<data>
yLRPC+dWbAoNGPmwjd8jVNHZIlaphbKuehQWY93v28w=
</data>
</dict>
<key>Headers/RCIMIWCustomMessage.h</key>
<dict>
<key>hash</key>
<data>
rrUBcrcJmz829fv4diEcXP4H5YE=
</data>
<key>hash2</key>
<data>
g1szSyNUGQlIdSQREcs8KG0fudaJVU5WO83PHR7lABM=
</data>
</dict>
<key>Headers/RCIMIWDefines.h</key>
<dict>
<key>hash</key>
<data>
eol/yMMWxD5sCT05wcGeXcYmqUM=
</data>
<key>hash2</key>
<data>
BVGBRSwY5wKEat5PE4nFqps1FVWTbwCiBdItmLNcK8o=
</data>
</dict>
<key>Headers/RCIMIWEngine.h</key>
<dict>
<key>hash</key>
<data>
64Y+xrsLW0p1FIexk8K8ICOLCw0=
</data>
<key>hash2</key>
<data>
UrxJREgUJC9UUYi/wE70/8Fgbg8xckI7i9xH1h/Wc54=
</data>
</dict>
<key>Headers/RCIMIWEngineDelegate.h</key>
<dict>
<key>hash</key>
<data>
ZyHi3S2t7/25g9YxWxmKpUVHm9w=
</data>
<key>hash2</key>
<data>
YrXKrToIMLnsY3hFS4qYUPmJAxQxIU7sWDyF/7qLBac=
</data>
</dict>
<key>Headers/RCIMIWEngineOptions.h</key>
<dict>
<key>hash</key>
<data>
ud+wnRuziaUxwXm6wxNrhO2bBRc=
</data>
<key>hash2</key>
<data>
fx4bU9ekLddFW8qP+iwvOFcOUPzUBbAxoTLD8Cq0PyM=
</data>
</dict>
<key>Headers/RCIMIWFileMessage.h</key>
<dict>
<key>hash</key>
<data>
UPDum8Tj3FXB+ldQidm+r+tr01s=
</data>
<key>hash2</key>
<data>
EXIbvs8fvoqaNmk6DEtStlqa1b/GSwp/IMD+q+Uzqyg=
</data>
</dict>
<key>Headers/RCIMIWGIFMessage.h</key>
<dict>
<key>hash</key>
<data>
mpVdornL+JqEIlGXyJ7F9b7MJZ4=
</data>
<key>hash2</key>
<data>
9gw+eXxC5N3mDzYscVLCwN3YlIHO+Chge5egYeGrKDA=
</data>
</dict>
<key>Headers/RCIMIWGroupReadReceiptInfo.h</key>
<dict>
<key>hash</key>
<data>
03Hkay3rOYHjnhURsy8rsK2tX/k=
</data>
<key>hash2</key>
<data>
mO8PiMP6mtcgKMmAHp0RtXS3S2DWkw/zJebC7+B576g=
</data>
</dict>
<key>Headers/RCIMIWImageMessage.h</key>
<dict>
<key>hash</key>
<data>
KYDTFZHSu5lEYa4l+lg1KBxDKOs=
</data>
<key>hash2</key>
<data>
9vSrnft9SHddZuUKxnqwi3dqhwEcDSeDqpGrXGPjWy4=
</data>
</dict>
<key>Headers/RCIMIWLocationMessage.h</key>
<dict>
<key>hash</key>
<data>
5mU4FWewcdpZyIUwjF8GOXihTmQ=
</data>
<key>hash2</key>
<data>
4aN0WFOisK9iWsIfPYpaiemEqSkLKjSBHp0AKzwFDbI=
</data>
</dict>
<key>Headers/RCIMIWMediaMessage.h</key>
<dict>
<key>hash</key>
<data>
Jqjv39goLbc6GSwraJ9Wspz/vpA=
</data>
<key>hash2</key>
<data>
UYTeVsVzOiRxW6tvDrjUCFzDtAJ59EcdumZOhPe6fuc=
</data>
</dict>
<key>Headers/RCIMIWMentionedInfo.h</key>
<dict>
<key>hash</key>
<data>
2LvZ0xCmos1SX4KawuSJY1Tkd98=
</data>
<key>hash2</key>
<data>
a8e+yr5CJavd91kN/ceqjRtkVqnL3WGKd96FSaIYn1M=
</data>
</dict>
<key>Headers/RCIMIWMessage.h</key>
<dict>
<key>hash</key>
<data>
KUjzmIGwOMx9PT8vTkFgWYjdSwU=
</data>
<key>hash2</key>
<data>
8+94KpgMMid7dfHc81WzTIFeRWUvKg9FOfB0i45IOXQ=
</data>
</dict>
<key>Headers/RCIMIWMessagePushOptions.h</key>
<dict>
<key>hash</key>
<data>
INZw8eqQqHxDVlRDBufb3BzB0zw=
</data>
<key>hash2</key>
<data>
H0JJfmDTazbk58Jx/4KfuloerPu+JFrxF8b7kwmAGqw=
</data>
</dict>
<key>Headers/RCIMIWNativeCustomMediaMessage.h</key>
<dict>
<key>hash</key>
<data>
TtJvIjR75Xsdwui1Xgi2LDy7sQo=
</data>
<key>hash2</key>
<data>
x0bXk2B/V8CSuGyipr38ldRg4z5VlJewFFik2dIfKQc=
</data>
</dict>
<key>Headers/RCIMIWNativeCustomMessage.h</key>
<dict>
<key>hash</key>
<data>
jl/KqekfUeoiPBsnZx9uSXwL604=
</data>
<key>hash2</key>
<data>
zJCZ22Musnlgmz168nQy/X2928Pf0VqeH3OBJJ0ALA8=
</data>
</dict>
<key>Headers/RCIMIWPlatformConverter.h</key>
<dict>
<key>hash</key>
<data>
qBfombP/fhIyPE4YuBePNjby9DI=
</data>
<key>hash2</key>
<data>
Qp/Je6EMWPamGGqKOzxdrGy0S8nJgak5S/PNUKIj2VY=
</data>
</dict>
<key>Headers/RCIMIWRecallNotificationMessage.h</key>
<dict>
<key>hash</key>
<data>
hfpwloo0psjA3Do5qKerrEEGxwI=
</data>
<key>hash2</key>
<data>
gihBvLY/5dIi3+f0eAk+x/6AP3p7qmm23Las654a+pE=
</data>
</dict>
<key>Headers/RCIMIWReferenceMessage.h</key>
<dict>
<key>hash</key>
<data>
grgrdiQxBQgcjcv5n0veJ+CAziI=
</data>
<key>hash2</key>
<data>
p7uOCVt34XJnhVyZuh3WEsfeEtytZqBrCro2sjG3HGQ=
</data>
</dict>
<key>Headers/RCIMIWSearchConversationResult.h</key>
<dict>
<key>hash</key>
<data>
qxxZUH0k9fzbrwHlwWHhHBxJ5R0=
</data>
<key>hash2</key>
<data>
BILRIt1LsrKPy8ElRc5Iwhi/2lKbizV4Pq4sqJuRLzA=
</data>
</dict>
<key>Headers/RCIMIWSightMessage.h</key>
<dict>
<key>hash</key>
<data>
sHEoJgaWKxvOUA1AsuPuaXTQZOM=
</data>
<key>hash2</key>
<data>
4CmK0XgLeudMWN1ykqHcl7IdgL02aWI+jYabboUNE1M=
</data>
</dict>
<key>Headers/RCIMIWTagInfo.h</key>
<dict>
<key>hash</key>
<data>
nay+4cxqaKWFfJAFjRSFwhInC/8=
</data>
<key>hash2</key>
<data>
OvNot8iVhndDHQ1NSkK/1XvSCv8+FZiwVSSJTR3zcVk=
</data>
</dict>
<key>Headers/RCIMIWTextMessage.h</key>
<dict>
<key>hash</key>
<data>
Rm8BdDUpfiiOteZNWkBihhndJ9k=
</data>
<key>hash2</key>
<data>
AYeHN9oWIpMsiyefGcxC7jFEpauDhASYP4RcxB9Kl08=
</data>
</dict>
<key>Headers/RCIMIWTypingStatus.h</key>
<dict>
<key>hash</key>
<data>
akJLOB7HKoppJFBl7M+CRqVnzsE=
</data>
<key>hash2</key>
<data>
YPGPyuROOdLhtyhf3E331BOPgHc5YfeK1PN7idp54Cc=
</data>
</dict>
<key>Headers/RCIMIWUltraGroupTypingStatusInfo.h</key>
<dict>
<key>hash</key>
<data>
bbwfwGtOchVmLKU/iOe3eDHptik=
</data>
<key>hash2</key>
<data>
0AdngedKL3OJA0QFjGXRtRR1hwUdvsTWcoEvcyaEPTc=
</data>
</dict>
<key>Headers/RCIMIWUnknownMessage.h</key>
<dict>
<key>hash</key>
<data>
qgUrjxdq+sCU6/1/T4I9sq4LcHA=
</data>
<key>hash2</key>
<data>
7p4NYJJwAMXAwYqWwWuhBA438tLXAy24c4QzH5/IZDk=
</data>
</dict>
<key>Headers/RCIMIWUserInfo.h</key>
<dict>
<key>hash</key>
<data>
5g7vzLQk3tcFraYj6LiXTofflNA=
</data>
<key>hash2</key>
<data>
V10qEawgeZq8vDYhIOHCHovrNnRR7oXom02wtpweU6I=
</data>
</dict>
<key>Headers/RCIMIWVoiceMessage.h</key>
<dict>
<key>hash</key>
<data>
qsVZR8GP7n2O5FqQcKtBfAChfbM=
</data>
<key>hash2</key>
<data>
b6rItb69TZZsbwvHeE4AtW3UE1msdPiF/u+hCT1jJ9k=
</data>
</dict>
<key>Headers/RongIMWrapper.h</key>
<dict>
<key>hash</key>
<data>
YdH8Ujk85GPUJ+MR6roHGiP+3tU=
</data>
<key>hash2</key>
<data>
FMIRQbrWJ0ecIdMZivMktP0aloY6adherETYM/denrQ=
</data>
</dict>
<key>Modules/module.modulemap</key>
<dict>
<key>hash</key>
<data>
Vh9vdNQkaXreFCi1krLgoYVDvCg=
</data>
<key>hash2</key>
<data>
6yfqbvnbVio5ptAdCyz4sU2INYt+rvxvT8q9gkJ+AkQ=
</data>
</dict>
<key>RCConfig.plist</key>
<dict>
<key>hash</key>
<data>
QA7nn/q1j2Y4AJbaGtBBs8g71xE=
</data>
<key>hash2</key>
<data>
q9qti/DvWdK6nHCUQ3R/b3gsZ4wASUjoeUzGtn7YyXI=
</data>
</dict>
</dict>
<key>rules</key>
<dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^version.plist$</key>
<true/>
</dict>
<key>rules2</key>
<dict>
<key>.*\.dSYM($|/)</key>
<dict>
<key>weight</key>
<real>11</real>
</dict>
<key>^(.*/)?\.DS_Store$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>2000</real>
</dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^Info\.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^PkgInfo$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^embedded\.provisionprofile$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^version\.plist$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
</dict>
</dict>
</plist>