This commit is contained in:
启星
2025-08-11 10:43:19 +08:00
commit fb2c58d96f
8839 changed files with 709982 additions and 0 deletions

View File

@@ -0,0 +1,12 @@
// Copyright (c) 2023 Tencent. All rights reserved.
#import <ImSDK_Plus/TIMErrorCode.h>
#import <ImSDK_Plus/V2TIMManager.h>
#import <ImSDK_Plus/V2TIMManager+APNS.h>
#import <ImSDK_Plus/V2TIMManager+Friendship.h>
#import <ImSDK_Plus/V2TIMManager+Conversation.h>
#import <ImSDK_Plus/V2TIMManager+Group.h>
#import <ImSDK_Plus/V2TIMManager+Message.h>
#import <ImSDK_Plus/V2TIMManager+Signaling.h>
#import <ImSDK_Plus/V2TIMManager+VOIP.h>

View File

@@ -0,0 +1,428 @@
// Copyright (c) 2020 Tencent. All rights reserved.
#ifndef TIM_ERROR_CODE_H_
#define TIM_ERROR_CODE_H_
enum ERROR_CODE {
/////////////////////////////////////////////////////////////////////////////////
//
// IM SDK 的错误码
//
/////////////////////////////////////////////////////////////////////////////////
// 通用错误码
ERR_SUCC = 0, ///< 无错误。
ERR_IN_PROGESS = 6015, ///< 执行中,请做好接口调用控制,例如,第一次初始化操作在回调前,后续的初始化操作会返回该错误码。
ERR_INVALID_PARAMETERS = 6017, ///< 参数无效,请检查参数是否符合要求,具体可查看错误信息进一步定义哪个字段。
ERR_IO_OPERATION_FAILED = 6022, ///< 操作本地 IO 错误,检查是否有读写权限,磁盘是否已满。
ERR_INVALID_JSON = 6027, ///< 错误的 JSON 格式,请检查参数是否符合接口的要求,具体可查看错误信息进一步定义哪个字段。
ERR_OUT_OF_MEMORY = 6028, ///< 内存不足可能存在内存泄漏iOS 平台使用 Instrument 工具Android 平台使用 Profiler 工具,分析出什么地方的内存占用高。
ERR_PARSE_RESPONSE_FAILED = 6001, ///< PB 解析失败,内部错误,可 [提交工单](https://console.cloud.tencent.com/workorder/category?level1_id=29&level2_id=40&source=0&data_title=%E4%BA%91%E9%80%9A%E4%BF%A1%20%20IM&step=1) 提供使用接口、错误码、错误信息给客服解决。
ERR_SERIALIZE_REQ_FAILED = 6002, ///< PB 序列化失败,内部错误,可 [提交工单](https://console.cloud.tencent.com/workorder/category?level1_id=29&level2_id=40&source=0&data_title=%E4%BA%91%E9%80%9A%E4%BF%A1%20%20IM&step=1) 提供使用接口、错误码、错误信息给客服解决。
ERR_SDK_NOT_INITIALIZED = 6013, ///< IM SDK 未初始化,初始化成功回调之后重试。
ERR_LOADMSG_FAILED = 6005, ///< 加载本地数据库操作失败,可能存储文件有损坏,可 [提交工单](https://console.cloud.tencent.com/workorder/category?level1_id=29&level2_id=40&source=0&data_title=%E4%BA%91%E9%80%9A%E4%BF%A1%20%20IM&step=1) 联系客服定位具体问题。
ERR_DATABASE_OPERATE_FAILED = 6019, ///< 本地数据库操作失败,可能是部分目录无权限或者数据库文件已损坏。
ERR_SDK_COMM_CROSS_THREAD = 7001, ///< 跨线程错误,不能在跨越不同线程中执行,内部错误,可 [提交工单](https://console.cloud.tencent.com/workorder/category?level1_id=29&level2_id=40&source=0&data_title=%E4%BA%91%E9%80%9A%E4%BF%A1%20%20IM&step=1) 提供使用接口、错误码、错误信息给客服解决。
ERR_SDK_COMM_TINYID_EMPTY = 7002, ///< TinyId 为空,内部错误,可 [提交工单](https://console.cloud.tencent.com/workorder/category?level1_id=29&level2_id=40&source=0&data_title=%E4%BA%91%E9%80%9A%E4%BF%A1%20%20IM&step=1) 提供使用接口、错误码、错误信息给客服解决。
ERR_SDK_COMM_INVALID_IDENTIFIER = 7003, ///< Identifier 非法,必须不为空,要求可打印 ASCII 字符0x20-0x7e长度不超过32字节。
ERR_SDK_COMM_FILE_NOT_FOUND = 7004, ///< 文件不存在,请检查文件路径是否正确。
ERR_SDK_COMM_FILE_TOO_LARGE = 7005, ///< 文件大小超出了限制图片、语音最大限制是28MB视频、文件最大限制是100MB
ERR_SDK_COMM_FILE_SIZE_EMPTY = 7006, ///< 空文件要求文件大小不是0字节如果上传图片、语音、视频或文件请检查文件是否正确生成。
ERR_SDK_COMM_FILE_OPEN_FAILED = 7007, ///< 文件打开失败,请检查文件是否存在,或者已被独占打开,引起 SDK 打开失败。
ERR_SDK_COMM_API_CALL_FREQUENCY_LIMIT = 7008, ///< API 调用超频
ERR_SDK_INTERFACE_NOT_SUPPORT = 7013, ///< 套餐包不支持该接口的使用,请升级到旗舰版套餐
ERR_SDK_INVALID_OPERATION = 7014, ///< 非法请求
// 帐号错误码
ERR_SDK_NOT_LOGGED_IN = 6014, ///< IM SDK 未登录,请先登录,成功回调之后重试,或者已被踢下线,可使用 TIMManager getLoginUser 检查当前是否在线。
ERR_NO_PREVIOUS_LOGIN = 6026, ///< 自动登录时,并没有登录过该用户,这时候请调用 login 接口重新登录。
ERR_USER_SIG_EXPIRED = 6206, ///< UserSig 过期,请重新获取有效的 UserSig 后再重新登录。
ERR_LOGIN_KICKED_OFF_BY_OTHER = 6208, ///< 其他终端登录同一个帐号,引起已登录的帐号被踢,需重新登录。
ERR_SDK_ACCOUNT_LOGIN_IN_PROCESS = 7501, ///< 登录正在执行中,例如,第一次 login 或 autoLogin 操作在回调前,后续的 login 或 autoLogin 操作会返回该错误码。
ERR_SDK_ACCOUNT_LOGOUT_IN_PROCESS = 7502, ///< 登出正在执行中,例如,第一次 logout 操作在回调前,后续的 logout 操作会返回该错误码。
ERR_SDK_ACCOUNT_TLS_INIT_FAILED = 7503, ///< TLS SDK 初始化失败,内部错误,可 [提交工单](https://console.cloud.tencent.com/workorder/category?level1_id=29&level2_id=40&source=0&data_title=%E4%BA%91%E9%80%9A%E4%BF%A1%20%20IM&step=1) 提供使用接口、错误码、错误信息给客服解决。
ERR_SDK_ACCOUNT_TLS_NOT_INITIALIZED = 7504, ///< TLS SDK 未初始化,内部错误,可 [提交工单](https://console.cloud.tencent.com/workorder/category?level1_id=29&level2_id=40&source=0&data_title=%E4%BA%91%E9%80%9A%E4%BF%A1%20%20IM&step=1) 提供使用接口、错误码、错误信息给客服解决。
ERR_SDK_ACCOUNT_TLS_TRANSPKG_ERROR = 7505, ///< TLS SDK TRANS 包格式错误,内部错误,可 [提交工单](https://console.cloud.tencent.com/workorder/category?level1_id=29&level2_id=40&source=0&data_title=%E4%BA%91%E9%80%9A%E4%BF%A1%20%20IM&step=1) 提供使用接口、错误码、错误信息给客服解决。
ERR_SDK_ACCOUNT_TLS_DECRYPT_FAILED = 7506, ///< TLS SDK 解密失败,内部错误,可 [提交工单](https://console.cloud.tencent.com/workorder/category?level1_id=29&level2_id=40&source=0&data_title=%E4%BA%91%E9%80%9A%E4%BF%A1%20%20IM&step=1) 提供使用接口、错误码、错误信息给客服解决。
ERR_SDK_ACCOUNT_TLS_REQUEST_FAILED = 7507, ///< TLS SDK 请求失败,内部错误,可 [提交工单](https://console.cloud.tencent.com/workorder/category?level1_id=29&level2_id=40&source=0&data_title=%E4%BA%91%E9%80%9A%E4%BF%A1%20%20IM&step=1) 提供使用接口、错误码、错误信息给客服解决。
ERR_SDK_ACCOUNT_TLS_REQUEST_TIMEOUT = 7508, ///< TLS SDK 请求超时,内部错误,可 [提交工单](https://console.cloud.tencent.com/workorder/category?level1_id=29&level2_id=40&source=0&data_title=%E4%BA%91%E9%80%9A%E4%BF%A1%20%20IM&step=1) 提供使用接口、错误码、错误信息给客服解决。
// 消息错误码
ERR_INVALID_CONVERSATION = 6004, ///< 会话无效getConversation 时检查是否已经登录,如未登录获取会话,会有此错误码返回。
ERR_FILE_TRANS_AUTH_FAILED = 6006, ///< 文件传输鉴权失败,可 [提交工单](https://console.cloud.tencent.com/workorder/category?level1_id=29&level2_id=40&source=0&data_title=%E4%BA%91%E9%80%9A%E4%BF%A1%20%20IM&step=1) 提供使用接口、错误码、错误信息给客服解决。
ERR_FILE_TRANS_NO_SERVER = 6007, ///< 文件传输获取 Server 列表失败,可 [提交工单](https://console.cloud.tencent.com/workorder/category?level1_id=29&level2_id=40&source=0&data_title=%E4%BA%91%E9%80%9A%E4%BF%A1%20%20IM&step=1) 提供使用接口、错误码、错误信息给客服解决。
ERR_FILE_TRANS_UPLOAD_FAILED = 6008, ///< 文件传输上传失败,请检查网络是否连接
ERR_IMAGE_UPLOAD_FAILED_NOTIMAGE = 6031, ///< 文件传输上传失败,请检查上传的图片是否能够正常打开。
ERR_FILE_TRANS_DOWNLOAD_FAILED = 6009, ///< 文件传输下载失败请检查网络或者文件、语音是否已经过期目前资源文件存储7天。
ERR_HTTP_REQ_FAILED = 6010, ///< HTTP 请求失败,请检查 URL 地址是否合法,可在网页浏览器尝试访问该 URL 地址。
ERR_INVALID_MSG_ELEM = 6016, ///< IM SDK 无效消息 elem具体可查看错误信息进一步定义哪个字段。
ERR_INVALID_SDK_OBJECT = 6021, ///< 无效的对象,例如用户自己生成 TIMImage 对象,或内部赋值错误导致对象无效。
ERR_SDK_MSG_BODY_SIZE_LIMIT = 8001, ///< 消息长度超出限制消息长度不要超过12k消息长度是各个 elem 长度的总和elem 长度是所有 elem 字段的长度总和。
ERR_SDK_MSG_KEY_REQ_DIFFER_RSP = 8002, ///< 消息 KEY 错误,内部错误,网络请求包的 KEY 和 回复包的不一致。
ERR_SDK_IMAGE_CONVERT_ERROR = 8003, ///< 万象优图 HTTP 请求失败。
ERR_MERGER_MSG_LAYERS_OVER_LIMIT = 8005, ///< 合并消息嵌套层数超过上限(上限 100 层)。
ERR_SDK_MSG_MODIFY_CONFLICT = 8006, ///< 消息修改冲突,您请求修改的消息已经被其他人修改。
ERR_SDK_SIGNALING_INVALID_INVITE_ID = 8010, ///< 信令请求 ID 无效或已经被处理过。
ERR_SDK_SIGNALING_NO_PERMISSION = 8011, ///< 信令请求无权限,比如取消非自己发起的邀请。
ERR_SDK_SIGNALING_ALREADY_EXISTS = 8012, ///< 信令邀请已存在。
// 群组错误码
ERR_SDK_GROUP_INVALID_ID = 8501, ///< 群组 ID 非法,自定义群组 ID 必须为可打印 ASCII 字符0x20-0x7e最长48个字节且前缀不能为 @TGS#(避免与服务端默认分配的群组 ID 混淆)。
ERR_SDK_GROUP_INVALID_NAME = 8502, ///< 群名称非法群名称最长30字节字符编码必须是 UTF-8 ,如果包含中文,可能用多个字节表示一个中文字符,请注意检查字符串的字节长度。
ERR_SDK_GROUP_INVALID_INTRODUCTION = 8503, ///< 群简介非法群简介最长240字节字符编码必须是 UTF-8 ,如果包含中文,可能用多个字节表示一个中文字符,请注意检查字符串的字节长度。
ERR_SDK_GROUP_INVALID_NOTIFICATION = 8504, ///< 群公告非法群公告最长300字节字符编码必须是 UTF-8 ,如果包含中文,可能用多个字节表示一个中文字符,请注意检查字符串的字节长度。
ERR_SDK_GROUP_INVALID_FACE_URL = 8505, ///< 群头像 URL 非法,群头像 URL 最长100字节可在网页浏览器尝试访问该 URL 地址。
ERR_SDK_GROUP_INVALID_NAME_CARD = 8506, ///< 群名片非法群名片最长50字节字符编码必须是 UTF-8 ,如果包含中文,可能用多个字节表示一个中文字符,请注意检查字符串的字节长度。
ERR_SDK_GROUP_MEMBER_COUNT_LIMIT = 8507, ///< 超过群组成员数的限制在创建群和邀请成员时指定的成员数超出限制最大群成员数量私有群是200人公开群是2000人聊天室是10000人音视频聊天室和在线成员广播大群无限制。
ERR_SDK_GROUP_JOIN_PRIVATE_GROUP_DENY = 8508, ///< 不允许申请加入 Private 群组,任意群成员可邀请入群,且无需被邀请人同意。
ERR_SDK_GROUP_INVITE_SUPER_DENY = 8509, ///< 不允许邀请角色为群主的成员,请检查角色字段是否填写正确。
ERR_SDK_GROUP_INVITE_NO_MEMBER = 8510, ///< 不允许邀请0个成员请检查成员字段是否填写正确。
ERR_SDK_GROUP_ATTR_FREQUENCY_LIMIT = 8511, ///< 群属性接口操作限制增删改接口后台限制1秒5次查接口 SDK 限制5秒20次。
// 关系链错误码
ERR_SDK_FRIENDSHIP_INVALID_PROFILE_KEY = 9001, ///< 资料字段非法资料支持标配字段及自定义字段其中自定义字段的关键字必须是英文字母且长度不得超过8字节自定义字段的值最长不能超过500字节。
ERR_SDK_FRIENDSHIP_INVALID_ADD_REMARK = 9002, ///< 备注字段非法最大96字节字符编码必须是 UTF-8 ,如果包含中文,可能用多个字节表示一个中文字符,请注意检查字符串的字节长度。
ERR_SDK_FRIENDSHIP_INVALID_ADD_WORDING = 9003, ///< 请求添加好友的请求说明字段非法最大120字节字符编码必须是 UTF-8 ,如果包含中文,可能用多个字节表示一个中文字符,请注意检查字符串的字节长度。
ERR_SDK_FRIENDSHIP_INVALID_ADD_SOURCE = 9004, ///< 请求添加好友的添加来源字段非法来源需要添加“AddSource_Type_”前缀。
ERR_SDK_FRIENDSHIP_FRIEND_GROUP_EMPTY = 9005, ///< 好友分组字段非法必须不为空每个分组的名称最长30字节字符编码必须是 UTF-8 ,如果包含中文,可能用多个字节表示一个中文字符,请注意检查字符串的字节长度。
// 网络错误码
ERR_SDK_NET_ENCODE_FAILED = 9501, ///< 网络加密失败,内部错误。
ERR_SDK_NET_DECODE_FAILED = 9502, ///< 网络数据解密失败,内部错误。
ERR_SDK_NET_AUTH_INVALID = 9503, ///< 未完成鉴权,可能登录未完成,请在登录完成后再操作。
ERR_SDK_NET_COMPRESS_FAILED = 9504, ///< 数据包压缩失败,内部错误。
ERR_SDK_NET_UNCOMPRESS_FAILED = 9505, ///< 数据包解压失败,内部错误。
ERR_SDK_NET_FREQ_LIMIT = 9506, ///< 调用频率限制,最大每秒发起 5 次请求。
ERR_SDK_NET_REQ_COUNT_LIMIT = 9507, ///< 请求队列満超过同时请求的数量限制最大同时发起1000个请求。
ERR_SDK_NET_DISCONNECT = 9508, ///< 网络已断开,未建立连接,或者建立 socket 连接时,检测到无网络。
ERR_SDK_NET_ALLREADY_CONN = 9509, ///< 网络连接已建立,重复创建连接,内部错误。
ERR_SDK_NET_CONN_TIMEOUT = 9510, ///< 建立网络连接超时,请等网络恢复后重试。
ERR_SDK_NET_CONN_REFUSE = 9511, ///< 网络连接已被拒绝,请求过于频繁,服务端拒绝服务。
ERR_SDK_NET_NET_UNREACH = 9512, ///< 没有到达网络的可用路由,请等网络恢复后重试。
ERR_SDK_NET_SOCKET_NO_BUFF = 9513, ///< 系统中没有足够的缓冲区空间资源可用来完成调用,系统过于繁忙,内部错误。
ERR_SDK_NET_RESET_BY_PEER = 9514, ///< 对端重置了连接可能服务端过载SDK 内部会自动重连,请等网络连接成功 onConnSucc iOS 或 onConnected Android 回调后重试。
ERR_SDK_NET_SOCKET_INVALID = 9515, ///< socket 套接字无效,内部错误。
ERR_SDK_NET_HOST_GETADDRINFO_FAILED = 9516, ///< IP 地址解析失败,内部错误,可能是本地 imsdk_config 配置文件被损坏,读取到到 IP 地址非法。
ERR_SDK_NET_CONNECT_RESET = 9517, ///< 网络连接到中间节点或服务端重置引起连接失效内部错误SDK 内部会自动重连,请等网络连接成功 onConnSucc iOS 或 onConnected Android 回调后重试。
ERR_SDK_NET_WAIT_INQUEUE_TIMEOUT = 9518, ///< 请求包等待进入待发送队列超时,发送时网络连接建立比较慢 或 频繁断网重连时,会出现该错误,请检查网络连接是否正常。
ERR_SDK_NET_WAIT_SEND_TIMEOUT = 9519, ///< 请求包已进入 IM SDK 待发送队列,等待进入操作系统的网络层时超时。一般可能原因是本地网络受限/不通或本地网络与 IM SDK 后台连接不通。建议用不同的网络环境分别运行 IM SDK 来确认是否因当前网络环境问题引起。
ERR_SDK_NET_WAIT_ACK_TIMEOUT = 9520, ///< 请求包已由 IM SDK 待发送队列进入操作系统网络层,等待服务端回包超时。一般可能原因是本地网络受限/不通或本地网络与 IM SDK 后台连接不通。建议用不同的网络环境分别运行 IM SDK 来确认是否因当前网络环境问题引起。
ERR_SDK_NET_WAIT_SEND_REMAINING_TIMEOUT = 9521, ///< 请求包已进入待发送队列,部分数据已发送,等待发送剩余部分出现超时,可能上行带宽不足,请检查网络是否畅通,在回调错误时检测有联网,内部错误。
ERR_SDK_NET_PKG_SIZE_LIMIT = 9522, ///< 请求包长度大于限制,最大支持 1MB 。
ERR_SDK_NET_WAIT_SEND_TIMEOUT_NO_NETWORK = 9523, ///< 请求包已进入待发送队列,等待进入系统的网络 buffer 超时,数据包较多 或 发送线程处理不过来,在回调错误码时检测到没有联网。
ERR_SDK_NET_WAIT_ACK_TIMEOUT_NO_NETWORK = 9524, ///< 请求包已进入系统的网络 buffer ,等待服务端回包超时,可能请求包没离开终端设备、中间路由丢弃、服务端意外丢包或回包被系统网络层丢弃,在回调错误码时检测到没有联网。
ERR_SDK_NET_SEND_REMAINING_TIMEOUT_NO_NETWORK = 9525, ///< 请求包已进入待发送队列,部分数据已发送,等待发送剩余部分出现超时,可能上行带宽不足,请检查网络是否畅通,在回调错误码时检测到没有联网。
/////////////////////////////////////////////////////////////////////////////////
//
// (二)服务端的错误码
//
/////////////////////////////////////////////////////////////////////////////////
// 网络接入层的错误码
ERR_SVR_SSO_CONNECT_LIMIT = -302, // Server 的连接数量超出限制,服务端拒绝服务。
ERR_SVR_SSO_VCODE = -10000, // 下发验证码标志错误。
ERR_SVR_SSO_D2_EXPIRED = -10001, // Key 过期。Key 是根据 UserSig 生成的内部票据Key 的有效期小于或等于 UserSig 的有效期。请重新调用 V2TIMManager.getInstance().login 登录接口生成新的 Key。
ERR_SVR_SSO_A2_UP_INVALID = -10003, // Ticket 过期。Ticket 是根据 UserSig 生成的内部票据Ticket 的有效期小于或等于 UserSig 的有效期。请重新调用 V2TIMManager.getInstance().login 登录接口生成新的 Ticket。
ERR_SVR_SSO_A2_DOWN_INVALID = -10004, // 票据验证没通过或者被安全打击。请重新调用 V2TIMManager.getInstance().login 登录接口生成新的票据。
ERR_SVR_SSO_EMPTY_KEY = -10005, // 不允许空 Key。
ERR_SVR_SSO_UIN_INVALID = -10006, // Key 中的帐号和请求包头的帐号不匹配。
ERR_SVR_SSO_VCODE_TIMEOUT = -10007, // 验证码下发超时。
ERR_SVR_SSO_NO_IMEI_AND_A2 = -10008, // 需要带上 Key 和 Ticket。
ERR_SVR_SSO_COOKIE_INVALID = -10009, // Cookie 检查不匹配。
ERR_SVR_SSO_DOWN_TIP = -10101, // 下发提示语时 Key 过期。Key 是根据 UserSig 生成的内部票据Key 的有效期小于或等于 UserSig 的有效期。请重新调用 V2TIMManager.getInstance().login 登录接口生成新的 Key。
ERR_SVR_SSO_DISCONNECT = -10102, // 网络连接断开。
ERR_SVR_SSO_IDENTIFIER_INVALID = -10103, // 失效身份。
ERR_SVR_SSO_CLIENT_CLOSE = -10104, // 终端自动退出。
ERR_SVR_SSO_MSFSDK_QUIT = -10105, // MSFSDK 自动退出。
ERR_SVR_SSO_D2KEY_WRONG = -10106, // 解密失败次数超过阈值,通知终端需要重置,请重新调用 TIMManager.getInstance().login 登录接口生成新的 Key。
ERR_SVR_SSO_UNSURPPORT = -10107, // 不支持聚合,给终端返回统一的错误码。终端在该 TCP 长连接上停止聚合。
ERR_SVR_SSO_PREPAID_ARREARS = -10108, // 预付费欠费。
ERR_SVR_SSO_PACKET_WRONG = -10109, // 请求包格式错误。
ERR_SVR_SSO_APPID_BLACK_LIST = -10110, // SDKAppID 黑名单。
ERR_SVR_SSO_CMD_BLACK_LIST = -10111, // SDKAppID 设置 service cmd 黑名单。
ERR_SVR_SSO_APPID_WITHOUT_USING = -10112, // SDKAppID 停用。
ERR_SVR_SSO_FREQ_LIMIT = -10113, // 频率限制(用户),频率限制是设置针对某一个协议的每秒请求数的限制。
ERR_SVR_SSO_OVERLOAD = -10114, // 过载丢包(系统),连接的服务端处理过多请求,处理不过来,拒绝服务。
ERR_SVR_SSO_FREQUENCY_LIMIT = -20009, // 终端访问接口超频。
// 资源文件错误码
ERR_SVR_RES_NOT_FOUND = 114000, ///< 要发送的资源文件不存在。
ERR_SVR_RES_ACCESS_DENY = 114001, ///< 要发送的资源文件不允许访问。
ERR_SVR_RES_SIZE_LIMIT = 114002, ///< 文件大小超过限制。
ERR_SVR_RES_SEND_CANCEL = 114003, ///< 用户取消发送,如发送过程中登出等原因。
ERR_SVR_RES_READ_FAILED = 114004, ///< 读取文件内容失败。
ERR_SVR_RES_TRANSFER_TIMEOUT = 114005, ///< 资源文件(如图片、文件、语音、视频)传输超时,一般是网络问题导致。
ERR_SVR_RES_INVALID_PARAMETERS = 114011, ///< 参数非法。
ERR_SVR_RES_INVALID_FILE_MD5 = 115066, ///< 文件 MD5 校验失败。
ERR_SVR_RES_INVALID_PART_MD5 = 115068, ///< 分片 MD5 校验失败。
// 后台公共错误码
ERR_SVR_COMM_INVALID_HTTP_URL = 60002, ///< HTTP 解析错误 ,请检查 HTTP 请求 URL 格式。
ERR_SVR_COMM_REQ_JSON_PARSE_FAILED = 60003, ///< HTTP 请求 JSON 解析错误,请检查 JSON 格式。
ERR_SVR_COMM_INVALID_ACCOUNT = 60004, ///< 请求 URI 或 JSON 包体中 Identifier 或 UserSig 错误。
ERR_SVR_COMM_INVALID_ACCOUNT_EX = 60005, ///< 请求 URI 或 JSON 包体中 Identifier 或 UserSig 错误。
ERR_SVR_COMM_INVALID_SDKAPPID = 60006, ///< SDKAppID 失效,请核对 SDKAppID 有效性。
ERR_SVR_COMM_REST_FREQ_LIMIT = 60007, ///< REST 接口调用频率超过限制,请降低请求频率。
ERR_SVR_COMM_REQUEST_TIMEOUT = 60008, ///< 服务请求超时或 HTTP 请求格式错误,请检查并重试。
ERR_SVR_COMM_INVALID_RES = 60009, ///< 请求资源错误,请检查请求 URL。
ERR_SVR_COMM_ID_NOT_ADMIN = 60010, ///< REST API 请求的 Identifier 字段请填写 App 管理员帐号。
ERR_SVR_COMM_SDKAPPID_FREQ_LIMIT = 60011, ///< SDKAppID 请求频率超限,请降低请求频率。
ERR_SVR_COMM_SDKAPPID_MISS = 60012, ///< REST 接口需要带 SDKAppID请检查请求 URL 中的 SDKAppID。
ERR_SVR_COMM_RSP_JSON_PARSE_FAILED = 60013, ///< HTTP 响应包 JSON 解析错误。
ERR_SVR_COMM_EXCHANGE_ACCOUNT_TIMEUT = 60014, ///< 置换帐号超时。
ERR_SVR_COMM_INVALID_ID_FORMAT = 60015, ///< 请求包体 Identifier 类型错误,请确认 Identifier 为字符串格式。
ERR_SVR_COMM_SDKAPPID_FORBIDDEN = 60016, ///< SDKAppID 被禁用,请 [提交工单](https://console.cloud.tencent.com/workorder/category?level1_id=29&level2_id=40&source=0&data_title=%E4%BA%91%E9%80%9A%E4%BF%A1%20%20IM&step=1) 联系客服确认。
ERR_SVR_COMM_REQ_FORBIDDEN = 60017, ///< 请求被禁用,请 [提交工单](https://console.cloud.tencent.com/workorder/category?level1_id=29&level2_id=40&source=0&data_title=%E4%BA%91%E9%80%9A%E4%BF%A1%20%20IM&step=1) 联系客服确认。
ERR_SVR_COMM_REQ_FREQ_LIMIT = 60018, ///< 请求过于频繁,请稍后重试。
ERR_SVR_COMM_REQ_FREQ_LIMIT_EX = 60019, ///< 请求过于频繁,请稍后重试。
ERR_SVR_COMM_INVALID_SERVICE = 60020, ///< 未购买套餐包或购买的套餐包正在配置中暂未生效,请五分钟后再次尝试。
ERR_SVR_COMM_SENSITIVE_TEXT = 80001, ///< 文本安全打击,文本中可能包含敏感词汇。
ERR_SVR_COMM_BODY_SIZE_LIMIT = 80002, ///< 发消息包体过长目前支持最大12k消息包体长度请减少包体大小重试。
// 帐号错误码
ERR_SVR_ACCOUNT_USERSIG_EXPIRED = 70001, ///< UserSig 已过期,请重新生成 UserSig建议 UserSig 有效期不小于24小时。
ERR_SVR_ACCOUNT_USERSIG_EMPTY = 70002, ///< UserSig 长度为0请检查传入的 UserSig 是否正确。
ERR_SVR_ACCOUNT_USERSIG_CHECK_FAILED = 70003, ///< UserSig 校验失败,请确认下 UserSig 内容是否被截断,如缓冲区长度不够导致的内容截断。
ERR_SVR_ACCOUNT_USERSIG_CHECK_FAILED_EX = 70005, ///< UserSig 校验失败,可用工具自行验证生成的 UserSig 是否正确。
ERR_SVR_ACCOUNT_USERSIG_MISMATCH_PUBLICKEY = 70009, ///< 用公钥验证 UserSig 失败,请确认生成的 UserSig 使用的私钥和 SDKAppID 是否对应。
ERR_SVR_ACCOUNT_USERSIG_MISMATCH_ID = 70013, ///< 请求的 Identifier 与生成 UserSig 的 Identifier 不匹配。
ERR_SVR_ACCOUNT_USERSIG_MISMATCH_SDKAPPID = 70014, ///< 请求的 SDKAppID 与生成 UserSig 的 SDKAppID 不匹配。
ERR_SVR_ACCOUNT_USERSIG_PUBLICKEY_NOT_FOUND = 70016, ///< 验证 UserSig 时公钥不存在。请先登录控制台下载私钥,下载私钥的具体方法可参考 [下载签名用的私钥](https://cloud.tencent.com/document/product/269/32688#.E4.B8.8B.E8.BD.BD.E7.AD.BE.E5.90.8D.E7.94.A8.E7.9A.84.E7.A7.81.E9.92.A5) 。
ERR_SVR_ACCOUNT_SDKAPPID_NOT_FOUND = 70020, ///< SDKAppID 未找到,请在云通信 IM 控制台确认应用信息。
ERR_SVR_ACCOUNT_INVALID_USERSIG = 70052, ///< UserSig 已经失效,请重新生成,再次尝试。
ERR_SVR_ACCOUNT_NOT_FOUND = 70107, ///< 请求的用户帐号不存在。
ERR_SVR_ACCOUNT_SEC_RSTR = 70114, ///< 安全原因被限制。
ERR_SVR_ACCOUNT_INTERNAL_TIMEOUT = 70169, ///< 服务端内部超时,请重试。
ERR_SVR_ACCOUNT_INVALID_COUNT = 70206, ///< 请求中批量数量不合法。
ERR_SVR_ACCOUNT_INVALID_PARAMETERS = 70402, ///< 参数非法,请检查必填字段是否填充,或者字段的填充是否满足协议要求。
ERR_SVR_ACCOUNT_ADMIN_REQUIRED = 70403, ///< 请求需要 App 管理员权限。
ERR_SVR_ACCOUNT_FREQ_LIMIT = 70050, ///< 因失败且重试次数过多导致被限制,请检查 UserSig 是否正确,一分钟之后再试。
ERR_SVR_ACCOUNT_BLACKLIST = 70051, ///< 帐号被拉入黑名单。
ERR_SVR_ACCOUNT_COUNT_LIMIT = 70398, ///< 创建帐号数量超过免费体验版数量限制,请升级为专业版。
ERR_SVR_ACCOUNT_INTERNAL_ERROR = 70500, ///< 服务端内部错误,请重试。
ERR_SVR_ACCOUNT_USER_STATUS_DISABLED = 72001, ///< 用户状态能力需要登录 IM 控制台开启
// 资料错误码
ERR_SVR_PROFILE_INVALID_PARAMETERS = 40001, ///< 请求参数错误,请根据错误描述检查请求是否正确。
ERR_SVR_PROFILE_ACCOUNT_MISS = 40002, ///< 请求参数错误,没有指定需要拉取资料的用户帐号。
ERR_SVR_PROFILE_ACCOUNT_NOT_FOUND = 40003, ///< 请求的用户帐号不存在。
ERR_SVR_PROFILE_ADMIN_REQUIRED = 40004, ///< 请求需要 App 管理员权限。
ERR_SVR_PROFILE_SENSITIVE_TEXT = 40005, ///< 资料字段中包含敏感词。
ERR_SVR_PROFILE_INTERNAL_ERROR = 40006, ///< 服务端内部错误,请稍后重试。
ERR_SVR_PROFILE_READ_PERMISSION_REQUIRED = 40007, ///< 没有资料字段的读权限,详情可参见 [资料字段](https://cloud.tencent.com/document/product/269/1500#.E8.B5.84.E6.96.99.E5.AD.97.E6.AE.B5) 。
ERR_SVR_PROFILE_WRITE_PERMISSION_REQUIRED = 40008, ///< 没有资料字段的写权限,详情可参见 [资料字段](https://cloud.tencent.com/document/product/269/1500#.E8.B5.84.E6.96.99.E5.AD.97.E6.AE.B5) 。
ERR_SVR_PROFILE_TAG_NOT_FOUND = 40009, ///< 资料字段的 Tag 不存在。
ERR_SVR_PROFILE_SIZE_LIMIT = 40601, ///< 资料字段的 Value 长度超过500字节。
ERR_SVR_PROFILE_VALUE_ERROR = 40605, ///< 标配资料字段的 Value 错误,详情可参见 [标配资料字段](https://cloud.tencent.com/doc/product/269/1500#.E6.A0.87.E9.85.8D.E8.B5.84.E6.96.99.E5.AD.97.E6.AE.B5) 。
ERR_SVR_PROFILE_INVALID_VALUE_FORMAT = 40610, ///< 资料字段的 Value 类型不匹配,详情可参见 [标配资料字段](https://cloud.tencent.com/doc/product/269/1500#.E6.A0.87.E9.85.8D.E8.B5.84.E6.96.99.E5.AD.97.E6.AE.B5) 。
// 关系链错误码
ERR_SVR_FRIENDSHIP_INVALID_PARAMETERS = 30001, ///< 请求参数错误,请根据错误描述检查请求是否正确。
ERR_SVR_FRIENDSHIP_INVALID_SDKAPPID = 30002, ///< SDKAppID 不匹配。
ERR_SVR_FRIENDSHIP_ACCOUNT_NOT_FOUND = 30003, ///< 请求的用户帐号不存在。
ERR_SVR_FRIENDSHIP_ADMIN_REQUIRED = 30004, ///< 请求需要 App 管理员权限。
ERR_SVR_FRIENDSHIP_SENSITIVE_TEXT = 30005, ///< 关系链字段中包含敏感词。
ERR_SVR_FRIENDSHIP_INTERNAL_ERROR = 30006, ///< 服务端内部错误,请重试。
ERR_SVR_FRIENDSHIP_NET_TIMEOUT = 30007, ///< 网络超时,请稍后重试。
ERR_SVR_FRIENDSHIP_WRITE_CONFLICT = 30008, ///< 并发写导致写冲突,建议使用批量方式。
ERR_SVR_FRIENDSHIP_ADD_FRIEND_DENY = 30009, ///< 后台禁止该用户发起加好友请求。
ERR_SVR_FRIENDSHIP_COUNT_LIMIT = 30010, ///< 自己的好友数已达系统上限。
ERR_SVR_FRIENDSHIP_GROUP_COUNT_LIMIT = 30011, ///< 分组已达系统上限。
ERR_SVR_FRIENDSHIP_PENDENCY_LIMIT = 30012, ///< 未决数已达系统上限。
ERR_SVR_FRIENDSHIP_BLACKLIST_LIMIT = 30013, ///< 黑名单数已达系统上限。
ERR_SVR_FRIENDSHIP_PEER_FRIEND_LIMIT = 30014, ///< 对方的好友数已达系统上限。
ERR_SVR_FRIENDSHIP_IN_SELF_BLACKLIST = 30515, ///< 请求添加好友时,对方在自己的黑名单中,不允许加好友。
ERR_SVR_FRIENDSHIP_ALLOW_TYPE_DENY_ANY = 30516, ///< 请求添加好友时,对方的加好友验证方式是不允许任何人添加自己为好友。
ERR_SVR_FRIENDSHIP_IN_PEER_BLACKLIST = 30525, ///< 请求添加好友时,自己在对方的黑名单中,不允许加好友。
ERR_SVR_FRIENDSHIP_ALLOW_TYPE_NEED_CONFIRM = 30539, ///< A 请求加 B 为好友B 的加好友验证方式被设置为“AllowType_Type_NeedConfirm”这时 A 与 B 之间只能形成未决关系,该返回码用于标识加未决成功,以便与加好友成功的返回码区分开,调用方可以捕捉该错误给用户一个合理的提示。
ERR_SVR_FRIENDSHIP_ADD_FRIEND_SEC_RSTR = 30540, ///< 添加好友请求被安全策略打击,请勿频繁发起添加好友请求。
ERR_SVR_FRIENDSHIP_PENDENCY_NOT_FOUND = 30614, ///< 请求的未决不存在。
ERR_SVR_FRIENDSHIP_DEL_NONFRIEND = 31704, ///< 与请求删除的帐号之间不存在好友关系。
ERR_SVR_FRIENDSHIP_DEL_FRIEND_SEC_RSTR = 31707, ///< 删除好友请求被安全策略打击,请勿频繁发起删除好友请求。
ERR_SVR_FRIENDSHIP_ACCOUNT_NOT_FOUND_EX = 31804, ///< 请求的用户帐号不存在。
// 最近联系人错误码
ERR_SVR_CONV_ACCOUNT_NOT_FOUND = 50001, ///< 请求的用户帐号不存在。
ERR_SVR_CONV_INVALID_PARAMETERS = 50002, ///< 请求参数错误,请根据错误描述检查请求是否正确。
ERR_SVR_CONV_ADMIN_REQUIRED = 50003, ///< 请求需要 App 管理员权限。
ERR_SVR_CONV_INTERNAL_ERROR = 50004, ///< 服务端内部错误,请重试。
ERR_SVR_CONV_NET_TIMEOUT = 50005, ///< 网络超时,请稍后重试。
ERR_SVR_CONV_CONV_MARK_REQ_COUNT_EXCEED_LIMIT = 51006, ///< 一次标记、分组、设置自定义数据的会话数超过了上限(最大支持 100 个)
ERR_SVR_CONV_CONV_MARK_OPERATE_FAILED = 51007, ///< Group 会话操作异常Server 内部错误或 Group 已经解散
ERR_SVR_CONV_CONV_MARK_TOTAL_COUNT_EXCEED_LIMIT = 51008, ///< 标记、分组、设置自定义数据的总会话数超过了上限(最大支持 1000 个)
ERR_SVR_CONV_CONV_GROUP_NOT_EXIST = 51009, ///< 会话分组不存在
ERR_SVR_CONV_CONV_GROUP_TOTAL_COUNT_EXCEED_LIMIT = 51010, ///< 会话分组数超过了上限(最大支持 20 个)
ERR_SVR_CONV_CONV_GROUP_NAME_EXCEED_LENGTH = 51011, ///< 会话分组名字节数超过了上限(最大支持 32 字节)
// 消息错误码
ERR_SVR_MSG_PKG_PARSE_FAILED = 20001, ///< 请求包非法,请检查发送方和接收方帐号是否存在。
ERR_SVR_MSG_INTERNAL_AUTH_FAILED = 20002, ///< 内部鉴权失败。
ERR_SVR_MSG_INVALID_ID = 20003, ///< Identifier 无效或者 Identifier 未导入云通信 IM。
ERR_SVR_MSG_NET_ERROR = 20004, ///< 网络异常,请重试。
ERR_SVR_MSG_INTERNAL_ERROR1 = 20005, ///< 服务端内部错误,请重试。
ERR_SVR_MSG_PUSH_DENY = 20006, ///< 触发发送单聊消息之前回调App 后台返回禁止下发该消息。
ERR_SVR_MSG_IN_PEER_BLACKLIST = 20007, ///< 发送单聊消息,被对方拉黑,禁止发送。
ERR_SVR_MSG_BOTH_NOT_FRIEND = 20009, ///< 消息发送双方互相不是好友,禁止发送(配置单聊消息校验好友关系才会出现)。
ERR_SVR_MSG_NOT_PEER_FRIEND = 20010, ///< 发送单聊消息,自己不是对方的好友(单向关系),禁止发送。
ERR_SVR_MSG_NOT_SELF_FRIEND = 20011, ///< 发送单聊消息,对方不是自己的好友(单向关系),禁止发送。
ERR_SVR_MSG_SHUTUP_DENY = 20012, ///< 因禁言,禁止发送消息。
ERR_SVR_MSG_REVOKE_TIME_LIMIT = 20016, ///< 消息撤回超过了时间限制默认2分钟
ERR_SVR_MSG_DEL_RAMBLE_INTERNAL_ERROR = 20018, ///< 删除漫游内部错误。
ERR_SVR_MSG_EXTENSION_CONFLICT = 23001, ///< 消息扩展操作冲突。
ERR_SVR_MSG_EXTENSION_NOT_EXIST = 23004, ///< 删除的消息扩展不存在。
ERR_SVR_MSG_JSON_PARSE_FAILED = 90001, ///< JSON 格式解析失败,请检查请求包是否符合 JSON 规范。
ERR_SVR_MSG_INVALID_JSON_BODY_FORMAT = 90002, ///< JSON 格式请求包中 MsgBody 不符合消息格式描述,或者 MsgBody 不是 Array 类型,请参考 [TIMMsgElement 对象](https://cloud.tencent.com/document/product/269/2720#.E6.B6.88.E6.81.AF.E5.85.83.E7.B4.A0timmsgelement) 的定义。
ERR_SVR_MSG_INVALID_TO_ACCOUNT = 90003, ///< JSON 格式请求包体中缺少 To_Account 字段或者 To_Account 字段不是 Integer 类型
ERR_SVR_MSG_INVALID_RAND = 90005, ///< JSON 格式请求包体中缺少 MsgRandom 字段或者 MsgRandom 字段不是 Integer 类型
ERR_SVR_MSG_INVALID_TIMESTAMP = 90006, ///< JSON 格式请求包体中缺少 MsgTimeStamp 字段或者 MsgTimeStamp 字段不是 Integer 类型
ERR_SVR_MSG_BODY_NOT_ARRAY = 90007, ///< JSON 格式请求包体中 MsgBody 类型不是 Array 类型,请将其修改为 Array 类型
ERR_SVR_MSG_ADMIN_REQUIRED = 90009, ///< 请求需要 App 管理员权限。
ERR_SVR_MSG_INVALID_JSON_FORMAT = 90010, ///< JSON 格式请求包不符合消息格式描述,请参考 [TIMMsgElement 对象](https://cloud.tencent.com/document/product/269/2720#.E6.B6.88.E6.81.AF.E5.85.83.E7.B4.A0timmsgelement) 的定义。
ERR_SVR_MSG_TO_ACCOUNT_COUNT_LIMIT = 90011, ///< 批量发消息目标帐号超过500请减少 To_Account 中目标帐号数量。
ERR_SVR_MSG_TO_ACCOUNT_NOT_FOUND = 90012, ///< To_Account 没有注册或不存在,请确认 To_Account 是否导入云通信 IM 或者是否拼写错误。
ERR_SVR_MSG_TIME_LIMIT = 90026, ///< 消息离线存储时间错误最多不能超过7天
ERR_SVR_MSG_INVALID_SYNCOTHERMACHINE = 90031, ///< JSON 格式请求包体中 SyncOtherMachine 字段不是 Integer 类型
ERR_SVR_MSG_INVALID_MSGLIFETIME = 90044, ///< JSON 格式请求包体中 MsgLifeTime 字段不是 Integer 类型
ERR_SVR_MSG_ACCOUNT_NOT_FOUND = 90048, ///< 请求的用户帐号不存在。
ERR_SVR_MSG_INTERNAL_ERROR2 = 90994, ///< 服务内部错误,请重试。
ERR_SVR_MSG_INTERNAL_ERROR3 = 90995, ///< 服务内部错误,请重试。
ERR_SVR_MSG_INTERNAL_ERROR4 = 91000, ///< 服务内部错误,请重试。
ERR_SVR_MSG_INTERNAL_ERROR5 = 90992, ///< 服务内部错误,请重试;如果所有请求都返回该错误码,且 App 配置了第三方回调,请检查 App 服务端是否正常向云通信 IM 后台服务端返回回调结果。
ERR_SVR_MSG_BODY_SIZE_LIMIT = 93000, ///< JSON 数据包超长消息包体请不要超过12k。
ERR_SVR_MSG_LONGPOLLING_COUNT_LIMIT = 91101, ///< Web 端长轮询被踢Web 端同时在线实例个数超出限制)。
// 120001 - 130000, ///< 单聊第三方回调返回的自定义错误码。
// 群组错误码
ERR_SVR_GROUP_INTERNAL_ERROR = 10002, ///< 服务端内部错误,请重试。
ERR_SVR_GROUP_API_NAME_ERROR = 10003, ///< 请求中的接口名称错误,请核对接口名称并重试。
ERR_SVR_GROUP_INVALID_PARAMETERS = 10004, ///< 参数非法,请根据错误描述检查请求是否正确。
ERR_SVR_GROUP_ACOUNT_COUNT_LIMIT = 10005, ///< 请求包体中携带的帐号数量过多。
ERR_SVR_GROUP_FREQ_LIMIT = 10006, ///< 操作频率限制,请尝试降低调用的频率。
ERR_SVR_GROUP_PERMISSION_DENY = 10007, ///< 操作权限不足,比如 Public 群组中普通成员尝试执行踢人操作,但只有 App 管理员才有权限。
ERR_SVR_GROUP_INVALID_REQ = 10008, ///< 请求非法,可能是请求中携带的签名信息验证不正确,请再次尝试或 [提交工单](https://console.cloud.tencent.com/workorder/category?level1_id=29&level2_id=40&source=0&data_title=%E4%BA%91%E9%80%9A%E4%BF%A1%20%20IM&step=1) 联系技术客服。
ERR_SVR_GROUP_SUPER_NOT_ALLOW_QUIT = 10009, ///< 该群不允许群主主动退出。
ERR_SVR_GROUP_NOT_FOUND = 10010, ///< 群组不存在,或者曾经存在过,但是目前已经被解散。
ERR_SVR_GROUP_JSON_PARSE_FAILED = 10011, ///< 解析 JSON 包体失败,请检查包体的格式是否符合 JSON 格式。
ERR_SVR_GROUP_INVALID_ID = 10012, ///< 发起操作的 Identifier 非法,请检查发起操作的用户 Identifier 是否填写正确。
ERR_SVR_GROUP_ALLREADY_MEMBER = 10013, ///< 被邀请加入的用户已经是群成员。
ERR_SVR_GROUP_FULL_MEMBER_COUNT = 10014, ///< 群已满员,无法将请求中的用户加入群组,如果是批量加人,可以尝试减少加入用户的数量。
ERR_SVR_GROUP_INVALID_GROUPID = 10015, ///< 群组 ID 非法,请检查群组 ID 是否填写正确。
ERR_SVR_GROUP_REJECT_FROM_THIRDPARTY = 10016, ///< App 后台通过第三方回调拒绝本次操作。
ERR_SVR_GROUP_SHUTUP_DENY = 10017, ///< 因被禁言而不能发送消息,请检查发送者是否被设置禁言。
ERR_SVR_GROUP_RSP_SIZE_LIMIT = 10018, ///< 应答包长度超过最大包长1MB请求的内容过多请尝试减少单次请求的数据量。
ERR_SVR_GROUP_ACCOUNT_NOT_FOUND = 10019, ///< 请求的用户帐号不存在。
ERR_SVR_GROUP_GROUPID_IN_USED = 10021, ///< 群组 ID 已被使用,请选择其他的群组 ID。
ERR_SVR_GROUP_SEND_MSG_FREQ_LIMIT = 10023, ///< 发消息的频率超限,请延长两次发消息时间的间隔。
ERR_SVR_GROUP_REQ_ALLREADY_BEEN_PROCESSED = 10024, ///< 此邀请或者申请请求已经被处理。
ERR_SVR_GROUP_GROUPID_IN_USED_FOR_SUPER = 10025, ///< 群组 ID 已被使用,并且操作者为群主,可以直接使用。
ERR_SVR_GROUP_SDKAPPID_DENY = 10026, ///< 该 SDKAppID 请求的命令字已被禁用,请 [提交工单](https://console.cloud.tencent.com/workorder/category?level1_id=29&level2_id=40&source=0&data_title=%E4%BA%91%E9%80%9A%E4%BF%A1%20%20IM&step=1) 联系客服。
ERR_SVR_GROUP_REVOKE_MSG_NOT_FOUND = 10030, ///< 请求撤回的消息不存在。
ERR_SVR_GROUP_REVOKE_MSG_TIME_LIMIT = 10031, ///< 消息撤回超过了时间限制默认2分钟
ERR_SVR_GROUP_REVOKE_MSG_DENY = 10032, ///< 请求撤回的消息不支持撤回操作。
ERR_SVR_GROUP_NOT_ALLOW_REVOKE_MSG = 10033, ///< 群组类型不支持消息撤回操作。
ERR_SVR_GROUP_REMOVE_MSG_DENY = 10034, ///< 该消息类型不支持删除操作。
ERR_SVR_GROUP_NOT_ALLOW_REMOVE_MSG = 10035, ///< 音视频聊天室和在线成员广播大群不支持删除消息。
ERR_SVR_GROUP_AVCHATROOM_COUNT_LIMIT = 10036, ///< 音视频聊天室创建数量超过了限制,请参考 [价格说明](https://cloud.tencent.com/document/product/269/11673) 购买预付费套餐“IM音视频聊天室”。
ERR_SVR_GROUP_COUNT_LIMIT = 10037, ///< 单个用户可创建和加入的群组数量超过了限制,请参考 [价格说明](https://cloud.tencent.com/document/product/269/11673) 购买或升级预付费套餐“单人可创建与加入群组数”。
ERR_SVR_GROUP_MEMBER_COUNT_LIMIT = 10038, ///< 群成员数量超过限制,请参考 [价格说明](https://cloud.tencent.com/document/product/269/11673) 购买或升级预付费套餐“扩展群人数上限”。
ERR_SVR_GROUP_ATTRIBUTE_WRITE_CONFILCT = 10056, ///< 群属性写冲突请先拉取最新的群属性后再尝试写操作IMSDK 5.6 及其以上版本支持。
ERR_SVR_COMMUNITY_GROUP_NOT_OPEN = 11000, ///< 社群功能未开通。
/////////////////////////////////////////////////////////////////////////////////
//
// IM SDK V3 版本的错误码
//
/////////////////////////////////////////////////////////////////////////////////
ERR_NO_SUCC_RESULT = 6003, ///< 批量操作无成功结果。
ERR_TO_USER_INVALID = 6011, ///< 无效接收方。
ERR_REQUEST_TIME_OUT = 6012, ///< 请求超时。
ERR_INIT_CORE_FAIL = 6018, ///< INIT CORE 模块失败。
ERR_EXPIRED_SESSION_NODE = 6020, ///< SessionNode 为 null 。
ERR_LOGGED_OUT_BEFORE_LOGIN_FINISHED = 6023, ///< 在登录完成前进行了登出(在登录时返回)。
ERR_TLSSDK_NOT_INITIALIZED = 6024, ///< TLS SDK 未初始化。
ERR_TLSSDK_USER_NOT_FOUND = 6025, ///< TLS SDK 没有找到相应的用户信息。
ERR_BIND_FAIL_UNKNOWN = 6100, ///< QALSDK 未知原因BIND失败。
ERR_BIND_FAIL_NO_SSOTICKET = 6101, ///< 缺少 SSO 票据。
ERR_BIND_FAIL_REPEATD_BIND = 6102, ///< 重复 BIND。
ERR_BIND_FAIL_TINYID_NULL = 6103, ///< TinyId 为空。
ERR_BIND_FAIL_GUID_NULL = 6104, ///< GUID 为空。
ERR_BIND_FAIL_UNPACK_REGPACK_FAILED = 6105, ///< 解注册包失败。
ERR_BIND_FAIL_REG_TIMEOUT = 6106, ///< 注册超时。
ERR_BIND_FAIL_ISBINDING = 6107, ///< 正在 BIND 操作中。
ERR_PACKET_FAIL_UNKNOWN = 6120, ///< 发包未知错误。
ERR_PACKET_FAIL_REQ_NO_NET = 6121, ///< 发送请求包时没有网络。
ERR_PACKET_FAIL_RESP_NO_NET = 6122, ///< 发送回复包时没有网络。
ERR_PACKET_FAIL_REQ_NO_AUTH = 6123, ///< 发送请求包时没有权限。
ERR_PACKET_FAIL_SSO_ERR = 6124, ///< SSO 错误。
ERR_PACKET_FAIL_REQ_TIMEOUT = 6125, ///< 请求超时。
ERR_PACKET_FAIL_RESP_TIMEOUT = 6126, ///< 回复超时。
ERR_PACKET_FAIL_REQ_ON_RESEND = 6127, ///< 重发失败。
ERR_PACKET_FAIL_RESP_NO_RESEND = 6128, ///< 重发时没有真正发送。
ERR_PACKET_FAIL_FLOW_SAVE_FILTERED = 6129, ///< 保存被过滤。
ERR_PACKET_FAIL_REQ_OVER_LOAD = 6130, ///< 发送过载。
ERR_PACKET_FAIL_LOGIC_ERR = 6131, ///< 数据逻辑错误。
ERR_FRIENDSHIP_PROXY_NOT_SYNCED = 6150, ///< proxy_manager 没有完成服务端数据同步。
ERR_FRIENDSHIP_PROXY_SYNCING = 6151, ///< proxy_manager 正在进行服务端数据同步。
ERR_FRIENDSHIP_PROXY_SYNCED_FAIL = 6152, ///< proxy_manager 同步失败。
ERR_FRIENDSHIP_PROXY_LOCAL_CHECK_ERR = 6153, ///< proxy_manager 请求参数,在本地检查不合法。
ERR_GROUP_INVALID_FIELD = 6160, ///< Group assistant 请求字段中包含非预设字段。
ERR_GROUP_STORAGE_DISABLED = 6161, ///< Group assistant 群资料本地存储没有开启。
ERR_LOADGRPINFO_FAILED = 6162, ///< 加载群资料失败。
ERR_REQ_NO_NET_ON_REQ = 6200, ///< 请求的时候没有网络。
ERR_REQ_NO_NET_ON_RSP = 6201, ///< 响应的时候没有网络。
ERR_SERIVCE_NOT_READY = 6205, ///< QALSDK 服务未就绪。
ERR_LOGIN_AUTH_FAILED = 6207, ///< 账号认证失败( TinyId 转换失败)。
ERR_NEVER_CONNECT_AFTER_LAUNCH = 6209, ///< 在应用启动后没有尝试联网。
ERR_REQ_FAILED = 6210, ///< QALSDK 执行失败。
ERR_REQ_INVALID_REQ = 6211, ///< 请求非法toMsgService 非法。
ERR_REQ_OVERLOADED = 6212, ///< 请求队列满。
ERR_REQ_KICK_OFF = 6213, ///< 已经被其他终端踢了。
ERR_REQ_SERVICE_SUSPEND = 6214, ///< 服务被暂停。
ERR_REQ_INVALID_SIGN = 6215, ///< SSO 签名错误。
ERR_REQ_INVALID_COOKIE = 6216, ///< SSO cookie 无效。
ERR_LOGIN_TLS_RSP_PARSE_FAILED = 6217, ///< 登录时 TLS SDK 回包校验,包体长度错误。
ERR_LOGIN_OPENMSG_TIMEOUT = 6218, ///< 登录时 OPENSTATSVC 向 OPENMSG 上报状态超时。
ERR_LOGIN_OPENMSG_RSP_PARSE_FAILED = 6219, ///< 登录时 OPENSTATSVC 向 OPENMSG 上报状态时解析回包失败。
ERR_LOGIN_TLS_DECRYPT_FAILED = 6220, ///< 登录时 TLS SDK 解密失败。
ERR_WIFI_NEED_AUTH = 6221, ///< WIFI 需要认证。
ERR_USER_CANCELED = 6222, ///< 用户已取消。
ERR_REVOKE_TIME_LIMIT_EXCEED = 6223, ///< 消息撤回超过了时间限制默认2分钟
ERR_LACK_UGC_EXT = 6224, ///< 缺少 UGC 扩展包。
ERR_AUTOLOGIN_NEED_USERSIG = 6226, ///< 自动登录,本地票据过期,需要 UserSig 手动登录。
ERR_QAL_NO_SHORT_CONN_AVAILABLE = 6300, ///< 没有可用的短连接 SSO 。
ERR_REQ_CONTENT_ATTACK = 80101, ///< 消息内容安全打击。
ERR_LOGIN_SIG_EXPIRE = 70101, ///< 登录返回,票据过期。
ERR_SDK_HAD_INITIALIZED = 90101, ///< IM SDK 已经初始化无需重复初始化。
ERR_OPENBDH_BASE = 115000, ///< OpenBDH 错误码基。
ERR_REQUEST_NO_NET_ONREQ = 6250, ///< 请求时没有网络,请等网络恢复后重试。
ERR_REQUEST_NO_NET_ONRSP = 6251, ///< 响应时没有网络,请等网络恢复后重试。
ERR_REQUEST_FAILED = 6252, ///< QALSDK 执行失败。
ERR_REQUEST_INVALID_REQ = 6253, ///< 请求非法toMsgService 非法。
ERR_REQUEST_OVERLOADED = 6254, ///< 请求队列満。
ERR_REQUEST_KICK_OFF = 6255, ///< 已经被其他终端踢了。
ERR_REQUEST_SERVICE_SUSPEND = 6256, ///< 服务被暂停。
ERR_REQUEST_INVALID_SIGN = 6257, ///< SSO 签名错误。
ERR_REQUEST_INVALID_COOKIE = 6258, ///< SSO cookie 无效。
};
#endif

View File

@@ -0,0 +1,112 @@
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 IMSDK
//
// 模块名称V2TIMManager+APNS
//
// 消息推送接口,里面包含了消息的推送的开启逻辑
//
/////////////////////////////////////////////////////////////////////
#import "V2TIMManager.h"
@class V2TIMAPNSConfig;
V2TIM_EXPORT @protocol V2TIMAPNSListener;
V2TIM_EXPORT @interface V2TIMManager (APNS)
/////////////////////////////////////////////////////////////////////////////////
//
// 设置 APNS 推送
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 1.1 设置 APNS 监听
*/
- (void)setAPNSListener:(id<V2TIMAPNSListener>)apnsListener;
/**
* 1.2 设置 APNS 推送
*
* config -> token苹果后台对客户端的唯一标识需要主动调用系统 API 获取,获取方法如下:
*
* <pre>
* //获取 token 代码示例
* if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
* [[UIApplication sharedApplication] registerUserNotificationSettings:
* [UIUserNotificationSettings settingsForTypes:
* (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];
* [[UIApplication sharedApplication] registerForRemoteNotifications];
* }
* else{
* [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
* (UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert)];
* }
*
* //收到 token 代码示例
* -(void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
* //回调的 deviceToken 就是需要的 token 信息
* }
* </pre>
*
* config -> busiId推送证书 ID上传推送证书p.12)到 IM 控制台后生成。
* 具体步骤请参考 [离线推送](https://cloud.tencent.com/document/product/269/9154)。
*
* @note
* - 接口成功设置后会开启离线推送功能,如果您需要自定义推送的格式信息,请参考 V2TIMManager+Message.h 里面的 sendMessage 接口。
* - 如果成功开启了离线推送APP 进后台后如果收到消息会弹系统推送通知APP 进前台后,如果收到消息,则不会弹系统推送通知。
* - APP 进后台后 SDK 会默认设置应用角标为所有会话未读数之和,如果您需要自定义 APP 的未读数,请监听 V2TIMAPNSListener 回调设置。
* - APP 在未初始化或未登录成功状态下 SDK 不会设置应用角标,这种情况下如需设置应用角标,请自行调用系统函数设置。
* - 如果您想关闭离线推送,请把 config 设置为 nil。
*/
- (void)setAPNS:(V2TIMAPNSConfig*)config succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// APNS 监听器
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @protocol V2TIMAPNSListener <NSObject>
@optional
/** 程序进后台后,自定义 APP 的未读数如果不处理APP 未读数默认为所有会话未读数之和
* <pre>
*
* - (uint32_t)onSetAPPUnreadCount {
* return 100; // 自定义未读数
* }
*
* </pre>
*/
- (uint32_t)onSetAPPUnreadCount;
@end
/////////////////////////////////////////////////////////////////////////////////
// APNS 配置
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMAPNSConfig : NSObject
/**
* APNS token
*/
@property(nonatomic,strong) NSData *token;
/**
* IM 控制台证书 ID接入 TPNS 时不需要填写
*/
@property(nonatomic,assign) int businessID;
/**
* 是否接入配置 TPNS, token 是否是从 TPNS 获取
* @note 该字段已废弃
* - 如果您之前通过 TPNS 接入离线推送,并且在 TPNS 控制台配置推送信息,可以继续按照该方式接入推送功能;
* - 如果您从未接入 TPNS从未在 TPNS 控制台配置推送信息IM 将不在支持 TPNS 方式接入离线推送功能, 推荐参照如下方式接入:
* https://cloud.tencent.com/document/product/269/74284
*/
@property(nonatomic,assign) BOOL isTPNSToken __attribute__((deprecated("not supported anymore, please use APNs")));
@end

View File

@@ -0,0 +1,478 @@
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 IMSDK
//
// 模块名称V2TIMManager+Conversation
//
// 会话接口,里面包含了会话的获取,删除,更新的逻辑
//
/////////////////////////////////////////////////////////////////////
#import "V2TIMManager.h"
#import "V2TIMManager+Group.h"
#import "V2TIMManager+Message.h"
V2TIM_EXPORT @protocol V2TIMConversationListener;
@class V2TIMConversationListFilter;
@class V2TIMConversationOperationResult;
@class V2TIMConversation;
@class V2TIMGroupAtInfo;
/////////////////////////////////////////////////////////////////////////////////
//
// 消息会话相关接口
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMManager (Conversation)
/// 获取会话列表成功的回调nextSeq下一次分页拉取的游标 isFinished会话列表是否已经拉取完毕
typedef void(^V2TIMConversationResultSucc)(NSArray<V2TIMConversation *>*list, uint64_t nextSeq, BOOL isFinished);
/// 获取单个会话成功回调
typedef void(^V2TIMConversationSucc)(V2TIMConversation *conv);
/// 搜索会话列表成功回调
typedef void(^V2TIMConversationListSucc)(NSArray<V2TIMConversation *>*list);
/// 获取会话总未读数回调
typedef void(^V2TIMTotalUnreadMessageCountSucc)(UInt64 totalUnreadCount);
/// 获取会话分组列表成功回调
typedef void (^V2TIMConversationGroupListSucc)(NSArray<NSString *> * groupList);
/// 会话操作成功回调
typedef void (^V2TIMConversationOperationResultSucc)(NSArray<V2TIMConversationOperationResult *> *result);
/// 会话类型
typedef NS_ENUM(NSInteger, V2TIMConversationType) {
V2TIM_UNKNOWN = 0, ///< 未知
V2TIM_C2C = 1, ///< 单聊
V2TIM_GROUP = 2, ///< 群聊
};
/// @ 类型
typedef NS_ENUM(NSInteger, V2TIMGroupAtType) {
V2TIM_AT_ME = 1, ///< @ 我
V2TIM_AT_ALL = 2, ///< @ 群里所有人
V2TIM_AT_ALL_AT_ME = 3, ///< @ 群里所有人并且单独 @ 我
};
/// 会话标记类型
typedef NS_ENUM(NSUInteger, V2TIMConversationMarkType) {
V2TIM_CONVERSATION_MARK_TYPE_STAR = 0x1, ///< 会话标星
V2TIM_CONVERSATION_MARK_TYPE_UNREAD = 0x1 << 1, ///< 会话标记未读(重要会话)
V2TIM_CONVERSATION_MARK_TYPE_FOLD = 0x1 << 2, ///< 会话折叠
V2TIM_CONVERSATION_MARK_TYPE_HIDE = 0x1 << 3, ///< 会话隐藏
};
/////////////////////////////////////////////////////////////////////////////////
//
// 会话基础接口
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 1.1 添加会话监听器
*/
- (void)addConversationListener:(id<V2TIMConversationListener>)listener NS_SWIFT_NAME(addConversationListener(listener:));
/**
* 1.2 移除会话监听器
*/
- (void)removeConversationListener:(id<V2TIMConversationListener>)listener NS_SWIFT_NAME(removeConversationListener(listener:));
/**
* 1.3 获取会话列表
*
* - 一个会话对应一个聊天窗口,比如跟一个好友的 1v1 聊天,或者一个聊天群,都是一个会话。
* - 由于历史的会话数量可能很多,所以该接口希望您采用分页查询的方式进行调用,每次分页拉取的个数建议为 100 个。
* - 该接口拉取的是本地缓存的会话如果服务器会话有更新SDK 内部会自动同步,然后在 @ref V2TIMConversationListener 回调告知客户。
* - 如果会话全部拉取完毕,成功回调里面 V2TIMConversationResult 中的 isFinished 获取字段值为 YES。
*
* @note 会话排序规则
* - 5.5.892 及以后版本, 该接口获取的会话列表默认已经按照会话 orderKey 做了排序orderKey 值越大,代表该会话排序越靠前。
* - 5.5.892 以前版本,该接口获取的会话列表默认已经按照会话 lastMessage -> timestamp 做了排序timestamp 越大,会话越靠前。
*
* @param nextSeq 分页拉取的游标,第一次默认取传 0后续分页拉传上一次分页拉取成功回调里的 nextSeq
* @param count 分页拉取的个数,一次分页拉取不宜太多,会影响拉取的速度,建议每次拉取 100 个会话
*/
- (void)getConversationList:(uint64_t)nextSeq count:(int)count succ:(V2TIMConversationResultSucc)succ fail:(V2TIMFail)fail;
/**
* 1.4 获取单个会话
*
* @param conversationID 会话唯一 ID, C2C 单聊组成方式:[NSString stringWithFormat:@"c2c_%@",userID];群聊组成方式为 [NSString stringWithFormat:@"group_%@",groupID]
*/
- (void)getConversation:(NSString *)conversationID succ:(V2TIMConversationSucc)succ fail:(V2TIMFail)fail;
/**
* 1.5 获取指定会话列表
*
* @param conversationIDList 会话唯一 ID 列表C2C 单聊组成方式:[NSString stringWithFormat:@"c2c_%@",userID];群聊组成方式为 [NSString stringWithFormat:@"group_%@",groupID]
*/
- (void)getConversationList:(NSArray<NSString *> *)conversationIDList succ:(V2TIMConversationListSucc)succ fail:(V2TIMFail)fail;
/**
* 1.6 获取会话列表高级接口(从 6.5 版本开始支持)
*
* @param filter 会话 filter
* @param nextSeq 分页拉取的游标
* @param count 分页拉取的个数
*
*/
- (void)getConversationListByFilter:(V2TIMConversationListFilter *)filter nextSeq:(uint64_t)seq count:(uint32_t)count succ:(V2TIMConversationResultSucc)succ fail:(V2TIMFail)fail;
/**
* 1.7 删除会话以及该会话中的历史消息
*
* @param conversationID 会话唯一 IDC2C 单聊组成方式:[NSString stringWithFormat:@"c2c_%@",userID];群聊组成方式为 [NSString stringWithFormat:@"group_%@",groupID]
*
* @note 请注意:
* - 该会话以及会话中的历史消息,会被 SDK 从本地和服务端一同删除掉,并且不可恢复。
*/
- (void)deleteConversation:(NSString *)conversationID succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/**
* 1.8 删除会话列表7.1 及以上版本支持)
*
* @param conversationIDList 会话唯一 ID 列表C2C 单聊组成方式:[NSString stringWithFormat:@"c2c_%@",userID];群聊组成方式为 [NSString stringWithFormat:@"group_%@",groupID]
* @param clearMessage 是否删除会话中的消息;设置为 NO 时,保留会话消息;设置为 YES 时,本地和服务器的消息会一起删除,并且不可恢复
*
* @note 请注意: 每次最多支持删除 100 个会话
*/
- (void)deleteConversationList:(NSArray<NSString *> *)conversationIDList
clearMessage:(BOOL)clearMessage
succ:(V2TIMConversationOperationResultSucc)succ
fail:(V2TIMFail)fail;
/**
* 1.9 设置会话草稿
*
* @param conversationID 会话唯一 IDC2C 单聊组成方式:[NSString stringWithFormat:@"c2c_%@",userID];群聊组成方式为 [NSString stringWithFormat:@"group_%@",groupID]
*
* 只在本地保存,不会存储 Server不能多端同步程序卸载重装会失效。
*/
- (void)setConversationDraft:(NSString *)conversationID draftText:(NSString *)draftText succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/**
* 1.10 设置会话自定义数据(从 6.5 版本开始支持)
*
* @param customData 自定义数据,最大支持 256 bytes
*/
- (void)setConversationCustomData:(NSArray<NSString *> *)conversationIDList customData:(NSData *)customData succ:(V2TIMConversationOperationResultSucc)succ fail:(V2TIMFail)fail;
/**
* 1.11 设置会话置顶5.3.425 及以上版本支持)
*
* @param conversationID 会话唯一 IDC2C 单聊组成方式:[NSString stringWithFormat:@"c2c_%@",userID];群聊组成方式为 [NSString stringWithFormat:@"group_%@",groupID]
* @param isPinned 是否置顶
*/
- (void)pinConversation:(NSString *)conversationID isPinned:(BOOL)isPinned succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/**
* 1.12 标记会话(从 6.5 版本开始支持,需要您购买旗舰版套餐)
*
* @param conversationIDList 会话列表
* @param markType 会话标记类型,取值详见 @V2TIMConversationMarkType。
* @param enableMark YES设置标记 NO取消标记
*
* 如果已有标记不能满足您的需求,您可以自定义扩展标记,扩展标记需要满足以下两个条件:
* 1、扩展标记值不能和 V2TIMConversationMarkType 已有的标记值冲突
* 2、扩展标记值必须是 0x1LL << n 的位移值32 <= n < 64即 n 必须大于等于 32 并且小于 64比如扩展标记值 0x1LL << 32 表示 "iPhone 在线"
*
* @note: 扩展标记值不能设置为 0x1 << 32要设置为 0x1LL << 32明确告诉编译器是 64 位的整型常量。
*
*/
- (void)markConversation:(NSArray<NSString *> *)conversationIDList markType:(NSNumber *)markType enableMark:(BOOL)enableMark succ:(V2TIMConversationOperationResultSucc)succ fail:(V2TIMFail)fail;
/**
* 1.13 获取所有会话的未读消息总数5.3.425 及以上版本支持)
* @note
* - 调用该接口以后任意会话的未读数发生变化时SDK 都会给您抛 onTotalUnreadMessageCountChanged 回调。
* - 未读总数会减去设置为免打扰的会话的未读数,即消息接收选项设置为 V2TIMMessage.V2TIM_NOT_RECEIVE_MESSAGE 或 V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE 的会话。
*/
- (void)getTotalUnreadMessageCount:(V2TIMTotalUnreadMessageCountSucc)succ fail:(V2TIMFail)fail;
/**
* 1.14 获取根据 filter 过滤的会话未读总数7.0 及以上版本支持)
*
* @param filter 会话 filter
*
* @note
* - 未读总数会减去设置为免打扰的会话的未读数,即消息接收选项设置为 V2TIMMessage.V2TIM_NOT_RECEIVE_MESSAGE 或 V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE 的会话。
*/
- (void)getUnreadMessageCountByFilter:(V2TIMConversationListFilter *)filter succ:(V2TIMTotalUnreadMessageCountSucc)succ fail:(V2TIMFail)fail;
/**
* 1.15 注册监听指定 filter 的会话未读总数变化7.0 及以上版本支持)
*
* @param filter 会话 filter
*
* @note
* - 当您调用这个接口以后,该 filter 下的未读数发生变化时SDK 会给您抛 onUnreadMessageCountChangedByFilter 回调。
*/
- (void)subscribeUnreadMessageCountByFilter:(V2TIMConversationListFilter *)filter;
/**
* 1.16 取消监听指定 filter 的会话未读总数变化7.0 及以上版本支持)
*
* @param filter 会话 filter
*
*/
- (void)unsubscribeUnreadMessageCountByFilter:(V2TIMConversationListFilter *)filter;
/**
* 1.17 清理会话的未读消息计数7.1 及以上版本支持)
*
* @param conversationID 会话唯一 ID C2C 单聊组成方式:[NSString stringWithFormat:@"c2c_%@",userID];群聊组成方式为 [NSString stringWithFormat:@"group_%@",groupID]
* @param cleanTimestamp 清理时间戳,仅对单聊会话生效,指定清理哪一个 timestamp 之前的未读消息计数;当传入为 0 时,对应会话所有的未读消息将被清理,会话的未读数会清 0
* @param cleanSequence 清理 sequence仅对群聊会话生效指定清理哪一个 sequence 之前的未读消息计数;当传入为 0 时,对应会话所有的未读消息将被清理,会话的未读数会清 0
*
* @note
* - 当您想清理所有单聊会话的未读消息计数conversationID 请传入 @"c2c",即不指定具体的 userID
* - 当您想清理所有群聊会话的未读消息计数conversationID 请传入 @"group",即不指定具体的 groupID
* - 当您想清理所有会话的未读消息计数conversationID 请传入 @“” 或者 nil
* - 该接口调用成功后SDK 会通过 onConversationChanged 回调将对应会话的最新未读数通知给您。
*/
- (void)cleanConversationUnreadMessageCount:(NSString *)conversationID cleanTimestamp:(uint64_t)cleanTimestamp cleanSequence:(uint64_t)cleanSequence succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/**
* 1.18 设置会话监听器(待废弃接口,请使用 addConversationListener 和 removeConversationListener 接口)
*/
- (void)setConversationListener:(id<V2TIMConversationListener>)listener __attribute__((deprecated("use addConversationListener: instead")));
/////////////////////////////////////////////////////////////////////////////////
//
// 会话分组相关接口 (从 6.5 版本开始支持,需要您购买旗舰版套餐)
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 2.1 创建会话分组
*
* @param groupName 分组名(必填参数,长度要 > 0最大支持 32 bytes
* @param conversationIDList 会话 ID 列表(必填参数,不能为空)
*
* @note 会话分组最大支持 20 个,不再使用的分组请及时删除。
*/
- (void)createConversationGroup:(NSString *)groupName conversationIDList:(NSArray<NSString *> *)conversationIDList succ:(V2TIMConversationOperationResultSucc)succ fail:(V2TIMFail)fail;
/**
* 2.2 获取会话分组列表
*/
- (void)getConversationGroupList:(V2TIMConversationGroupListSucc)succ fail:(V2TIMFail)fail;
/**
* 2.3 删除会话分组
*/
- (void)deleteConversationGroup:(NSString *)groupName succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/**
* 2.4 重命名会话分组
*/
- (void)renameConversationGroup:(NSString*)oldName newName:(NSString*)newName succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/**
* 2.5 添加会话到一个会话分组
*/
- (void)addConversationsToGroup:(NSString *)groupName conversationIDList:(NSArray<NSString *> *)conversationIDList succ:(V2TIMConversationOperationResultSucc)succ fail:(V2TIMFail)fail;
/**
* 2.6 从一个会话分组中删除会话
*/
- (void)deleteConversationsFromGroup:(NSString *)groupName conversationIDList:(NSArray<NSString *> *)conversationIDList succ:(V2TIMConversationOperationResultSucc)succ fail:(V2TIMFail)fail;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 会话变更监听器
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @protocol V2TIMConversationListener <NSObject>
@optional
/////////////////////////////////////////////////////////////////////////////////
// 会话基础通知
/////////////////////////////////////////////////////////////////////////////////
/**
* 同步服务器会话开始SDK 会在登录成功或者断网重连后自动同步服务器会话,您可以监听这个事件做一些 UI 进度展示操作。
*/
- (void)onSyncServerStart;
/**
* 同步服务器会话完成,如果会话有变更,会通过 onNewConversation | onConversationChanged 回调告知客户
*/
- (void)onSyncServerFinish;
/**
* 同步服务器会话失败
*/
- (void)onSyncServerFailed;
/**
* 有新的会话(比如收到一个新同事发来的单聊消息、或者被拉入了一个新的群组中),可以根据会话的 lastMessage -> timestamp 重新对会话列表做排序。
*/
- (void)onNewConversation:(NSArray<V2TIMConversation*> *) conversationList;
/**
* 某些会话的关键信息发生变化(未读计数发生变化、最后一条消息被更新等等),可以根据会话的 lastMessage -> timestamp 重新对会话列表做排序。
*/
- (void)onConversationChanged:(NSArray<V2TIMConversation*> *) conversationList;
/**
* 全部会话未读总数变更的通知5.3.425 及以上版本支持)
* @note
* - 当您调用 getTotalUnreadMessageCount 获取全部会话未读总数以后任意会话的未读数发生变化时SDK 都会通过该回调把最新的未读总数通知给您。
* - 未读总数会减去设置为免打扰的会话的未读数,即消息接收选项设置为 V2TIMMessage.V2TIM_NOT_RECEIVE_MESSAGE 或 V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE 的会话。
*/
- (void)onTotalUnreadMessageCountChanged:(UInt64) totalUnreadCount;
/**
* 根据 filter 过滤的未读消息总数变更通知7.0 及以上版本支持)
* @note
* - 您可以调用 subscribeUnreadMessageCountByFilter 注册监听指定 filter 下的未读总数变化SDK 通过这个回调把最新的未读总数通知给您。
* - 您可以注册监听多个不同 filter 下的未读总数变化,这个回调的 filter 参数就是注册监听时指定的 filter该 filter 携带了 conversationType、conversationGroup 和 markType 三个字段,通过判断这三字段是不是都相同,来区分出不同的 filter。
* - 未读总数会减去设置为免打扰的会话的未读数,即消息接收选项设置为 V2TIMMessage.V2TIM_NOT_RECEIVE_MESSAGE 或 V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE 的会话。
*/
- (void)onUnreadMessageCountChangedByFilter:(V2TIMConversationListFilter *)filter totalUnreadCount:(UInt64)totalUnreadCount;
/////////////////////////////////////////////////////////////////////////////////
// 会话分组相关通知(从 6.5 版本开始支持)
/////////////////////////////////////////////////////////////////////////////////
/**
* 会话分组被创建
*/
- (void)onConversationGroupCreated:(NSString *)groupName conversationList:(NSArray<V2TIMConversation *> *)conversationList;
/**
* 会话分组被删除
*/
- (void)onConversationGroupDeleted:(NSString *)groupName;
/**
* 会话分组名变更
*/
- (void)onConversationGroupNameChanged:(NSString *)oldName newName:(NSString *)newName;
/**
* 会话分组新增会话
*/
- (void)onConversationsAddedToGroup:(NSString *)groupName conversationList:(NSArray<V2TIMConversation *> *)conversationList;
/**
* 会话分组删除会话
*/
- (void)onConversationsDeletedFromGroup:(NSString *)groupName conversationList:(NSArray<V2TIMConversation *> *)conversationList;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 会话对象 V2TIMConversation
//
/////////////////////////////////////////////////////////////////////////////////
/// 会话对象
V2TIM_EXPORT @interface V2TIMConversation : NSObject
/// 会话类型
@property(nonatomic,assign,readonly) V2TIMConversationType type;
/// 会话唯一 ID如果是 C2C 单聊,组成方式为 c2c_userID如果是群聊组成方式为 group_groupID
@property(nonatomic,strong,readonly) NSString *conversationID;
/// 如果会话类型为 C2C 单聊userID 会存储对方的用户ID否则为 nil
@property(nonatomic,strong,readonly) NSString *userID;
/// 如果会话类型为群聊groupID 会存储当前群的群 ID否则为 nil
@property(nonatomic,strong,readonly) NSString *groupID;
/// 如果会话类型为群聊groupType 为当前群类型,否则为 nil
@property(nonatomic,strong,readonly) NSString *groupType;
/// 会话展示名称(群组:群名称 >> 群 IDC2C对方好友备注 >> 对方昵称 >> 对方的 userID
@property(nonatomic,strong,readonly) NSString *showName;
/// 会话展示头像群组群头像C2C对方头像
@property(nonatomic,strong,readonly) NSString *faceUrl;
/// 会话未读消息数量,直播群AVChatRoom不支持未读计数默认为 0
@property(nonatomic,assign,readonly) int unreadCount;
/// 消息接收选项(接收 | 接收但不提醒 | 不接收)
@property(nonatomic,assign,readonly) V2TIMReceiveMessageOpt recvOpt;
/**
* 会话最后一条消息
* @note 5.5.892 以前版本,请您使用 lastMessage -> timestamp 对会话做排序timestamp 越大,会话越靠前
*/
@property(nonatomic,strong,readonly) V2TIMMessage *lastMessage;
/// 群会话 @ 信息列表,用于展示 “有人@我” 或 “@所有人” 这两种提醒状态
@property(nonatomic,strong,readonly) NSArray<V2TIMGroupAtInfo *> *groupAtInfolist;
/// 草稿信息,设置草稿信息请调用 setConversationDraft() 接口
@property(nonatomic,strong,readonly) NSString *draftText;
/// 草稿编辑时间,草稿设置的时候自动生成
@property(nonatomic,strong,readonly) NSDate *draftTimestamp;
/// 是否置顶
@property(nonatomic,assign,readonly) BOOL isPinned;
/**
* 排序字段5.5.892 及以后版本支持)
* @note
* - 排序字段 orderKey 是按照会话的激活时间线性递增的一个数字(注意:不是时间戳,因为同一时刻可能会有多个会话被同时激活)
* - 5.5.892 及其以后版本推荐您使用该字段对所有会话进行排序orderKey 值越大,代表该会话排序越靠前
* - 当您 “清空会话所有消息” 或者 “逐个删除会话的所有消息” 之后,会话的 lastMessage 变为空,但会话的 orderKey 不会改变;如果想保持会话的排序位置不变,可以使用该字段对所有会话进行排序
*/
@property(nonatomic,assign,readonly) NSUInteger orderKey;
/// 会话标记列表,取值详见 @V2TIMConversationMarkType从 6.5 版本开始支持)
@property(nonatomic,strong,readonly) NSArray<NSNumber *> * markList;
/// 会话自定义数据(从 6.5 版本开始支持)
@property(nonatomic,strong,readonly) NSData *customData;
/// 会话所属分组列表(从 6.5 版本开始支持)
@property(nonatomic,strong,readonly) NSArray<NSString *> *conversationGroupList;
/// 已读消息的时间戳,仅对单聊会话生效(从 7.1 版本开始支持)
@property(nonatomic,assign,readonly) NSUInteger c2cReadTimestamp;
/// 已读消息的 sequence仅对群聊会话生效从 7.1 版本开始支持)
@property(nonatomic,assign,readonly) NSUInteger groupReadSequence;
@end
/// 会话 filter
V2TIM_EXPORT @interface V2TIMConversationListFilter : NSObject
/// C2C 或群会话(填 0 代表不过滤此项)
@property(nonatomic,assign) V2TIMConversationType type;
/// 会话分组名称(填 nil 代表不过滤此项)
@property(nonatomic,strong) NSString *conversationGroup;
/// 标记类型,取值详见 @V2TIMConversationMarkType (填 0 代表不过滤此项)
@property(nonatomic,assign) NSUInteger markType;
@end
/// @ 信息
V2TIM_EXPORT @interface V2TIMGroupAtInfo : NSObject
/// @ 消息序列号,即带有 “@我” 或者 “@所有人” 标记的消息的序列号
@property(nonatomic,assign,readonly) uint64_t seq;
/// @ 提醒类型,分成 “@我” 、“@所有人” 以及 “@我并@所有人” 三类
@property(nonatomic,assign,readonly) V2TIMGroupAtType atType;
@end
/// 会话操作结果
V2TIM_EXPORT @interface V2TIMConversationOperationResult : NSObject
/// 会话 ID
@property(nonatomic,strong) NSString* conversationID;
/// 返回码
@property(nonatomic,assign) NSInteger resultCode;
/// 返回信息
@property(nonatomic,strong) NSString *resultInfo;
@end

View File

@@ -0,0 +1,522 @@
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 IMSDK
//
// 模块名称V2TIMManager+Friendship
//
// 关系链接口,里面包含了好友的添加、删除,黑名单的添加、删除等逻辑
//
/////////////////////////////////////////////////////////////////////
#import "V2TIMManager.h"
V2TIM_EXPORT @protocol V2TIMFriendshipListener;
@class V2TIMFriendOperationResult;
@class V2TIMFriendInfoResult;
@class V2TIMFriendInfo;
@class V2TIMFriendCheckResult;
@class V2TIMFriendApplicationResult;
@class V2TIMFriendAddApplication;
@class V2TIMFriendApplication;
@class V2TIMFriendGroup;
@class V2TIMFriendSearchParam;
V2TIM_EXPORT @interface V2TIMManager (Friendship)
/// 获取好友列表成功回调
typedef void (^V2TIMFriendInfoListSucc)(NSArray<V2TIMFriendInfo *> *infoList);
/// 获取指定好友信息成功回调
typedef void (^V2TIMFriendInfoResultListSucc)(NSArray<V2TIMFriendInfoResult *> *resultList);
/// 好友操作成功回调
typedef void (^V2TIMFriendOperationResultSucc)(V2TIMFriendOperationResult *result);
/// 好友列表操作成功回调
typedef void (^V2TIMFriendOperationResultListSucc)(NSArray<V2TIMFriendOperationResult *> *resultList);
/// 好友检查成功回调
typedef void (^V2TIMFriendCheckResultListSucc)(NSArray<V2TIMFriendCheckResult *> *resultList);
/// 获取群分组列表成功回调
typedef void (^V2TIMFriendGroupListSucc)(NSArray<V2TIMFriendGroup *> * groups);
/// 获取好友申请列表成功回调
typedef void (^V2TIMFriendApplicationResultSucc)(V2TIMFriendApplicationResult *result);
/// 好友申请类型
typedef NS_ENUM(NSInteger, V2TIMFriendApplicationType) {
V2TIM_FRIEND_APPLICATION_COME_IN = 1, ///< 别人发给我的
V2TIM_FRIEND_APPLICATION_SEND_OUT = 2, ///< 我发给别人的
V2TIM_FRIEND_APPLICATION_BOTH = 3, ///< 别人发给我的 和 我发给别人的。仅拉取时有效
};
/// 好友类型
typedef NS_ENUM(NSInteger, V2TIMFriendType) {
V2TIM_FRIEND_TYPE_SINGLE = 1, ///< 单向好友
V2TIM_FRIEND_TYPE_BOTH = 2, ///< 双向好友
};
/// 好友关系类型
typedef NS_ENUM(NSInteger, V2TIMFriendRelationType) {
V2TIM_FRIEND_RELATION_TYPE_NONE = 0x0, ///< 不是好友
V2TIM_FRIEND_RELATION_TYPE_IN_MY_FRIEND_LIST = 0x1, ///< 对方在我的好友列表中
V2TIM_FRIEND_RELATION_TYPE_IN_OTHER_FRIEND_LIST = 0x2, ///< 我在对方的好友列表中
V2TIM_FRIEND_RELATION_TYPE_BOTH_WAY = 0x3, ///< 互为好友
};
/// 好友申请接受类型
typedef NS_ENUM(NSInteger, V2TIMFriendAcceptType) {
V2TIM_FRIEND_ACCEPT_AGREE = 0, ///< 接受加好友(建立单向好友)
V2TIM_FRIEND_ACCEPT_AGREE_AND_ADD = 1, ///< 接受加好友并加对方为好友(建立双向好友)
};
/////////////////////////////////////////////////////////////////////////////////
//
// 关系链和用户资料监听器
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 1.1 添加关系链监听器
*/
- (void)addFriendListener:(id<V2TIMFriendshipListener>)listener NS_SWIFT_NAME(addFriendListener(listener:));
/**
* 1.2 移除关系链监听器
*/
- (void)removeFriendListener:(id<V2TIMFriendshipListener>)listener NS_SWIFT_NAME(removeFriendListener(listener:));
/**
* 设置关系链监听器(待废弃接口,请使用 addFriendListener 和 removeFriendListener 接口)
*/
- (void)setFriendListener:(id<V2TIMFriendshipListener>)listener __attribute__((deprecated("use addFriendListener: instead")));
/////////////////////////////////////////////////////////////////////////////////
//
// 好友添加、删除、列表获取、资料设置相关接口
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 2.1 获取好友列表
*/
- (void)getFriendList:(V2TIMFriendInfoListSucc)succ fail:(V2TIMFail)fail;
/**
* 2.2 获取指定好友资料
* @param userIDList 好友 userID 列表
* - ID 建议一次最大 100 个,因为数量过多可能会导致数据包太大被后台拒绝,后台限制数据包最大为 1M。
*/
- (void)getFriendsInfo:(NSArray<NSString *> *)userIDList succ:(V2TIMFriendInfoResultListSucc)succ fail:(V2TIMFail)fail;
/**
* 2.3 设置指定好友资料
*/
- (void)setFriendInfo:(V2TIMFriendInfo *)info succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/**
* 2.4 搜索好友5.4.666 及以上版本支持)
* @note
* - 接口返回本地存储的用户资料,可以根据 V2TIMFriendInfoResult 中的 getRelation 来判断是否为好友。
* - 该功能为 IM 旗舰版功能,[购买旗舰版套餐包](https://buy.cloud.tencent.com/avc?from=17474)后可使用,详见[价格说明](https://cloud.tencent.com/document/product/269/11673?from=17176#.E5.9F.BA.E7.A1.80.E6.9C.8D.E5.8A.A1.E8.AF.A6.E6.83.85)
*/
- (void)searchFriends:(V2TIMFriendSearchParam *)searchParam succ:(V2TIMFriendInfoResultListSucc)succ fail:(V2TIMFail)fail;
/**
* 2.5 添加好友
*/
- (void)addFriend:(V2TIMFriendAddApplication *)application succ:(V2TIMFriendOperationResultSucc)succ fail:(V2TIMFail)fail;
/**
* 2.6 删除好友
* @param userIDList 要删除的好友 userID 列表
* - ID 建议一次最大 100 个,因为数量过多可能会导致数据包太大被后台拒绝,后台限制数据包最大为 1M。
* @param deleteType 删除类型(单向好友、双向好友)
*/
- (void)deleteFromFriendList:(NSArray *)userIDList deleteType:(V2TIMFriendType)deleteType succ:(V2TIMFriendOperationResultListSucc)succ fail:(V2TIMFail)fail;
/**
* 2.7 检查指定用户的好友关系
* @param userIDList 要检查的 userID 列表
* @param checkType 检查类型 (单向好友检查、双向好友检查)
* @param succ 成功后的回调
* @param fail 失败后的回调
*
* @note checkType 的使用需要注意:
* - checkType 如果传入 V2TIM_FRIEND_TYPE_SINGLE结果返回V2TIM_FRIEND_RELATION_TYPE_NONE、V2TIM_FRIEND_RELATION_TYPE_IN_MY_FRIEND_LIST 两种情况
* - checkType 如果传入 V2TIM_FRIEND_TYPE_BOTH结果返回V2TIM_FRIEND_RELATION_TYPE_NONE、V2TIM_FRIEND_RELATION_TYPE_IN_MY_FRIEND_LIST、
* V2TIM_FRIEND_RELATION_TYPE_IN_OTHER_FRIEND_LIST、V2TIM_FRIEND_RELATION_TYPE_BOTH_WAY 四种情况
*/
- (void)checkFriend:(NSArray<NSString *> *)userIDList checkType:(V2TIMFriendType)checkType succ:(V2TIMFriendCheckResultListSucc)succ fail:(V2TIMFail)fail;
/////////////////////////////////////////////////////////////////////////////////
//
// 好友申请、删除相关逻辑
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 3.1 获取好友申请列表
*
* @note
* - 好友申请列表包括发起的好友申请和收到的好友申请。
* - 最多支持100个。
*/
- (void)getFriendApplicationList:(V2TIMFriendApplicationResultSucc)succ fail:(V2TIMFail)fail;
/**
* 3.2 同意好友申请
*
* @param application 好友申请信息getFriendApplicationList 成功后会返回
* @param acceptType 建立单向/双向好友关系
*/
- (void)acceptFriendApplication:(V2TIMFriendApplication *)application type:(V2TIMFriendAcceptType)acceptType succ:(V2TIMFriendOperationResultSucc)succ fail:(V2TIMFail)fail;
/**
* 3.3 拒绝好友申请
*
* @param application 好友申请信息getFriendApplicationList 成功后会返回
*/
- (void)refuseFriendApplication:(V2TIMFriendApplication *)application succ:(V2TIMFriendOperationResultSucc)succ fail:(V2TIMFail)fail;
/**
* 3.4 删除好友申请
*
* @param application 好友申请信息getFriendApplicationList 成功后会返回
*/
- (void)deleteFriendApplication:(V2TIMFriendApplication *)application succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/**
* 3.5 设置好友申请已读
*/
- (void)setFriendApplicationRead:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/////////////////////////////////////////////////////////////////////////////////
//
// 黑名单
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 4.1 添加用户到黑名单
*/
- (void)addToBlackList:(NSArray *)userIDList succ:(V2TIMFriendOperationResultListSucc)succ fail:(V2TIMFail)fail;
/**
* 4.2 把用户从黑名单中删除
*/
- (void)deleteFromBlackList:(NSArray *)userIDList succ:(V2TIMFriendOperationResultListSucc)succ fail:(V2TIMFail)fail;
/**
* 4.3 获取黑名单列表
*/
- (void)getBlackList:(V2TIMFriendInfoListSucc)succ fail:(V2TIMFail)fail;
/////////////////////////////////////////////////////////////////////////////////
//
// 好友分组
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 5.1 新建好友分组
*
* @param groupName 分组名称
* @param userIDList 要添加到分组中的好友
*/
- (void)createFriendGroup:(NSString *)groupName userIDList:(NSArray *)userIDList succ:(V2TIMFriendOperationResultListSucc)succ fail:(V2TIMFail)fail;
/**
* 5.2 获取分组信息
*
* @param groupNameList 要获取信息的好友分组名称列表,传入 nil 获得所有分组信息
*/
- (void)getFriendGroupList:(NSArray *)groupNameList succ:(V2TIMFriendGroupListSucc)succ fail:(V2TIMFail)fail;
/**
* 5.3 删除好友分组
*/
- (void)deleteFriendGroup:(NSArray *)groupNameList succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/**
* 5.4 修改好友分组的名称
*/
- (void)renameFriendGroup:(NSString*)oldName newName:(NSString*)newName succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/**
* 5.5 添加好友到一个好友分组
*/
- (void)addFriendsToFriendGroup:(NSString *)groupName userIDList:(NSArray *)userIDList succ:(V2TIMFriendOperationResultListSucc)succ fail:(V2TIMFail)fail;
/**
* 5.6 从好友分组中删除好友
*/
- (void)deleteFriendsFromFriendGroup:(NSString *)groupName userIDList:(NSArray *)userIDList succ:(V2TIMFriendOperationResultListSucc)succ fail:(V2TIMFail)fail;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 资料关系链回调
//
/////////////////////////////////////////////////////////////////////////////////
/// 资料关系链回调
V2TIM_EXPORT @protocol V2TIMFriendshipListener <NSObject>
@optional
/**
* 好友申请新增通知,两种情况会收到这个回调:
* 1. 自己申请加别人好友
* 2. 别人申请加自己好友
*/
- (void)onFriendApplicationListAdded:(NSArray<V2TIMFriendApplication *> *)applicationList;
/**
* 好友申请删除通知,四种情况会收到这个回调:
* 1. 调用 deleteFriendApplication 主动删除好友申请
* 2. 调用 refuseFriendApplication 拒绝好友申请
* 3. 调用 acceptFriendApplication 同意好友申请
* 4. 申请加别人好友被拒绝
*/
- (void)onFriendApplicationListDeleted:(NSArray *)userIDList;
/**
* 好友申请已读通知,如果调用 setFriendApplicationRead 设置好友申请列表已读,会收到这个回调(主要用于多端同步)
*/
- (void)onFriendApplicationListRead;
/**
* 好友新增通知
*/
- (void)onFriendListAdded:(NSArray<V2TIMFriendInfo *>*)infoList;
/**
* 好友删除通知,两种情况会收到这个回调:
* 1. 自己删除好友(单向和双向删除都会收到回调)
* 2. 好友把自己删除(双向删除会收到)
*/
- (void)onFriendListDeleted:(NSArray*)userIDList;
/**
* 黑名单新增通知
*/
- (void)onBlackListAdded:(NSArray<V2TIMFriendInfo *>*)infoList;
/**
* 黑名单删除通知
*/
- (void)onBlackListDeleted:(NSArray*)userIDList;
/**
* 好友资料变更通知
*/
- (void)onFriendProfileChanged:(NSArray<V2TIMFriendInfo *> *)infoList;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 好友资料获取结果
//
/////////////////////////////////////////////////////////////////////////////////
/// 好友资料获取结果
V2TIM_EXPORT @interface V2TIMFriendInfoResult : NSObject
/// 返回码
@property(nonatomic,assign) int resultCode;
/// 返结果表述
@property(nonatomic,strong) NSString *resultInfo;
/// 好友类型
@property(nonatomic,assign) V2TIMFriendRelationType relation;
/// 好友个人资料,如果不是好友,除了 userID 字段,其他字段都为空
@property(nonatomic,strong) V2TIMFriendInfo *friendInfo;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 好友资料
//
/////////////////////////////////////////////////////////////////////////////////
/// 好友资料
V2TIM_EXPORT @interface V2TIMFriendInfo : NSObject
/// 好友 ID
@property(nonatomic,strong) NSString *userID;
/**
* 好友备注
*
* @note
* - 备注长度最长不得超过 96 个字节;
* - 字段描述详见 [控制台](https://cloud.tencent.com/document/product/269/1501#.E6.A0.87.E9.85.8D.E5.A5.BD.E5.8F.8B.E5.AD.97.E6.AE.B5)。
*/
@property(nonatomic,strong) NSString *friendRemark;
/// 好友添加时间
@property(nonatomic,assign,readonly) uint64_t friendAddTime;
/// 好友自定义字段
/// 首先要在 [控制台](https://console.cloud.tencent.com/im) (功能配置 -> 好友自定义字段) 配置好友自定义字段然后再调用该接口进行设置key 值不需要加 Tag_SNS_Custom_ 前缀。
@property(nonatomic,strong) NSDictionary<NSString *,NSData *> *friendCustomInfo;
/**
* 好友所在分组列表
*
* @note
* - 最多支持 32 个分组;
* - 不允许分组名为空;
* - 分组名长度不得超过 30 个字节;
* - 同一个好友可以有多个不同的分组。
* - 字段描述详见 [控制台](https://cloud.tencent.com/document/product/269/1501#.E6.A0.87.E9.85.8D.E5.A5.BD.E5.8F.8B.E5.AD.97.E6.AE.B5)。
*/
@property(nonatomic,strong,readonly) NSArray *friendGroups;
/// 好友个人资料
@property(nonatomic,strong,readonly) V2TIMUserFullInfo *userFullInfo;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 好友申请相关对象
//
/////////////////////////////////////////////////////////////////////////////////
/// 加好友
V2TIM_EXPORT @interface V2TIMFriendAddApplication : NSObject
/// 用户 userID必填
@property (nonatomic,strong) NSString* userID;
/// 备注备注最大96字节
@property (nonatomic,strong) NSString* friendRemark;
/// 预分组名最大96字节
@property (nonatomic,strong) NSString* friendGroup;
/// 请求说明最大120字节
@property (nonatomic,strong) NSString* addWording;
/// 添加来源
@property (nonatomic,strong) NSString* addSource;
/// 加好友方式
@property (nonatomic,assign) V2TIMFriendType addType;
@end
/// 好友申请列表
V2TIM_EXPORT @interface V2TIMFriendApplicationResult : NSObject
/// 好友申请未读数量
@property(nonatomic,assign) uint64_t unreadCount;
/// 好友申请列表
@property(nonatomic,strong) NSMutableArray<V2TIMFriendApplication *> * applicationList;
@end
/// 好友申请
V2TIM_EXPORT @interface V2TIMFriendApplication : NSObject
/// 用户标识
@property(nonatomic,strong,readonly) NSString* userID;
/// 用户昵称
@property(nonatomic,strong,readonly) NSString* nickName;
/// 用户头像
@property(nonatomic,strong,readonly) NSString* faceUrl;
/// 添加时间
@property(nonatomic,assign,readonly) uint64_t addTime;
/// 来源
@property(nonatomic,strong,readonly) NSString* addSource;
/// 加好友附言
@property(nonatomic,strong,readonly) NSString* addWording;
/// 好友申请类型
@property(nonatomic,assign,readonly) V2TIMFriendApplicationType type;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 好友关系链检查结果
//
/////////////////////////////////////////////////////////////////////////////////
/// 好友关系链检查结果
V2TIM_EXPORT @interface V2TIMFriendCheckResult : NSObject
/// 用户id
@property(nonatomic,strong) NSString* userID;
/// 返回码
@property(nonatomic,assign) NSInteger resultCode;
/// 返回信息
@property(nonatomic,strong) NSString *resultInfo;
/// 检查结果
@property(nonatomic,assign) V2TIMFriendRelationType relationType;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 好友操作结果(添加、删除、加黑名单、添加分组等)
//
/////////////////////////////////////////////////////////////////////////////////
/// 好友操作结果(添加、删除、加黑名单、添加分组等)
V2TIM_EXPORT @interface V2TIMFriendOperationResult : NSObject
/// 用户Id
@property(nonatomic,strong) NSString* userID;
/// 返回码
@property(nonatomic,assign) NSInteger resultCode;
/// 返回信息
@property(nonatomic,strong) NSString *resultInfo;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 好友分组
//
/////////////////////////////////////////////////////////////////////////////////
/// 好友分组
V2TIM_EXPORT @interface V2TIMFriendGroup : NSObject
/// 好友分组名称
@property(nonatomic,strong) NSString* groupName;
/// 分组成员数量
@property(nonatomic,assign) uint64_t userCount;
/// 分组成员列表
@property(nonatomic,strong) NSMutableArray* friendList;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 好友搜索
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMFriendSearchParam : NSObject
/// 搜索的关键字列表,关键字列表最多支持 5 个
@property(nonatomic, strong) NSArray<NSString *> *keywordList;
/// 设置是否搜索 userID
@property(nonatomic, assign) BOOL isSearchUserID;
/// 是否设置搜索昵称
@property(nonatomic, assign) BOOL isSearchNickName;
/// 是否设置搜索备注
@property(nonatomic, assign) BOOL isSearchRemark;;
@end

View File

@@ -0,0 +1,750 @@
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 IMSDK
//
// 模块名称V2TIMManager+Group
//
// 群组高级接口,里面包含了群组的高级功能,比如群成员邀请、非群成员申请进群等操作接口。
//
/////////////////////////////////////////////////////////////////////
#import "V2TIMManager.h"
#import "V2TIMManager+Message.h"
#import "V2TIMManager+Conversation.h"
@class V2TIMGroupMemberOperationResult;
@class V2TIMGroupApplicationResult;
@class V2TIMCreateGroupMemberInfo;
@class V2TIMGroupInfo;
@class V2TIMGroupInfoResult;
@class V2TIMTopicInfo;
@class V2TIMTopicInfoResult;
@class V2TIMTopicOperationResult;
@class V2TIMGroupApplication;
@class V2TIMGroupSearchParam;
@class V2TIMGroupMemberSearchParam;
@class V2TIMGroupAtInfo;
/////////////////////////////////////////////////////////////////////////////////
//
// 群相关的高级接口
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMManager (Group)
/// 获取已加入群列表成功回调
typedef void (^V2TIMGroupInfoListSucc)(NSArray<V2TIMGroupInfo *> *groupList);
/// 获取指定群列表成功回调
typedef void (^V2TIMGroupInfoResultListSucc)(NSArray<V2TIMGroupInfoResult *> *groupResultList);
/// 获取群属性列表成功回调
typedef void (^V2TIMGroupAttributeListSucc)(NSMutableDictionary<NSString *,NSString *> *groupAttributeList);
/// 获取群成员列表成功回调
typedef void (^V2TIMGroupMemberInfoListSucc)(NSArray<V2TIMGroupMemberFullInfo *> *memberList);
/// 获取指定群成员列表成功回调
typedef void (^V2TIMGroupMemberInfoResultSucc)(uint64_t nextSeq, NSArray<V2TIMGroupMemberFullInfo *> * memberList);
/// 搜索群成员列表成功回调
typedef void (^V2TIMGroupMemberInfoListSearchSucc)(NSDictionary<NSString *, NSArray<V2TIMGroupMemberFullInfo *> *> *memberList);
/// 群成员操作成功回调
typedef void (^V2TIMGroupMemberOperationResultListSucc)(NSArray<V2TIMGroupMemberOperationResult*> * resultList);
/// 获取好友申请列表成功回调
typedef void (^V2TIMGroupApplicationResultSucc)(V2TIMGroupApplicationResult *result);
/// 获取群在线人数成功回调
typedef void (^V2TIMGroupOnlineMemberCountSucc)(NSInteger count);
/// 操作话题列表结果
typedef void(^V2TIMTopicOperationResultSucc)(NSMutableArray<V2TIMTopicOperationResult *> *resultList);
/// 获取话题列表结果
typedef void(^V2TIMTopicInfoResultListSucc)(NSMutableArray<V2TIMTopicInfoResult *> *resultList);
/// 创建话题成功回调
typedef void (^V2TIMCreateTopicSucc)(NSString * topicID);
/// 群计数器操作成功的回调
typedef void (^V2TIMGroupCounterResultSucc)(NSDictionary<NSString *, NSNumber *> *groupCounters);
/// 加群选项
typedef NS_ENUM(NSInteger, V2TIMGroupAddOpt) {
V2TIM_GROUP_ADD_FORBID = 0, ///< 禁止加群
V2TIM_GROUP_ADD_AUTH = 1, ///< 需要管理员审批
V2TIM_GROUP_ADD_ANY = 2, ///< 任何人可以加入
};
/// 群组操作结果
typedef NS_ENUM(NSInteger, V2TIMGroupMemberResult) {
V2TIM_GROUP_MEMBER_RESULT_FAIL = 0, ///< 操作失败
V2TIM_GROUP_MEMBER_RESULT_SUCC = 1, ///< 操作成功
V2TIM_GROUP_MEMBER_RESULT_INVALID = 2, ///< 无效操作,加群时已经是群成员,移除群组时不在群内
V2TIM_GROUP_MEMBER_RESULT_PENDING = 3, ///< 等待处理,邀请入群时等待审批
V2TIM_GROUP_MEMBER_RESULT_OVERLIMIT = 4, ///< 操作失败,创建群指定初始群成员列表或邀请入群时,被邀请者加入的群总数超限
};
/// 群成员角色过滤方式
typedef NS_ENUM(NSInteger, V2TIMGroupMemberFilter) {
V2TIM_GROUP_MEMBER_FILTER_ALL = 0x00, ///< 全部成员
V2TIM_GROUP_MEMBER_FILTER_OWNER = 0x01, ///< 群主
V2TIM_GROUP_MEMBER_FILTER_ADMIN = 0x02, ///< 管理员
V2TIM_GROUP_MEMBER_FILTER_COMMON = 0x04, ///< 普通成员
};
/// 群组未决请求类型
typedef NS_ENUM(NSInteger, V2TIMGroupApplicationType) {
V2TIM_GROUP_JOIN_APPLICATION_NEED_APPROVED_BY_ADMIN = 0x0, ///< 需要群主或管理员审批的申请加群请求
V2TIM_GROUP_INVITE_APPLICATION_NEED_APPROVED_BY_INVITEE = 0x1, ///< 需要被邀请者同意的邀请入群请求
V2TIM_GROUP_INVITE_APPLICATION_NEED_APPROVED_BY_ADMIN = 0x2, ///< 需要群主或管理员审批的邀请入群请求
};
/// 群组已决标志
typedef NS_ENUM(NSInteger, V2TIMGroupApplicationHandleStatus) {
V2TIM_GROUP_APPLICATION_HANDLE_STATUS_UNHANDLED = 0, ///< 未处理
V2TIM_GROUP_APPLICATION_HANDLE_STATUS_HANDLED_BY_OTHER = 1, ///< 被他人处理
V2TIM_GROUP_APPLICATION_HANDLE_STATUS_HANDLED_BY_SELF = 2, ///< 自己已处理
};
/// 群组已决结果
typedef NS_ENUM(NSInteger, V2TIMGroupApplicationHandleResult) {
V2TIM_GROUP_APPLICATION_HANDLE_RESULT_REFUSE = 0, ///< 拒绝申请
V2TIM_GROUP_APPLICATION_HANDLE_RESULT_AGREE = 1, ///< 同意申请
};
/////////////////////////////////////////////////////////////////////////////////
// 群管理
/////////////////////////////////////////////////////////////////////////////////
/**
* 1.1 创建自定义群组(高级版本:可以指定初始的群成员)
*
* @param info 自定义群组信息,可以设置 groupID | groupType | groupName | notification | introduction | faceURL 字段
* @param memberList 指定初始的群成员(直播群 AVChatRoom 不支持指定初始群成员memberList 请传 nil
*
* @note
* - 邀请的群成员个数不能超过 207.1 及其以上版本开始限制)
* - 其他限制请参考 V2TIMManager.h -> createGroup 注释
*/
- (void)createGroup:(V2TIMGroupInfo*)info memberList:(NSArray<V2TIMCreateGroupMemberInfo *>*) memberList succ:(V2TIMCreateGroupSucc)succ fail:(V2TIMFail)fail;
/**
* 1.2 获取当前用户已经加入的群列表
*
* @note
* - 直播群AVChatRoom不支持该 API
* - 该接口有频限检测SDK 限制调用频率为 1 秒 10 次,超过限制后会报 ERR_SDK_COMM_API_CALL_FREQUENCY_LIMIT 7008错误
*/
- (void)getJoinedGroupList:(V2TIMGroupInfoListSucc)succ fail:(V2TIMFail)fail;
/////////////////////////////////////////////////////////////////////////////////
// 群资料管理
/////////////////////////////////////////////////////////////////////////////////
/**
* 2.1 拉取群资料
*
* @param groupIDList 群组 ID 列表
*/
- (void)getGroupsInfo:(NSArray<NSString *> *)groupIDList succ:(V2TIMGroupInfoResultListSucc)succ fail:(V2TIMFail)fail;
/**
* 2.2 搜索群列表5.4.666 及以上版本支持)
* @note 该功能为 IM 旗舰版功能,[购买旗舰版套餐包](https://buy.cloud.tencent.com/avc?from=17474)后可使用,详见[价格说明](https://cloud.tencent.com/document/product/269/11673?from=17176#.E5.9F.BA.E7.A1.80.E6.9C.8D.E5.8A.A1.E8.AF.A6.E6.83.85)
*/
- (void)searchGroups:(V2TIMGroupSearchParam *)searchParam succ:(V2TIMGroupInfoListSucc)succ fail:(V2TIMFail)fail;
/**
* 2.3 修改群资料
*/
- (void)setGroupInfo:(V2TIMGroupInfo *)info succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/**
* 2.4 初始化群属性,会清空原有的群属性列表
*
* @note
* attributes 的使用限制如下:
* - 6.7 及其以前版本,只支持 AVChatRoom 直播群;
* - 从 6.8 版本开始,同时支持 AVChatRoom、Public、Meeting、Work 四种群类型;
* - 从 7.0 版本开始,除了话题外,群属性支持所有的群类型;
* - key 最多支持 16 个,长度限制为 32 字节;
* - value 长度限制为 4k
* - 总的 attributes包括 key 和 value限制为 16k
* - initGroupAttributes、setGroupAttributes、deleteGroupAttributes 接口合并计算, SDK 限制为 5 秒 10 次,超过后回调 8511 错误码;后台限制 1 秒 5 次,超过后返回 10049 错误码;
* - getGroupAttributes 接口 SDK 限制 5 秒 20 次;
* - 从 5.6 版本开始当每次APP启动后初次修改群属性时请您先调用 getGroupAttributes 拉取到最新的群属性之后,再发起修改操作;
* - 从 5.6 版本开始,当多个用户同时修改同一个群属性时,只有第一个用户可以执行成功,其它用户会收到 10056 错误码;收到这个错误码之后,请您调用 getGroupAttributes 把本地保存的群属性更新到最新之后,再发起修改操作。
*/
- (void)initGroupAttributes:(NSString*)groupID attributes:(NSDictionary<NSString *,NSString *> *)attributes succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/**
* 2.5 设置群属性,已有该群属性则更新其 value 值,没有该群属性则添加该群属性。
* @note
* - 6.7 及其以前版本,只支持 AVChatRoom 直播群;
* - 从 6.8 版本开始,同时支持 AVChatRoom、Public、Meeting、Work 四种群类型;
* - 从 7.0 版本开始,除了话题外,群属性支持所有的群类型。
*/
- (void)setGroupAttributes:(NSString*)groupID attributes:(NSDictionary<NSString *,NSString *> *)attributes succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/**
* 2.6 删除群指定属性keys 传 nil 则清空所有群属性。
* @note
* - 6.7 及其以前版本,只支持 AVChatRoom 直播群;
* - 从 6.8 版本开始,同时支持 AVChatRoom、Public、Meeting、Work 四种群类型;
* - 从 7.0 版本开始,除了话题外,群属性支持所有的群类型。
*/
- (void)deleteGroupAttributes:(NSString*)groupID keys:(NSArray<NSString *> *)keys succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/**
* 2.7 获取群指定属性keys 传 nil 则获取所有群属性。
* @note
* - 6.7 及其以前版本,只支持 AVChatRoom 直播群;
* - 从 6.8 版本开始,同时支持 AVChatRoom、Public、Meeting、Work 四种群类型;
* - 从 7.0 版本开始,除了话题外,群属性支持所有的群类型。
*/
- (void)getGroupAttributes:(NSString*)groupID keys:(NSArray<NSString *> *)keys succ:(V2TIMGroupAttributeListSucc)succ fail:(V2TIMFail)fail;
/**
* 2.8 获取指定群在线人数
*
* @param groupID 群id
* @param succ 成功回调
* @param fail 失败回调
*
* @note 请注意
* - 目前只支持:直播群( AVChatRoom
*/
- (void)getGroupOnlineMemberCount:(NSString*)groupID succ:(V2TIMGroupOnlineMemberCountSucc)succ fail:(V2TIMFail)fail;
/**
* 2.9 设置群计数器7.0 及其以上版本支持)
*
* @note
* - 该计数器的 key 如果存在,则直接更新计数器的 value 值;如果不存在,则添加该计数器的 key-value
* - 当群计数器设置成功后,在 succ 回调中会返回最终成功设置的群计数器信息;
* - 除了社群和话题,群计数器支持所有的群组类型。
*/
- (void)setGroupCounters:(NSString *)groupID counters:(NSDictionary<NSString *, NSNumber *> *)counters succ:(V2TIMGroupCounterResultSucc)succ fail:(V2TIMFail)fail;
/**
* 2.10 获取群计数器7.0 及其以上版本支持)
*
* @note
* - 如果 keys 为空,则表示获取群内的所有计数器;
* - 除了社群和话题,群计数器支持所有的群组类型。
*/
- (void)getGroupCounters:(NSString *)groupID keys:(NSArray<NSString *> *)keys succ:(V2TIMGroupCounterResultSucc)succ fail:(V2TIMFail)fail;
/**
* 2.11 递增群计数器7.0 及其以上版本支持)
*
* @param groupID 群 ID
* @param key 群计数器的 key
* @param value 群计数器的递增的变化量,计数器 key 对应的 value 变更方式为: new_value = old_value + value
* @param succ 成功后的回调,会返回当前计数器做完递增操作后的 value
* @param fail 失败的回调
*
* @note
* - 该计数器的 key 如果存在,则直接在当前值的基础上根据传入的 value 作递增操作;反之,添加 key并在默认值为 0 的基础上根据传入的 value 作递增操作;
* - 除了社群和话题,群计数器支持所有的群组类型。
*/
- (void)increaseGroupCounter:(NSString *)groupID key:(NSString *)key value:(NSInteger)value succ:(V2TIMGroupCounterResultSucc)succ fail:(V2TIMFail)fail;
/**
* 2.12 递减群计数器7.0 及其以上版本支持)
*
* @param groupID 群 ID
* @param key 群计数器的 key
* @param value 群计数器的递减的变化量,计数器 key 对应的 value 变更方式为: new_value = old_value - value
* @param succ 成功后的回调,会返回当前计数器做完递减操作后的 value
* @param fail 失败的回调
*
* @note
* - 该计数器的 key 如果存在,则直接在当前值的基础上根据传入的 value 作递减操作;反之,添加 key并在默认值为 0 的基础上根据传入的 value 作递减操作
* - 除了社群和话题,群计数器支持所有的群组类型。
*/
- (void)decreaseGroupCounter:(NSString *)groupID key:(NSString *)key value:(NSInteger)value succ:(V2TIMGroupCounterResultSucc)succ fail:(V2TIMFail)fail;
/////////////////////////////////////////////////////////////////////////////////
// 群成员管理
/////////////////////////////////////////////////////////////////////////////////
/**
* 3.1 获取群成员列表
*
* @param filter 指定群成员类型。
* @param nextSeq 分页拉取标志,第一次拉取填 0回调成功如果 nextSeq 不为零,需要分页,传入再次拉取,直至为 0。
*
* @note
* - 普通群(工作群、会议群、公开群、社群)的限制:
* 1. filter 只能设置为 V2TIMGroupMemberFilter 定义的数值SDK 会返回指定角色的成员。
*
* - 直播群AVChatRoom的限制
* 1. 如果设置 filter 为 V2TIMGroupMemberFilter 定义的数值SDK 返回全部成员。返回的人数规则为:旗舰版支持拉取最近入群群成员最多 1000 人新进来的成员排在前面6.3 及以上版本支持,需要先在 [控制台](https://console.cloud.tencent.com/im) 开启开关;非旗舰版支持拉取最近入群群成员最多 31 人,新进来的成员排在前面。
* 2. 如果设置 filter 为群成员自定义标记,旗舰版支持拉取指定标记的成员列表。标记群成员的设置请参考 markGroupMemberList:memberList:markType:enableMark:succ:fail: API。
* 3. 程序重启后,请重新加入群组,否则拉取群成员会报 10007 错误码。
* 4. 群成员资料信息仅支持 userID | nickName | faceURL | role 字段。
*/
- (void)getGroupMemberList:(NSString*)groupID filter:(uint32_t)filter nextSeq:(uint64_t)nextSeq succ:(V2TIMGroupMemberInfoResultSucc)succ fail:(V2TIMFail)fail;
/**
* 3.2 指定的群成员资料
*/
- (void)getGroupMembersInfo:(NSString*)groupID memberList:(NSArray<NSString*>*)memberList succ:(V2TIMGroupMemberInfoListSucc)succ fail:(V2TIMFail)fail;
/**
* 3.3 搜索指定的群成员资料5.4.666 及以上版本支持)
*
* @param searchParam 搜索参数
* @note 该功能为 IM 旗舰版功能,[购买旗舰版套餐包](https://buy.cloud.tencent.com/avc?from=17474)后可使用,详见[价格说明](https://cloud.tencent.com/document/product/269/11673?from=17176#.E5.9F.BA.E7.A1.80.E6.9C.8D.E5.8A.A1.E8.AF.A6.E6.83.85)
*/
- (void)searchGroupMembers:(V2TIMGroupMemberSearchParam *)searchParam
succ:(V2TIMGroupMemberInfoListSearchSucc)succ
fail:(V2TIMFail)fail;
/**
* 3.4 修改指定的群成员资料
*/
- (void)setGroupMemberInfo:(NSString*)groupID info:(V2TIMGroupMemberFullInfo *)info succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/**
* 3.5 禁言(只有管理员或群主能够调用)
*
* @param seconds 禁言时间长度,单位秒,表示调用该接口成功后多少秒内不允许被禁言用户再发言。
*/
- (void)muteGroupMember:(NSString*)groupID member:(NSString*)userID muteTime:(uint32_t)seconds succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/**
* 3.6 邀请他人入群
*
* @note 请注意不同类型的群有如下限制:
* - 工作群Work群里的任何人都可以邀请其他人进群。
* - 会议群Meeting和公开群Public只有通过rest api 使用 App 管理员身份才可以邀请其他人进群。
* - 直播群AVChatRoom不支持此功能。
* - 单次邀请的群成员个数不能超过 207.1 及其以上版本开始限制)。
*/
- (void)inviteUserToGroup:(NSString*)groupID userList:(NSArray<NSString *>*)userList succ:(V2TIMGroupMemberOperationResultListSucc)succ fail:(V2TIMFail)fail;
/**
* 3.7 踢人(直播群踢人从 6.6 版本开始支持,需要您购买旗舰版套餐)
*
* @note 请注意不同类型的群有如下限制:
* - 工作群Work只有群主或 APP 管理员可以踢人。
* - 公开群Public、会议群Meeting群主、管理员和 APP 管理员可以踢人
* - 直播群AVChatRoom6.6 之前版本只支持禁言muteGroupMember不支持踢人。6.6 及以上版本支持禁言和踢人。
*/
- (void)kickGroupMember:(NSString*)groupID memberList:(NSArray<NSString *>*)memberList reason:(NSString*)reason succ:(V2TIMGroupMemberOperationResultListSucc)succ fail:(V2TIMFail)fail;
/**
* 3.8 切换群成员的角色
*
* @note 请注意不同类型的群有如下限制:
* - 公开群Public和会议群Meeting只有群主才能对群成员进行普通成员和管理员之间的角色切换。
* - 其他群不支持设置群成员角色。
* - 转让群组请调用 @ref transferGroupOwner 接口。
* - 会议群Meeting切换群成员角色之后不会有 onGrantAdministrator 和 onRevokeAdministrator 通知回调
* - 切换的角色支持普通群成员( V2TIM_GROUP_MEMBER_ROLE_MEMBER 和管理员V2TIM_GROUP_MEMBER_ROLE_ADMIN
*/
- (void)setGroupMemberRole:(NSString*)groupID member:(NSString *)userID newRole:(uint32_t)role succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/**
* 3.9 标记群成员(从 6.6 版本开始支持,需要您购买旗舰版套餐)
*
* @param groupID 群 ID。
* @param memberList 群成员 ID 列表。
* @param markType 标记类型。数字类型,大于等于 1000您可以自定义一个直播群里最多允许定义 10 个标记。
* @param enableMark YES 表示添加标记NO 表示移除标记。
* @note 请注意
* - 仅支持直播群。
* - 只有群主才有权限标记群组中其他人。
*/
- (void)markGroupMemberList:(NSString *)groupID memberList:(NSArray<NSString *> *)memberList markType:(uint32_t)markType enableMark:(BOOL)enableMark succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/**
* 3.10 转让群主
*
* @note 请注意不同类型的群有如下限制:
* - 普通类型的群Work、Public、Meeting只有群主才有权限进行群转让操作。
* - 直播群AVChatRoom不支持转让群主。
*/
- (void)transferGroupOwner:(NSString*)groupID member:(NSString*)userID succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/////////////////////////////////////////////////////////////////////////////////
// 加群申请
/////////////////////////////////////////////////////////////////////////////////
/**
* 4.1 获取加群申请列表
* @note 最多支持50个
*/
- (void)getGroupApplicationList:(V2TIMGroupApplicationResultSucc)succ fail:(V2TIMFail)fail;
/**
* 4.2 同意某一条加群申请
*/
- (void)acceptGroupApplication:(V2TIMGroupApplication *)application reason:(NSString*)reason succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/**
* 4.3 拒绝某一条加群申请
*/
- (void)refuseGroupApplication:(V2TIMGroupApplication *)application reason:(NSString*)reason succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/**
* 4.4 标记申请列表为已读
*/
- (void)setGroupApplicationRead:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/////////////////////////////////////////////////////////////////////////////////
// 社群-话题
/////////////////////////////////////////////////////////////////////////////////
/**
* 5.1 获取当前用户已经加入的支持话题的社群列表
*/
- (void)getJoinedCommunityList:(V2TIMGroupInfoListSucc)succ fail:(V2TIMFail)fail;
/**
* 5.2 创建话题
*/
- (void)createTopicInCommunity:(NSString *)groupID topicInfo:(V2TIMTopicInfo *)topicInfo succ:(V2TIMCreateTopicSucc)succ fail:(V2TIMFail)fail;
/**
* 5.3 删除话题
*/
- (void)deleteTopicFromCommunity:(NSString *)groupID topicIDList:(NSArray<NSString *>*)topicIDList succ:(V2TIMTopicOperationResultSucc)succ fail:(V2TIMFail)fail;
/**
* 5.4 修改话题信息
*/
- (void)setTopicInfo:(V2TIMTopicInfo *)topicInfo succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/**
* 5.5 获取话题列表。
* @note: topicIDList 传空时,获取此社群下的所有话题列表
*/
- (void)getTopicInfoList:(NSString *)groupID topicIDList:(NSArray<NSString *>*)topicIDList succ:(V2TIMTopicInfoResultListSucc)succ fail:(V2TIMFail)fail;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 群基本资料(可以通过 getGroupInfo 获取,不支持由客户自行创建)
//
/////////////////////////////////////////////////////////////////////////////////
/// 群资料
V2TIM_EXPORT @interface V2TIMGroupInfo : NSObject
/**
* 群组 ID
*
* @note 自定义群组 ID 必须为可打印 ASCII 字符0x20-0x7e最长48个字节且前缀不能为 @TGS#(避免与默认分配的群组 ID 混淆)
*/
@property(nonatomic,strong) NSString* groupID;
/// 群类型
@property(nonatomic,strong) NSString* groupType;
/**
* 社群是否支持创建话题
* @note 只在群类型为 Community 时有效
*/
@property(nonatomic,assign) BOOL isSupportTopic;
/**
* 群名称
*
* @note 群名称最长30字节
*/
@property(nonatomic,strong) NSString* groupName;
/**
* 群公告
*
* @note 群公告最长300字节
*/
@property(nonatomic,strong) NSString* notification;
/**
* 群简介
*
* @note 群简介最长240字节
*/
@property(nonatomic,strong) NSString* introduction;
/**
* 群头像
*
* @note 群头像 URL 最长100字节
*/
@property(nonatomic,strong) NSString* faceURL;
/// 是否全员禁言
@property(nonatomic,assign) BOOL allMuted;
///设置群自定义字段需要两个步骤:
///1.在 [控制台](https://console.cloud.tencent.com/im) (功能配置 -> 群自定义字段) 配置群自定义字段的 key 值Key 为 String 类型,长度不超过 16 字节。
///2.调用 setGroupInfo 接口设置该字段value 为 NSData 数据,长度不超过 512 字节。
///@note 该字段主要用于 V1 和 V2 版本的兼容,如果您直接使用的是 V2 版本的 API ,建议使用 initGroupAttributes 接口设置群属性,其设置更灵活(无需控制台配置),支持的存储也更大(最大支持 16K
@property(nonatomic,strong) NSDictionary<NSString *,NSData *>* customInfo;
/// 群创建人/管理员
@property(nonatomic,strong,readonly) NSString *owner;
/// 群创建时间
@property(nonatomic,assign,readonly) uint32_t createTime;
/// 申请进群是否需要管理员审批工作群Work默认值为 V2TIM_GROUP_ADD_FORBID即默认不允许申请入群您可以修改该字段打开申请入群方式。
@property(nonatomic,assign) V2TIMGroupAddOpt groupAddOpt;
/// 邀请进群是否需要管理员审批 (从 7.1 版本开始支持)
/// - 除工作群Work之外的其他群类型默认值都为 V2TIM_GROUP_ADD_FORBID即默认不允许邀请入群您可以修改该字段打开邀请入群方式。
/// - 直播群、社群和话题默认不允许邀请入群,也不支持修改。
@property(nonatomic,assign) V2TIMGroupAddOpt groupApproveOpt;
/// 群最近一次群资料修改时间
@property(nonatomic,assign,readonly) uint32_t lastInfoTime;
/// 群最近一次发消息时间
@property(nonatomic,assign,readonly) uint32_t lastMessageTime;
/// 已加入的群成员数量
@property(nonatomic,assign,readonly) uint32_t memberCount;
/// 在线的群成员数量
@property(nonatomic,assign,readonly) uint32_t onlineCount;
/// 最多允许加入的群成员数量
/// @note 各类群成员人数限制详见: https://cloud.tencent.com/document/product/269/1502#.E7.BE.A4.E7.BB.84.E9.99.90.E5.88.B6.E5.B7.AE.E5.BC.82
@property(nonatomic,assign,readonly) uint32_t memberMaxCount;
/// 当前用户在此群组中的角色V2TIMGroupMemberRole切换角色请调用 setGroupMemberRole 接口
@property(nonatomic,assign,readonly) uint32_t role;
/// 当前用户在此群组中的消息接收选项,修改群消息接收选项请调用 setGroupReceiveMessageOpt 接口
@property(nonatomic,assign,readonly) V2TIMReceiveMessageOpt recvOpt;
/// 当前用户在此群中的加入时间,不支持设置,系统自动生成
@property(nonatomic,assign,readonly) uint32_t joinTime;
@end
/// 获取群组资料结果
V2TIM_EXPORT @interface V2TIMGroupInfoResult : NSObject
/// 结果 0成功非0失败
@property(nonatomic,assign) int resultCode;
/// 如果获取失败,会返回错误信息
@property(nonatomic,strong) NSString *resultMsg;
/// 如果获取成功,会返回对应的 info
@property(nonatomic,strong) V2TIMGroupInfo *info;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 话题基本资料(可以通过 getTopics 获取,不支持由客户自行创建)
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMTopicInfo : NSObject
/// 话题 ID
@property(nonatomic, strong) NSString *topicID;
/// 话题名称
@property(nonatomic, strong) NSString *topicName;
/// 话题头像
@property(nonatomic, strong) NSString *topicFaceURL;
/// 话题介绍
@property(nonatomic, strong) NSString *introduction;
/// 话题公告
@property(nonatomic, strong) NSString *notification;
/// 话题全员禁言
@property(nonatomic, assign) BOOL isAllMuted;
/// 当前用户在话题中的禁言时间
@property(nonatomic, assign, readonly) uint32_t selfMuteTime;
/// 话题自定义字段
@property(nonatomic, strong) NSString *customString;
/// 话题消息接收选项,修改话题消息接收选项请调用 setGroupReceiveMessageOpt 接口
@property(nonatomic, assign, readonly) V2TIMReceiveMessageOpt recvOpt;
/// 话题草稿
@property(nonatomic, strong) NSString *draftText;
/// 话题消息未读数量
@property(nonatomic, assign, readonly) uint64_t unreadCount;
/// 话题 lastMessage
@property(nonatomic,strong,readonly) V2TIMMessage *lastMessage;
/// 话题 at 信息列表
@property(nonatomic, strong, readonly) NSArray<V2TIMGroupAtInfo *> *groupAtInfolist;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// V2TIMTopicOperationResult
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMTopicOperationResult : NSObject
/// 结果 0成功非0失败
@property(nonatomic, assign) int errorCode;
/// 如果删除失败,会返回错误信息
@property(nonatomic, strong) NSString *errorMsg;
/// 如果删除成功,会返回对应的 topicID
@property(nonatomic, strong) NSString *topicID;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// V2TIMTopicInfoResult
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMTopicInfoResult : NSObject
/// 结果 0成功非0失败
@property(nonatomic, assign) int errorCode;
/// 如果获取失败,会返回错误信息
@property(nonatomic, strong) NSString *errorMsg;
/// 如果获取成功,会返回对应的 info
@property(nonatomic, strong) V2TIMTopicInfo *topicInfo;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 群申请信息(可以通过 getGroupApplicationList 获取,不支持由客户自行创建)
//
/////////////////////////////////////////////////////////////////////////////////
/// 群申请信息
V2TIM_EXPORT @interface V2TIMGroupApplication : NSObject
/// 群组 ID
@property(nonatomic,strong,readonly) NSString* groupID;
/// 请求者 userID
@property(nonatomic,strong,readonly) NSString* fromUser;
/// 请求者昵称
@property(nonatomic,strong,readonly) NSString* fromUserNickName;
/// 请求者头像
@property(nonatomic,strong,readonly) NSString* fromUserFaceUrl;
/// 判决者id有人请求加群:0邀请其他人加群:被邀请人用户 ID
@property(nonatomic,strong,readonly) NSString* toUser;
/// 申请时间
@property(nonatomic,assign,readonly) uint64_t addTime;
/// 申请或邀请附加信息
@property(nonatomic,strong,readonly) NSString* requestMsg;
/// 审批信息:同意或拒绝信息
@property(nonatomic,strong,readonly) NSString* handledMsg;
/// 请求类型
@property(nonatomic,assign,readonly) V2TIMGroupApplicationType applicationType;
/// 处理标志
@property(nonatomic,assign,readonly) V2TIMGroupApplicationHandleStatus handleStatus;
/// 处理结果
@property(nonatomic,assign,readonly) V2TIMGroupApplicationHandleResult handleResult;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 邀请其他人入群的操作结果
//
/////////////////////////////////////////////////////////////////////////////////
/// 邀请其他人入群的操作结果
V2TIM_EXPORT @interface V2TIMGroupMemberOperationResult : NSObject
/// 被操作成员
@property(nonatomic,strong) NSString* userID;
/// 返回状态
@property(nonatomic,assign) V2TIMGroupMemberResult result;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 创建群时指定群成员
//
/////////////////////////////////////////////////////////////////////////////////
/// 创建群时指定群成员
V2TIM_EXPORT @interface V2TIMCreateGroupMemberInfo : NSObject
/// 被操作成员
@property(nonatomic,strong) NSString* userID;
/** 群成员类型,需要注意一下事项:
* 1. role 不设置或则设置为 V2TIM_GROUP_MEMBER_UNDEFINED进群后默认为群成员。
* 2. 工作群Work不支持设置 role 为管理员。
* 3. 所有的群都不支持设置 role 为群主。
*/
@property(nonatomic,assign) uint32_t role;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 加群申请列表(包含已处理和待处理的)
//
/////////////////////////////////////////////////////////////////////////////////
/// 加群申请列表
V2TIM_EXPORT @interface V2TIMGroupApplicationResult : NSObject
/// 未读的申请数量
@property(nonatomic,assign) uint64_t unreadCount;
/// 加群申请的列表
@property(nonatomic,strong) NSMutableArray<V2TIMGroupApplication *> * applicationList;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 群搜索
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMGroupSearchParam : NSObject
/// 搜索关键字列表最多支持5个。
@property(nonatomic, strong) NSArray<NSString *> *keywordList;
/// 设置是否搜索群 ID。
@property(nonatomic, assign) BOOL isSearchGroupID;
/// 设置是否搜索群名称
@property(nonatomic, assign) BOOL isSearchGroupName;
@end
V2TIM_EXPORT @interface V2TIMGroupMemberSearchParam : NSObject
/// 指定群 ID 列表,若为 null 则搜索全部群中的群成员
@property(nonatomic, strong) NSArray<NSString *> *groupIDList;
/// 搜索关键字列表最多支持5个
@property(nonatomic, strong) NSArray<NSString *> *keywordList;
/// 设置是否搜索群成员 userID
@property(nonatomic, assign) BOOL isSearchMemberUserID;
/// 设置是否搜索群成员昵称
@property(nonatomic, assign) BOOL isSearchMemberNickName;
/// 设置是否搜索群成员备注
@property(nonatomic, assign) BOOL isSearchMemberRemark;
/// 设置是否搜索群成员名片
@property(nonatomic, assign) BOOL isSearchMemberNameCard;
@end

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,170 @@
#import "V2TIMManager.h"
#import "V2TIMManager+Message.h"
/////////////////////////////////////////////////////////////////////////////////
// 信令
/////////////////////////////////////////////////////////////////////////////////
/// 信令信息
@class V2TIMSignalingInfo;
/// 信令监听
V2TIM_EXPORT @protocol V2TIMSignalingListener;
V2TIM_EXPORT @interface V2TIMManager (Signaling)
/**
* 获取信令信息成功回调
*/
typedef void (^V2TIMSignalingInfoSucc)(V2TIMSignalingInfo * signalInfo);
/**
* 添加信令监听
*/
- (void)addSignalingListener:(id<V2TIMSignalingListener>)listener
NS_SWIFT_NAME(addSignalingListener(listener:));
/**
* 移除信令监听
*/
- (void)removeSignalingListener:(id<V2TIMSignalingListener>)listener
NS_SWIFT_NAME(removeSignalingListener(listener:));
/**
* 邀请某个人
*
* @param invitee 被邀请人用户 ID
* @param data 自定义数据
* @param timeout 超时时间,单位 s如果设置为 0SDK 不会做超时检测,也不会触发 onInvitationTimeout 回调
* @param onlineUserOnly 是否只有在线用户才能收到邀请,如果设置为 YES只有在线用户才能收到并且 invite 操作也不会产生历史消息(针对该次 invite 的后续 cancel、accept、reject、timeout 操作也同样不会产生历史消息)。
* @param offlinePushInfo 苹果 APNS 离线推送时携带的标题和声音,其中 desc 为必填字段,推送的时候会默认展示 desc 信息。
* @return inviteID 邀请 ID如果邀请失败返回 nil
*
*/
- (NSString*)invite:(NSString *)invitee
data:(NSString *)data
onlineUserOnly:(BOOL)onlineUserOnly
offlinePushInfo:(V2TIMOfflinePushInfo *)offlinePushInfo
timeout:(int)timeout
succ:(V2TIMSucc)succ
fail:(V2TIMFail)fail;
/**
* 邀请群内的某些人
*
* @param groupID 发起邀请所在群组
* @param inviteeList 被邀请人列表inviteeList 必须已经在 groupID 群里,否则邀请无效
* @param timeout 超时时间,单位 s如果设置为 0SDK 不会做超时检测,也不会触发 onInvitationTimeout 回调
* @param onlineUserOnly 是否只有在线用户才能收到邀请,如果设置为 YES只有在线用户才能收到并且 invite 操作也不会产生历史消息(针对该次 invite 的后续 cancel、accept、reject、timeout 操作也同样不会产生历史消息)。
* @return inviteID 邀请 ID如果邀请失败返回 nil
*
* @note 群邀请暂不支持离线推送,如果您需要离线推送,可以针对被邀请的用户单独发离线推送自定义消息。
*/
- (NSString*)inviteInGroup:(NSString *)groupID
inviteeList:(NSArray *)inviteeList
data:(NSString *)data
onlineUserOnly:(BOOL)onlineUserOnly
timeout:(int)timeout
succ:(V2TIMSucc)succ
fail:(V2TIMFail)fail;
/**
* 邀请方取消邀请
*
* @param inviteID 邀请 ID
*
* @note 如果所有被邀请人都已经处理了当前邀请(包含超时),不能再取消当前邀请。
*/
- (void)cancel:(NSString *)inviteID data:(NSString *)data succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/**
* 接收方接受邀请
*
* @note 不能接受不是针对自己的邀请,请在收到 onReceiveNewInvitation 回调的时候先判断 inviteeList 有没有自己,如果没有自己,不能 accept 邀请。
*/
- (void)accept:(NSString *)inviteID data:(NSString *)data succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/**
* 接收方拒绝邀请
*
* @note 不能拒绝不是针对自己的邀请,请在收到 onReceiveNewInvitation 回调的时候先判断 inviteeList 有没有自己,如果没有自己,不能 reject 邀请。
*/
- (void)reject:(NSString *)inviteID data:(NSString *)data succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/**
* 获取信令信息
*
* 如果 invite 设置 onlineUserOnly 为 NO每次信令操作包括 invite、cancel、accept、reject、timeout都会产生一条自定义消息该消息会通过 V2TIMAdvancedMsgListener -> onRecvNewMessage 抛给用户,用户也可以通过历史消息拉取,如果需要根据信令信息做自定义化文本展示,可以调用下面接口获取信令信息。
*
* @param msg 消息对象
* @return V2TIMSignalingInfo 信令信息,如果为 nil则 msg 不是一条信令消息。
*/
- (V2TIMSignalingInfo *)getSignallingInfo:(V2TIMMessage *)msg;
/**
* 添加邀请信令
*
* 主要用于邀请者在被邀请者离线期间,发送了群聊邀请,被邀请者上线后将该信令同步给 SDK从而正常使用信令功能。
*
* 当被邀请者点击离线推送提示,拉起 App 时:
* 1. 如果被邀请者离线期间,邀请者发送的是 1V1 信令SDK 可以自动同步邀请信令。邀请未超时,回调 onReceiveNewInvitation。
* 2. 如果被邀请者离线期间,邀请者发送的是群聊信令,不同 SDK 版本表现如下:
* - 6.7 以前的版本:
* SDK 无法自动同步邀请信令(信令本质上就是一条自定义消息,群离线消息在程序启动后无法自动同步)。
* 如果被邀请者需要处理该邀请信令,可以让邀请者在发起信令时,向每个被邀请者额外发送一条 C2C 离线推送消息,消息携带 V2TIMSignalingInfo 信息。
* 被邀请者收到离线推送时通过 addInvitedSignaling 将 V2TIMSignalingInfo 信息告知 SDK。
* - 6.7 及以后的版本:
* SDK 会自动同步最近 30 秒的消息。如果其中包含了未超时的邀请信令,回调 onReceiveNewInvitation。您无需再调用本接口同步邀请信令。
*
* @note 如果添加的信令信息已存在fail callback 会抛 ERR_SDK_SIGNALING_ALREADY_EXISTS 错误码。
*/
- (void)addInvitedSignaling:(V2TIMSignalingInfo *)signallingInfo succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/**
* 修改邀请信令6.7 及其以上版本支持)
*
* @note 仅支持修改邀请信令的自定义字段 data。只有在线用户才能收到的邀请信令不能被修改。
*/
- (void)modifyInvitation:(NSString *)inviteID data:(NSString *)data succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
@end
V2TIM_EXPORT @protocol V2TIMSignalingListener <NSObject>
@optional
/// 收到邀请的回调
-(void)onReceiveNewInvitation:(NSString *)inviteID inviter:(NSString *)inviter groupID:(NSString *)groupID inviteeList:(NSArray<NSString *> *)inviteeList data:(NSString * __nullable)data;
/// 被邀请者接受邀请
-(void)onInviteeAccepted:(NSString *)inviteID invitee:(NSString *)invitee data:(NSString * __nullable)data;
/// 被邀请者拒绝邀请
-(void)onInviteeRejected:(NSString *)inviteID invitee:(NSString *)invitee data:(NSString * __nullable)data;
/// 邀请被取消
-(void)onInvitationCancelled:(NSString *)inviteID inviter:(NSString *)inviter data:(NSString * __nullable)data;
/// 邀请超时
-(void)onInvitationTimeout:(NSString *)inviteID inviteeList:(NSArray<NSString *> *)inviteeList;
/// 邀请被修改6.7 及其以上版本支持)
-(void)onInvitationModified:(NSString *)inviteID data:(NSString *)data;
@end
// 操作类型
typedef NS_ENUM(NSInteger,SignalingActionType) {
SignalingActionType_Invite = 1, // 邀请方发起邀请
SignalingActionType_Cancel_Invite = 2, // 邀请方取消邀请
SignalingActionType_Accept_Invite = 3, // 被邀请方接受邀请
SignalingActionType_Reject_Invite = 4, // 被邀请方拒绝邀请
SignalingActionType_Invite_Timeout = 5, // 邀请超时
};
V2TIM_EXPORT @interface V2TIMSignalingInfo : NSObject
@property(nonatomic,strong) NSString *inviteID;
@property(nonatomic,strong) NSString *groupID;
@property(nonatomic,strong) NSString *inviter;
@property(nonatomic,strong) NSMutableArray *inviteeList;
@property(nonatomic,strong) NSString * __nullable data;
@property(nonatomic,assign) uint32_t timeout;
@property(nonatomic,assign) SignalingActionType actionType;
@end

View File

@@ -0,0 +1,41 @@
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 IMSDK
//
// 模块名称V2TIMManager+VOIP
//
// 消息 VoIP 推送接口
//
/////////////////////////////////////////////////////////////////////
#import "V2TIMManager.h"
NS_ASSUME_NONNULL_BEGIN
@class V2TIMVOIPConfig;
V2TIM_EXPORT @interface V2TIMManager (VOIP)
/**
* 1.1 设置 VoIP 推送
*/
- (void)setVOIP:(V2TIMVOIPConfig *)config succ:(V2TIMSucc __nullable)succ fail:(V2TIMFail __nullable)fail;
@end
V2TIM_EXPORT @interface V2TIMVOIPConfig : NSObject
/**
* VoIP device token
*/
@property (nonatomic, strong, nullable) NSData *token;
/**
* IM 控制台上传的 VoIP 证书 ID
*/
@property (nonatomic, assign) NSInteger certificateID;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,710 @@
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 IMSDK
//
// 模块名称V2TIMManager
//
// TIM SDK 2.0 版的接口,相比于 1.0 版本更加简洁易用,接入速度更快,高级特性接口详见:
// - V2TIMManager+Message.h 消息相关的高级功能接口,比如图片消息,视频消息,消息撤回,消息已读等功能。
// - V2TIMManager+APNS.h 推送相关的高级功能接口,主要用于开启消息推送功能。
// - V2TIMManager+Conversation.h 会话相关的高级功能接口,一个会话对应一个聊天窗口。
// - V2TIMManager+Group.h 群组相关的高级功能接口,比如邀请人进群,处理加群请求等功能。
// - V2TIMManager+Friendship.h 关系链相关的高级功能接口,比如黑名单,好友列表等功能。
//
/////////////////////////////////////////////////////////////////////
#ifndef ImSDK_V2TIMManager_h
#define ImSDK_V2TIMManager_h
#if defined(BUILD_V2TIM_SDK)
#define V2TIM_EXPORT __attribute__((visibility("default")))
#else
#define V2TIM_EXPORT
#endif
#if defined(__cplusplus)
#define V2TIM_EXTERN extern "C" V2TIM_EXPORT
#else
#define V2TIM_EXTERN extern V2TIM_EXPORT
#endif
#import <Foundation/Foundation.h>
@class V2TIMSDKConfig;
@class V2TIMUserInfo;
@class V2TIMUserFullInfo;
@class V2TIMGroupMemberInfo;
@class V2TIMGroupMemberFullInfo;
@class V2TIMGroupChangeInfo;
@class V2TIMGroupMemberChangeInfo;
@class V2TIMUserReceiveMessageOptInfo;
@class V2TIMTopicInfo;
@class V2TIMUserStatus;
V2TIM_EXPORT @protocol V2TIMSDKListener;
V2TIM_EXPORT @protocol V2TIMSimpleMsgListener;
V2TIM_EXPORT @protocol V2TIMGroupListener;
V2TIM_EXTERN NSString *const GroupType_Work;
V2TIM_EXTERN NSString *const GroupType_Public;
V2TIM_EXTERN NSString *const GroupType_Meeting;
V2TIM_EXTERN NSString *const GroupType_AVChatRoom;
V2TIM_EXTERN NSString *const GroupType_Community;
/////////////////////////////////////////////////////////////////////////////////
//
// V2TIMManager
//
// IMSDK 主核心类,负责 IMSDK 的初始化、登录、消息收发,建群退群等功能
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMManager : NSObject
/// 成功通用回调
typedef void (^V2TIMSucc)(void);
/// 失败通用回调
typedef void (^V2TIMFail)(int code, NSString * desc);
/// 创建群组成功回调
typedef void (^V2TIMCreateGroupSucc)(NSString * groupID);
/// 获取用户资料成功回调
typedef void (^V2TIMUserFullInfoListSucc)(NSArray <V2TIMUserFullInfo *> * infoList);
/// 实验性 API 接口成功回调
typedef void (^V2TIMCallExperimentalAPISucc)(NSObject *result);
/// 获取用户状态列表成功回调
typedef void (^V2TIMUserStatusListSucc)(NSArray<V2TIMUserStatus *> *result);
/// 登录状态
typedef NS_ENUM(NSInteger, V2TIMLoginStatus) {
V2TIM_STATUS_LOGINED = 1, ///< 已登录
V2TIM_STATUS_LOGINING = 2, ///< 登录中
V2TIM_STATUS_LOGOUT = 3, ///< 无登录
};
/// 日志级别
typedef NS_ENUM(NSInteger, V2TIMLogLevel) {
V2TIM_LOG_NONE = 0, ///< 不输出任何 sdk log
V2TIM_LOG_DEBUG = 3, ///< 输出 DEBUGINFOWARNINGERROR 级别的 log
V2TIM_LOG_INFO = 4, ///< 输出 INFOWARNINGERROR 级别的 log
V2TIM_LOG_WARN = 5, ///< 输出 WARNINGERROR 级别的 log
V2TIM_LOG_ERROR = 6, ///< 输出 ERROR 级别的 log
};
/// 消息优先级
typedef NS_ENUM(NSInteger, V2TIMMessagePriority) {
V2TIM_PRIORITY_DEFAULT = 0, ///< 默认
V2TIM_PRIORITY_HIGH = 1, ///< 高优先级,一般用于礼物等重要消息
V2TIM_PRIORITY_NORMAL = 2, ///< 常规优先级,一般用于普通消息
V2TIM_PRIORITY_LOW = 3, ///< 低优先级,一般用于点赞消息
};
/// 性别
typedef NS_ENUM(NSInteger, V2TIMGender) {
V2TIM_GENDER_UNKNOWN = 0, ///< 未知性别
V2TIM_GENDER_MALE = 1, ///< 男性
V2TIM_GENDER_FEMALE = 2, ///< 女性
};
/// 好友验证方式
typedef NS_ENUM(NSInteger, V2TIMFriendAllowType) {
V2TIM_FRIEND_ALLOW_ANY = 0, ///< 同意任何用户加好友
V2TIM_FRIEND_NEED_CONFIRM = 1, ///< 需要验证
V2TIM_FRIEND_DENY_ANY = 2, ///< 拒绝任何人加好友
};
/// 群成员角色
typedef NS_ENUM(NSInteger, V2TIMGroupMemberRole) {
V2TIM_GROUP_MEMBER_UNDEFINED = 0, ///< 未定义(没有获取该字段)
V2TIM_GROUP_MEMBER_ROLE_MEMBER = 200, ///< 群成员
V2TIM_GROUP_MEMBER_ROLE_ADMIN = 300, ///< 群管理员
V2TIM_GROUP_MEMBER_ROLE_SUPER = 400, ///< 群主
};
/// 用户状态类型
typedef NS_ENUM(NSInteger, V2TIMUserStatusType) {
V2TIM_USER_STATUS_UNKNOWN = 0, ///< 未知状态
V2TIM_USER_STATUS_ONLINE = 1, ///< 在线状态
V2TIM_USER_STATUS_OFFLINE = 2, ///< 离线状态
V2TIM_USER_STATUS_UNLOGINED = 3, ///< 未登录(如主动调用 logout 接口,或者账号注册后还未登录)
};
/// 日志回调
typedef void (^V2TIMLogListener)(V2TIMLogLevel logLevel, NSString * logContent);
/////////////////////////////////////////////////////////////////////////////////
// 初始化
/////////////////////////////////////////////////////////////////////////////////
/**
* 1.1 获取 V2TIMManager 管理器实例
*/
+ (V2TIMManager*)sharedInstance;
/**
* 1.2 初始化 SDK
*
* @param sdkAppID 应用 ID必填项可以在 [控制台](https://console.cloud.tencent.com/im) 中获取
* @param config 配置信息
* @return YES成功NO失败
*/
- (BOOL)initSDK:(int)sdkAppID config:(V2TIMSDKConfig*)config;
/**
* 1.3 添加 IM 监听
*/
- (void)addIMSDKListener:(id<V2TIMSDKListener>)listener;
/**
* 1.4 移除 IM 监听
*/
- (void)removeIMSDKListener:(id<V2TIMSDKListener>)listener;
/**
* 1.5 反初始化 SDK
*/
- (void)unInitSDK;
/**
* 1.6 获取版本号
*
* @return 返回版本号,字符串表示,例如 5.0.10
*/
- (NSString*)getVersion;
/**
* 1.7 获取服务器时间戳
*
* @return 服务器时间时间戳,单位 s
*/
- (uint64_t)getServerTime;
/**
* 初始化 SDK待废弃接口请使用 initSDK 和 addIMSDKListener 接口)
*/
- (BOOL)initSDK:(int)sdkAppID config:(V2TIMSDKConfig*)config listener:(id<V2TIMSDKListener>)listener __attribute__((deprecated("use initSDK:config: and addIMSDKListener: instead")));
/////////////////////////////////////////////////////////////////////////////////
// 登录登出
/////////////////////////////////////////////////////////////////////////////////
/**
* 2.1 登录
*
* 登录需要设置用户名 userID 和用户签名 userSiguserSig 生成请参考 [UserSig 后台 API](https://cloud.tencent.com/document/product/269/32688)。
*
* @note 请注意如下特殊逻辑:
* - 登陆时票据过期login 函数的 V2TIMFail 会返回 ERR_USER_SIG_EXPIRED6206或者 ERR_SVR_ACCOUNT_USERSIG_EXPIRED70001 错误码,此时请您生成新的 userSig 重新登录。
* - 在线时票据过期:用户在线期间也可能收到 V2TIMSDKListener -> onUserSigExpired 回调,此时也是需要您生成新的 userSig 并重新登录。
* - 在线时被踢下线用户在线情况下被踢SDK 会通过 V2TIMSDKListener -> onKickedOffline 回调通知给您,此时可以 UI 提示用户,并再次调用 login() 重新登录。
* - 同平台多设备在线该功能为IM旗舰版功能购买[旗舰版套餐包](https://buy.cloud.tencent.com/avc?from=17487)后可使用,详见[价格说明](https://cloud.tencent.com/document/product/269/11673?from=17224#.E5.9F.BA.E7.A1.80.E6.9C.8D.E5.8A.A1.E8.AF.A6.E6.83.85)。
*/
- (void)login:(NSString *)userID userSig:(NSString *)userSig succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/**
* 2.2 登出
*
* 退出登录,如果切换账号,需要 logout 回调成功或者失败后才能再次 login否则 login 可能会失败。
*/
- (void)logout:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/**
* 2.3 获取登录用户
*/
- (NSString *)getLoginUser;
/**
* 2.4 获取登录状态
*
* 如果用户已经处于已登录和登录中状态,请勿再频繁调用登录接口登录。
*/
- (V2TIMLoginStatus)getLoginStatus;
/////////////////////////////////////////////////////////////////////////////////
// 消息收发
/////////////////////////////////////////////////////////////////////////////////
/**
* 3.1 设置基本消息(文本消息和自定义消息)的事件监听器
*
* @note 图片消息、视频消息、语音消息等高级消息的监听,请参考 V2TIMManager+Message.h -> addAdvancedMsgListener 接口。
*/
- (void)addSimpleMsgListener:(id<V2TIMSimpleMsgListener>)listener NS_SWIFT_NAME(addSimpleMsgListener(listener:));
/**
* 3.2 移除基本消息(文本消息和自定义消息)的事件监听器
*/
- (void)removeSimpleMsgListener:(id<V2TIMSimpleMsgListener>)listener NS_SWIFT_NAME(removeSimpleMsgListener(listener:));
/**
* 3.3 发送单聊普通文本消息(最大支持 12KB
*
* 文本消息支持云端的脏词过滤如果用户发送的消息中有敏感词V2TIMFail 回调将会返回 80001 错误码。
* @return 返回消息的唯一标识 ID
*
* @note 该接口发送的消息默认会推送(前提是在 V2TIMManager+APNS.h 开启了推送),如果需要自定义推送(自定义推送声音,推送 Title 等),请调用 V2TIMManager+Message.h -> sendMessage 接口。
*/
- (NSString*)sendC2CTextMessage:(NSString *)text to:(NSString *)userID succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/**
* 3.4 发送单聊自定义(信令)消息(最大支持 12KB
*
* 自定义消息本质就是一端二进制 buffer您可以在其上自由组织自己的消息格式常用于发送信令但是自定义消息不支持云端敏感词过滤。
* @return 返回消息的唯一标识 ID
*
* @note 该接口发送的消息默认不会推送,如果需要推送,请调用 V2TIMManager+Message.h -> sendMessage 接口。
*/
- (NSString*)sendC2CCustomMessage:(NSData *)customData to:(NSString *)userID succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/**
* 3.5 发送群聊普通文本消息(最大支持 12KB
*
* @param priority 设置消息的优先级,我们没有办法所有消息都能 100% 送达每一个用户,但高优先级的消息会有更高的送达成功率。
* - HIGH :云端会优先传输,适用于在群里发送重要消息,比如主播发送的文本消息等。
* - NORMAL :云端按默认优先级传输,适用于在群里发送普通消息,比如观众发送的弹幕消息等。
* @return 返回消息的唯一标识 ID
*
* @note 该接口发送的消息默认会推送(前提是在 V2TIMManager+APNS.h 开启了推送),如果需要自定义推送(自定义推送声音,推送 Title 等),请调用 V2TIMManager+Message.h -> sendMessage 接口。
*/
- (NSString*)sendGroupTextMessage:(NSString *)text to:(NSString *)groupID priority:(V2TIMMessagePriority)priority succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/**
* 3.6 发送群聊自定义(信令)消息(最大支持 12KB
*
* @param priority 设置消息的优先级,我们没有办法所有消息都能 100% 送达每一个用户,但高优先级的消息会有更高的送达成功率。
* - HIGH 云端会优先传输适用于在群里发送重要信令比如连麦邀请PK邀请、礼物赠送等关键性信令。
* - NORMAL :云端按默认优先级传输,适用于在群里发送非重要信令,比如观众的点赞提醒等等。
* @return 返回消息的唯一标识 ID
*
* @note 该接口发送的消息默认不会推送,如果需要推送,请调用 V2TIMManager+Message.h -> sendMessage 接口。
*/
- (NSString*)sendGroupCustomMessage:(NSData *)customData to:(NSString *)groupID priority:(V2TIMMessagePriority)priority succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
// 3.7 更多功能,详见 V2TIMManager+Message.h
/////////////////////////////////////////////////////////////////////////////////
// 群相关操作
/////////////////////////////////////////////////////////////////////////////////
/**
* 4.1 设置群组监听器
*/
- (void)addGroupListener:(id<V2TIMGroupListener>)listener NS_SWIFT_NAME(addGroupListener(listener:));
/**
* 4.2 设置群组监听器
*/
- (void)removeGroupListener:(id<V2TIMGroupListener>)listener NS_SWIFT_NAME(removeGroupListener(listener:));
/**
* 4.3 创建群组
*
* @param groupType 群类型,我们为您预定义好了几种常用的群类型,您也可以在控制台定义自己需要的群类型:
* - "Work" :工作群,成员上限 200 人,不支持由用户主动加入,需要他人邀请入群,适合用于类似微信中随意组建的工作群(对应老版本的 Private 群)。
* - "Public" :公开群,成员上限 2000 人,任何人都可以申请加群,但加群需群主或管理员审批,适合用于类似 QQ 中由群主管理的兴趣群。
* - "Meeting" :会议群,成员上限 6000 人,任何人都可以自由进出,且加群无需被审批,适合用于视频会议和在线培训等场景(对应老版本的 ChatRoom 群)。
* - "Community" :社群,成员上限 100000 人任何人都可以自由进出且加群无需被审批适合用于知识分享和游戏交流等超大社区群聊场景。5.8 版本开始支持,需要您购买旗舰版套餐。
* - "AVChatRoom" :直播群,人数无上限,任何人都可以自由进出,消息吞吐量大,适合用作直播场景中的高并发弹幕聊天室。
*
* @param groupID 自定义群组 ID可以传 nil。传 nil 时系统会自动分配 groupID并通过 succ 回调返回。
* "Community" 类型自定义群组 ID 必须以 "@TGS#_" 作为前缀。
* @param groupName 群名称,不能为 nil最长30字节
*
* @note 请注意如下特殊逻辑:
* - 不支持在同一个 SDKAPPID 下创建两个相同 groupID 的群。
* - 社群Community功能仅 5.8.1668 增强版及以上版本支持,需[购买旗舰版套餐包](https://buy.cloud.tencent.com/avc?from=17213)并[申请开通](https://cloud.tencent.com/document/product/269/3916?from=17215)后方可使用。
* - 直播群AVChatRoom在进程重启或重新登录之后如果想继续接收直播群的消息请您调用 joinGroup 重新加入直播群。
*/
- (void)createGroup:(NSString *)groupType groupID:(NSString*)groupID groupName:(NSString *)groupName succ:(V2TIMCreateGroupSucc)succ fail:(V2TIMFail)fail;
/**
* 4.4 加入群组
*
* @note 请注意如下特殊逻辑:
* - 工作群Work不能主动入群只能通过群成员调用 V2TIMManager+Group.h -> inviteUserToGroup 接口邀请入群。
* - 公开群Public申请入群后需要管理员审批管理员在收到 V2TIMGroupListener -> onReceiveJoinApplication 回调后调用 V2TIMManager+Group.h -> getGroupApplicationList 接口处理加群请求。
* - 其他群:可以直接入群。
* - 直播群AVChatRoom在进程重启或重新登录之后如果想继续接收直播群的消息请您调用 joinGroup 重新加入直播群。
* - 直播群AVChatRoom直播群新成员可以查看入群前消息该功能为 IM 旗舰版功能,[购买旗舰版套餐包](https://buy.cloud.tencent.com/avc?from=17484)后可使用,详见[价格说明](https://cloud.tencent.com/document/product/269/11673?from=17179#.E5.9F.BA.E7.A1.80.E6.9C.8D.E5.8A.A1.E8.AF.A6.E6.83.85)
*/
- (void)joinGroup:(NSString*)groupID msg:(NSString*)msg succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/**
* 4.5 退出群组
*
* @note 在公开群Public、会议Meeting和直播群AVChatRoom群主是不可以退群的群主只能调用 dismissGroup 解散群组。
*/
- (void)quitGroup:(NSString*)groupID succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/**
* 4.6 解散群组
*
* @note 请注意如下特殊逻辑:
* - 好友工作群Work的解散最为严格即使群主也不能随意解散只能由您的业务服务器调用 [解散群组 REST API](https://cloud.tencent.com/document/product/269/1624) 解散。
* - 其他类型群的群主可以解散群组。
*/
- (void)dismissGroup:(NSString*)groupID succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
// 4.7 更多功能,详见 V2TIMManager+Group.h
/**
* 设置群组监听器(待废弃接口,请使用 addGroupListener 和 removeGroupListener 接口)
*/
- (void)setGroupListener:(id<V2TIMGroupListener>)listener __attribute__((deprecated("use addGroupListener: instead")));
/////////////////////////////////////////////////////////////////////////////////
// 资料相关操作
/////////////////////////////////////////////////////////////////////////////////
/**
* 5.1 获取用户资料
* @note 请注意:
* - 获取自己的资料,传入自己的 ID 即可。
* - userIDList 建议一次最大 100 个,因为数量过多可能会导致数据包太大被后台拒绝,后台限制数据包最大为 1M。
*/
- (void)getUsersInfo:(NSArray<NSString *> *)userIDList succ:(V2TIMUserFullInfoListSucc)succ fail:(V2TIMFail)fail;
/**
* 5.2 修改个人资料
*/
- (void)setSelfInfo:(V2TIMUserFullInfo *)Info succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/**
* 5.3 查询用户状态,从 6.3 版本开始支持
*
* @param userIDList 需要获取的用户 ID
*
* @note 请注意:
* - 如果您想查询自己的自定义状态,您只需要传入自己的 userID 即可
* - 当您批量查询时,接口只会返回查询成功的用户状态信息;当所有用户均查询失败时,接口会报错
* - 查询其他用户状态为 IM 旗舰版功能,[购买旗舰版套餐包](https://buy.cloud.tencent.com/avc?from=17491)后可使用,详见[价格说明](https://cloud.tencent.com/document/product/269/11673?from=17472#.E5.9F.BA.E7.A1.80.E6.9C.8D.E5.8A.A1.E8.AF.A6.E6.83.85)。
*/
- (void)getUserStatus:(NSArray *)userIDList succ:(V2TIMUserStatusListSucc)succ fail:(V2TIMFail)fail;
/**
* 5.4 设置自己的状态,从 6.3 版本开始支持
*
* @param status 待设置的自定义状态
*
* @note 请注意,该接口只支持设置自己的自定义状态,即 V2TIMUserStatus.customStatus
*/
- (void)setSelfStatus:(V2TIMUserStatus *)status succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/**
* 5.5 订阅用户状态,从 6.3 版本开始支持
*
* @param userIDList 待订阅的用户 ID
*
* @note 请注意
* - 当成功订阅用户状态后,当对方的状态(包含在线状态、自定义状态)发生变更后,您可以监听 @onUserStatusChanged 回调来感知
* - 如果您需要订阅好友列表的状态,您只需要在控制台上打开开关即可,无需调用该接口
* - 该接口不支持订阅自己,您可以通过监听 @onUserStatusChanged 回调来感知自身的自定义状态的变更
* - 订阅列表有个数限制,超过限制后,会自动淘汰最先订阅的用户
* - 该功能为 IM 旗舰版功能,[购买旗舰版套餐包](https://buy.cloud.tencent.com/avc?from=17491)后可使用,详见[价格说明](https://cloud.tencent.com/document/product/269/11673?from=17472#.E5.9F.BA.E7.A1.80.E6.9C.8D.E5.8A.A1.E8.AF.A6.E6.83.85)。
*/
- (void)subscribeUserStatus:(NSArray *)userIDList succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
/**
* 5.6 取消订阅用户状态,从 6.3 版本开始支持
*
* @note
* - 当 userIDList 为空或者 nil 时,取消当前所有的订阅
* - 该功能为 IM 旗舰版功能,[购买旗舰版套餐包](https://buy.cloud.tencent.com/avc?from=17491)后可使用,详见[价格说明](https://cloud.tencent.com/document/product/269/11673?from=17472#.E5.9F.BA.E7.A1.80.E6.9C.8D.E5.8A.A1.E8.AF.A6.E6.83.85)。
*/
- (void)unsubscribeUserStatus:(NSArray *)userIDList succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
// 5.7 更多功能,详见 V2TIMManager+Friendship.h
/////////////////////////////////////////////////////////////////////////////////
// 扩展接口
/////////////////////////////////////////////////////////////////////////////////
/**
* 6.1 实验性 API 接口
*
* @param api 接口名称
* @param param 接口参数
*
* @note 该接口提供一些实验性功能
*/
- (void)callExperimentalAPI:(NSString *)api
param:(NSObject *)param
succ:(V2TIMCallExperimentalAPISucc)succ
fail:(V2TIMFail)fail;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// IMSDK 主核心回调,帮助您时刻关注 IMSDK 的在线状态
//
/////////////////////////////////////////////////////////////////////////////////
/// IMSDK 主核心回调
V2TIM_EXPORT @protocol V2TIMSDKListener <NSObject>
@optional
/// SDK 正在连接到服务器
- (void)onConnecting;
/// SDK 已经成功连接到服务器
- (void)onConnectSuccess;
/// SDK 连接服务器失败
- (void)onConnectFailed:(int)code err:(NSString*)err;
/// 当前用户被踢下线,此时可以 UI 提示用户,并再次调用 V2TIMManager 的 login() 函数重新登录。
- (void)onKickedOffline;
/// 在线时票据过期:此时您需要生成新的 userSig 并再次调用 V2TIMManager 的 login() 函数重新登录。
- (void)onUserSigExpired;
/// 当前用户的资料发生了更新
- (void)onSelfInfoUpdated:(V2TIMUserFullInfo *)Info;
/**
* 用户状态变更通知
*
* @note 收到通知的情况:
* 1. 订阅过的用户发生了状态变更(包括在线状态和自定义状态),会触发该回调
* 2. 在 IM 控制台打开了好友状态通知开关,即使未主动订阅,当好友状态发生变更时,也会触发该回调
* 3. 同一个账号多设备登录,当其中一台设备修改了自定义状态,所有设备都会收到该回调
*/
- (void)onUserStatusChanged:(NSArray<V2TIMUserStatus *> *)userStatusList;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// IMSDK 基本消息回调 (高级消息请参考 V2TIMManager+Message.h -> V2TIMAdvancedMsgListener
//
/////////////////////////////////////////////////////////////////////////////////
/// IMSDK 基本消息回调
V2TIM_EXPORT @protocol V2TIMSimpleMsgListener <NSObject>
@optional
/// 收到 C2C 文本消息
- (void)onRecvC2CTextMessage:(NSString *)msgID sender:(V2TIMUserInfo *)info text:(NSString *)text;
/// 收到 C2C 自定义(信令)消息
- (void)onRecvC2CCustomMessage:(NSString *)msgID sender:(V2TIMUserInfo *)info customData:(NSData *)data;
/// 收到群文本消息
- (void)onRecvGroupTextMessage:(NSString *)msgID groupID:(NSString *)groupID sender:(V2TIMGroupMemberInfo *)info text:(NSString *)text;
/// 收到群自定义(信令)消息
- (void)onRecvGroupCustomMessage:(NSString *)msgID groupID:(NSString *)groupID sender:(V2TIMGroupMemberInfo *)info customData:(NSData *)data;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// IMSDK 群组事件回调
//
/////////////////////////////////////////////////////////////////////////////////
/// IMSDK 群组事件回调
V2TIM_EXPORT @protocol V2TIMGroupListener <NSObject>
@optional
/////////////////////////////////////////////////////////////////////////////////
// 群成员相关通知
/////////////////////////////////////////////////////////////////////////////////
/// 有新成员加入群(该群所有的成员都能收到)
/// 会议群Meeting默认无此回调如需回调请前往 [控制台](https://console.cloud.tencent.com/im) (功能配置 -> 群组配置 -> 群系统通知配置 -> 群成员变更通知) 主动配置。
- (void)onMemberEnter:(NSString *)groupID memberList:(NSArray<V2TIMGroupMemberInfo *>*)memberList;
/// 有成员离开群(该群所有的成员都能收到)
/// 会议群Meeting默认无此回调如需回调请前往 [控制台](https://console.cloud.tencent.com/im) (功能配置 -> 群组配置 -> 群系统通知配置 -> 群成员变更通知) 主动配置。
- (void)onMemberLeave:(NSString *)groupID member:(V2TIMGroupMemberInfo *)member;
/// 某成员被拉入某群(该群所有的成员都能收到)
- (void)onMemberInvited:(NSString *)groupID opUser:(V2TIMGroupMemberInfo *)opUser memberList:(NSArray<V2TIMGroupMemberInfo *>*)memberList;
/// 有成员被踢出某群(该群所有的成员都能收到)
- (void)onMemberKicked:(NSString *)groupID opUser:(V2TIMGroupMemberInfo *)opUser memberList:(NSArray<V2TIMGroupMemberInfo *>*)memberList;
/// 某成员信息发生变更(该群所有的成员都能收到)
/// 会议群Meeting和直播群AVChatRoom默认无此回调如需回调请前往 [控制台](https://console.cloud.tencent.com/im) (功能配置 -> 群组配置 -> 群系统通知配置 -> 群成员资料变更通知) 主动配置。
- (void)onMemberInfoChanged:(NSString *)groupID changeInfoList:(NSArray <V2TIMGroupMemberChangeInfo *> *)changeInfoList;
/////////////////////////////////////////////////////////////////////////////////
// 群生命周期相关通知
/////////////////////////////////////////////////////////////////////////////////
/// 有新的群创建(创建者能收到,应用于多端消息同步的场景)
- (void)onGroupCreated:(NSString *)groupID;
/// 某个已加入的群被解散了(该群所有的成员都能收到)
- (void)onGroupDismissed:(NSString *)groupID opUser:(V2TIMGroupMemberInfo *)opUser;
/// 某个已加入的群被回收了(该群所有的成员都能收到)
- (void)onGroupRecycled:(NSString *)groupID opUser:(V2TIMGroupMemberInfo *)opUser;
/// 某个已加入的群的信息被修改了(该群所有的成员都能收到)
/// 以下字段的修改可能会引发该通知 groupName & introduction & notification & faceUrl & owner & allMute & custom
/// 控制指定字段 下发通知/存漫游 请前往 [控制台](https://console.cloud.tencent.com/im) (功能配置 -> 群组配置 -> 群系统通知配置 -> 群资料变更通知) 主动配置。
- (void)onGroupInfoChanged:(NSString *)groupID changeInfoList:(NSArray <V2TIMGroupChangeInfo *> *)changeInfoList;
/// 某个已加入的群的属性被修改了,会返回所在群组的所有属性(该群所有的成员都能收到)
- (void)onGroupAttributeChanged:(NSString *)groupID attributes:(NSMutableDictionary<NSString *,NSString *> *)attributes;
/// 某个已加入的群的计数器被修改了,会返回当前变更的群计数器(该群所有的成员都能收到)
- (void)onGroupCounterChanged:(NSString *)groupID key:(NSString *)key newValue:(NSInteger)newValue;
/////////////////////////////////////////////////////////////////////////////////
// 加群申请相关通知
/////////////////////////////////////////////////////////////////////////////////
/// 有新的加群请求(只有群主和管理员会收到)
- (void)onReceiveJoinApplication:(NSString *)groupID member:(V2TIMGroupMemberInfo *)member opReason:(NSString *)opReason;
/// 加群请求已经被群主或管理员处理了(只有申请人能够收到)
- (void)onApplicationProcessed:(NSString *)groupID opUser:(V2TIMGroupMemberInfo *)opUser opResult:(BOOL)isAgreeJoin opReason:(NSString *)opReason;
/////////////////////////////////////////////////////////////////////////////////
// 其他相关通知
/////////////////////////////////////////////////////////////////////////////////
/// 指定管理员身份
- (void)onGrantAdministrator:(NSString *)groupID opUser:(V2TIMGroupMemberInfo *)opUser memberList:(NSArray <V2TIMGroupMemberInfo *> *)memberList;
/// 取消管理员身份
- (void)onRevokeAdministrator:(NSString *)groupID opUser:(V2TIMGroupMemberInfo *)opUser memberList:(NSArray <V2TIMGroupMemberInfo *> *)memberList;
/// 自己主动退出群组主要用于多端同步直播群AVChatRoom不支持
- (void)onQuitFromGroup:(NSString *)groupID;
/// 收到 RESTAPI 下发的自定义系统消息
- (void)onReceiveRESTCustomData:(NSString *)groupID data:(NSData *)data;
/////////////////////////////////////////////////////////////////////////////////
// 话题事件监听回调
/////////////////////////////////////////////////////////////////////////////////
/// 话题创建回调
- (void)onTopicCreated:(NSString *)groupID topicID:(NSString *)topicID;
/// 话题被删除回调
- (void)onTopicDeleted:(NSString *)groupID topicIDList:(NSArray<NSString *> *)topicIDList;
/// 话题更新回调
- (void)onTopicChanged:(NSString *)groupID topicInfo:(V2TIMTopicInfo *)topicInfo;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 用户资料
//
/////////////////////////////////////////////////////////////////////////////////
/// 用户基本资料
V2TIM_EXPORT @interface V2TIMUserInfo : NSObject
/// 用户 ID
@property(nonatomic,strong,readonly) NSString* userID;
/// 用户昵称
@property(nonatomic,strong) NSString* nickName;
/// 用户头像
@property(nonatomic,strong) NSString* faceURL;
@end
/// 用户详细资料
V2TIM_EXPORT @interface V2TIMUserFullInfo : V2TIMUserInfo
/// 用户签名
@property(nonatomic,strong) NSString *selfSignature;
/// 用户性别
@property(nonatomic,assign) V2TIMGender gender;
/// 用户角色
@property(nonatomic,assign) uint32_t role;
/// 用户等级
@property(nonatomic,assign) uint32_t level;
/// 出生日期
@property(nonatomic,assign) uint32_t birthday;
/// 用户好友验证方式
@property(nonatomic,assign) V2TIMFriendAllowType allowType;
/// 用户自定义字段
/// 首先要在 [控制台](https://console.cloud.tencent.com/im) (功能配置 -> 用户自定义字段) 配置用户自定义字段然后再调用该接口进行设置key 值不需要加 Tag_Profile_Custom_ 前缀。
@property(nonatomic,strong) NSDictionary<NSString *,NSData *> * customInfo;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 用户状态
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMUserStatus : NSObject
/// 用户的 ID
@property (nonatomic, copy, readonly) NSString *userID;
/// 用户的状态
@property (nonatomic, assign, readonly) V2TIMUserStatusType statusType;
/// 用户的自定义状态, 最大 50 字节
@property (nonatomic, copy) NSString *customStatus;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 群成员资料
//
/////////////////////////////////////////////////////////////////////////////////
/// 群成员基本资料
V2TIM_EXPORT @interface V2TIMGroupMemberInfo : NSObject
/// 用户 ID
@property(nonatomic,strong) NSString* userID;
/// 用户昵称
@property(nonatomic,strong,readonly) NSString* nickName;
/// 用户好友备注
@property(nonatomic,strong,readonly) NSString* friendRemark;
/// 群成员名片
@property(nonatomic,strong) NSString* nameCard;
/// 用户头像
@property(nonatomic,strong,readonly) NSString* faceURL;
@end
/// 群成员详细资料
V2TIM_EXPORT @interface V2TIMGroupMemberFullInfo : V2TIMGroupMemberInfo
/// 群成员自定义字段
/// 首先要在 [控制台](https://console.cloud.tencent.com/im) (功能配置 -> 群成员自定义字段) 配置用户自定义字段,然后再调用该接口进行设置。
@property(nonatomic,strong) NSDictionary<NSString *,NSData *> * customInfo;
/// 群成员角色(V2TIMGroupMemberRole),修改群成员角色请调用 V2TIMManager+Group.h -> setGroupMemberRole 接口
@property(nonatomic,assign,readonly) uint32_t role;
/// 群成员禁言结束时间戳,禁言用户请调用 V2TIMManager+Group.h -> muteGroupMember 接口
@property(nonatomic,assign,readonly) uint32_t muteUntil;
/// 群成员入群时间,自动生成,不可修改
@property(nonatomic,assign,readonly) time_t joinTime;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// SDK 配置参数表
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMSDKConfig : NSObject
/// 本地写 log 文件的等级,默认 DEBUG 等级, IMSDK 的日志默认存储于 /Library/Caches/ 目录下
@property(nonatomic,assign) V2TIMLogLevel logLevel;
/// log 监听回调(回调在主线程,日志回调可能比较频繁,请注意不要在回调里面同步处理太多耗时任务,可能会堵塞主线程)
@property(nonatomic,copy) V2TIMLogListener logListener;
@end
#endif

Binary file not shown.

Binary file not shown.

View File

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

View File

@@ -0,0 +1,25 @@
// Copyright (c) 2021 Tencent. All rights reserved.
#ifndef TIM_IM_SDK_FOR_MAC_CPP_H_
#define TIM_IM_SDK_FOR_MAC_CPP_H_
#import "V2TIMBuffer.h"
#import "V2TIMCallback.h"
#import "V2TIMCommon.h"
#import "V2TIMConversation.h"
#import "V2TIMConversationManager.h"
#import "V2TIMDefine.h"
#import "V2TIMErrorCode.h"
#import "V2TIMFriendship.h"
#import "V2TIMFriendshipManager.h"
#import "V2TIMGroup.h"
#import "V2TIMGroupManager.h"
#import "V2TIMListener.h"
#import "V2TIMManagerEx.h"
#import "V2TIMMessage.h"
#import "V2TIMMessageManager.h"
#import "V2TIMSignaling.h"
#import "V2TIMSignalingManager.h"
#import "V2TIMString.h"
#endif

View File

@@ -0,0 +1,25 @@
// Copyright (c) 2021 Tencent. All rights reserved.
#ifndef TIM_IM_SDK_CPP_H_
#define TIM_IM_SDK_CPP_H_
#import "V2TIMBuffer.h"
#import "V2TIMCallback.h"
#import "V2TIMCommon.h"
#import "V2TIMConversation.h"
#import "V2TIMConversationManager.h"
#import "V2TIMDefine.h"
#import "V2TIMErrorCode.h"
#import "V2TIMFriendship.h"
#import "V2TIMFriendshipManager.h"
#import "V2TIMGroup.h"
#import "V2TIMGroupManager.h"
#import "V2TIMListener.h"
#import "V2TIMManagerEx.h"
#import "V2TIMMessage.h"
#import "V2TIMMessageManager.h"
#import "V2TIMSignaling.h"
#import "V2TIMSignalingManager.h"
#import "V2TIMString.h"
#endif

View File

@@ -0,0 +1,31 @@
// Copyright (c) 2021 Tencent. All rights reserved.
#ifndef __V2TIM_BUFFER_H__
#define __V2TIM_BUFFER_H__
#include "V2TIMDefine.h"
#include <cstddef>
class TIM_API V2TIMBuffer {
public:
V2TIMBuffer();
V2TIMBuffer(const V2TIMBuffer &buffer);
V2TIMBuffer(const uint8_t *data, size_t size);
virtual ~V2TIMBuffer();
const uint8_t *Data() const;
size_t Size() const;
V2TIMBuffer &operator=(const V2TIMBuffer &buffer);
private:
uint8_t *buffer_;
size_t length_;
};
#endif /* __V2TIM_BUFFER_H__ */

View File

@@ -0,0 +1,130 @@
// Copyright (c) 2021 Tencent. All rights reserved.
/////////////////////////////////////////////////////////////////////////////////
//
// IMSDK API 回调类
//
/////////////////////////////////////////////////////////////////////////////////
#ifndef __V2TIM_CALLBACK_H__
#define __V2TIM_CALLBACK_H__
#include "V2TIMDefine.h"
#include "V2TIMString.h"
#include "V2TIMMessage.h"
/////////////////////////////////////////////////////////////////////////////////
//
// 回调基类
//
/////////////////////////////////////////////////////////////////////////////////
class TIM_API V2TIMBaseCallback {
public:
V2TIMBaseCallback();
virtual ~V2TIMBaseCallback();
};
/////////////////////////////////////////////////////////////////////////////////
//
// 普通回调类
//
/////////////////////////////////////////////////////////////////////////////////
class V2TIMCallback : public V2TIMBaseCallback {
public:
~V2TIMCallback() override {}
/**
* 成功时回调,不带参数
*/
virtual void OnSuccess() = 0;
/**
* 出错时回调
*
* @param error_code 错误码,详细描述请参见错误码表
* @param error_message 错误描述
*/
virtual void OnError(int error_code, const V2TIMString &error_message) = 0;
};
/////////////////////////////////////////////////////////////////////////////////
//
// 模版回调类
//
/////////////////////////////////////////////////////////////////////////////////
template <class T>
class V2TIMValueCallback : public V2TIMBaseCallback {
public:
~V2TIMValueCallback() override {}
/**
* 成功时回调,带上 T 类型的参数
*/
virtual void OnSuccess(const T &value) = 0;
/**
* 出错时回调
*
* @param error_code 错误码,详细描述请参见错误码表
* @param error_message 错误描述
*/
virtual void OnError(int error_code, const V2TIMString &error_message) = 0;
};
/////////////////////////////////////////////////////////////////////////////////
//
// 下载回调类 - 继承自 V2TIMCallback 类
//
/////////////////////////////////////////////////////////////////////////////////
class V2TIMDownloadCallback : public V2TIMCallback {
public:
~V2TIMDownloadCallback() override {}
/**
* 文件下载进度回调
*
* @note 在下载结束时,触发 OnSuccess 或者 OnError 函数
*/
virtual void OnDownLoadProgress(uint64_t currentSize, uint64_t totalSize) = 0;
};
/////////////////////////////////////////////////////////////////////////////////
//
// 发送消息的回调类
//
/////////////////////////////////////////////////////////////////////////////////
class V2TIMSendCallback : public V2TIMValueCallback<V2TIMMessage> {
public:
~V2TIMSendCallback() override {}
/**
* 文件上传进度回调,取值 0 -100
*
* @note 在发送结束时,触发 OnSuccess 或者 OnError 函数
*/
virtual void OnProgress(uint32_t progress) = 0;
};
/////////////////////////////////////////////////////////////////////////////////
//
// 操作完成的回调类
//
/////////////////////////////////////////////////////////////////////////////////
template <class T>
class V2TIMCompleteCallback : public V2TIMBaseCallback {
public:
~V2TIMCompleteCallback() override {}
/**
* 操作完成的回调
*/
virtual void OnComplete(int error_code, const V2TIMString &error_message, const T &value) = 0;
};
#endif /* __V2TIM_CALLBACK_H__ */

View File

@@ -0,0 +1,102 @@
// Copyright (c) 2021 Tencent. All rights reserved.
#ifndef __V2TIM_COMMON_H__
#define __V2TIM_COMMON_H__
#include "V2TIMBuffer.h"
#include "V2TIMDefine.h"
#include "V2TIMString.h"
/////////////////////////////////////////////////////////////////////////////////
//
// (一)枚举值定义
//
/////////////////////////////////////////////////////////////////////////////////
/// 登录状态
enum V2TIMLoginStatus {
/// 已登录
V2TIM_STATUS_LOGINED = 1,
/// 登录中
V2TIM_STATUS_LOGINING = 2,
/// 无登录
V2TIM_STATUS_LOGOUT = 3,
};
/// 日志级别
enum V2TIMLogLevel {
/// 不输出任何 sdk log
V2TIM_LOG_NONE = 0,
/// 输出 DEBUGINFOWARNINGERROR 级别的 log
V2TIM_LOG_DEBUG = 3,
/// 输出 INFOWARNINGERROR 级别的 log
V2TIM_LOG_INFO = 4,
/// 输出 WARNINGERROR 级别的 log
V2TIM_LOG_WARN = 5,
/// 输出 ERROR 级别的 log
V2TIM_LOG_ERROR = 6,
};
/// 消息接收选项
enum V2TIMReceiveMessageOpt {
///< 在线正常接收消息,离线时会进行 APNs 推送
V2TIM_RECEIVE_MESSAGE = 0,
///< 不会接收到消息,离线不会有推送通知
V2TIM_NOT_RECEIVE_MESSAGE = 1,
///< 在线正常接收消息,离线不会有推送通知
V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE = 2,
};
/////////////////////////////////////////////////////////////////////////////////
//
// (二)对象类型定义
//
/////////////////////////////////////////////////////////////////////////////////
typedef uint64_t V2TIMUInt64;
DEFINE_VECTOR(V2TIMUInt64)
typedef TXV2TIMUInt64Vector V2TIMUInt64Vector;
DEFINE_VECTOR(V2TIMString)
typedef TXV2TIMStringVector V2TIMStringVector;
DEFINE_MAP(V2TIMString, V2TIMBuffer)
typedef TXV2TIMStringToV2TIMBufferMap V2TIMCustomInfo;
DEFINE_MAP(V2TIMString, V2TIMString)
typedef TXV2TIMStringToV2TIMStringMap V2TIMStringToV2TIMStringMap;
typedef TXV2TIMStringToV2TIMStringMap V2TIMGroupAttributeMap;
DEFINE_MAP(V2TIMString, int64_t)
typedef TXV2TIMStringToint64_tMap V2TIMStringToInt64Map;
class V2TIMLogListener;
struct TIM_API V2TIMBaseObject {
void *obj_ptr;
V2TIMBaseObject();
V2TIMBaseObject(const V2TIMBaseObject &object);
virtual ~V2TIMBaseObject();
};
/// SDK 配置
struct TIM_API V2TIMSDKConfig {
/// 存储消息、会话、资料等信息的文件路径Android 平台必须填写,其他平台可选
V2TIMString initPath;
/// 存储 log 的文件路径Android 平台必须填写,其他平台可选
V2TIMString logPath;
/// 本地写 log 文件的等级,默认 DEBUG 等级, IMSDK 的日志默认存储于程序文件的运行目录下
V2TIMLogLevel logLevel;
/// log 监听回调(回调在主线程,日志回调可能比较频繁,请注意不要在回调里面同步处理太多耗时任务,可能会堵塞主线程)
V2TIMLogListener *logListener;
V2TIMSDKConfig();
V2TIMSDKConfig(const V2TIMSDKConfig &);
~V2TIMSDKConfig();
};
#endif /* __V2TIM_COMMON_H__ */

View File

@@ -0,0 +1,156 @@
// Copyright (c) 2021 Tencent. All rights reserved.
#ifndef __V2TIM_CONVERSATION_H__
#define __V2TIM_CONVERSATION_H__
#include "V2TIMCommon.h"
#include "V2TIMMessage.h"
#include "V2TIMString.h"
/////////////////////////////////////////////////////////////////////////////////
//
// (一)枚举值定义
//
/////////////////////////////////////////////////////////////////////////////////
/// 会话类型
enum V2TIMConversationType {
///< 未知
V2TIM_UNKNOWN = 0,
///< 单聊
V2TIM_C2C = 1,
///< 群聊
V2TIM_GROUP = 2,
};
/// 会话标记类型
enum V2TIMConversationMarkType {
///< 会话标星
V2TIM_CONVERSATION_MARK_TYPE_STAR = 0x1,
///< 会话标记未读(重要会话)
V2TIM_CONVERSATION_MARK_TYPE_UNREAD = 0x1 << 1,
///< 会话折叠
V2TIM_CONVERSATION_MARK_TYPE_FOLD = 0x1 << 2,
///< 会话隐藏
V2TIM_CONVERSATION_MARK_TYPE_HIDE = 0x1 << 3,
};
/////////////////////////////////////////////////////////////////////////////////
//
// (二)结构体定义
//
/////////////////////////////////////////////////////////////////////////////////
DEFINE_VECTOR(uint64_t)
typedef TXuint64_tVector UInt64Vector;
/// 会话对象
struct TIM_API V2TIMConversation {
/// 会话类型
V2TIMConversationType type;
/// 会话唯一 ID如果是 C2C 单聊,组成方式为 c2c_userID如果是群聊组成方式为 group_groupID
V2TIMString conversationID;
/// 如果会话类型为 C2C 单聊userID 会存储对方的用户ID否则为空字符串
V2TIMString userID;
/// 如果会话类型为群聊groupID 会存储当前群的群 ID否则为空字符串
V2TIMString groupID;
/// 如果会话类型为群聊groupType 为当前群类型,否则为空字符串
V2TIMString groupType;
/// 会话展示名称(群组:群名称 >> 群 IDC2C对方好友备注 >> 对方昵称 >> 对方的 userID
V2TIMString showName;
/// 会话展示头像群组群头像C2C对方头像
V2TIMString faceUrl;
/// 会话未读消息数量,直播群AVChatRoom不支持未读计数默认为 0
int unreadCount;
/// 消息接收选项(接收 | 接收但不提醒 | 不接收)
V2TIMReceiveMessageOpt recvOpt;
/// 会话最后一条消息如果会话没有消息lastMessage 字段为 NULL
/// 5.5.892 以前版本,请您使用 lastMessage -> timestamp 对会话做排序timestamp 越大,会话越靠前
V2TIMMessage *lastMessage;
/// 群会话 @ 信息列表,用于展示 “有人@我” 或 “@所有人” 这两种提醒状态
V2TIMGroupAtInfoVector groupAtInfolist;
/// 草稿信息,设置草稿信息请调用 SetConversationDraft() 接口
V2TIMString draftText;
/// 草稿编辑时间,草稿设置的时候自动生成
uint64_t draftTimestamp;
/// 是否置顶
bool isPinned;
// 排序字段5.5.892 及以后版本支持)
// @note
// - 排序字段 orderKey
// 是按照会话的激活时间线性递增的一个数字(注意:不是时间戳,因为同一时刻可能会有多个会话被同时激活)
// - 5.5.892 及其以后版本推荐您使用该字段对所有会话进行排序orderKey
// 值越大,代表该会话排序越靠前
// - 当您 “清空会话所有消息” 或者 “逐个删除会话的所有消息” 之后,会话的 lastMessage
// 变为空,但会话的 orderKey
// 不会改变;如果想保持会话的排序位置不变,可以使用该字段对所有会话进行排序
uint64_t orderKey;
/// 会话标记列表,取值详见 @V2TIMConversationMarkType从 6.5 版本开始支持)
UInt64Vector markList;
/// 会话自定义数据(从 6.5 版本开始支持)
V2TIMBuffer customData;
/// 会话所属分组列表(从 6.5 版本开始支持)
V2TIMStringVector conversationGroupList;
/// 已读消息的时间戳,仅对单聊会话生效(从 7.1 版本开始支持)
uint64_t c2cReadTimestamp;
/// 已读消息的 sequence仅对群聊会话生效从 7.1 版本开始支持)
uint64_t groupReadSequence;
V2TIMConversation();
V2TIMConversation(const V2TIMConversation& conversation);
V2TIMConversation& operator =(const V2TIMConversation& conversation);
~V2TIMConversation();
};
DEFINE_VECTOR(V2TIMConversation)
typedef TXV2TIMConversationVector V2TIMConversationVector;
/// 会话 filter
struct TIM_API V2TIMConversationListFilter {
/// C2C 或群会话(填 0 代表不过滤此项)
V2TIMConversationType type;
/// 会话分组名称(填空代表不过滤此项)
V2TIMString conversationGroup;
/// 标记类型,取值详见 @V2TIMConversationMarkType(填 0 代表不过滤此项)
uint64_t markType;
V2TIMConversationListFilter();
V2TIMConversationListFilter(const V2TIMConversationListFilter& filter);
V2TIMConversationListFilter& operator =(const V2TIMConversationListFilter& filter);
~V2TIMConversationListFilter();
};
/// 获取会话列表结果
struct TIM_API V2TIMConversationResult {
/// 获取下一次分页拉取的游标
uint64_t nextSeq;
/// 会话列表是否已经拉取完毕
bool isFinished;
/// 获取会话列表
V2TIMConversationVector conversationList;
V2TIMConversationResult();
V2TIMConversationResult(const V2TIMConversationResult& conversationResult);
V2TIMConversationResult& operator=(const V2TIMConversationResult& conversationResult);
~V2TIMConversationResult();
};
/// 会话操作结果
struct TIM_API V2TIMConversationOperationResult {
/// 会话 ID
V2TIMString conversationID;
/// 返回码
int resultCode;
/// 返回信息
V2TIMString resultInfo;
V2TIMConversationOperationResult();
V2TIMConversationOperationResult(const V2TIMConversationOperationResult &result);
~V2TIMConversationOperationResult();
V2TIMConversationOperationResult& operator=(const V2TIMConversationOperationResult &result);
};
DEFINE_VECTOR(V2TIMConversationOperationResult)
typedef TXV2TIMConversationOperationResultVector V2TIMConversationOperationResultVector;
#endif /* __V2TIM_CONVERSATION_H__ */

View File

@@ -0,0 +1,262 @@
// Copyright (c) 2021 Tencent. All rights reserved.
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 IMSDK
//
// 会话接口,里面包含了会话的获取,删除,更新的逻辑
//
/////////////////////////////////////////////////////////////////////
#ifndef __V2TIM_CONVERSATION_MANAGER_H__
#define __V2TIM_CONVERSATION_MANAGER_H__
#include "V2TIMCallback.h"
#include "V2TIMConversation.h"
#include "V2TIMDefine.h"
#include "V2TIMListener.h"
class TIM_API V2TIMConversationManager {
public:
virtual ~V2TIMConversationManager() {}
/**
* 1.1 添加会话监听器
*/
virtual void AddConversationListener(V2TIMConversationListener* listener) = 0;
/**
* 1.2 移除会话监听器
*/
virtual void RemoveConversationListener(V2TIMConversationListener* listener) = 0;
/**
* 1.3 获取会话列表
*
* - 一个会话对应一个聊天窗口,比如跟一个好友的 1v1 聊天,或者一个聊天群,都是一个会话。
* -
* 由于历史的会话数量可能很多,所以该接口希望您采用分页查询的方式进行调用,每次分页拉取的个数建议为
* 100 个。
* - 该接口拉取的是本地缓存的会话如果服务器会话有更新SDK 内部会自动同步,然后在 @ref
* V2TIMConversationListener 回调告知客户。
* - 如果会话全部拉取完毕,成功回调里面 V2TIMConversationResult 中的 isFinished 获取字段值为
* true。
*
* @note 会话排序规则
* - 5.5.892 及以后版本, 该接口获取的会话列表默认已经按照会话 orderKey 做了排序orderKey
* 值越大,代表该会话排序越靠前。
* - 5.5.892 以前版本,该接口获取的会话列表默认已经按照会话 lastMessage -> timestamp
* 做了排序timestamp 越大,会话越靠前。
*
* @param nextSeq 分页拉取的游标,第一次默认取传 0后续分页拉传上一次分页拉取成功回调里的
* nextSeq
* @param count 分页拉取的个数,一次分页拉取不宜太多,会影响拉取的速度,建议每次拉取 100
* 个会话
*/
virtual void GetConversationList(uint64_t nextSeq, uint32_t count,
V2TIMValueCallback<V2TIMConversationResult>* callback) = 0;
/**
* 1.4 获取单个会话
*
* @param conversationID 会话唯一 IDC2C 单聊组成方式为: "c2c_userID"
* 群聊组成方式为: "group_groupID")
*/
virtual void GetConversation(const V2TIMString& conversationID,
V2TIMValueCallback<V2TIMConversation>* callback) = 0;
/**
* 1.5 获取指定会话列表
*
* @param conversationIDList 会话唯一 IDC2C 单聊组成方式为: "c2c_userID"
* 群聊组成方式为: "group_groupID")
*/
virtual void GetConversationList(const V2TIMStringVector& conversationIDList,
V2TIMValueCallback<V2TIMConversationVector>* callback) = 0;
/**
* 1.6 获取会话列表高级接口(从 6.5 版本开始支持)
*
* @param filter 会话 filter
* @param nextSeq 分页拉取的游标
* @param count 分页拉取的个数
*
*/
virtual void GetConversationListByFilter(const V2TIMConversationListFilter &filter,
uint64_t nextSeq, uint32_t count,
V2TIMValueCallback<V2TIMConversationResult>* callback) = 0;
/**
* 1.7 删除会话
*
* @param conversationID 会话唯一 IDC2C 单聊组成方式为: "c2c_userID"
* 群聊组成方式为: "group_groupID")
*
* @note 请注意:
* - 删除会话会在本地删除的同时,在服务器也会同步删除。
* - 会话内的消息在本地删除的同时,在服务器也会同步删除。
*/
virtual void DeleteConversation(const V2TIMString& conversationID, V2TIMCallback* callback) = 0;
/**
* 1.8 删除会话列表7.1 及以上版本支持)
*
* @param conversationIDList 会话唯一 ID 列表C2C 单聊组成方式为: "c2c_userID":群聊组成方式为: "group_groupID")
* @param clearMessage 是否删除会话中的消息;设置为 false 时,保留会话消息;设置为 true 时,本地和服务器的消息会一起删除,并且不可恢复
*
* @note 请注意: 每次最多支持删除 100 个会话
*/
virtual void DeleteConversationList(const V2TIMStringVector& conversationIDList, bool clearMessage,
V2TIMValueCallback<V2TIMConversationOperationResultVector>* callback) = 0;
/**
* 1.9 设置会话草稿
*
* @param conversationID 会话唯一 IDC2C 会话唯一 IDC2C 单聊组成方式为: "c2c_userID"
* 群聊组成方式为: "group_groupID")
*
* 只在本地保存,不会存储 Server不能多端同步程序卸载重装会失效。
*
* @param draftText 草稿内容, 空字符串表示 则表示取消草稿
*/
virtual void SetConversationDraft(const V2TIMString& conversationID,
const V2TIMString& draftText, V2TIMCallback* callback) = 0;
/**
* 1.10 设置会话自定义数据(从 6.5 版本开始支持)
*
* @param customData 自定义数据,最大支持 256 bytes
*/
virtual void SetConversationCustomData(const V2TIMStringVector &conversationIDList, const V2TIMBuffer &customData,
V2TIMValueCallback<V2TIMConversationOperationResultVector>* callback) = 0;
/**
* 1.11 设置会话置顶5.3.425 及以上版本支持)
*
* @param conversationID 会话唯一 IDC2C 单聊组成方式为: "c2c_userID"
* 群聊组成方式为: "group_groupID")
*
* @param isPinned 是否置顶
*/
virtual void PinConversation(const V2TIMString& conversationID, bool isPinned,
V2TIMCallback* callback) = 0;
/**
* 1.12 标记会话(从 6.5 版本开始支持,需要您购买旗舰版套餐)
*
* @param conversationIDList 会话列表
* @param markType 会话标记类型,取值详见 @V2TIMConversationMarkType。
* @param enableMark YES设置标记 NO取消标记
*
* 如果已有标记不能满足您的需求,您可以自定义扩展标记,扩展标记需要满足以下两个条件:
* 1、扩展标记值不能和 V2TIMConversationMarkType 已有的标记值冲突
* 2、扩展标记值必须是 0x1LL << n 的位移值32 <= n < 64即 n 必须大于等于 32 并且小于 64比如扩展标记值 0x1LL << 32 表示 "Windows 在线"
*
* @note:扩展标记值不能设置为 0x1 << 32要设置为 0x1LL << 32明确告诉编译器是 64 位的整型常量。
*
*/
virtual void MarkConversation(const V2TIMStringVector &conversationIDList, uint64_t markType, bool enableMark,
V2TIMValueCallback<V2TIMConversationOperationResultVector>* callback) = 0;
/**
* 1.13 获取全部会话的未读总数5.3.425 及以上版本支持)
* @note
* - 调用该接口以后任意会话的未读数发生变化时SDK 都会给您抛 OnTotalUnreadMessageCountChanged 回调。
* - 未读总数会减去设置为免打扰的会话的未读数,即消息接收选项设置为
* V2TIM_NOT_RECEIVE_MESSAGE 或 V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE 的会话。
*/
virtual void GetTotalUnreadMessageCount(V2TIMValueCallback<uint64_t>* callback) = 0;
/**
* 1.14 获取按会话 filter 过滤的未读总数7.0 及以上版本支持)
*
* @param filter 会话 filter
*
* @note
* - 未读总数会减去设置为免打扰的会话的未读数,即消息接收选项设置为
* V2TIM_NOT_RECEIVE_MESSAGE 或 V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE 的会话。
*/
virtual void GetUnreadMessageCountByFilter(const V2TIMConversationListFilter &filter,
V2TIMValueCallback<uint64_t>* callback) = 0;
/**
* 1.15 注册监听指定 filter 的会话未读总数变化7.0 及以上版本支持)
*
* @param filter 会话 filter
*
* @note
* - 当您调用这个接口以后,该 filter 下的未读数发生变化时SDK 会给您抛 OnUnreadMessageCountChangedByFilter 回调。
*/
virtual void SubscribeUnreadMessageCountByFilter(const V2TIMConversationListFilter &filter) = 0;
/**
* 1.16 取消监听指定 filter 的会话未读总数变化7.0 及以上版本支持)
*
* @param filter 会话 filter
*
*/
virtual void UnsubscribeUnreadMessageCountByFilter(const V2TIMConversationListFilter &filter) = 0;
/** 1.17 清理会话的未读消息计数7.1 及以上版本支持)
*
* @param conversationID 会话唯一 ID C2C 单聊组成方式:[NSString stringWithFormat:@"c2c_%@",userID];群聊组成方式为 [NSString stringWithFormat:@"group_%@",groupID]
* @param cleanTimestamp 清理时间戳,仅对单聊会话生效,指定清理哪一个 timestamp 之前的未读消息计数;当传入为 0 时,对应会话所有的未读消息将被清理,会话的未读数会清 0
* @param cleanSequence 清理 sequence仅对群聊会话生效指定清理哪一个 sequence 之前的未读消息计数;当传入为 0 时,对应会话所有的未读消息将被清理,会话的未读数会清 0
*
* @note
* - 当您想清理所有单聊会话的未读消息计数conversationID 请传入 "c2c",即不指定具体的 userID
* - 当您想清理所有群聊会话的未读消息计数conversationID 请传入 "group",即不指定具体的 groupID
* - 当您想清理所有会话的未读消息计数conversationID 请传入 ""
* - 该接口调用成功后SDK 会通过 onConversationChanged 回调将对应会话的最新未读数通知给您。
*/
virtual void CleanConversationUnreadMessageCount(const V2TIMString& conversationID, uint64_t cleanTimestamp, uint64_t cleanSequence, V2TIMCallback* callback) = 0;
/////////////////////////////////////////////////////////////////////////////////
//
// 会话分组相关接口 (从 6.5 版本开始支持,需要您购买旗舰版套餐)
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 2.1 创建会话分组
*
* @param groupName 分组名(必填参数,长度要 > 0最大支持 32 bytes
* @param conversationIDList 会话 ID 列表(必填参数,不能为空)
*
* @note 会话分组最大支持 20 个,不再使用的分组请及时删除
*/
virtual void CreateConversationGroup(const V2TIMString &groupName, const V2TIMStringVector &conversationIDList,
V2TIMValueCallback<V2TIMConversationOperationResultVector>* callback) = 0;
/**
* 2.2 获取会话分组列表
*/
virtual void GetConversationGroupList(V2TIMValueCallback<V2TIMStringVector>* callback) = 0;
/**
* 2.3 删除会话分组
*/
virtual void DeleteConversationGroup(const V2TIMString &groupName, V2TIMCallback* callback) = 0;
/**
* 2.4 重命名会话分组
*
*/
virtual void RenameConversationGroup(const V2TIMString &oldName, const V2TIMString &newName,
V2TIMCallback* callback) = 0;
/**
* 2.5 添加会话到一个会话分组
*/
virtual void AddConversationsToGroup(const V2TIMString &groupName, const V2TIMStringVector &conversationIDList,
V2TIMValueCallback<V2TIMConversationOperationResultVector>* callback) = 0;
/**
* 2.6 从一个会话分组中删除会话
*/
virtual void DeleteConversationsFromGroup(const V2TIMString &groupName, const V2TIMStringVector &conversationIDList,
V2TIMValueCallback<V2TIMConversationOperationResultVector>* callback) = 0;
};
#endif // __V2TIM_CONVERSATION_MANAGER_H__

View File

@@ -0,0 +1,198 @@
// Copyright (c) 2021 Tencent. All rights reserved.
#ifndef __V2TIM_DEFINE_H__
#define __V2TIM_DEFINE_H__
/////////////////////////////////////////////////////////////////////////////////
//
// (一)整型定义
//
/////////////////////////////////////////////////////////////////////////////////
#ifndef _MSC_VER
// stdint.h is part of C99 but MSVC doesn't have it.
#include <stdint.h>
#endif
// define int types
#if defined(__GNUC__)
#ifndef _STDINT_H
// FreeBSD has these C99 int types defined in /sys/inttypes.h already
#ifndef _SYS_TYPES_H
typedef signed char int8_t;
typedef signed short int16_t;
typedef signed int int32_t;
typedef signed long long int64_t;
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
typedef unsigned long long uint64_t;
#else
typedef u_int8_t uint8_t;
typedef u_int16_t uint16_t;
typedef u_int32_t uint32_t;
typedef u_int64_t uint64_t;
#endif // _SYS_TYPES_H
#endif // _STDINT_H
#elif defined(_MSC_VER)
typedef signed char int8_t;
typedef signed short int16_t;
typedef signed int int32_t;
typedef signed __int64 int64_t;
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
typedef unsigned __int64 uint64_t;
/* the following definitions are from VS2010's stdint.h */
#ifndef _INTPTR_T_DEFINED
#define _INTPTR_T_DEFINED
#ifdef _WIN64
typedef __int64 intptr_t;
#else /* _WIN64 */
typedef int intptr_t;
#endif /* _WIN64 */
#endif /* _INTPTR_T_DEFINED */
#ifndef _UINTPTR_T_DEFINED
#define _UINTPTR_T_DEFINED
#ifdef _WIN64
typedef unsigned __int64 uintptr_t;
#else /* _WIN64 */
typedef unsigned int uintptr_t;
#endif /* _WIN64 */
#endif /* _UINTPTR_T_DEFINED */
#endif // COMPILER_GCC/COMPILER_MSVC
/////////////////////////////////////////////////////////////////////////////////
//
// (二)导出宏定义
//
/////////////////////////////////////////////////////////////////////////////////
#ifdef _WIN32
#if defined(TIM_EXPORT)
#define TIM_API __declspec(dllexport)
#else
#define TIM_API __declspec(dllimport)
#endif
#else
#define TIM_API __attribute__((visibility("default")))
#endif
/////////////////////////////////////////////////////////////////////////////////
//
// Vector 宏定义
//
/////////////////////////////////////////////////////////////////////////////////
#define DEFINE_VECTOR(class_name) \
class TX##class_name##VectorIMPL; \
\
class TIM_API TX##class_name##Vector { \
public: \
TX##class_name##Vector(); \
\
TX##class_name##Vector(const TX##class_name##Vector& vect); \
\
virtual ~TX##class_name##Vector(); \
\
void PushBack(class_name const& obj); \
\
void PopBack(); \
\
class_name& operator[](size_t index); \
\
class_name const& operator[](size_t index) const; \
\
TX##class_name##Vector& operator=(const TX##class_name##Vector& vec); \
\
size_t Size() const; \
\
bool Empty() const; \
\
void Clear(); \
\
void Erase(size_t index); \
\
private: \
TX##class_name##VectorIMPL* impl_; \
};
#define DEFINE_POINT_VECTOR(class_name) \
class TXP##class_name##VectorIMPL; \
\
class TIM_API TXP##class_name##Vector { \
public: \
TXP##class_name##Vector(); \
\
TXP##class_name##Vector(const TXP##class_name##Vector& vect); \
\
virtual ~TXP##class_name##Vector(); \
\
void PushBack(class_name* const& obj); \
\
void PopBack(); \
\
class_name*& operator[](size_t index); \
\
class_name* const& operator[](size_t index) const; \
\
TXP##class_name##Vector& operator=(const TXP##class_name##Vector& vec); \
\
size_t Size() const; \
\
bool Empty() const; \
\
void Clear(); \
\
void Erase(size_t index); \
\
private: \
TXP##class_name##VectorIMPL* impl_; \
};
/////////////////////////////////////////////////////////////////////////////////
//
// Map 宏定义
//
/////////////////////////////////////////////////////////////////////////////////
#define DEFINE_MAP(class_key, class_value) \
class TX##class_key##To##class_value##MapIMPL; \
\
class TIM_API TX##class_key##To##class_value##Map { \
public: \
TX##class_key##To##class_value##Map(); \
\
TX##class_key##To##class_value##Map(const TX##class_key##To##class_value##Map& map); \
\
virtual ~TX##class_key##To##class_value##Map(); \
\
bool Insert(const class_key& key, const class_value& value); \
\
void Erase(const class_key& key); \
\
size_t Count(const class_key& key) const; \
\
size_t Size() const; \
\
class_value Get(const class_key& key) const; \
\
class_value& operator[](const class_key& key); \
\
TX##class_key##To##class_value##Map& operator=( \
const TX##class_key##To##class_value##Map& map); \
\
const class_key##Vector AllKeys() const; \
\
private: \
TX##class_key##To##class_value##MapIMPL* impl_; \
};
#endif /* __V2TIM_DEFINE_H__ */

View File

@@ -0,0 +1,356 @@
// Copyright (c) 2021 Tencent. All rights reserved.
#ifndef __V2TIM_ERROR_CODE_H__
#define __V2TIM_ERROR_CODE_H__
enum V2TIMErrorCode {
// ///////////////////////////////////////////////////////////////////////////////
//
// IM SDK 的错误码
//
// ///////////////////////////////////////////////////////////////////////////////
// 通用错误码
ERR_SUCC = 0, // 无错误。
ERR_IN_PROGESS = 6015, // 执行中,请做好接口调用控制,例如,第一次初始化操作在回调前,后续的初始化操作会返回该错误码。
ERR_INVALID_PARAMETERS = 6017, // 参数无效,请检查参数是否符合要求,具体可查看错误信息进一步定义哪个字段。
ERR_IO_OPERATION_FAILED = 6022, // 操作本地 IO 错误,检查是否有读写权限,磁盘是否已满。
ERR_INVALID_JSON = 6027, // 错误的 JSON 格式,请检查参数是否符合接口的要求,具体可查看错误信息进一步定义哪个字段。
ERR_OUT_OF_MEMORY = 6028, // 内存不足可能存在内存泄漏iOS 平台使用 Instrument 工具Android 平台使用 Profiler 工具,分析出什么地方的内存占用高。
ERR_PARSE_RESPONSE_FAILED = 6001, // PB 解析失败,内部错误。
ERR_SERIALIZE_REQ_FAILED = 6002, // PB 序列化失败,内部错误。
ERR_SDK_NOT_INITIALIZED = 6013, // IM SDK 未初始化,初始化成功回调之后重试。
ERR_LOADMSG_FAILED = 6005, // 加载本地数据库操作失败,可能存储文件有损坏。
ERR_DATABASE_OPERATE_FAILED = 6019, // 本地数据库操作失败,可能是部分目录无权限或者数据库文件已损坏。
ERR_SDK_COMM_CROSS_THREAD = 7001, // 跨线程错误,不能在跨越不同线程中执行,内部错误。
ERR_SDK_COMM_TINYID_EMPTY = 7002, // TinyId 为空,内部错误。
ERR_SDK_COMM_INVALID_IDENTIFIER = 7003, // Identifier 非法,必须不为空,要求可打印 ASCII 字符0x20-0x7e长度不超过32字节。
ERR_SDK_COMM_FILE_NOT_FOUND = 7004, // 文件不存在,请检查文件路径是否正确。
ERR_SDK_COMM_FILE_TOO_LARGE = 7005, // 文件大小超出了限制语音、图片最大限制是28MB视频、文件最大限制 100M
ERR_SDK_COMM_FILE_SIZE_EMPTY = 7006, // 空文件要求文件大小不是0字节如果上传图片、语音、视频或文件请检查文件是否正确生成。
ERR_SDK_COMM_FILE_OPEN_FAILED = 7007, // 文件打开失败,请检查文件是否存在,或者已被独占打开,引起 SDK 打开失败。
ERR_SDK_COMM_API_CALL_FREQUENCY_LIMIT = 7008, // API 调用超频
ERR_SDK_COMM_INTERRUPT = 7009, // 正在执行时被终止,例如正在登录时,调用 unInit 停止使用 SDK 。
ERR_SDK_COMM_DATABASE_FAILURE = 7010, // database 操作失败
ERR_SDK_COMM_DATABASE_NOTFOUND = 7011, // database 查询的数据不存在
ERR_SDK_INTERNAL_ERROR = 7012, // SDK 内部不应该出现的内部错误
ERR_SDK_INTERFACE_NOT_SUPPORT = 7013, // 套餐包不支持该接口的使用,请升级到旗舰版套餐
// 帐号错误码
ERR_SDK_NOT_LOGGED_IN = 6014, // IM SDK 未登录,请先登录,成功回调之后重试,或者已被踢下线,可使用 TIMManager getLoginUser 检查当前是否在线。
ERR_NO_PREVIOUS_LOGIN = 6026, // 自动登录时,并没有登录过该用户,这时候请调用 login 接口重新登录。
ERR_USER_SIG_EXPIRED = 6206, // UserSig 过期,请重新获取有效的 UserSig 后再重新登录。
ERR_LOGIN_KICKED_OFF_BY_OTHER = 6208, // 其他终端登录同一个帐号,引起已登录的帐号被踢,需重新登录。
ERR_SDK_ACCOUNT_LOGIN_IN_PROCESS = 7501, // 登录正在执行中,例如,第一次 login 或 autoLogin 操作在回调前,后续的 login 或 autoLogin 操作会返回该错误码。
ERR_SDK_ACCOUNT_LOGOUT_IN_PROCESS = 7502, // 登出正在执行中,例如,第一次 logout 操作在回调前,后续的 logout 操作会返回该错误码。
ERR_SDK_ACCOUNT_TLS_INIT_FAILED = 7503, // TLS SDK 初始化失败,内部错误。
ERR_SDK_ACCOUNT_TLS_NOT_INITIALIZED = 7504, // TLS SDK 未初始化,内部错误。
ERR_SDK_ACCOUNT_TLS_TRANSPKG_ERROR = 7505, // TLS SDK TRANS 包格式错误,内部错误。
ERR_SDK_ACCOUNT_TLS_DECRYPT_FAILED = 7506, // TLS SDK 解密失败,内部错误。
ERR_SDK_ACCOUNT_TLS_REQUEST_FAILED = 7507, // TLS SDK 请求失败,内部错误。
ERR_SDK_ACCOUNT_TLS_REQUEST_TIMEOUT = 7508, // TLS SDK 请求超时,内部错误。
// 消息错误码
ERR_INVALID_CONVERSATION = 6004, // 会话无效getConversation 时检查是否已经登录,如未登录获取会话,会有此错误码返回。
ERR_FILE_TRANS_AUTH_FAILED = 6006, // 文件传输鉴权失败。
ERR_FILE_TRANS_NO_SERVER = 6007, // 文件传输获取 Server 列表失败。
ERR_FILE_TRANS_UPLOAD_FAILED = 6008, // 文件传输上传失败,请检查网络是否连接。
ERR_IMAGE_UPLOAD_FAILED_NOTIMAGE = 6031, // 文件传输上传失败,请检查上传的图片是否能够正常打开。
ERR_FILE_TRANS_DOWNLOAD_FAILED = 6009, // 文件传输下载失败请检查网络或者文件、语音是否已经过期目前资源文件存储7天。
ERR_HTTP_REQ_FAILED = 6010, // HTTP 请求失败,请检查 URL 地址是否合法,可在网页浏览器尝试访问该 URL 地址。
ERR_INVALID_MSG_ELEM = 6016, // IM SDK 无效消息 elem具体可查看错误信息进一步定义哪个字段。
ERR_INVALID_SDK_OBJECT = 6021, // 无效的对象,例如用户自己生成 TIMImage 对象,或内部赋值错误导致对象无效。
ERR_SDK_MSG_BODY_SIZE_LIMIT = 8001, // 消息长度超出限制消息长度不要超过12k消息长度是各个 elem 长度的总和elem 长度是所有 elem 字段的长度总和。
ERR_SDK_MSG_KEY_REQ_DIFFER_RSP = 8002, // 消息 KEY 错误,内部错误,网络请求包的 KEY 和 回复包的不一致。
ERR_SDK_IMAGE_CONVERT_ERROR = 8003, // 万象优图 HTTP 请求失败。
ERR_SDK_IMAGE_CI_BLOCK = 8004, // 万象优图因为鉴黄等原因转缩略图失败。
ERR_MERGER_MSG_LAYERS_OVER_LIMIT = 8005, // 合并消息嵌套层数超过上限(上限 100 层)。
ERR_SDK_MSG_MODIFY_CONFLICT = 8006, // 消息修改冲突,您请求修改的消息已经被其他人修改。
ERR_SDK_SIGNALING_INVALID_INVITE_ID = 8010, // 信令请求 ID 无效或已经被处理过。(上层接口使用,底层为了不重复也增加一份)
ERR_SDK_SIGNALING_NO_PERMISSION = 8011, // 信令请求无权限,比如取消非自己发起的邀请。(上层接口使用,底层为了不重复也增加一份)
ERR_SDK_SIGNALING_ALREADY_EXISTS = 8012, // 信令邀请已存在。
ERR_SDK_INVALID_CANCEL_MESSAGE = 8020, // 取消消息时,取消的消息不存在,或者已经发送成功。取消失败
ERR_SDK_SEND_MESSAGE_FAILED_WITH_CANCEL = 8021, // 消息发送失败,因为该消息已被取消
// 群组错误码
ERR_SDK_GROUP_INVALID_ID = 8501, // 群组 ID 非法,自定义群组 ID 必须为可打印 ASCII 字符0x20-0x7e最长48个字节且前缀不能为 @TGS#(避免与服务端默认分配的群组 ID 混淆)。
ERR_SDK_GROUP_INVALID_NAME = 8502, // 群名称非法群名称最长30字节字符编码必须是 UTF-8 ,如果包含中文,可能用多个字节表示一个中文字符,请注意检查字符串的字节长度。
ERR_SDK_GROUP_INVALID_INTRODUCTION = 8503, // 群简介非法群简介最长240字节字符编码必须是 UTF-8 ,如果包含中文,可能用多个字节表示一个中文字符,请注意检查字符串的字节长度。
ERR_SDK_GROUP_INVALID_NOTIFICATION = 8504, // 群公告非法群公告最长300字节字符编码必须是 UTF-8 ,如果包含中文,可能用多个字节表示一个中文字符,请注意检查字符串的字节长度。
ERR_SDK_GROUP_INVALID_FACE_URL = 8505, // 群头像 URL 非法,群头像 URL 最长100字节可在网页浏览器尝试访问该 URL 地址。
ERR_SDK_GROUP_INVALID_NAME_CARD = 8506, // 群名片非法群名片最长50字节字符编码必须是 UTF-8 ,如果包含中文,可能用多个字节表示一个中文字符,请注意检查字符串的字节长度。
ERR_SDK_GROUP_MEMBER_COUNT_LIMIT = 8507, // 超过群组成员数的限制在创建群和邀请成员时指定的成员数超出限制最大群成员数量私有群是200人公开群是2000人聊天室是10000人音视频聊天室和在线成员广播大群无限制。
ERR_SDK_GROUP_JOIN_PRIVATE_GROUP_DENY = 8508, // 不允许申请加入 Private 群组,任意群成员可邀请入群,且无需被邀请人同意。
ERR_SDK_GROUP_INVITE_SUPER_DENY = 8509, // 不允许邀请角色为群主的成员,请检查角色字段是否填写正确。
ERR_SDK_GROUP_INVITE_NO_MEMBER = 8510, // 不允许邀请0个成员请检查成员字段是否填写正确。
ERR_SDK_GROUP_ATTR_FREQUENCY_LIMIT = 8511, // 群属性接口操作限制增删改接口后台限制1秒5次查接口 SDK 限制5秒20次。
ERR_SDK_GROUP_GET_ONLINE_MEMBER_COUNT_LIMIT = 8512, // 获取群在线人数接口操作限制:查接口 SDK 限制60秒1次。
ERR_SDK_GROUP_GET_GROUPS_INFO_LIMIT = 8513, // 获取群资料接口操作限制:查接口 SDK 限制1秒1次。
ERR_SDK_GROUP_GET_JOINED_GROUP_LIMIT = 8514, // 获取加入群列表接口操作限制:查接口 SDK 限制1秒1次。
// 关系链错误码
ERR_SDK_FRIENDSHIP_INVALID_PROFILE_KEY = 9001, // 资料字段非法资料支持标配字段及自定义字段其中自定义字段的关键字必须是英文字母且长度不得超过8字节自定义字段的值最长不能超过500字节。
ERR_SDK_FRIENDSHIP_INVALID_ADD_REMARK = 9002, // 备注字段非法最大96字节字符编码必须是 UTF-8 ,如果包含中文,可能用多个字节表示一个中文字符,请注意检查字符串的字节长度。
ERR_SDK_FRIENDSHIP_INVALID_ADD_WORDING = 9003, // 请求添加好友的请求说明字段非法最大120字节字符编码必须是 UTF-8 ,如果包含中文,可能用多个字节表示一个中文字符,请注意检查字符串的字节长度。
ERR_SDK_FRIENDSHIP_INVALID_ADD_SOURCE = 9004, // 请求添加好友的添加来源字段非法来源需要添加“AddSource_Type_”前缀。
ERR_SDK_FRIENDSHIP_FRIEND_GROUP_EMPTY = 9005, // 好友分组字段非法必须不为空每个分组的名称最长30字节字符编码必须是 UTF-8 ,如果包含中文,可能用多个字节表示一个中文字符,请注意检查字符串的字节长度。
ERR_SDK_FRIENDSHIP_EXCEED_THE_LIMIT = 9006, // 超过数量限制
// 网络错误码
ERR_SDK_NET_ENCODE_FAILED = 9501, // 网络加密失败,内部错误。
ERR_SDK_NET_DECODE_FAILED = 9502, // 网络数据解密失败,内部错误。
ERR_SDK_NET_AUTH_INVALID = 9503, // 未完成鉴权,可能登录未完成,请在登录完成后再操作。
ERR_SDK_NET_COMPRESS_FAILED = 9504, // 数据包压缩失败,内部错误。
ERR_SDK_NET_UNCOMPRESS_FAILED = 9505, // 数据包解压失败,内部错误。
ERR_SDK_NET_FREQ_LIMIT = 9506, // 调用频率限制,最大每秒发起 5 次请求。
ERR_SDK_NET_REQ_COUNT_LIMIT = 9507, // 请求队列満超过同时请求的数量限制最大同时发起1000个请求。
ERR_SDK_NET_DISCONNECT = 9508, // 网络已断开,未建立连接,或者建立 socket 连接时,检测到无网络。
ERR_SDK_NET_ALLREADY_CONN = 9509, // 网络连接已建立,重复创建连接,内部错误。
ERR_SDK_NET_CONN_TIMEOUT = 9510, // 建立网络连接超时,请等网络恢复后重试。
ERR_SDK_NET_CONN_REFUSE = 9511, // 网络连接已被拒绝,请求过于频繁,服务端拒绝服务。
ERR_SDK_NET_NET_UNREACH = 9512, // 没有到达网络的可用路由,请等网络恢复后重试。
ERR_SDK_NET_SOCKET_NO_BUFF = 9513, // 系统中没有足够的缓冲区空间资源可用来完成调用,系统过于繁忙,内部错误。
ERR_SDK_NET_RESET_BY_PEER = 9514, // 对端重置了连接可能服务端过载SDK 内部会自动重连,请等网络连接成功 onConnSucc iOS 或 onConnected Android 回调后重试。
ERR_SDK_NET_SOCKET_INVALID = 9515, // socket 套接字无效,内部错误。
ERR_SDK_NET_HOST_GETADDRINFO_FAILED = 9516, // IP 地址解析失败,内部错误,可能是本地 imsdk_config 配置文件被损坏,读取到到 IP 地址非法。
ERR_SDK_NET_CONNECT_RESET = 9517, // 网络连接到中间节点或服务端重置引起连接失效内部错误SDK 内部会自动重连,请等网络连接成功 onConnSucc iOS 或 onConnected Android 回调后重试。
ERR_SDK_NET_WAIT_INQUEUE_TIMEOUT = 9518, // 请求包等待进入待发送队列超时,发送时网络连接建立比较慢 或 频繁断网重连时,会出现该错误,请检查网络连接是否正常。
ERR_SDK_NET_WAIT_SEND_TIMEOUT = 9519, // 请求包已进入 IM SDK 待发送队列,等待进入操作系统的网络层时超时。一般可能原因是本地网络受限/不通或本地网络与 IM SDK 后台连接不通。建议用不同的网络环境分别运行 IM SDK 来确认是否因当前网络环境问题引起。
ERR_SDK_NET_WAIT_ACK_TIMEOUT = 9520, // 请求包已由 IM SDK 待发送队列进入操作系统网络层,等待服务端回包超时。一般可能原因是本地网络受限/不通或本地网络与 IM SDK 后台连接不通。建议用不同的网络环境分别运行 IM SDK 来确认是否因当前网络环境问题引起。
ERR_SDK_NET_WAIT_SEND_REMAINING_TIMEOUT = 9521, // 请求包已进入待发送队列,部分数据已发送,等待发送剩余部分出现超时,可能上行带宽不足,请检查网络是否畅通,在回调错误时检测有联网,内部错误。
ERR_SDK_NET_PKG_SIZE_LIMIT = 9522, // 请求包长度大于限制,最大支持 1MB 。
ERR_SDK_NET_WAIT_SEND_TIMEOUT_NO_NETWORK = 9523, // 请求包已进入待发送队列,等待进入系统的网络 buffer 超时,数据包较多 或 发送线程处理不过来,在回调错误码时检测到没有联网。
ERR_SDK_NET_WAIT_ACK_TIMEOUT_NO_NETWORK = 9524, // 请求包已进入系统的网络 buffer ,等待服务端回包超时,可能请求包没离开终端设备、中间路由丢弃、服务端意外丢包或回包被系统网络层丢弃,在回调错误码时检测到没有联网。
ERR_SDK_NET_SEND_REMAINING_TIMEOUT_NO_NETWORK = 9525, // 请求包已进入待发送队列,部分数据已发送,等待发送剩余部分出现超时,可能上行带宽不足,请检查网络是否畅通,在回调错误码时检测到没有联网。
// ///////////////////////////////////////////////////////////////////////////////
//
// (二)服务端的错误码
//
// ///////////////////////////////////////////////////////////////////////////////
// 网络接入层的错误码
ERR_SVR_SSO_CONNECT_LIMIT = -302, // Server 的连接数量超出限制,服务端拒绝服务。
ERR_SVR_SSO_VCODE = -10000, // 下发验证码标志错误。
ERR_SVR_SSO_D2_EXPIRED = -10001, // Key 过期。Key 是根据 UserSig 生成的内部票据Key 的有效期小于或等于 UserSig 的有效期。请重新调用 V2TIMManager.getInstance().login 登录接口生成新的 Key。
ERR_SVR_SSO_A2_UP_INVALID = -10003, // Ticket 过期。Ticket 是根据 UserSig 生成的内部票据Ticket 的有效期小于或等于 UserSig 的有效期。请重新调用 V2TIMManager.getInstance().login 登录接口生成新的 Ticket。
ERR_SVR_SSO_A2_DOWN_INVALID = -10004, // 票据验证没通过或者被安全打击。请重新调用 V2TIMManager.getInstance().login 登录接口生成新的票据。
ERR_SVR_SSO_EMPTY_KEY = -10005, // 不允许空 Key。
ERR_SVR_SSO_UIN_INVALID = -10006, // Key 中的帐号和请求包头的帐号不匹配。
ERR_SVR_SSO_VCODE_TIMEOUT = -10007, // 验证码下发超时。
ERR_SVR_SSO_NO_IMEI_AND_A2 = -10008, // 需要带上 Key 和 Ticket。
ERR_SVR_SSO_COOKIE_INVALID = -10009, // Cookie 检查不匹配。
ERR_SVR_SSO_DOWN_TIP = -10101, // 下发提示语时 Key 过期。Key 是根据 UserSig 生成的内部票据Key 的有效期小于或等于 UserSig 的有效期。请重新调用 V2TIMManager.getInstance().login 登录接口生成新的 Key。
ERR_SVR_SSO_DISCONNECT = -10102, // 网络连接断开。
ERR_SVR_SSO_IDENTIFIER_INVALID = -10103, // 失效身份。
ERR_SVR_SSO_CLIENT_CLOSE = -10104, // 终端自动退出。
ERR_SVR_SSO_MSFSDK_QUIT = -10105, // MSFSDK 自动退出。
ERR_SVR_SSO_D2KEY_WRONG = -10106, // 解密失败次数超过阈值,通知终端需要重置,请重新调用 TIMManager.getInstance().login 登录接口生成新的 Key。
ERR_SVR_SSO_UNSURPPORT = -10107, // 不支持聚合,给终端返回统一的错误码。终端在该 TCP 长连接上停止聚合。
ERR_SVR_SSO_PREPAID_ARREARS = -10108, // 预付费欠费。
ERR_SVR_SSO_PACKET_WRONG = -10109, // 请求包格式错误。
ERR_SVR_SSO_APPID_BLACK_LIST = -10110, // SDKAppID 黑名单。
ERR_SVR_SSO_CMD_BLACK_LIST = -10111, // SDKAppID 设置 service cmd 黑名单。
ERR_SVR_SSO_APPID_WITHOUT_USING = -10112, // SDKAppID 停用。
ERR_SVR_SSO_FREQ_LIMIT = -10113, // 频率限制(用户),频率限制是设置针对某一个协议的每秒请求数的限制。
ERR_SVR_SSO_OVERLOAD = -10114, // 过载丢包(系统),连接的服务端处理过多请求,处理不过来,拒绝服务。
ERR_SVR_SSO_FREQUENCY_LIMIT = -20009, // 终端访问接口超频。
// 资源文件错误码
ERR_SVR_RES_NOT_FOUND = 114000, // 要发送的资源文件不存在。
ERR_SVR_RES_ACCESS_DENY = 114001, // 要发送的资源文件不允许访问。
ERR_SVR_RES_SIZE_LIMIT = 114002, // 文件大小超过限制。
ERR_SVR_RES_SEND_CANCEL = 114003, // 用户取消发送,如发送过程中登出等原因。
ERR_SVR_RES_READ_FAILED = 114004, // 读取文件内容失败。
ERR_SVR_RES_TRANSFER_TIMEOUT = 114005, // 资源文件(如图片、文件、语音、视频)传输超时,一般是网络问题导致。
ERR_SVR_RES_INVALID_PARAMETERS = 114011, // 参数非法。
ERR_SVR_RES_INVALID_FILE_MD5 = 115066, // 文件 MD5 校验失败。
ERR_SVR_RES_INVALID_PART_MD5 = 115068, // 分片 MD5 校验失败。
// 后台公共错误码
ERR_SVR_COMM_INVALID_HTTP_URL = 60002, // HTTP 解析错误 ,请检查 HTTP 请求 URL 格式。
ERR_SVR_COMM_REQ_JSON_PARSE_FAILED = 60003, // HTTP 请求 JSON 解析错误,请检查 JSON 格式。
ERR_SVR_COMM_INVALID_ACCOUNT = 60004, // 请求 URI 或 JSON 包体中 Identifier 或 UserSig 错误。
ERR_SVR_COMM_INVALID_ACCOUNT_EX = 60005, // 请求 URI 或 JSON 包体中 Identifier 或 UserSig 错误。
ERR_SVR_COMM_INVALID_SDKAPPID = 60006, // SDKAppID 失效,请核对 SDKAppID 有效性。
ERR_SVR_COMM_REST_FREQ_LIMIT = 60007, // REST 接口调用频率超过限制,请降低请求频率。
ERR_SVR_COMM_REQUEST_TIMEOUT = 60008, // 服务请求超时或 HTTP 请求格式错误,请检查并重试。
ERR_SVR_COMM_INVALID_RES = 60009, // 请求资源错误,请检查请求 URL。
ERR_SVR_COMM_ID_NOT_ADMIN = 60010, // REST API 请求的 Identifier 字段请填写 App 管理员帐号。
ERR_SVR_COMM_SDKAPPID_FREQ_LIMIT = 60011, // SDKAppID 请求频率超限,请降低请求频率。
ERR_SVR_COMM_SDKAPPID_MISS = 60012, // REST 接口需要带 SDKAppID请检查请求 URL 中的 SDKAppID。
ERR_SVR_COMM_RSP_JSON_PARSE_FAILED = 60013, // HTTP 响应包 JSON 解析错误。
ERR_SVR_COMM_EXCHANGE_ACCOUNT_TIMEUT = 60014, // 置换帐号超时。
ERR_SVR_COMM_INVALID_ID_FORMAT = 60015, // 请求包体 Identifier 类型错误,请确认 Identifier 为字符串格式。
ERR_SVR_COMM_SDKAPPID_FORBIDDEN = 60016, // SDKAppID 被禁用。
ERR_SVR_COMM_REQ_FORBIDDEN = 60017, // 请求被禁用。
ERR_SVR_COMM_REQ_FREQ_LIMIT = 60018, // 请求过于频繁,请稍后重试。
ERR_SVR_COMM_REQ_FREQ_LIMIT_EX = 60019, // 请求过于频繁,请稍后重试。
ERR_SVR_COMM_INVALID_SERVICE = 60020, // 未购买套餐包或购买的套餐包正在配置中暂未生效,请五分钟后再次尝试。
ERR_SVR_COMM_SENSITIVE_TEXT = 80001, // 文本安全打击,文本中可能包含敏感词汇。
ERR_SVR_COMM_BODY_SIZE_LIMIT = 80002, // 发消息包体过长目前支持最大12k消息包体长度请减少包体大小重试。
// 帐号错误码
ERR_SVR_ACCOUNT_USERSIG_EXPIRED = 70001, // UserSig 已过期,请重新生成 UserSig建议 UserSig 有效期不小于24小时。
ERR_SVR_ACCOUNT_USERSIG_EMPTY = 70002, // UserSig 长度为0请检查传入的 UserSig 是否正确。
ERR_SVR_ACCOUNT_USERSIG_CHECK_FAILED = 70003, // UserSig 校验失败,请确认下 UserSig 内容是否被截断,如缓冲区长度不够导致的内容截断。
ERR_SVR_ACCOUNT_USERSIG_CHECK_FAILED_EX = 70005, // UserSig 校验失败,可用工具自行验证生成的 UserSig 是否正确。
ERR_SVR_ACCOUNT_USERSIG_MISMATCH_PUBLICKEY = 70009, // 用公钥验证 UserSig 失败,请确认生成的 UserSig 使用的私钥和 SDKAppID 是否对应。
ERR_SVR_ACCOUNT_USERSIG_MISMATCH_ID = 70013, // 请求的 Identifier 与生成 UserSig 的 Identifier 不匹配。
ERR_SVR_ACCOUNT_USERSIG_MISMATCH_SDKAPPID = 70014, // 请求的 SDKAppID 与生成 UserSig 的 SDKAppID 不匹配。
ERR_SVR_ACCOUNT_USERSIG_PUBLICKEY_NOT_FOUND = 70016, // 验证 UserSig 时公钥不存在。请先登录控制台下载私钥,下载私钥的具体方法可参考 [下载签名用的私钥](https://cloud.tencent.com/document/product/269/32688#.E4.B8.8B.E8.BD.BD.E7.AD.BE.E5.90.8D.E7.94.A8.E7.9A.84.E7.A7.81.E9.92.A5) 。
ERR_SVR_ACCOUNT_SDKAPPID_NOT_FOUND = 70020, // SDKAppID 未找到,请在云通信 IM 控制台确认应用信息。
ERR_SVR_ACCOUNT_INVALID_USERSIG = 70052, // UserSig 已经失效,请重新生成,再次尝试。
ERR_SVR_ACCOUNT_NOT_FOUND = 70107, // 请求的用户帐号不存在。
ERR_SVR_ACCOUNT_SEC_RSTR = 70114, // 安全原因被限制。
ERR_SVR_ACCOUNT_INTERNAL_TIMEOUT = 70169, // 服务端内部超时,请重试。
ERR_SVR_ACCOUNT_INVALID_COUNT = 70206, // 请求中批量数量不合法。
ERR_SVR_ACCOUNT_INVALID_PARAMETERS = 70402, // 参数非法,请检查必填字段是否填充,或者字段的填充是否满足协议要求。
ERR_SVR_ACCOUNT_ADMIN_REQUIRED = 70403, // 请求需要 App 管理员权限。
ERR_SVR_ACCOUNT_FREQ_LIMIT = 70050, // 因失败且重试次数过多导致被限制,请检查 UserSig 是否正确,一分钟之后再试。
ERR_SVR_ACCOUNT_BLACKLIST = 70051, // 帐号被拉入黑名单。
ERR_SVR_ACCOUNT_COUNT_LIMIT = 70398, // 创建帐号数量超过免费体验版数量限制,请升级为专业版。
ERR_SVR_ACCOUNT_INTERNAL_ERROR = 70500, // 服务端内部错误,请重试。
ERR_SVR_ACCOUNT_USER_STATUS_DISABLED = 72001, // 用户状态能力需要登录 IM 控制台开启
// 资料错误码
ERR_SVR_PROFILE_INVALID_PARAMETERS = 40001, // 请求参数错误,请根据错误描述检查请求是否正确。
ERR_SVR_PROFILE_ACCOUNT_MISS = 40002, // 请求参数错误,没有指定需要拉取资料的用户帐号。
ERR_SVR_PROFILE_ACCOUNT_NOT_FOUND = 40003, // 请求的用户帐号不存在。
ERR_SVR_PROFILE_ADMIN_REQUIRED = 40004, // 请求需要 App 管理员权限。
ERR_SVR_PROFILE_SENSITIVE_TEXT = 40005, // 资料字段中包含敏感词。
ERR_SVR_PROFILE_INTERNAL_ERROR = 40006, // 服务端内部错误,请稍后重试。
ERR_SVR_PROFILE_READ_PERMISSION_REQUIRED = 40007, // 没有资料字段的读权限,详情可参见 [资料字段](https://cloud.tencent.com/document/product/269/1500#.E8.B5.84.E6.96.99.E5.AD.97.E6.AE.B5) 。
ERR_SVR_PROFILE_WRITE_PERMISSION_REQUIRED = 40008, // 没有资料字段的写权限,详情可参见 [资料字段](https://cloud.tencent.com/document/product/269/1500#.E8.B5.84.E6.96.99.E5.AD.97.E6.AE.B5) 。
ERR_SVR_PROFILE_TAG_NOT_FOUND = 40009, // 资料字段的 Tag 不存在。
ERR_SVR_PROFILE_SIZE_LIMIT = 40601, // 资料字段的 Value 长度超过500字节。
ERR_SVR_PROFILE_VALUE_ERROR = 40605, // 标配资料字段的 Value 错误,详情可参见 [标配资料字段](https://cloud.tencent.com/doc/product/269/1500#.E6.A0.87.E9.85.8D.E8.B5.84.E6.96.99.E5.AD.97.E6.AE.B5) 。
ERR_SVR_PROFILE_INVALID_VALUE_FORMAT = 40610, // 资料字段的 Value 类型不匹配,详情可参见 [标配资料字段](https://cloud.tencent.com/doc/product/269/1500#.E6.A0.87.E9.85.8D.E8.B5.84.E6.96.99.E5.AD.97.E6.AE.B5) 。
// 关系链错误码
ERR_SVR_FRIENDSHIP_INVALID_PARAMETERS = 30001, // 请求参数错误,请根据错误描述检查请求是否正确。
ERR_SVR_FRIENDSHIP_INVALID_SDKAPPID = 30002, // SDKAppID 不匹配。
ERR_SVR_FRIENDSHIP_ACCOUNT_NOT_FOUND = 30003, // 请求的用户帐号不存在。
ERR_SVR_FRIENDSHIP_ADMIN_REQUIRED = 30004, // 请求需要 App 管理员权限。
ERR_SVR_FRIENDSHIP_SENSITIVE_TEXT = 30005, // 关系链字段中包含敏感词。
ERR_SVR_FRIENDSHIP_INTERNAL_ERROR = 30006, // 服务端内部错误,请重试。
ERR_SVR_FRIENDSHIP_NET_TIMEOUT = 30007, // 网络超时,请稍后重试。
ERR_SVR_FRIENDSHIP_WRITE_CONFLICT = 30008, // 并发写导致写冲突,建议使用批量方式。
ERR_SVR_FRIENDSHIP_ADD_FRIEND_DENY = 30009, // 后台禁止该用户发起加好友请求。
ERR_SVR_FRIENDSHIP_COUNT_LIMIT = 30010, // 自己的好友数已达系统上限。
ERR_SVR_FRIENDSHIP_GROUP_COUNT_LIMIT = 30011, // 分组已达系统上限。
ERR_SVR_FRIENDSHIP_PENDENCY_LIMIT = 30012, // 未决数已达系统上限。
ERR_SVR_FRIENDSHIP_BLACKLIST_LIMIT = 30013, // 黑名单数已达系统上限。
ERR_SVR_FRIENDSHIP_PEER_FRIEND_LIMIT = 30014, // 对方的好友数已达系统上限。
ERR_SVR_FRIENDSHIP_IN_SELF_BLACKLIST = 30515, // 请求添加好友时,对方在自己的黑名单中,不允许加好友。
ERR_SVR_FRIENDSHIP_ALLOW_TYPE_DENY_ANY = 30516, // 请求添加好友时,对方的加好友验证方式是不允许任何人添加自己为好友。
ERR_SVR_FRIENDSHIP_IN_PEER_BLACKLIST = 30525, // 请求添加好友时,自己在对方的黑名单中,不允许加好友。
ERR_SVR_FRIENDSHIP_ALLOW_TYPE_NEED_CONFIRM = 30539, // A 请求加 B 为好友B 的加好友验证方式被设置为“AllowType_Type_NeedConfirm”这时 A 与 B 之间只能形成未决关系,该返回码用于标识加未决成功,以便与加好友成功的返回码区分开,调用方可以捕捉该错误给用户一个合理的提示。
ERR_SVR_FRIENDSHIP_ADD_FRIEND_SEC_RSTR = 30540, // 添加好友请求被安全策略打击,请勿频繁发起添加好友请求。
ERR_SVR_FRIENDSHIP_PENDENCY_NOT_FOUND = 30614, // 请求的未决不存在。
ERR_SVR_FRIENDSHIP_DEL_NONFRIEND = 31704, // 与请求删除的帐号之间不存在好友关系。
ERR_SVR_FRIENDSHIP_DEL_FRIEND_SEC_RSTR = 31707, // 删除好友请求被安全策略打击,请勿频繁发起删除好友请求。
ERR_SVR_FRIENDSHIP_ACCOUNT_NOT_FOUND_EX = 31804, // 请求的用户帐号不存在。
// 最近联系人错误码
ERR_SVR_CONV_ACCOUNT_NOT_FOUND = 50001, // 请求的用户帐号不存在。
ERR_SVR_CONV_INVALID_PARAMETERS = 50002, // 请求参数错误,请根据错误描述检查请求是否正确。
ERR_SVR_CONV_ADMIN_REQUIRED = 50003, // 请求需要 App 管理员权限。
ERR_SVR_CONV_INTERNAL_ERROR = 50004, // 服务端内部错误,请重试。
ERR_SVR_CONV_NET_TIMEOUT = 50005, // 网络超时,请稍后重试。
ERR_SVR_CONV_CONV_MARK_REQ_COUNT_EXCEED_LIMIT = 51006, //< 一次标记、分组、设置自定义数据的会话数超过了上限(最大支持 100 个)
ERR_SVR_CONV_CONV_MARK_OPERATE_FAILED = 51007, //< Group 会话操作异常Server 内部错误或 Group 已经解散
ERR_SVR_CONV_CONV_MARK_TOTAL_COUNT_EXCEED_LIMIT = 51008, //< 标记、分组、设置自定义数据的总会话数超过了上限(最大支持 1000 个)
ERR_SVR_CONV_CONV_GROUP_NOT_EXIST = 51009, //< 会话分组不存在
ERR_SVR_CONV_CONV_GROUP_TOTAL_COUNT_EXCEED_LIMIT = 51010, //< 会话分组数超过了上限(最大支持 20 个)
ERR_SVR_CONV_CONV_GROUP_NAME_EXCEED_LENGTH = 51011, //< 会话分组名字节数超过了上限(最大支持 32 字节)
// 消息错误码
ERR_SVR_MSG_PKG_PARSE_FAILED = 20001, // 请求包非法,请检查发送方和接收方帐号是否存在。
ERR_SVR_MSG_INTERNAL_AUTH_FAILED = 20002, // 内部鉴权失败。
ERR_SVR_MSG_INVALID_ID = 20003, // Identifier 无效或者 Identifier 未导入云通信 IM。
ERR_SVR_MSG_NET_ERROR = 20004, // 网络异常,请重试。
ERR_SVR_MSG_INTERNAL_ERROR1 = 20005, // 服务端内部错误,请重试。
ERR_SVR_MSG_PUSH_DENY = 20006, // 触发发送单聊消息之前回调App 后台返回禁止下发该消息。
ERR_SVR_MSG_IN_PEER_BLACKLIST = 20007, // 发送单聊消息,被对方拉黑,禁止发送。
ERR_SVR_MSG_BOTH_NOT_FRIEND = 20009, // 消息发送双方互相不是好友,禁止发送(配置单聊消息校验好友关系才会出现)。
ERR_SVR_MSG_NOT_PEER_FRIEND = 20010, // 发送单聊消息,自己不是对方的好友(单向关系),禁止发送。
ERR_SVR_MSG_NOT_SELF_FRIEND = 20011, // 发送单聊消息,对方不是自己的好友(单向关系),禁止发送。
ERR_SVR_MSG_SHUTUP_DENY = 20012, // 因禁言,禁止发送消息。
ERR_SVR_MSG_REVOKE_TIME_LIMIT = 20016, // 消息撤回超过了时间限制默认2分钟
ERR_SVR_MSG_DEL_RAMBLE_INTERNAL_ERROR = 20018, // 删除漫游内部错误。
ERR_SVR_MSG_EXTENSION_CONFLICT = 23001, // 消息扩展操作冲突。
ERR_SVR_MSG_EXTENSION_NOT_EXIST = 23004, // 删除的消息扩展不存在。
ERR_SVR_MSG_JSON_PARSE_FAILED = 90001, // JSON 格式解析失败,请检查请求包是否符合 JSON 规范。
ERR_SVR_MSG_INVALID_JSON_BODY_FORMAT = 90002, // JSON 格式请求包中 MsgBody 不符合消息格式描述,或者 MsgBody 不是 Array 类型,请参考 [TIMMsgElement 对象](https://cloud.tencent.com/document/product/269/2720#.E6.B6.88.E6.81.AF.E5.85.83.E7.B4.A0timmsgelement) 的定义。
ERR_SVR_MSG_INVALID_TO_ACCOUNT = 90003, // JSON 格式请求包体中缺少 To_Account 字段或者 To_Account 字段不是 Integer 类型
ERR_SVR_MSG_INVALID_RAND = 90005, // JSON 格式请求包体中缺少 MsgRandom 字段或者 MsgRandom 字段不是 Integer 类型
ERR_SVR_MSG_INVALID_TIMESTAMP = 90006, // JSON 格式请求包体中缺少 MsgTimeStamp 字段或者 MsgTimeStamp 字段不是 Integer 类型
ERR_SVR_MSG_BODY_NOT_ARRAY = 90007, // JSON 格式请求包体中 MsgBody 类型不是 Array 类型,请将其修改为 Array 类型
ERR_SVR_MSG_ADMIN_REQUIRED = 90009, // 请求需要 App 管理员权限。
ERR_SVR_MSG_INVALID_JSON_FORMAT = 90010, // JSON 格式请求包不符合消息格式描述,请参考 [TIMMsgElement 对象](https://cloud.tencent.com/document/product/269/2720#.E6.B6.88.E6.81.AF.E5.85.83.E7.B4.A0timmsgelement) 的定义。
ERR_SVR_MSG_TO_ACCOUNT_COUNT_LIMIT = 90011, // 批量发消息目标帐号超过500请减少 To_Account 中目标帐号数量。
ERR_SVR_MSG_TO_ACCOUNT_NOT_FOUND = 90012, // To_Account 没有注册或不存在,请确认 To_Account 是否导入云通信 IM 或者是否拼写错误。
ERR_SVR_MSG_TIME_LIMIT = 90026, // 消息离线存储时间错误最多不能超过7天
ERR_SVR_MSG_INVALID_SYNCOTHERMACHINE = 90031, // JSON 格式请求包体中 SyncOtherMachine 字段不是 Integer 类型
ERR_SVR_MSG_INVALID_MSGLIFETIME = 90044, // JSON 格式请求包体中 MsgLifeTime 字段不是 Integer 类型
ERR_SVR_MSG_ACCOUNT_NOT_FOUND = 90048, // 请求的用户帐号不存在。
ERR_SVR_MSG_INTERNAL_ERROR2 = 90994, // 服务内部错误,请重试。
ERR_SVR_MSG_INTERNAL_ERROR3 = 90995, // 服务内部错误,请重试。
ERR_SVR_MSG_INTERNAL_ERROR4 = 91000, // 服务内部错误,请重试。
ERR_SVR_MSG_INTERNAL_ERROR5 = 90992, // 服务内部错误,请重试;如果所有请求都返回该错误码,且 App 配置了第三方回调,请检查 App 服务端是否正常向云通信 IM 后台服务端返回回调结果。
ERR_SVR_MSG_BODY_SIZE_LIMIT = 93000, // JSON 数据包超长消息包体请不要超过12k。
ERR_SVR_MSG_LONGPOLLING_COUNT_LIMIT = 91101, // Web 端长轮询被踢Web 端同时在线实例个数超出限制)。
// 120001 - 130000, // 单聊第三方回调返回的自定义错误码。
// 群组错误码
ERR_SVR_GROUP_INTERNAL_ERROR = 10002, // 服务端内部错误,请重试。
ERR_SVR_GROUP_API_NAME_ERROR = 10003, // 请求中的接口名称错误,请核对接口名称并重试。
ERR_SVR_GROUP_INVALID_PARAMETERS = 10004, // 参数非法,请根据错误描述检查请求是否正确。
ERR_SVR_GROUP_ACOUNT_COUNT_LIMIT = 10005, // 请求包体中携带的帐号数量过多。
ERR_SVR_GROUP_FREQ_LIMIT = 10006, // 操作频率限制,请尝试降低调用的频率。
ERR_SVR_GROUP_PERMISSION_DENY = 10007, // 操作权限不足,比如 Public 群组中普通成员尝试执行踢人操作,但只有 App 管理员才有权限。
ERR_SVR_GROUP_INVALID_REQ = 10008, // 请求非法,可能是请求中携带的签名信息验证不正确,请再次尝试。
ERR_SVR_GROUP_SUPER_NOT_ALLOW_QUIT = 10009, // 该群不允许群主主动退出。
ERR_SVR_GROUP_NOT_FOUND = 10010, // 群组不存在,或者曾经存在过,但是目前已经被解散。
ERR_SVR_GROUP_JSON_PARSE_FAILED = 10011, // 解析 JSON 包体失败,请检查包体的格式是否符合 JSON 格式。
ERR_SVR_GROUP_INVALID_ID = 10012, // 发起操作的 Identifier 非法,请检查发起操作的用户 Identifier 是否填写正确。
ERR_SVR_GROUP_ALLREADY_MEMBER = 10013, // 被邀请加入的用户已经是群成员。
ERR_SVR_GROUP_FULL_MEMBER_COUNT = 10014, // 群已满员,无法将请求中的用户加入群组,如果是批量加人,可以尝试减少加入用户的数量。
ERR_SVR_GROUP_INVALID_GROUPID = 10015, // 群组 ID 非法,请检查群组 ID 是否填写正确。
ERR_SVR_GROUP_REJECT_FROM_THIRDPARTY = 10016, // App 后台通过第三方回调拒绝本次操作。
ERR_SVR_GROUP_SHUTUP_DENY = 10017, // 因被禁言而不能发送消息,请检查发送者是否被设置禁言。
ERR_SVR_GROUP_RSP_SIZE_LIMIT = 10018, // 应答包长度超过最大包长1MB请求的内容过多请尝试减少单次请求的数据量。
ERR_SVR_GROUP_ACCOUNT_NOT_FOUND = 10019, // 请求的用户帐号不存在。
ERR_SVR_GROUP_GROUPID_IN_USED = 10021, // 群组 ID 已被使用,请选择其他的群组 ID。
ERR_SVR_GROUP_SEND_MSG_FREQ_LIMIT = 10023, // 发消息的频率超限,请延长两次发消息时间的间隔。
ERR_SVR_GROUP_REQ_ALLREADY_BEEN_PROCESSED = 10024, // 此邀请或者申请请求已经被处理。
ERR_SVR_GROUP_GROUPID_IN_USED_FOR_SUPER = 10025, // 群组 ID 已被使用,并且操作者为群主,可以直接使用。
ERR_SVR_GROUP_SDKAPPID_DENY = 10026, // 该 SDKAppID 请求的命令字已被禁用。
ERR_SVR_GROUP_REVOKE_MSG_NOT_FOUND = 10030, // 请求撤回的消息不存在。
ERR_SVR_GROUP_REVOKE_MSG_TIME_LIMIT = 10031, // 消息撤回超过了时间限制默认2分钟
ERR_SVR_GROUP_REVOKE_MSG_DENY = 10032, // 请求撤回的消息不支持撤回操作。
ERR_SVR_GROUP_NOT_ALLOW_REVOKE_MSG = 10033, // 群组类型不支持消息撤回操作。
ERR_SVR_GROUP_REMOVE_MSG_DENY = 10034, // 该消息类型不支持删除操作。
ERR_SVR_GROUP_NOT_ALLOW_REMOVE_MSG = 10035, // 音视频聊天室和在线成员广播大群不支持删除消息。
ERR_SVR_GROUP_AVCHATROOM_COUNT_LIMIT = 10036, // 音视频聊天室创建数量超过了限制,请参考 [价格说明](https://cloud.tencent.com/document/product/269/11673) 购买预付费套餐“IM音视频聊天室”。
ERR_SVR_GROUP_COUNT_LIMIT = 10037, // 单个用户可创建和加入的群组数量超过了限制,请参考 [价格说明](https://cloud.tencent.com/document/product/269/11673) 购买或升级预付费套餐“单人可创建与加入群组数”。
ERR_SVR_GROUP_MEMBER_COUNT_LIMIT = 10038, // 群成员数量超过限制,请参考 [价格说明](https://cloud.tencent.com/document/product/269/11673) 购买或升级预付费套餐“扩展群人数上限”。
};
#endif // __V2TIM_ERROR_CODE_H__

View File

@@ -0,0 +1,377 @@
// Copyright (c) 2021 Tencent. All rights reserved.
#ifndef __V2TIM_FRIENDSHIP_H__
#define __V2TIM_FRIENDSHIP_H__
#include "V2TIMCommon.h"
/////////////////////////////////////////////////////////////////////////////////
//
// (一)枚举值定义
//
/////////////////////////////////////////////////////////////////////////////////
/// 用户状态类型
enum V2TIMUserStatusType {
///< 未知状态
V2TIM_USER_STATUS_UNKNOWN = 0,
///< 在线状态
V2TIM_USER_STATUS_ONLINE = 1,
///< 离线状态
V2TIM_USER_STATUS_OFFLINE = 2,
///< 未登录(如主动调用 logout 接口,或者账号注册后还未登录)
V2TIM_USER_STATUS_UNLOGINED = 3,
};
/// 性别
enum V2TIMGender {
/// 未知性别
V2TIM_GENDER_UNKNOWN = 0,
/// 男性
V2TIM_GENDER_MALE = 1,
/// 女性
V2TIM_GENDER_FEMALE = 2,
};
/// 好友验证方式
enum V2TIMFriendAllowType {
/// 同意任何用户加好友
V2TIM_FRIEND_ALLOW_ANY = 0,
/// 需要验证
V2TIM_FRIEND_NEED_CONFIRM = 1,
/// 拒绝任何人加好友
V2TIM_FRIEND_DENY_ANY = 2,
};
/// 好友申请类型
enum V2TIMFriendApplicationType {
/// 别人发给我的
V2TIM_FRIEND_APPLICATION_COME_IN = 1,
/// 我发给别人的
V2TIM_FRIEND_APPLICATION_SEND_OUT = 2,
/// 别人发给我的 和 我发给别人的。仅拉取时有效
V2TIM_FRIEND_APPLICATION_BOTH = 3,
};
/// 好友类型
enum V2TIMFriendType {
/// 单向好友
V2TIM_FRIEND_TYPE_SINGLE = 1,
/// 双向好友
V2TIM_FRIEND_TYPE_BOTH = 2,
};
/// 好友关系类型
enum V2TIMFriendRelationType {
/// 不是好友
V2TIM_FRIEND_RELATION_TYPE_NONE = 0x0,
/// 对方在我的好友列表中
V2TIM_FRIEND_RELATION_TYPE_IN_MY_FRIEND_LIST = 0x1,
/// 我在对方的好友列表中
V2TIM_FRIEND_RELATION_TYPE_IN_OTHER_FRIEND_LIST = 0x2,
/// 互为好友
V2TIM_FRIEND_RELATION_TYPE_BOTH_WAY = 0x3,
};
/// 好友申请接受类型
enum V2TIMFriendAcceptType {
/// 接受加好友(建立单向好友)
V2TIM_FRIEND_ACCEPT_AGREE = 0,
/// 接受加好友并加对方为好友(建立双向好友)
V2TIM_FRIEND_ACCEPT_AGREE_AND_ADD = 1,
};
// 用户资料修改标记
enum V2TIMUserInfoModifyFlag {
// 未定义
V2TIM_USER_INFO_MODIFY_FLAG_UNKNOWN = 0,
// 昵称
V2TIM_USER_INFO_MODIFY_FLAG_NICK = 1,
// 头像
V2TIM_USER_INFO_MODIFY_FLAG_FACE_URL = 2,
// 性别
V2TIM_USER_INFO_MODIFY_FLAG_GENDER = 3,
// 生日
V2TIM_USER_INFO_MODIFY_FLAG_BIRTHDAY = 4,
// 修改签名
V2TIM_USER_INFO_MODIFY_FLAG_SELF_SIGNATURE = 7,
// 等级
V2TIM_USER_INFO_MODIFY_FLAG_LEVEL = 8,
// 角色
V2TIM_USER_INFO_MODIFY_FLAG_ROLE = 9,
// 好友验证方式
V2TIM_USER_INFO_MODIFY_FLAG_ALLOW_TYPE = 10,
// 自定义字段
V2TIM_USER_INFO_MODIFY_FLAG_CUSTOM = 11,
};
// 好友资料修改标记
enum V2TIMFriendInfoModifyFlag {
// 未定义
V2TIM_FRIEND_INFO_MODIFY_FLAG_UNKNOWN = 0,
// 好友备注
V2TIM_FRIEND_INFO_MODIFY_FLAG_REMARK = 1,
// 好友自定义字段
V2TIM_FRIEND_INFO_MODIFY_FLAG_CUSTOM = 2,
};
/////////////////////////////////////////////////////////////////////////////////
//
// (二)结构体定义
//
/////////////////////////////////////////////////////////////////////////////////
/// 用户基本资料
struct TIM_API V2TIMUserInfo {
/// 用户 ID
V2TIMString userID;
/// 用户昵称
V2TIMString nickName;
/// 用户头像
V2TIMString faceURL;
V2TIMUserInfo();
V2TIMUserInfo(const V2TIMUserInfo& userInfo);
virtual ~V2TIMUserInfo();
};
/// 用户详细资料
struct TIM_API V2TIMUserFullInfo : public V2TIMUserInfo {
/// 用户签名
V2TIMString selfSignature;
/// 用户性别
V2TIMGender gender;
/// 用户角色
uint32_t role;
/// 用户等级
uint32_t level;
/// 出生日期
uint32_t birthday;
/// 用户好友验证方式
V2TIMFriendAllowType allowType;
/// 用户自定义字段
/// 首先要在 [控制台](https://console.cloud.tencent.com/im) (功能配置 -> 用户自定义字段)
/// 配置用户自定义字段然后再调用该接口进行设置key 值不需要加 Tag_Profile_Custom_ 前缀。
V2TIMCustomInfo customInfo;
// 用户资料修改标记位
// 枚举 V2TIMUserInfoModifyFlag 列出哪些字段支持修改,如果您修改用户资料,请设置这个字段值
// 支持同时修改多个字段,多个枚举值按位或 | 组合,例如,同时修改用户昵称和用户签名
// info.nickName = "new nickname";
// info.selfSignature = "new self signature";
// info.modifyFlag = V2TIM_USER_INFO_MODIFY_FLAG_NICK | V2TIM_USER_INFO_MODIFY_FLAG_SELF_SIGNATURE;
uint32_t modifyFlag;
V2TIMUserFullInfo();
V2TIMUserFullInfo(const V2TIMUserFullInfo& userFullInfo);
~V2TIMUserFullInfo() override;
};
DEFINE_VECTOR(V2TIMUserFullInfo)
typedef TXV2TIMUserFullInfoVector V2TIMUserFullInfoVector;
// 用户状态
struct TIM_API V2TIMUserStatus {
/// 用户的 ID
V2TIMString userID;
/// 用户的状态
V2TIMUserStatusType statusType;
/// 用户的自定义状态, 最大 50 字节
V2TIMString customStatus;
V2TIMUserStatus();
V2TIMUserStatus(const V2TIMUserStatus &);
~V2TIMUserStatus();
};
DEFINE_VECTOR(V2TIMUserStatus)
typedef TXV2TIMUserStatusVector V2TIMUserStatusVector;
/// 好友资料
struct TIM_API V2TIMFriendInfo {
/// 好友 ID
V2TIMString userID;
/// 好友备注
/// 备注长度最长不得超过 96 个字节;
/// 字段描述详见
/// [控制台](https://cloud.tencent.com/document/product/269/1501#.E6.A0.87.E9.85.8D.E5.A5.BD.E5.8F.8B.E5.AD.97.E6.AE.B5)。
V2TIMString friendRemark;
/// 好友添加时间
uint64_t friendAddTime;
/// 好友自定义字段
/// 首先要在 [控制台](https://console.cloud.tencent.com/im) (功能配置 -> 好友自定义字段)
/// 配置好友自定义字段然后再调用该接口进行设置key 值不需要加 Tag_SNS_Custom_ 前缀。
V2TIMCustomInfo friendCustomInfo;
/// 好友所在分组列表
/// - 最多支持 32 个分组;
/// - 不允许分组名为空;
/// - 分组名长度不得超过 30 个字节;
/// - 同一个好友可以有多个不同的分组。
/// - 字段描述详见
/// [控制台](https://cloud.tencent.com/document/product/269/1501#.E6.A0.87.E9.85.8D.E5.A5.BD.E5.8F.8B.E5.AD.97.E6.AE.B5)。
V2TIMStringVector friendGroups;
/// 好友个人资料
V2TIMUserFullInfo userFullInfo;
// 用户资料修改标记位
// 枚举 V2TIMFriendInfoModifyFlag 列出哪些字段支持修改,如果您修改好友资料,请设置这个字段值
// 支持同时修改多个字段,多个枚举值按位或 | 组合,例如,同时修改好友备注和好友自定义字段
// info.friendRemark = "new friend remark";
// info.friendCustomInfo = friendCustomInfo;
// info.modifyFlag = V2TIM_FRIEND_INFO_MODIFY_FLAG_REMARK | V2TIM_FRIEND_INFO_MODIFY_FLAG_CUSTOM;
uint32_t modifyFlag;
V2TIMFriendInfo();
V2TIMFriendInfo(const V2TIMFriendInfo& friendInfo);
~V2TIMFriendInfo();
};
DEFINE_VECTOR(V2TIMFriendInfo)
typedef TXV2TIMFriendInfoVector V2TIMFriendInfoVector;
/// 好友资料获取结果
struct TIM_API V2TIMFriendInfoResult {
/// 返回码
int resultCode;
/// 返结果表述
V2TIMString resultInfo;
/// 好友类型
V2TIMFriendRelationType relation;
/// 好友个人资料,如果不是好友,除了 userID 字段,其他字段都为空
V2TIMFriendInfo friendInfo;
V2TIMFriendInfoResult();
V2TIMFriendInfoResult(const V2TIMFriendInfoResult& friendInfoResult);
~V2TIMFriendInfoResult();
};
DEFINE_VECTOR(V2TIMFriendInfoResult)
typedef TXV2TIMFriendInfoResultVector V2TIMFriendInfoResultVector;
/// 加好友
struct TIM_API V2TIMFriendAddApplication {
/// 用户 userID必填
V2TIMString userID;
/// 备注备注最大96字节
V2TIMString friendRemark;
/// 预分组名最大96字节
V2TIMString friendGroup;
/// 请求说明最大120字节
V2TIMString addWording;
/// 添加来源
V2TIMString addSource;
/// 加好友方式
V2TIMFriendType addType;
V2TIMFriendAddApplication();
V2TIMFriendAddApplication(const V2TIMFriendAddApplication& friendAddApplication);
~V2TIMFriendAddApplication();
};
/// 好友申请
struct TIM_API V2TIMFriendApplication {
/// 用户标识
V2TIMString userID;
/// 用户昵称
V2TIMString nickName;
/// 用户头像
V2TIMString faceUrl;
/// 添加时间
uint64_t addTime;
/// 来源
V2TIMString addSource;
/// 加好友附言
V2TIMString addWording;
/// 好友申请类型
V2TIMFriendApplicationType type;
V2TIMFriendApplication();
V2TIMFriendApplication(const V2TIMFriendApplication& friendApplication);
~V2TIMFriendApplication();
};
DEFINE_VECTOR(V2TIMFriendApplication)
typedef TXV2TIMFriendApplicationVector V2TIMFriendApplicationVector;
/// 好友申请列表
struct TIM_API V2TIMFriendApplicationResult {
/// 好友申请未读数量
uint64_t unreadCount;
/// 好友申请列表
V2TIMFriendApplicationVector applicationList;
V2TIMFriendApplicationResult();
V2TIMFriendApplicationResult(const V2TIMFriendApplicationResult& friendApplicationResult);
~V2TIMFriendApplicationResult();
};
/// 好友关系链检查结果
struct TIM_API V2TIMFriendCheckResult {
/// 用户id
V2TIMString userID;
/// 返回码
int32_t resultCode;
/// 返回信息
V2TIMString resultInfo;
/// 检查结果
V2TIMFriendRelationType relationType;
V2TIMFriendCheckResult();
V2TIMFriendCheckResult(const V2TIMFriendCheckResult& friendCheckResult);
~V2TIMFriendCheckResult();
};
DEFINE_VECTOR(V2TIMFriendCheckResult)
typedef TXV2TIMFriendCheckResultVector V2TIMFriendCheckResultVector;
/// 好友操作结果(添加、删除、加黑名单、添加分组等)
struct TIM_API V2TIMFriendOperationResult {
/// 用户Id
V2TIMString userID;
/// 返回码
int32_t resultCode;
/// 返回信息
V2TIMString resultInfo;
V2TIMFriendOperationResult();
V2TIMFriendOperationResult(const V2TIMFriendOperationResult& friendOperationResult);
~V2TIMFriendOperationResult();
};
DEFINE_VECTOR(V2TIMFriendOperationResult)
typedef TXV2TIMFriendOperationResultVector V2TIMFriendOperationResultVector;
/// 好友分组
struct TIM_API V2TIMFriendGroup {
/// 好友分组名称
V2TIMString groupName;
/// 分组成员数量
uint64_t userCount;
/// 分组成员列表
V2TIMStringVector friendList;
V2TIMFriendGroup();
V2TIMFriendGroup(const V2TIMFriendGroup& friendGroup);
~V2TIMFriendGroup();
};
DEFINE_VECTOR(V2TIMFriendGroup)
typedef TXV2TIMFriendGroupVector V2TIMFriendGroupVector;
// 好友搜索
struct TIM_API V2TIMFriendSearchParam {
/// 搜索的关键字列表,关键字列表最多支持 5 个
V2TIMStringVector keywordList;
/// 设置是否搜索 userID
bool isSearchUserID;
/// 是否设置搜索昵称
bool isSearchNickName;
/// 是否设置搜索备注
bool isSearchRemark;
V2TIMFriendSearchParam();
V2TIMFriendSearchParam(const V2TIMFriendSearchParam& friendSearchParam);
~V2TIMFriendSearchParam();
};
#endif /* __V2TIM_FRIENDSHIP_H__ */

View File

@@ -0,0 +1,242 @@
// Copyright (c) 2021 Tencent. All rights reserved.
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 IMSDK
//
// 关系链接口,里面包含了好友的添加、删除,黑名单的添加、删除等逻辑
//
/////////////////////////////////////////////////////////////////////
#ifndef __V2TIM_FRIENDSHIP_MANAGER_H__
#define __V2TIM_FRIENDSHIP_MANAGER_H__
#include "V2TIMCallback.h"
#include "V2TIMDefine.h"
#include "V2TIMFriendship.h"
#include "V2TIMListener.h"
/**
* ## 关系链接口,包含了好友的添加和删除,黑名单的添加和删除等逻辑
*/
class TIM_API V2TIMFriendshipManager {
public:
virtual ~V2TIMFriendshipManager() {}
/////////////////////////////////////////////////////////////////////////////////
//
// 关系链和用户资料监听器
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 1.1 添加关系链监听器
*/
virtual void AddFriendListener(V2TIMFriendshipListener* listener) = 0;
/**
* 1.2 移除关系链监听器
*/
virtual void RemoveFriendListener(V2TIMFriendshipListener* listener) = 0;
/////////////////////////////////////////////////////////////////////////////////
//
// 好友添加、删除、列表获取、资料设置接口函数
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 2.1 获取好友列表
*/
virtual void GetFriendList(V2TIMValueCallback<V2TIMFriendInfoVector>* callback) = 0;
/**
* 2.2 获取指定好友资料
*
* @param userIDList 好友 userID 列表
* - ID 建议一次最大 100
* 个,因为数量过多可能会导致数据包太大被后台拒绝,后台限制数据包最大为 1M。
*/
virtual void GetFriendsInfo(const V2TIMStringVector& userIDList,
V2TIMValueCallback<V2TIMFriendInfoResultVector>* callback) = 0;
/**
* 2.3 设置指定好友资料
*/
virtual void SetFriendInfo(const V2TIMFriendInfo& info, V2TIMCallback* callback) = 0;
/**
* 2.4 搜索好友5.4.666 及以上版本支持,需要您购买旗舰版套餐)
* @note
* - 接口返回本地存储的用户资料,可以根据 V2TIMFriendInfoResult 中的 getRelation 来判断是否为好友。
* - 该功能为 IM 旗舰版功能,[购买旗舰版套餐包](https://buy.cloud.tencent.com/avc?from=17474)后可使用,详见[价格说明](https://cloud.tencent.com/document/product/269/11673?from=17176#.E5.9F.BA.E7.A1.80.E6.9C.8D.E5.8A.A1.E8.AF.A6.E6.83.85)
*/
virtual void SearchFriends(const V2TIMFriendSearchParam& searchParam,
V2TIMValueCallback<V2TIMFriendInfoResultVector>* callback) = 0;
/**
* 2.5 添加好友
*/
virtual void AddFriend(const V2TIMFriendAddApplication& application,
V2TIMValueCallback<V2TIMFriendOperationResult>* callback) = 0;
/**
* 2.6 删除好友
*
* @param userIDList 要删除的好友 userID 列表
* - ID 建议一次最大 100
* 个,因为数量过多可能会导致数据包太大被后台拒绝,后台限制数据包最大为 1M。
* @param deleteType 删除类型
* - @ref V2TIM_FRIEND_TYPE_SINGLE单向好友
* - @ref V2TIM_FRIEND_TYPE_BOTH双向好友
*/
virtual void DeleteFromFriendList(
const V2TIMStringVector& userIDList, V2TIMFriendType deleteType,
V2TIMValueCallback<V2TIMFriendOperationResultVector>* callback) = 0;
/**
* 2.7 检查指定用户的好友关系
*
* @param userIDList 要检查的 userID 列表
* @param checkType 检查类型 (单向好友检查、双向好友检查)
*
* @note checkType 的使用需要注意:
* - checkType 如果传入
* V2TIM_FRIEND_TYPE_SINGLE结果返回V2TIM_FRIEND_RELATION_TYPE_NONE、V2TIM_FRIEND_RELATION_TYPE_IN_MY_FRIEND_LIST
* 两种情况
* - checkType 如果传入
* V2TIM_FRIEND_TYPE_BOTH结果返回V2TIM_FRIEND_RELATION_TYPE_NONE、V2TIM_FRIEND_RELATION_TYPE_IN_MY_FRIEND_LIST、
* V2TIM_FRIEND_RELATION_TYPE_IN_OTHER_FRIEND_LIST、V2TIM_FRIEND_RELATION_TYPE_BOTH_WAY
* 四种情况
*/
virtual void CheckFriend(const V2TIMStringVector& userIDList, V2TIMFriendType checkType,
V2TIMValueCallback<V2TIMFriendCheckResultVector>* callback) = 0;
/////////////////////////////////////////////////////////////////////////////////
//
// 好友申请、删除接口函数
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 3.1 获取好友申请列表
*
* @note
* - 好友申请列表包括发起的好友申请和收到的好友申请。
* - 最多支持100个。
*/
virtual void GetFriendApplicationList(
V2TIMValueCallback<V2TIMFriendApplicationResult>* callback) = 0;
/**
* 3.2 同意好友申请
*
* @param application 好友申请信息GetFriendApplicationList 成功后会返回
* @param responseType 建立单向/双向好友关系
*/
virtual void AcceptFriendApplication(
const V2TIMFriendApplication& application, V2TIMFriendAcceptType acceptType,
V2TIMValueCallback<V2TIMFriendOperationResult>* callback) = 0;
/**
* 3.3 拒绝好友申请
*
* @param application 好友申请信息,@ref GetFriendApplicationList 成功后会返回
*/
virtual void RefuseFriendApplication(
const V2TIMFriendApplication& application,
V2TIMValueCallback<V2TIMFriendOperationResult>* callback) = 0;
/**
* 3.4 删除好友申请
*
* @param application 好友申请信息,@ref GetFriendApplicationList 成功后会返回
*/
virtual void DeleteFriendApplication(const V2TIMFriendApplication& application,
V2TIMCallback* callback) = 0;
/**
* 3.5 设置好友申请已读
*/
virtual void SetFriendApplicationRead(V2TIMCallback* callback) = 0;
/////////////////////////////////////////////////////////////////////////////////
//
// 黑名单接口函数
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 4.1 添加用户到黑名单
*/
virtual void AddToBlackList(const V2TIMStringVector& userIDList,
V2TIMValueCallback<V2TIMFriendOperationResultVector>* callback) = 0;
/**
* 4.2 把用户从黑名单中删除
*/
virtual void DeleteFromBlackList(
const V2TIMStringVector& userIDList,
V2TIMValueCallback<V2TIMFriendOperationResultVector>* callback) = 0;
/**
* 4.3 获取黑名单列表
*/
virtual void GetBlackList(V2TIMValueCallback<V2TIMFriendInfoVector>* callback) = 0;
/////////////////////////////////////////////////////////////////////////////////
//
// 好友分组接口函数
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 5.1 新建好友分组
*
* @param groupName 分组名称
* @param userIDList 要添加到分组中的好友 userID 列表
*/
virtual void CreateFriendGroup(
const V2TIMString& groupName, const V2TIMStringVector& userIDList,
V2TIMValueCallback<V2TIMFriendOperationResultVector>* callback) = 0;
/**
* 5.2 获取分组信息
*
* @param groupNameList 要获取信息的好友分组名称列表,传入 传入空的 V2TIMStringVector 获得所有分组信息
*/
virtual void GetFriendGroups(const V2TIMStringVector& groupNameList,
V2TIMValueCallback<V2TIMFriendGroupVector>* callback) = 0;
/**
* 5.3 删除好友分组
*/
virtual void DeleteFriendGroup(const V2TIMStringVector& groupNameList,
V2TIMCallback* callback) = 0;
/**
* ## 修改好友分组的名称
*
* @param oldName 旧的分组名称
* @param newName 新的分组名称
* @param callback 回调
*/
virtual void RenameFriendGroup(const V2TIMString& oldName, const V2TIMString& newName,
V2TIMCallback* callback) = 0;
/**
* 5.4 添加好友到一个好友分组
*/
virtual void AddFriendsToFriendGroup(
const V2TIMString& groupName, const V2TIMStringVector& userIDList,
V2TIMValueCallback<V2TIMFriendOperationResultVector>* callback) = 0;
/**
* 5.5 从好友分组中删除好友
*/
virtual void DeleteFriendsFromFriendGroup(
const V2TIMString& groupName, const V2TIMStringVector& userIDList,
V2TIMValueCallback<V2TIMFriendOperationResultVector>* callback) = 0;
};
#endif // __V2TIM_FRIENDSHIP_MANAGER_H__

View File

@@ -0,0 +1,594 @@
// Copyright (c) 2021 Tencent. All rights reserved.
#ifndef __V2TIM_GROUP_H__
#define __V2TIM_GROUP_H__
#include "V2TIMCommon.h"
#include "V2TIMDefine.h"
/////////////////////////////////////////////////////////////////////////////////
//
// (一)枚举值定义
//
/////////////////////////////////////////////////////////////////////////////////
/// 群成员角色
enum V2TIMGroupMemberRole {
/// 未定义(没有获取该字段)
V2TIM_GROUP_MEMBER_UNDEFINED = 0,
/// 群成员
V2TIM_GROUP_MEMBER_ROLE_MEMBER = 200,
/// 群管理员
V2TIM_GROUP_MEMBER_ROLE_ADMIN = 300,
/// 群主
V2TIM_GROUP_MEMBER_ROLE_SUPER = 400,
};
/// 群变更信息 Tips 类型
enum V2TIMGroupInfoChangeType {
/// 群名修改
V2TIM_GROUP_INFO_CHANGE_TYPE_NAME = 0x01,
/// 群简介修改
V2TIM_GROUP_INFO_CHANGE_TYPE_INTRODUCTION = 0x02,
/// 群公告修改
V2TIM_GROUP_INFO_CHANGE_TYPE_NOTIFICATION = 0x03,
/// 群头像修改
V2TIM_GROUP_INFO_CHANGE_TYPE_FACE = 0x04,
/// 群主变更
V2TIM_GROUP_INFO_CHANGE_TYPE_OWNER = 0x05,
/// 群自定义字段变更
V2TIM_GROUP_INFO_CHANGE_TYPE_CUSTOM = 0x06,
///< 全员禁言字段变更
V2TIM_GROUP_INFO_CHANGE_TYPE_SHUT_UP_ALL = 0x08,
///< 消息接收选项变更
V2TIM_GROUP_INFO_CHANGE_TYPE_RECEIVE_MESSAGE_OPT = 0x0A,
///< 申请加群方式下管理员审批选项变更
V2TIM_GROUP_INFO_CHANGE_TYPE_GROUP_ADD_OPT = 0x0B,
///< 邀请进群方式下管理员审批选项变更
V2TIM_GROUP_INFO_CHANGE_TYPE_GROUP_APPROVE_OPT = 0x0C,
};
/// 加群选项
enum V2TIMGroupAddOpt {
/// 禁止加群
V2TIM_GROUP_ADD_FORBID = 0,
/// 需要管理员审批
V2TIM_GROUP_ADD_AUTH = 1,
/// 任何人可以加入
V2TIM_GROUP_ADD_ANY = 2,
};
// 群资料修改标记位
enum V2TIMGroupInfoModifyFlag {
// 未定义
V2TIM_GROUP_INFO_MODIFY_FLAG_UNKNOWN = 0x00,
// 名称
V2TIM_GROUP_INFO_MODIFY_FLAG_GROUP_NAME = 0x01,
// 公告
V2TIM_GROUP_INFO_MODIFY_FLAG_NOTIFICATION = 0x01 << 1,
// 简介
V2TIM_GROUP_INFO_MODIFY_FLAG_INTRODUCTION = 0x01 << 2,
// 头像
V2TIM_GROUP_INFO_MODIFY_FLAG_FACE_URL = 0x01 << 3,
// 申请加群管理员审批选项
V2TIM_GROUP_INFO_MODIFY_FLAG_GROUP_ADD_OPTION = 0x01 << 4,
// 禁言
V2TIM_GROUP_INFO_MODIFY_FLAG_SHUTUP_ALL = 0x01 << 8,
// 群自定义数据
V2TIM_GROUP_INFO_MODIFY_FLAG_CUSTOM_INFO = 0x01 << 9,
// 话题自定义字段
V2TIM_TOPIC_INFO_MODIFY_FLAG_CUSTOM_STRING = 0x1 << 11,
// 邀请进群管理员审批选项
V2TIM_GROUP_INFO_MODIFY_FLAG_GROUP_APPROVE_OPTION = 0x1 << 12,
};
/// 群组操作结果
enum V2TIMGroupMemberResult {
/// 操作失败
V2TIM_GROUP_MEMBER_RESULT_FAIL = 0,
/// 操作成功
V2TIM_GROUP_MEMBER_RESULT_SUCC = 1,
/// 无效操作,加群时已经是群成员,移除群组时不在群内
V2TIM_GROUP_MEMBER_RESULT_INVALID = 2,
/// 等待处理,邀请入群时等待审批
V2TIM_GROUP_MEMBER_RESULT_PENDING = 3,
/// 操作失败,创建群指定初始群成员列表或邀请入群时,被邀请者加入的群总数超限
V2TIM_GROUP_MEMBER_RESULT_OVERLIMIT = 4,
};
/// 群成员角色过滤方式
enum V2TIMGroupMemberFilter {
/// 全部成员
V2TIM_GROUP_MEMBER_FILTER_ALL = 0x00,
/// 群主
V2TIM_GROUP_MEMBER_FILTER_OWNER = 0x01,
/// 管理员
V2TIM_GROUP_MEMBER_FILTER_ADMIN = 0x02,
/// 普通成员
V2TIM_GROUP_MEMBER_FILTER_COMMON = 0x04,
};
// 群成员资料修改标记位
enum V2TIMGroupMemberInfoModifyFlag {
// 未定义
V2TIM_GROUP_MEMBER_INFO_MODIFY_FLAG_UNKNOWN = 0x00,
// 群内角色
V2TIM_GROUP_MEMBER_INFO_MODIFY_FLAG_MEMBER_ROLE = 0x01 << 1,
// 禁言时间
V2TIM_GROUP_MEMBER_INFO_MODIFY_FLAG_SHUTUP_TIME = 0x01 << 2,
// 群名片
V2TIM_GROUP_MEMBER_INFO_MODIFY_FLAG_NAME_CARD = 0x01 << 3,
// 群成员自定义数据
V2TIM_GROUP_MEMBER_INFO_MODIFY_FLAG_CUSTOM_INFO = 0x01 << 4,
};
/// 群组未决请求类型
enum V2TIMGroupApplicationType {
/// 申请入群
V2TIM_GROUP_JOIN_APPLICATION_NEED_APPROVED_BY_ADMIN = 0x0,
/// 等待被邀请者同意的邀请入群请求
V2TIM_GROUP_INVITE_APPLICATION_NEED_APPROVED_BY_INVITEE = 0x1,
/// 等待被群主或管理员审批的邀请入群请求
V2TIM_GROUP_INVITE_APPLICATION_NEED_APPROVED_BY_ADMIN = 0x2,
};
/// 群组已决标志
enum V2TIMGroupApplicationHandleStatus {
/// 未处理
V2TIM_GROUP_APPLICATION_HANDLE_STATUS_UNHANDLED = 0,
/// 被他人处理
V2TIM_GROUP_APPLICATION_HANDLE_STATUS_HANDLED_BY_OTHER = 1,
/// 自己已处理
V2TIM_GROUP_APPLICATION_HANDLE_STATUS_HANDLED_BY_SELF = 2,
};
/// 群组已决结果
enum V2TIMGroupApplicationHandleResult {
/// 拒绝申请
V2TIM_GROUP_APPLICATION_HANDLE_RESULT_REFUSE = 0,
/// 同意申请
V2TIM_GROUP_APPLICATION_HANDLE_RESULT_AGREE = 1,
};
/// @ 类型
enum V2TIMGroupAtType {
///< @ 我
V2TIM_AT_ME = 1,
///< @ 群里所有人
V2TIM_AT_ALL = 2,
///< @ 群里所有人并且单独 @ 我
V2TIM_AT_ALL_AT_ME = 3,
};
/////////////////////////////////////////////////////////////////////////////////
//
// (二)结构体定义
//
/////////////////////////////////////////////////////////////////////////////////
/// 群成员基本资料
struct TIM_API V2TIMGroupMemberInfo {
/// 用户 ID
V2TIMString userID;
/// 用户昵称
V2TIMString nickName;
/// 用户好友备注
V2TIMString friendRemark;
/// 群成员名片
V2TIMString nameCard;
/// 用户头像
V2TIMString faceURL;
V2TIMGroupMemberInfo();
V2TIMGroupMemberInfo(const V2TIMGroupMemberInfo& groupMemberInfo);
~V2TIMGroupMemberInfo();
};
DEFINE_VECTOR(V2TIMGroupMemberInfo)
typedef TXV2TIMGroupMemberInfoVector V2TIMGroupMemberInfoVector;
/// 群成员详细资料
struct TIM_API V2TIMGroupMemberFullInfo : public V2TIMGroupMemberInfo {
/// 群成员自定义字段
/// 首先要在 [控制台](https://console.cloud.tencent.com/im) (功能配置 -> 群成员自定义字段)
/// 配置用户自定义字段,然后再调用该接口进行设置。
V2TIMCustomInfo customInfo;
/// 群成员角色,修改群成员角色请调用 V2TIMManagerGroup.h -> SetGroupMemberRole 接口
uint32_t role;
/// 群成员禁言结束时间戳,禁言用户请调用 V2TIMManagerGroup.h -> MuteGroupMember 接口
uint32_t muteUntil;
/// 群成员入群时间,自动生成,不可修改
int64_t joinTime;
// 群成员资料修改标记位
// 枚举 V2TIMGroupMemberInfoModifyFlag 列出哪些字段支持修改,如果您修改群成员资料,请设置这个字段值
// 支持同时修改多个字段,多个枚举值按位或 | 组合,例如,同时修改群成员名片和群成员角色
// info.nameCard = "new name card";
// info.role = V2TIM_GROUP_MEMBER_ROLE_ADMIN;
// info.modifyFlag = V2TIM_GROUP_MEMBER_INFO_MODIFY_FLAG_NAME_CARD | V2TIM_GROUP_MEMBER_INFO_MODIFY_FLAG_MEMBER_ROLE;
uint32_t modifyFlag;
V2TIMGroupMemberFullInfo();
V2TIMGroupMemberFullInfo(const V2TIMGroupMemberFullInfo& groupMemberFullInfo);
~V2TIMGroupMemberFullInfo();
};
DEFINE_VECTOR(V2TIMGroupMemberFullInfo)
typedef TXV2TIMGroupMemberFullInfoVector V2TIMGroupMemberFullInfoVector;
/// 获取群成员信息的结果
struct TIM_API V2TIMGroupMemberInfoResult {
///获取分页拉取的 seq。如果为 0 表示拉取结束
uint64_t nextSequence;
// 群成员信息列表
V2TIMGroupMemberFullInfoVector memberInfoList;
V2TIMGroupMemberInfoResult();
V2TIMGroupMemberInfoResult(const V2TIMGroupMemberInfoResult& groupMemberInfoResult);
~V2TIMGroupMemberInfoResult();
};
/// 群 tips群变更信息
struct TIM_API V2TIMGroupChangeInfo {
/// 变更类型
V2TIMGroupInfoChangeType type;
/// 根据变更类型表示不同的值,例如 type = V2TIM_GROUP_INFO_CHANGE_TYPE_NAMEvalue 表示群新的
/// groupName
V2TIMString value;
/// 变更自定义字段的 key 值type = V2TIM_GROUP_INFO_CHANGE_TYPE_CUSTOM 生效)
/// 因为历史遗留原因,如果只修改了群自定义字段,当前消息不会存漫游和 DB
V2TIMString key;
/// 根据变更类型表示不同的值
/// 当前只有 type = V2TIM_GROUP_INFO_CHANGE_TYPE_SHUT_UP_ALL 时有效
bool boolValue;
/// 根据变更类型表示不同的值
/// @note 仅针对以下类型有效:
/// - 从 6.5 版本开始,当 type 为 V2TIM_GROUP_INFO_CHANGE_TYPE_RECEIVE_MESSAGE_OPT 时,该字段标识了群消息接收选项发生了变化,其取值详见 @V2TIMReceiveMessageOpt
/// - 从 6.5 版本开始,当 type 为 V2TIM_GROUP_INFO_CHANGE_TYPE_GROUP_ADD_OPT 时,该字段标识了申请加群审批选项发生了变化,其取值详见 @V2TIMGroupAddOpt;
/// - 从 7.1 版本开始,当 type 为 V2TIM_GROUP_INFO_CHANGE_TYPE_GROUP_APPROVE_OPT 时,该字段标识了邀请进群审批选项发生了变化,取值类型详见 @V2TIMGroupAddOpt。
uint32_t intValue;
V2TIMGroupChangeInfo();
V2TIMGroupChangeInfo(const V2TIMGroupChangeInfo& groupChangeInfo);
~V2TIMGroupChangeInfo();
};
DEFINE_VECTOR(V2TIMGroupChangeInfo)
typedef TXV2TIMGroupChangeInfoVector V2TIMGroupChangeInfoVector;
/// 群tips成员变更信息
struct TIM_API V2TIMGroupMemberChangeInfo {
/// 变更用户
V2TIMString userID;
/// 禁言时间(秒,表示还剩多少秒可以发言)
uint32_t muteTime;
V2TIMGroupMemberChangeInfo();
V2TIMGroupMemberChangeInfo(const V2TIMGroupMemberChangeInfo& groupMemberChangeInfo);
~V2TIMGroupMemberChangeInfo();
};
DEFINE_VECTOR(V2TIMGroupMemberChangeInfo)
typedef TXV2TIMGroupMemberChangeInfoVector V2TIMGroupMemberChangeInfoVector;
/// 群 @ 信息
struct TIM_API V2TIMGroupAtInfo {
/// 消息序列号,即带有 “@我” 或者 “@所有人” 标记的消息的序列号
uint64_t seq;
/// @ 提醒类型,分成 “@我” 、“@所有人” 以及 “@我并@所有人” 三类
V2TIMGroupAtType atType;
V2TIMGroupAtInfo();
V2TIMGroupAtInfo(const V2TIMGroupAtInfo& groupAtInfo);
V2TIMGroupAtInfo& operator=(const V2TIMGroupAtInfo& conversation);
~V2TIMGroupAtInfo();
};
DEFINE_VECTOR(V2TIMGroupAtInfo)
typedef TXV2TIMGroupAtInfoVector V2TIMGroupAtInfoVector;
/// 群资料
struct TIM_API V2TIMGroupInfo {
/// 群组 ID
/// 自定义群组 ID 必须为可打印 ASCII 字符0x20-0x7e最长48个字节且前缀不能为
/// @TGS#(避免与默认分配的群组 ID 混淆)
V2TIMString groupID;
/// 群类型
V2TIMString groupType;
/// 社群是否支持创建话题,只在群类型为 Community 时有效
bool isSupportTopic;
/// 群名称
/// 群名称最长30字节
V2TIMString groupName;
/// 群公告
/// 群公告最长300字节
V2TIMString notification;
/// 群简介
/// 群简介最长240字节
V2TIMString introduction;
/// 群头像
/// 群头像 URL 最长100字节
V2TIMString faceURL;
/// 是否全员禁言
bool allMuted;
/// 设置群自定义字段需要两个步骤:
/// 1.在 [控制台](https://console.cloud.tencent.com/im) (功能配置 -> 群自定义字段)
/// 配置群自定义字段的 key 值Key 为 V2TIMString 类型,长度不超过 16 字节。 2.调用 SetGroupInfo
/// 接口设置该字段value 为 V2TIMSBuffer 数据,长度不超过 512 字节。
V2TIMCustomInfo customInfo;
/// 群创建人/管理员
V2TIMString owner;
/// 群创建时间
uint32_t createTime;
/// 申请进群是否需要管理员审批工作群Work默认值为 V2TIM_GROUP_ADD_FORBID即默认不允许申请入群您可以修改该字段打开申请入群方式。
V2TIMGroupAddOpt groupAddOpt;
/// 邀请进群是否需要管理员审批 (从 7.1 版本开始支持)
/// - 除工作群Work之外的其他群类型默认值都为 V2TIM_GROUP_ADD_FORBID即默认不允许邀请入群您可以修改该字段打开邀请入群方式。
/// - 直播群、社群和话题默认不允许邀请入群,也不支持修改。
V2TIMGroupAddOpt groupApproveOpt;
/// 群最近一次群资料修改时间
uint32_t lastInfoTime;
/// 群最近一次发消息时间
uint32_t lastMessageTime;
/// 已加入的群成员数量
uint32_t memberCount;
/// 在线的群成员数量
uint32_t onlineCount;
/// 最多允许加入的群成员数量
/// 各类群成员人数限制详见:
/// https://cloud.tencent.com/document/product/269/1502#.E7.BE.A4.E7.BB.84.E9.99.90.E5.88.B6.E5.B7.AE.E5.BC.82
uint32_t memberMaxCount;
/// 当前用户在此群组中的角色,切换角色请调用 setGroupMemberRole 接口
uint32_t role;
/// 当前用户在此群组中的消息接收选项,修改群消息接收选项请调用 SetGroupReceiveMessageOpt 接口
V2TIMReceiveMessageOpt recvOpt;
/// 当前用户在此群中的加入时间,不支持设置,系统自动生成
uint32_t joinTime;
/// 群资料修改标记位
/// 枚举 V2TIMGroupInfoModifyFlag 列出哪些字段支持修改,如果您修改群资料,请设置这个字段值
/// 如果您同时修改多个字段,多个枚举值按位或 | 组合,例如,同时修改群名称和头像
/// info.groupName = "new group name";
/// info.faceURL = "new face url";
/// info.modifyFlag = V2TIM_GROUP_INFO_MODIFY_FLAG_GROUP_NAME |
/// V2TIM_GROUP_INFO_MODIFY_FLAG_FACE_URL;
uint32_t modifyFlag;
V2TIMGroupInfo();
V2TIMGroupInfo(const V2TIMGroupInfo& groupInfo);
~V2TIMGroupInfo();
};
DEFINE_VECTOR(V2TIMGroupInfo)
typedef TXV2TIMGroupInfoVector V2TIMGroupInfoVector;
/// 获取群组资料结果
struct TIM_API V2TIMGroupInfoResult {
/// 结果 0成功非0失败
int resultCode;
/// 如果获取失败,会返回错误信息
V2TIMString resultMsg;
/// 如果获取成功,会返回对应的 info
V2TIMGroupInfo info;
V2TIMGroupInfoResult();
V2TIMGroupInfoResult(const V2TIMGroupInfoResult& groupInfoResult);
~V2TIMGroupInfoResult();
};
DEFINE_VECTOR(V2TIMGroupInfoResult)
typedef TXV2TIMGroupInfoResultVector V2TIMGroupInfoResultVector;
/////////////////////////////////////////////////////////////////////////////////
//
// 话题基本资料(可以通过 getTopics 获取,不支持由客户自行创建)
//
/////////////////////////////////////////////////////////////////////////////////
struct V2TIMMessage;
struct TIM_API V2TIMTopicInfo {
/// 话题 ID
V2TIMString topicID;
/// 话题名称
V2TIMString topicName;
/// 话题头像
V2TIMString topicFaceURL;
/// 话题介绍
V2TIMString introduction;
/// 话题公告
V2TIMString notification;
/// 话题全员禁言
bool isAllMuted;
/// 当前用户在话题中的禁言时间
uint32_t selfMuteTime;
/// 话题自定义字段
V2TIMString customString;
/// 话题消息接收选项,修改话题消息接收选项请调用 setGroupReceiveMessageOpt 接口
V2TIMReceiveMessageOpt recvOpt;
/// 话题草稿
V2TIMString draftText;
/// 话题消息未读数量
uint64_t unreadCount;
/// 话题 lastMessage
V2TIMMessage *lastMessage;
/// 话题 at 信息列表
V2TIMGroupAtInfoVector groupAtInfoList;
/// 话题资料修改标记位
/// 枚举 V2TIMGroupInfoModifyFlag 列出哪些字段支持修改,如果您修改群资料,请设置这个字段值
/// 如果您同时修改多个字段,多个枚举值按位或 | 组合,例如,同时修改群名称和头像
/// info.topicName = "new group name";
/// info.topicFaceURL = "new face url";
/// info.modifyFlag = V2TIM_GROUP_INFO_MODIFY_FLAG_GROUP_NAME |
/// V2TIM_GROUP_INFO_MODIFY_FLAG_FACE_URL;
uint32_t modifyFlag;
V2TIMTopicInfo();
V2TIMTopicInfo(const V2TIMTopicInfo& topicInfo);
V2TIMTopicInfo& operator =(const V2TIMTopicInfo& topicInfo);
~V2TIMTopicInfo();
};
/////////////////////////////////////////////////////////////////////////////////
//
// V2TIMTopicOperationResult
//
/////////////////////////////////////////////////////////////////////////////////
struct TIM_API V2TIMTopicOperationResult {
/// 结果 0成功非0失败
int32_t errorCode;
/// 如果删除失败,会返回错误信息
V2TIMString errorMsg;
/// 如果删除成功,会返回对应的 topicID
V2TIMString topicID;
V2TIMTopicOperationResult();
V2TIMTopicOperationResult(const V2TIMTopicOperationResult& result);
~V2TIMTopicOperationResult();
};
DEFINE_VECTOR(V2TIMTopicOperationResult)
typedef TXV2TIMTopicOperationResultVector V2TIMTopicOperationResultVector;
/////////////////////////////////////////////////////////////////////////////////
//
// V2TIMTopicInfoResult
//
/////////////////////////////////////////////////////////////////////////////////
struct TIM_API V2TIMTopicInfoResult {
/// 结果 0成功非0失败
int32_t errorCode;
/// 如果获取失败,会返回错误信息
V2TIMString errorMsg;
/// 如果获取成功,会返回对应的 info
V2TIMTopicInfo topicInfo;
V2TIMTopicInfoResult();
V2TIMTopicInfoResult(const V2TIMTopicInfoResult& result);
~V2TIMTopicInfoResult();
};
DEFINE_VECTOR(V2TIMTopicInfoResult)
typedef TXV2TIMTopicInfoResultVector V2TIMTopicInfoResultVector;
/// 群申请信息
struct TIM_API V2TIMGroupApplication : V2TIMBaseObject {
/// 群组 ID
V2TIMString groupID;
/// 请求者 userID
V2TIMString fromUser;
/// 请求者昵称
V2TIMString fromUserNickName;
/// 请求者头像
V2TIMString fromUserFaceUrl;
/// 判决者id有人请求加群:0邀请其他人加群:被邀请人用户 ID
V2TIMString toUser;
/// 申请时间
uint64_t addTime;
/// 申请或邀请附加信息
V2TIMString requestMsg;
/// 审批信息:同意或拒绝信息
V2TIMString handledMsg;
/// 请求类型
V2TIMGroupApplicationType applicationType;
/// 处理标志
V2TIMGroupApplicationHandleStatus handleStatus;
/// 处理结果
V2TIMGroupApplicationHandleResult handleResult;
V2TIMGroupApplication();
V2TIMGroupApplication(const V2TIMGroupApplication& groupApplication);
V2TIMGroupApplication& operator=(const V2TIMGroupApplication& groupApplication);
~V2TIMGroupApplication() override;
};
DEFINE_VECTOR(V2TIMGroupApplication)
typedef TXV2TIMGroupApplicationVector V2TIMGroupApplicationVector;
/// 邀请其他人入群的操作结果
struct TIM_API V2TIMGroupMemberOperationResult {
/// 被操作成员
V2TIMString userID;
/// 返回状态
V2TIMGroupMemberResult result;
V2TIMGroupMemberOperationResult();
V2TIMGroupMemberOperationResult(
const V2TIMGroupMemberOperationResult& groupMemberOperationResult);
~V2TIMGroupMemberOperationResult();
};
DEFINE_VECTOR(V2TIMGroupMemberOperationResult)
typedef TXV2TIMGroupMemberOperationResultVector V2TIMGroupMemberOperationResultVector;
/// 创建群时指定群成员
struct TIM_API V2TIMCreateGroupMemberInfo {
// 被操作成员
V2TIMString userID;
/// 群成员类型,需要注意一下事项:
/// 1. role 不设置或则设置为 V2TIM_GROUP_MEMBER_UNDEFINED进群后默认为群成员。
/// 2. 工作群Work不支持设置 role 为管理员。
/// 3. 所有的群都不支持设置 role 为群主。
uint32_t role;
V2TIMCreateGroupMemberInfo();
V2TIMCreateGroupMemberInfo(const V2TIMCreateGroupMemberInfo& createGroupMemberInfo);
~V2TIMCreateGroupMemberInfo();
};
DEFINE_VECTOR(V2TIMCreateGroupMemberInfo)
typedef TXV2TIMCreateGroupMemberInfoVector V2TIMCreateGroupMemberInfoVector;
/// 加群申请列表
struct TIM_API V2TIMGroupApplicationResult {
/// 未读的申请数量
uint64_t unreadCount;
/// 加群申请的列表
V2TIMGroupApplicationVector applicationList;
V2TIMGroupApplicationResult();
V2TIMGroupApplicationResult(const V2TIMGroupApplicationResult& groupApplicationResult);
~V2TIMGroupApplicationResult();
};
/// 群搜索的参数
struct TIM_API V2TIMGroupSearchParam {
/// 搜索关键字列表最多支持5个。
V2TIMStringVector keywordList;
/// 设置是否搜索群 ID。
bool isSearchGroupID;
/// 设置是否搜索群名称
bool isSearchGroupName;
V2TIMGroupSearchParam();
V2TIMGroupSearchParam(const V2TIMGroupSearchParam& groupSearchParam);
~V2TIMGroupSearchParam();
};
/// 搜索群成员的参数
struct TIM_API V2TIMGroupMemberSearchParam {
/// 指定群 ID 列表,若为空的 V2TIMStringVector 则搜索全部群中的群成员
V2TIMStringVector groupIDList;
/// 搜索关键字列表最多支持5个
V2TIMStringVector keywordList;
/// 设置是否搜索群成员 userID
bool isSearchMemberUserID;
/// 设置是否搜索群成员昵称
bool isSearchMemberNickName;
/// 设置是否搜索群成员备注
bool isSearchMemberRemark;
/// 设置是否搜索群成员名片
bool isSearchMemberNameCard;
V2TIMGroupMemberSearchParam();
V2TIMGroupMemberSearchParam(const V2TIMGroupMemberSearchParam& groupMemberSearchParam);
~V2TIMGroupMemberSearchParam();
};
/// SearchGroupMembers 搜索结果
DEFINE_MAP(V2TIMString, V2TIMGroupMemberFullInfoVector)
typedef TXV2TIMStringToV2TIMGroupMemberFullInfoVectorMap V2TIMGroupSearchGroupMembersMap;
#endif /* __V2TIM_GROUP_H__ */

View File

@@ -0,0 +1,392 @@
// Copyright (c) 2021 Tencent. All rights reserved.
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 IMSDK
//
// 群组高级接口,里面包含了群组的高级功能,比如群成员邀请、非群成员申请进群等操作接口。
//
/////////////////////////////////////////////////////////////////////
#ifndef __V2TIM_GROUP_MANAGER_H__
#define __V2TIM_GROUP_MANAGER_H__
#include "V2TIMCallback.h"
#include "V2TIMDefine.h"
#include "V2TIMGroup.h"
#include "V2TIMListener.h"
/**
* ## 群组高级接口,包含了群组的高级功能,例如群成员邀请、非群成员申请进群等操作接口。
*/
class TIM_API V2TIMGroupManager {
public:
virtual ~V2TIMGroupManager() {}
/////////////////////////////////////////////////////////////////////////////////
//
// 群相关的高级接口
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 1.1 创建自定义群组(高级版本:可以指定初始的群成员)
*
* @param info 自定义群组信息,可以设置 groupID | groupType | groupName | notification |
* introduction | faceURL 字段
* @param memberList 指定初始的群成员(直播群 AVChatRoom 不支持指定初始群成员memberList
* 请传一个大小为 0 的 V2TIMCreateGroupMemberInfoVector
*
* @note
* - 邀请的群成员个数不能超过 207.1 及其以上版本开始限制)
* - 其他限制请参考 @ref V2TIMManager.h -> CreateGroup 注释
*/
virtual void CreateGroup(const V2TIMGroupInfo& info,
const V2TIMCreateGroupMemberInfoVector& memberList,
V2TIMValueCallback<V2TIMString>* callback) = 0;
/**
* 1.2 获取当前用户已经加入的群列表
*
* @note
* - 直播群(AVChatRoom) 不支持该 API。
* - 该接口有频限检测SDK 限制调用频率为1 秒 10 次,超过限制后会报
* ERR_SDK_COMM_API_CALL_FREQUENCY_LIMIT 7008错误
*/
virtual void GetJoinedGroupList(V2TIMValueCallback<V2TIMGroupInfoVector>* callback) = 0;
/////////////////////////////////////////////////////////////////////////////////
// 群资料和高级设置项
/////////////////////////////////////////////////////////////////////////////////
/**
* 2.1 拉取群资料
*
* @param groupIDList 群组 ID 列表
*/
virtual void GetGroupsInfo(const V2TIMStringVector& groupIDList,
V2TIMValueCallback<V2TIMGroupInfoResultVector>* callback) = 0;
/**
* 2.2 搜索群资料5.4.666 及以上版本支持)
*
* @param searchParam 搜索参数
* @note 该功能为 IM 旗舰版功能,[购买旗舰版套餐包](https://buy.cloud.tencent.com/avc?from=17474)后可使用,详见[价格说明](https://cloud.tencent.com/document/product/269/11673?from=17176#.E5.9F.BA.E7.A1.80.E6.9C.8D.E5.8A.A1.E8.AF.A6.E6.83.85)
*/
virtual void SearchGroups(const V2TIMGroupSearchParam& searchParam,
V2TIMValueCallback<V2TIMGroupInfoVector>* callback) = 0;
/**
* 2.3 修改群资料
*/
virtual void SetGroupInfo(const V2TIMGroupInfo& info, V2TIMCallback* callback) = 0;
/**
* 2.4 初始化群属性,会清空原有的群属性列表
*
* @note
* attributes 的使用限制如下:
* - 6.7 及其以前版本,只支持 AVChatRoom 直播群;
* - 从 6.8 版本开始,同时支持 AVChatRoom、Public、Meeting、Work 四种群类型;
* - 从 7.0 版本开始,除了话题外,群属性支持所有的群类型;
* - key 最多支持 16 个,长度限制为 32 字节;
* - value 长度限制为 4k
* - 总的 attributes包括 key 和 value限制为 16k
* - initGroupAttributes、setGroupAttributes、deleteGroupAttributes 接口合并计算, SDK 限制为 5 秒 10 次,超过后回调 8511 错误码;后台限制 1 秒 5 次,超过后返回 10049 错误码;
* - getGroupAttributes 接口 SDK 限制 5 秒 20 次;
* - 从 5.6 版本开始当每次APP启动后初次修改群属性时请您先调用 getGroupAttributes 拉取到最新的群属性之后,再发起修改操作;
* - 从 5.6 版本开始,当多个用户同时修改同一个群属性时,只有第一个用户可以执行成功,其它用户会收到 10056 错误码;收到这个错误码之后,请您调用 getGroupAttributes 把本地保存的群属性更新到最新之后,再发起修改操作。
*/
virtual void InitGroupAttributes(const V2TIMString& groupID,
const V2TIMGroupAttributeMap& attributes,
V2TIMCallback* callback) = 0;
/**
* 2.5 设置群属性。已有该群属性则更新其 value 值,没有该群属性则添加该属性。
* @note
* - 6.7 及其以前版本,只支持 AVChatRoom 直播群;
* - 从 6.8 版本开始,同时支持 AVChatRoom、Public、Meeting、Work 四种群类型;
* - 从 7.0 版本开始,除了话题外,群属性支持所有的群类型。
*/
virtual void SetGroupAttributes(const V2TIMString& groupID,
const V2TIMGroupAttributeMap& attributes,
V2TIMCallback* callback) = 0;
/**
* 2.6 删除指定群属性keys 传大小为 0 的 V2TIMStringVector 则清空所有群属性。
* @note
* - 6.7 及其以前版本,只支持 AVChatRoom 直播群;
* - 从 6.8 版本开始,同时支持 AVChatRoom、Public、Meeting、Work 四种群类型;
* - 从 7.0 版本开始,除了话题外,群属性支持所有的群类型。
*/
virtual void DeleteGroupAttributes(const V2TIMString& groupID, const V2TIMStringVector& keys,
V2TIMCallback* callback) = 0;
/**
* 2.7 获取指定群属性keys 传 keys 传大小为 0 的 V2TIMStringVector 则获取所有群属性。
* @note
* - 6.7 及其以前版本,只支持 AVChatRoom 直播群;
* - 从 6.8 版本开始,同时支持 AVChatRoom、Public、Meeting、Work 四种群类型;
* - 从 7.0 版本开始,除了话题外,群属性支持所有的群类型。
*/
virtual void GetGroupAttributes(const V2TIMString& groupID, const V2TIMStringVector& keys,
V2TIMValueCallback<V2TIMGroupAttributeMap>* callback) = 0;
/**
* 2.8 获取指定群在线人数
*
* @note 请注意:
* - 目前只支持直播群AVChatRoom
*/
virtual void GetGroupOnlineMemberCount(const V2TIMString& groupID,
V2TIMValueCallback<uint32_t>* callback) = 0;
/**
* 2.9 设置群计数器7.0 及其以上版本支持)
*
* @note
* - 该计数器的 key 如果存在,则直接更新计数器的 value 值;如果不存在,则添加该计数器的 key-value
* - 当群计数器设置成功后,在 succ 回调中会返回最终成功设置的群计数器信息;
* - 除了社群和话题,群计数器支持所有的群组类型。
*/
virtual void SetGroupCounters(const V2TIMString& groupID, const V2TIMStringToInt64Map& counters,
V2TIMValueCallback<V2TIMStringToInt64Map>* callback) = 0;
/**
* 2.10 获取群计数器7.0 及其以上版本支持)
*
* @note
* - 如果 keys 为空,则表示获取群内的所有计数器;
* - 除了社群和话题,群计数器支持所有的群组类型。
*/
virtual void GetGroupCounters(const V2TIMString& groupID, const V2TIMStringVector& keys,
V2TIMValueCallback<V2TIMStringToInt64Map>* callback) = 0;
/**
* 2.11 递增群计数器7.0 及其以上版本支持)
*
* @param groupID 群 ID
* @param key 群计数器的 key
* @param value 群计数器的递增的变化量,计数器 key 对应的 value 变更方式为: new_value = old_value + value
* @param callback 如果成功,会返回当前计数器做完递增操作后的 value
*
* @note
* - 该计数器的 key 如果存在,则直接在当前值的基础上根据传入的 value 作递增操作;反之,添加 key并在默认值为 0 的基础上根据传入的 value 作递增操作;
* - 除了社群和话题,群计数器支持所有的群组类型。
*/
virtual void IncreaseGroupCounter(const V2TIMString& groupID,
const V2TIMString& key, int64_t value,
V2TIMValueCallback<V2TIMStringToInt64Map>* callback) = 0;
/**
* 2.12 递减群计数器7.0 及其以上版本支持)
*
* @param groupID 群 ID
* @param key 群计数器的 key
* @param value 群计数器的递减的变化量,计数器 key 对应的 value 变更方式为: new_value = old_value - value
* @param callback 如果成功,会返回当前计数器做完递减操作后的 value
*
* @note
* - 该计数器的 key 如果存在,则直接在当前值的基础上根据传入的 value 作递减操作;反之,添加 key并在默认值为 0 的基础上根据传入的 value 作递减操作
* - 除了社群和话题,群计数器支持所有的群组类型。
*/
virtual void DecreaseGroupCounter(const V2TIMString& groupID,
const V2TIMString& key, int64_t value,
V2TIMValueCallback<V2TIMStringToInt64Map>* callback) = 0;
/////////////////////////////////////////////////////////////////////////////////
// 群成员管理
/////////////////////////////////////////////////////////////////////////////////
/**
* 3.1 获取群成员列表
*
* @param filter 指定群成员类型
* @param nextSeq 分页拉取标志第一次拉取填0回调成功如果 nextSeq
* 不为零需要分页传入再次拉取直至为0。
*
* @note
* - 普通群(工作群、会议群、公开群、社群)的限制:
* 1. filter 只能设置为 V2TIMGroupMemberFilter 定义的数值SDK 会返回指定角色的成员。
*
* - 直播群AVChatRoom的限制
* 1. 如果设置 filter 为 V2TIMGroupMemberFilter 定义的数值SDK 返回全部成员。
* 返回的人数规则为:旗舰版支持拉取最近入群群成员最多 1000 人新进来的成员排在前面6.3 及以上版本支持,
* 需要先在 [控制台](https://console.cloud.tencent.com/im) 开启开关;
* 非旗舰版支持拉取最近入群群成员最多 31 人,新进来的 成员排在前面。
* 2. 如果设置 filter 为群成员自定义标记,旗舰版支持拉取指定标记的成员列表。
* 标记群成员的设置请参考 MarkGroupMemberList API。
* 3. 程序重启后,请重新加入群组,否则拉取群成员会报 10007 错误码。
* 4. 群成员资料信息仅支持 userID | nickName | faceURL | role 字段。
*/
virtual void GetGroupMemberList(const V2TIMString& groupID, uint32_t filter,
uint64_t nextSeq,
V2TIMValueCallback<V2TIMGroupMemberInfoResult>* callback) = 0;
/**
* 3.2 获取指定的群成员资料
*/
virtual void GetGroupMembersInfo(
const V2TIMString& groupID, V2TIMStringVector memberList,
V2TIMValueCallback<V2TIMGroupMemberFullInfoVector>* callback) = 0;
/**
* 3.3 搜索群成员5.4.666 及以上版本支持)
*
* @param param 搜索参数
* @note 该功能为 IM 旗舰版功能,[购买旗舰版套餐包](https://buy.cloud.tencent.com/avc?from=17474)后可使用,详见[价格说明](https://cloud.tencent.com/document/product/269/11673?from=17176#.E5.9F.BA.E7.A1.80.E6.9C.8D.E5.8A.A1.E8.AF.A6.E6.83.85)
*/
virtual void SearchGroupMembers(
const V2TIMGroupMemberSearchParam& param,
V2TIMValueCallback<V2TIMGroupSearchGroupMembersMap>* callback) = 0;
/**
* 3.4 修改指定的群成员资料
*/
virtual void SetGroupMemberInfo(const V2TIMString& groupID,
const V2TIMGroupMemberFullInfo& info,
V2TIMCallback* callback) = 0;
/**
* 3.5 禁言(只有管理员或群主能够调用)
*
* @param seconds 禁言时间长度,单位秒,表示调用该接口成功后多少秒内不允许被禁言用户再发言。
*/
virtual void MuteGroupMember(const V2TIMString& groupID, const V2TIMString& userID,
uint32_t seconds,
V2TIMCallback* callback) = 0;
/**
* 3.6 邀请他人入群
*
* @note 请注意不同类型的群有如下限制:
* - 工作群Work群里的任何人都可以邀请其他人进群。
* - 会议群Meeting和公开群Public只有通过rest api 使用 App
* 管理员身份才可以邀请其他人进群。
* - 直播群AVChatRoom不支持此功能。
* - 单次邀请的群成员个数不能超过 207.1 及其以上版本开始限制)。
*/
virtual void InviteUserToGroup(
const V2TIMString& groupID, const V2TIMStringVector& userList,
V2TIMValueCallback<V2TIMGroupMemberOperationResultVector>* callback) = 0;
/**
* 3.7 踢人(直播群踢人从 6.6 版本开始支持,需要您购买旗舰版套餐)
*
* @note 请注意不同类型的群有如下限制:
* - 工作群Work只有群主或 APP 管理员可以踢人。
* - 公开群Public、会议群Meeting群主、管理员和 APP 管理员可以踢人
* - 直播群AVChatRoom6.6 之前版本只支持禁言MuteGroupMember不支持踢人KickGroupMember。6.6 及以上版本支持禁言和踢人。
*/
virtual void KickGroupMember(
const V2TIMString& groupID, const V2TIMStringVector& memberList, const V2TIMString& reason,
V2TIMValueCallback<V2TIMGroupMemberOperationResultVector>* callback) = 0;
/**
* 3.8 切换群成员的角色。
*
* @note 请注意不同类型的群有如下限制:
* -
* 公开群Public和会议群Meeting只有群主才能对群成员进行普通成员和管理员之间的角色切换。
* - 其他群不支持设置群成员角色。
* - 转让群组请调用 @ref TransferGroupOwner 接口。
* - 会议群Meeting切换群成员角色之后不会有 OnGrantAdministrator 和 OnRevokeAdministrator
* 通知回调
* -
* 切换的角色支持普通群成员V2TIM_GROUP_MEMBER_ROLE_MEMBER和管理员V2TIM_GROUP_MEMBER_ROLE_ADMIN
*/
virtual void SetGroupMemberRole(const V2TIMString& groupID, const V2TIMString& userID,
uint32_t role, V2TIMCallback* callback) = 0;
/**
* 3.9 标记群成员(从 6.6 版本开始支持,需要您购买旗舰版套餐)
*
* @param groupID 群 ID。
* @param memberList 群成员 ID 列表。
* @param markType 标记类型。数字类型,大于等于 1000您可以自定义一个直播群里最多允许定义 10 个标记。
* @param enableMark true 表示添加标记false 表示移除标记。
*
* @note 请注意
* - 仅支持直播群。
* - 只有群主才有权限标记群组中其他人。
*/
virtual void MarkGroupMemberList(const V2TIMString& groupID,
const V2TIMStringVector& memberList, uint32_t markType,
bool enableMark, V2TIMCallback* callback) = 0;
/**
* 3.10 转让群主
*
* @note 请注意不同类型的群有如下限制:
* - 普通类型的群Work、Public、Meeting只有群主才有权限进行群转让操作。
* - 直播群AVChatRoom不支持转让群主。
*/
virtual void TransferGroupOwner(const V2TIMString& groupID, const V2TIMString& userID,
V2TIMCallback* callback) = 0;
/////////////////////////////////////////////////////////////////////////////////
// 加群申请
/////////////////////////////////////////////////////////////////////////////////
/**
* 4.1 获取加群申请列表
* @note 最多支持50个
*/
virtual void GetGroupApplicationList(
V2TIMValueCallback<V2TIMGroupApplicationResult>* callback) = 0;
/**
* 4.2 同意某一条加群申请
*/
virtual void AcceptGroupApplication(const V2TIMGroupApplication& application,
const V2TIMString& reason, V2TIMCallback* callback) = 0;
/**
* 4.3 拒绝某一条加群申请
*/
virtual void RefuseGroupApplication(const V2TIMGroupApplication& application,
const V2TIMString& reason, V2TIMCallback* callback) = 0;
/**
* 4.4 标记申请列表为已读
*/
virtual void SetGroupApplicationRead(V2TIMCallback* callback) = 0;
/////////////////////////////////////////////////////////////////////////////////
//
// 社群-话题
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 5.1 获取当前用户已经加入的支持话题的社群列表
*/
virtual void GetJoinedCommunityList(V2TIMValueCallback<V2TIMGroupInfoVector> *callback) = 0;
/**
* 5.2 创建话题
*/
virtual void CreateTopicInCommunity(const V2TIMString &groupID, const V2TIMTopicInfo &topicInfo,
V2TIMValueCallback<V2TIMString> *callback) = 0;
/**
* 5.3 删除话题
*/
virtual void DeleteTopicFromCommunity(const V2TIMString &groupID,
const V2TIMStringVector &topicIDList,
V2TIMValueCallback<V2TIMTopicOperationResultVector> *callback) = 0;
/**
* 5.4 修改话题信息
*/
virtual void SetTopicInfo(const V2TIMTopicInfo &topicInfo, V2TIMCallback *callback) = 0;
/**
* 5.5 获取话题列表。
* @note: topicIDList 传空时,获取此社群下的所有话题列表
*/
virtual void GetTopicInfoList(const V2TIMString &groupID, const V2TIMStringVector &topicIDList,
V2TIMValueCallback<V2TIMTopicInfoResultVector> *callback) = 0;
};
#endif // __V2TIM_GROUP_MANAGER_H__

View File

@@ -0,0 +1,622 @@
// Copyright (c) 2021 Tencent. All rights reserved.
/////////////////////////////////////////////////////////////////////////////////
//
// IMSDK 全局监听类
//
/////////////////////////////////////////////////////////////////////////////////
#ifndef __V2TIM_LISTENER_H__
#define __V2TIM_LISTENER_H__
#include "V2TIMCommon.h"
#include "V2TIMConversation.h"
#include "V2TIMFriendship.h"
#include "V2TIMGroup.h"
#include "V2TIMMessage.h"
#include "V2TIMSignaling.h"
/////////////////////////////////////////////////////////////////////////////////
//
// SDK 事件监听类
//
/////////////////////////////////////////////////////////////////////////////////
class TIM_API V2TIMSDKListener {
public:
V2TIMSDKListener();
virtual ~V2TIMSDKListener();
/**
* SDK 正在连接到腾讯云服务器
*/
virtual void OnConnecting() {}
/**
* SDK 已经成功连接到腾讯云服务器
*/
virtual void OnConnectSuccess() {}
/**
* SDK 连接腾讯云服务器失败
*/
virtual void OnConnectFailed(int error_code, const V2TIMString &error_message) {}
/**
* 当前用户被踢下线,此时可以 UI 提示用户,并再次调用 V2TIMManager 的 login() 函数重新登录。
*/
virtual void OnKickedOffline() {}
/**
* 在线时票据过期:此时您需要生成新的 userSig 并再次调用 V2TIMManager 的 login() 函数重新登录。
*/
virtual void OnUserSigExpired() {}
/**
* 登录用户的资料发生了更新
*
*/
virtual void OnSelfInfoUpdated(const V2TIMUserFullInfo &info) {}
/**
* 用户状态变更通知
*
* @note 收到通知的情况:
* 1. 订阅过的用户发生了状态变更(包括在线状态和自定义状态),会触发该回调
* 2. 在 IM 控制台打开了好友状态通知开关,即使未主动订阅,当好友状态发生变更时,也会触发该回调
* 3. 同一个账号多设备登录,当其中一台设备修改了自定义状态,所有设备都会收到该回调
*/
virtual void OnUserStatusChanged(const V2TIMUserStatusVector &userStatusList) {}
};
/////////////////////////////////////////////////////////////////////////////////
//
// (二)基本消息(文本消息和自定义消息)的事件监听类
//
/////////////////////////////////////////////////////////////////////////////////
class TIM_API V2TIMSimpleMsgListener {
public:
V2TIMSimpleMsgListener();
virtual ~V2TIMSimpleMsgListener();
/**
* 收到 C2C 文本消息
*
* @param msgID 消息唯一标识
* @param sender 发送方信息
* @param text 发送内容
*/
virtual void OnRecvC2CTextMessage(const V2TIMString &msgID, const V2TIMUserFullInfo &sender,
const V2TIMString &text) {}
/**
* 收到 C2C 自定义(信令)消息
*
* @param msgID 消息唯一标识
* @param sender 发送方信息
* @param customData 发送内容
*/
virtual void OnRecvC2CCustomMessage(const V2TIMString &msgID, const V2TIMUserFullInfo &sender,
const V2TIMBuffer &customData) {}
/**
* 收到群文本消息
*
* @param msgID 消息唯一标识
* @param groupID 群 ID
* @param sender 发送方群成员信息
* @param text 发送内容
*/
virtual void OnRecvGroupTextMessage(const V2TIMString &msgID, const V2TIMString &groupID,
const V2TIMGroupMemberFullInfo &sender,
const V2TIMString &text) {}
/**
* 收到群自定义(信令)消息
*
* @param msgID 消息唯一标识
* @param groupID 群 ID
* @param sender 发送方群成员信息
* @param customData 发送内容
*/
virtual void OnRecvGroupCustomMessage(const V2TIMString &msgID, const V2TIMString &groupID,
const V2TIMGroupMemberFullInfo &sender,
const V2TIMBuffer &customData) {}
};
DEFINE_POINT_VECTOR(V2TIMSimpleMsgListener)
typedef TXPV2TIMSimpleMsgListenerVector V2TIMSimpleMsgListenerVector;
/////////////////////////////////////////////////////////////////////////////////
//
// (三)高级消息监听器
//
/////////////////////////////////////////////////////////////////////////////////
class TIM_API V2TIMAdvancedMsgListener {
public:
V2TIMAdvancedMsgListener();
virtual ~V2TIMAdvancedMsgListener();
/**
* 收到新消息
*
* @param message 消息
*/
virtual void OnRecvNewMessage(const V2TIMMessage &message) {}
/**
* C2C 对端用户会话已读通知(如果对端用户调用 MarkC2CMessageAsRead 接口,自己会收到该回调,回调只会携带对端 userID 和对端已读 timestamp 信息)
*
* @param receiptList 已读回执列表
*/
virtual void OnRecvC2CReadReceipt(const V2TIMMessageReceiptVector &receiptList) {}
/**
* 消息已读回执通知
*
* @param receiptList 已读回执列表
*/
virtual void OnRecvMessageReadReceipts(const V2TIMMessageReceiptVector &receiptList) {}
/**
* 收到消息撤回的通知
*
* @param messageID 消息唯一标识
*/
virtual void OnRecvMessageRevoked(const V2TIMString &messageID) {}
/**
* 消息内容被修改
*/
virtual void OnRecvMessageModified(const V2TIMMessage &message) {}
/**
* 消息扩展信息更新
*/
virtual void OnRecvMessageExtensionsChanged(const V2TIMString &msgID,
const V2TIMMessageExtensionVector &extensions) {}
/**
* 消息扩展信息被删除
*/
virtual void OnRecvMessageExtensionsDeleted(const V2TIMString &msgID,
const V2TIMStringVector &extensionKeys) {}
};
/////////////////////////////////////////////////////////////////////////////////
//
// (四)群组事件的监听类
//
/////////////////////////////////////////////////////////////////////////////////
class TIM_API V2TIMGroupListener {
public:
V2TIMGroupListener();
virtual ~V2TIMGroupListener();
/**
* 有新成员加入群(该群所有的成员都能收到)
* 会议群Meeting默认无此回调如需回调请前往 [控制台](https://console.cloud.tencent.com/im)
* (功能配置 -> 群组配置 -> 群系统通知配置 -> 群成员变更通知) 主动配置。
*
* @param groupID 群 ID
* @param memberList 加入的成员
*/
virtual void OnMemberEnter(const V2TIMString &groupID,
const V2TIMGroupMemberInfoVector &memberList) {}
/**
* 有成员离开群(该群所有的成员都能收到)
* 会议群Meeting默认无此回调如需回调请前往 [控制台](https://console.cloud.tencent.com/im)
* (功能配置 -> 群组配置 -> 群系统通知配置 -> 群成员变更通知) 主动配置。
*
* @param groupID 群 ID
* @param member 离开的成员
*/
virtual void OnMemberLeave(const V2TIMString &groupID, const V2TIMGroupMemberInfo &member) {}
/**
* 某成员被拉入某群(该群所有的成员都能收到)
*
* @param groupID 群 ID
* @param opUser 处理人
* @param memberList 被拉进群成员
*/
virtual void OnMemberInvited(const V2TIMString &groupID, const V2TIMGroupMemberInfo &opUser,
const V2TIMGroupMemberInfoVector &memberList) {}
/**
* 有成员被踢出某群(该群所有的成员都能收到)
*
* @param groupID 群 ID
* @param opUser 处理人
* @param memberList 被踢成员
*/
virtual void OnMemberKicked(const V2TIMString &groupID, const V2TIMGroupMemberInfo &opUser,
const V2TIMGroupMemberInfoVector &memberList) {}
/**
* 某成员信息发生变更(该群所有的成员都能收到)。
* @note 会议群Meeting和直播群AVChatRoom默认无此回调如需回调请前往 [控制台](https://console.cloud.tencent.com/im) (功能配置 -> 群组配置 -> 群系统通知配置 -> 群成员资料变更通知) 主动配置。
*
* @param groupID 群 ID
* @param v2TIMGroupMemberChangeInfoList 被修改的群成员信息
*/
virtual void OnMemberInfoChanged(
const V2TIMString &groupID,
const V2TIMGroupMemberChangeInfoVector &v2TIMGroupMemberChangeInfoList) {}
/**
* 创建群(主要用于多端同步)
*
* @param groupID 群 ID
*/
virtual void OnGroupCreated(const V2TIMString &groupID) {}
/**
* 群被解散了(全员能收到)
*
* @param groupID 群 ID
* @param opUser 处理人
*/
virtual void OnGroupDismissed(const V2TIMString &groupID, const V2TIMGroupMemberInfo &opUser) {}
/**
* 群被回收(全员能收到)
*
* @param groupID 群 ID
* @param opUser 处理人
*/
virtual void OnGroupRecycled(const V2TIMString &groupID, const V2TIMGroupMemberInfo &opUser) {}
/**
* 群信息被修改(全员能收到)
* 以下字段的修改可能会引发该通知 groupName & introduction & notification & faceUrl & owner & allMute & custom
* 控制指定字段 下发通知/存漫游 请前往 [控制台](https://console.cloud.tencent.com/im) (功能配置 -> 群组配置 -> 群系统通知配置 -> 群资料变更通知) 主动配置。
*
* @param changeInfos 修改的群信息
*/
virtual void OnGroupInfoChanged(const V2TIMString &groupID,
const V2TIMGroupChangeInfoVector &changeInfos) {}
/**
* 收到群属性更新的回调
*
* @param groupID 群 ID
* @param groupAttributeMap 群的所有属性
*/
virtual void OnGroupAttributeChanged(const V2TIMString &groupID,
const V2TIMGroupAttributeMap &groupAttributeMap) {}
/**
* 某个已加入的群的计数器被修改了(全员能收到)
*
* @param groupID 群 ID
* @param key 当前变更的群计数器的 key
* @param newValue 变更之后的 value
*/
virtual void OnGroupCounterChanged(const V2TIMString &groupID,
const V2TIMString &key, int64_t newValue) {}
/**
* 有新的加群请求(只有群主或管理员会收到)
*
* @param groupID 群 ID
* @param member 申请人
* @param opReason 申请原因
*/
virtual void OnReceiveJoinApplication(const V2TIMString &groupID,
const V2TIMGroupMemberInfo &member,
const V2TIMString &opReason) {}
/**
* 加群请求已经被群主或管理员处理了(只有申请人能够收到)
*
* @param groupID 群 ID
* @param opUser 处理人
* @param isAgreeJoin 是否同意加群
* @param opReason 处理原因
*/
virtual void OnApplicationProcessed(const V2TIMString &groupID,
const V2TIMGroupMemberInfo &opUser, bool isAgreeJoin,
const V2TIMString &opReason) {}
/**
* 指定管理员身份
*
* @param groupID 群 ID
* @param opUser 处理人
* @param memberList 被处理的群成员
*/
virtual void OnGrantAdministrator(const V2TIMString &groupID,
const V2TIMGroupMemberInfo &opUser,
const V2TIMGroupMemberInfoVector &memberList) {}
/**
* 取消管理员身份
*
* @param groupID 群 ID
* @param opUser 处理人
* @param memberList 被处理的群成员
*/
virtual void OnRevokeAdministrator(const V2TIMString &groupID,
const V2TIMGroupMemberInfo &opUser,
const V2TIMGroupMemberInfoVector &memberList) {}
/**
* 主动退出群组主要用于多端同步直播群AVChatRoom不支持
*
* @param groupID 群 ID
*/
virtual void OnQuitFromGroup(const V2TIMString &groupID) {}
/**
* 收到 RESTAPI 下发的自定义系统消息
*
* @param groupID 群 ID
* @param customData 自定义数据
*/
virtual void OnReceiveRESTCustomData(const V2TIMString &groupID,
const V2TIMBuffer &customData) {}
/**
* 话题创建
*
* @param topicID 话题 ID
*/
virtual void OnTopicCreated(const V2TIMString &groupID, const V2TIMString &topicID) {}
/**
* 话题被删除
* @param groupID 话题所属的社群 ID
* @param topicIDList 话题列表
*/
virtual void OnTopicDeleted(const V2TIMString &groupID, const V2TIMStringVector &topicIDList) {}
/**
* 话题更新
* @param topicInfo 话题信息
*/
virtual void OnTopicChanged(const V2TIMString &groupID, const V2TIMTopicInfo &topicInfo) {}
};
/////////////////////////////////////////////////////////////////////////////////
//
// (五)日志监听类
//
/////////////////////////////////////////////////////////////////////////////////
class TIM_API V2TIMLogListener {
public:
V2TIMLogListener();
virtual ~V2TIMLogListener();
/**
* 14.1 有日志打印时的回调
*
* @param logLevel 日志等级, 参见 V2TIMLogLevel
* @param logContent 日志内容
*/
virtual void OnLog(V2TIMLogLevel logLevel, const V2TIMString &logContent) {}
};
/////////////////////////////////////////////////////////////////////////////////
//
// (六)会话事件的监听类
//
/////////////////////////////////////////////////////////////////////////////////
class TIM_API V2TIMConversationListener {
public:
V2TIMConversationListener();
virtual ~V2TIMConversationListener();
/**
* 同步服务器会话开始SDK
* 会在登录成功或者断网重连后自动同步服务器会话,您可以监听这个事件做一些 UI 进度展示操作。
*/
virtual void OnSyncServerStart() {}
/**
* 同步服务器会话完成,如果会话有变更,会通过 OnNewConversation | OnConversationChanged
* 回调告知客户
*/
virtual void OnSyncServerFinish() {}
/**
* 同步服务器会话失败
*/
virtual void OnSyncServerFailed() {}
/**
* 有新的会话(比如收到一个新同事发来的单聊消息、或者被拉入了一个新的群组中),可以根据会话的
* lastMessage -> timestamp 重新对会话列表做排序
*
* @param conversationList 会话列表
*/
virtual void OnNewConversation(const V2TIMConversationVector &conversationList) {}
/**
* 某些会话的关键信息发生变化(未读计数发生变化、最后一条消息被更新等等),可以根据会话的
* lastMessage -> timestamp 重新对会话列表做排序
*
* @param conversationList 会话列表
*/
virtual void OnConversationChanged(const V2TIMConversationVector &conversationList) {}
/**
* 全部会话未读总数变更的通知5.3.425 及以上版本支持)
*
* @note
* - 当您调用 GetTotalUnreadMessageCount 获取全部会话未读总数以后任意会话的未读数发生变化时SDK 都会通过该回调把最新的未读总数通知给您。
* - 未读总数会减去设置为免打扰的会话的未读数,即消息接收选项设置为
* V2TIM_NOT_RECEIVE_MESSAGE or V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE 的会话。
*/
virtual void OnTotalUnreadMessageCountChanged(uint64_t totalUnreadCount) {}
/**
* 根据 filter 过滤的未读消息总数变更通知7.0 及以上版本支持)
* @note
* - 您可以调用 SubscribeUnreadMessageCountByFilter 注册监听指定 filter 下的未读总数变化SDK 通过这个回调把最新的未读总数通知给您。
* - 您可以注册监听多个不同 filter 下的未读总数变化,这个回调的 filter 参数就是注册监听时指定的 filter该 filter 携带了 conversationType、conversationGroup 和 markType 三个字段,通过判断这三字段是不是都相同,来区分出不同的 filter。
* - 未读总数会减去设置为免打扰的会话的未读数,即消息接收选项设置为
* V2TIM_NOT_RECEIVE_MESSAGE or V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE 的会话。
*/
virtual void OnUnreadMessageCountChangedByFilter(const V2TIMConversationListFilter &filter, uint64_t totalUnreadCount) {}
/////////////////////////////////////////////////////////////////////////////////
//
// 会话分组相关通知(从 6.5 版本开始支持)
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 会话分组被创建
*/
virtual void OnConversationGroupCreated(const V2TIMString &groupName,
const V2TIMConversationVector &conversationList) {}
/**
* 会话分组被删除
*/
virtual void OnConversationGroupDeleted(const V2TIMString &groupName) {}
/**
* 会话分组名变更
*/
virtual void OnConversationGroupNameChanged(const V2TIMString &oldName, const V2TIMString &newName) {}
/**
* 会话分组新增会话
*/
virtual void OnConversationsAddedToGroup(const V2TIMString &groupName,
const V2TIMConversationVector &conversationList) {}
/**
* 会话分组删除会话
*/
virtual void OnConversationsDeletedFromGroup(const V2TIMString &groupName,
const V2TIMConversationVector &conversationList) {}
};
/////////////////////////////////////////////////////////////////////////////////
//
// (七)关系链事件的监听类
//
/////////////////////////////////////////////////////////////////////////////////
class TIM_API V2TIMFriendshipListener {
public:
V2TIMFriendshipListener();
virtual ~V2TIMFriendshipListener();
/**
* 好友申请新增通知,两种情况会收到这个回调:
* 1. 自己申请加别人好友
* 2. 别人申请加自己好友
*/
virtual void OnFriendApplicationListAdded(const V2TIMFriendApplicationVector &applicationList) {}
/**
* 好友申请删除通知,四种情况会收到这个回调
* 1. 调用 DeleteFriendApplication 主动删除好友申请
* 2. 调用 RefuseFriendApplication 拒绝好友申请
* 3. 调用 AcceptFriendApplication 同意好友申请且同意类型为 V2TIM_FRIEND_ACCEPT_AGREE 时
* 4. 申请加别人好友被拒绝
*/
virtual void OnFriendApplicationListDeleted(const V2TIMStringVector &userIDList) {}
/**
* 好友申请已读通知,如果调用 setFriendApplicationRead
* 设置好友申请列表已读,会收到这个回调(主要用于多端同步)
*/
virtual void OnFriendApplicationListRead() {}
/**
* 好友新增通知
*/
virtual void OnFriendListAdded(const V2TIMFriendInfoVector &userIDList) {}
/**
* 好友删除通知,,两种情况会收到这个回调:
* 1. 自己删除好友(单向和双向删除都会收到回调)
* 2. 好友把自己删除(双向删除会收到)
*/
virtual void OnFriendListDeleted(const V2TIMStringVector &userIDList) {}
/**
* 黑名单新增通知
*/
virtual void OnBlackListAdded(const V2TIMFriendInfoVector &infoList) {}
/**
* 黑名单删除通知
*/
virtual void OnBlackListDeleted(const V2TIMStringVector &userIDList) {}
/**
* 好友资料更新通知
*/
virtual void OnFriendInfoChanged(const V2TIMFriendInfoVector &infoList) {}
};
/////////////////////////////////////////////////////////////////////////////////
//
// (八)信令事件监听类
//
/////////////////////////////////////////////////////////////////////////////////
class TIM_API V2TIMSignalingListener {
public:
V2TIMSignalingListener();
virtual ~V2TIMSignalingListener();
/**
* 收到邀请
*/
virtual void OnReceiveNewInvitation(const V2TIMString &inviteID, const V2TIMString &inviter,
const V2TIMString &groupID,
const V2TIMStringVector &inviteeList,
const V2TIMString &data) {}
/**
* 被邀请者接受邀请
*/
virtual void OnInviteeAccepted(const V2TIMString &inviteID, const V2TIMString &invitee,
const V2TIMString &data) {}
/**
* 被邀请者拒绝邀请
*/
virtual void OnInviteeRejected(const V2TIMString &inviteID, const V2TIMString &invitee,
const V2TIMString &data) {}
/**
* 邀请被取消
*/
virtual void OnInvitationCancelled(const V2TIMString &inviteID, const V2TIMString &inviter,
const V2TIMString &data) {}
/**
* 邀请超时
*/
virtual void OnInvitationTimeout(const V2TIMString &inviteID,
const V2TIMStringVector &inviteeList) {}
/**
* 邀请被修改6.7 及其以上版本支持)
*/
virtual void OnInvitationModified(const V2TIMString &inviteID, const V2TIMString &data) {}
};
#endif /* __V2TIM_LISTENER_H__ */

View File

@@ -0,0 +1,405 @@
// Copyright (c) 2021 Tencent. All rights reserved.
/////////////////////////////////////////////////////////////////////////////////
//
// IMSDK 主核心类,负责 IMSDK 的初始化、登录、消息收发,建群退群等功能
//
/////////////////////////////////////////////////////////////////////////////////
#ifndef __V2TIM_MANAGER_H__
#define __V2TIM_MANAGER_H__
#include "V2TIMCallback.h"
#include "V2TIMCommon.h"
#include "V2TIMFriendship.h"
#include "V2TIMGroup.h"
#include "V2TIMListener.h"
#include "V2TIMMessage.h"
class V2TIMMessageManager;
class V2TIMGroupManager;
class V2TIMConversationManager;
class V2TIMFriendshipManager;
class V2TIMOfflinePushManager;
class V2TIMSignalingManager;
class TIM_API V2TIMManager {
public:
virtual ~V2TIMManager() {}
/////////////////////////////////////////////////////////////////////////////////
//
// 初始化
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 1.1 获取 V2TIMManager 管理器实例。
*/
static V2TIMManager *GetInstance();
/**
* 1.2 添加 SDK 监听
*/
virtual void AddSDKListener(V2TIMSDKListener *listener) = 0;
/**
* 1.3 移除 SDK 监听
*/
virtual void RemoveSDKListener(V2TIMSDKListener* listener) = 0;
/**
* 1.4 初始化 SDK
*
* @param sdkAppID 应用 ID必填项可以在[控制台](https://console.cloud.tencent.com/im)中获取
* @param config 配置信息
* @return true成功false失败
*/
virtual bool InitSDK(uint32_t sdkAppID, const V2TIMSDKConfig &config) = 0;
/**
* 1.5 反初始化 SDK
*
*/
virtual void UnInitSDK() = 0;
/**
* 1.6 获取 SDK 版本
* @return 返回版本号,字符串表示,例如 5.0.10
*/
virtual V2TIMString GetVersion() = 0;
/**
* 1.7 获取服务器当前时间
*
* 可用于信令离线推送场景下超时判断。
*
* 示例:
* 信令邀请方:设置邀请的服务器时间 serverTime 。
* 信令接收方:收到信令推送,根据 serverTime 判断信令是否超时 。
*
* @return 服务器时间,单位 s
*/
virtual int64_t GetServerTime() = 0;
/////////////////////////////////////////////////////////////////////////////////
//
// 登录登出
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 2.1 登录
*
* 登录需要设置用户名 userID 和用户签名 userSiguserSig 生成请参考 [UserSig 后台
* API](https://cloud.tencent.com/document/product/269/32688)。
*
* @note 请注意如下特殊逻辑:
* - 登陆时票据过期Login 函数的回调会返回 ERR_USER_SIG_EXPIRED6206 错误码,此时生成新的 userSig 重新登录。
* - 在线时票据过期:用户在线期间也可能收到 V2TIMSDKListener::OnUserSigExpired 回调,此时也是需要您生成新的 userSig 并重新登录。
* - 在线时被踢下线用户在线情况下被踢SDK 会通过 V2TIMSDKListener::OnKickedOffline 回调通知给您,此时可以 UI 提示用户,并再次调用 Login() 重新登录。
* - 同平台多设备在线该功能为IM旗舰版功能购买[旗舰版套餐包](https://buy.cloud.tencent.com/avc?from=17487)后可使用,详见[价格说明](https://cloud.tencent.com/document/product/269/11673?from=17224#.E5.9F.BA.E7.A1.80.E6.9C.8D.E5.8A.A1.E8.AF.A6.E6.83.85)。
*/
virtual void Login(const V2TIMString &userID, const V2TIMString &userSig,
V2TIMCallback *callback) = 0;
/**
*
* 2.2 登出
*
* 退出登录,如果切换账号,需要 Logout 回调成功或者失败后才能再次 Login否则 Login 可能会失败。
*/
virtual void Logout(V2TIMCallback *callback) = 0;
/**
* 2.3 获取登录用户
*/
virtual V2TIMString GetLoginUser() = 0;
/**
* 2.4 获取登录状态
*
* 如果用户已经处于已登录和登录中状态,请勿再频繁调用登录接口登录。
*
* @return 登录状态
*/
virtual V2TIMLoginStatus GetLoginStatus() = 0;
/////////////////////////////////////////////////////////////////////////////////
//
// 消息收发
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 3.1 设置基本消息(文本消息和自定义消息)的事件监听器
*
* @note 图片消息、视频消息、语音消息等高级消息的监听,请参考: @ref V2TIMMessageManager::AddAdvancedMsgListener() 接口。
*
*/
virtual void AddSimpleMsgListener(V2TIMSimpleMsgListener *listener) = 0;
/**
* 3.2 移除基本消息(文本消息和自定义消息)的事件监听器
*/
virtual void RemoveSimpleMsgListener(V2TIMSimpleMsgListener *listener) = 0;
/**
* 3.3 发送单聊普通文本消息(最大支持 12KB
*
* 文本消息支持云端的脏词过滤如果用户发送的消息中有敏感词callback 回调将会返回 ERR_SVR_COMM_SENSITIVE_TEXT(80001) 错误码。
*
* @return 返回消息的唯一标识 ID
*/
virtual V2TIMString SendC2CTextMessage(const V2TIMString &text, const V2TIMString &userID,
V2TIMSendCallback *callback) = 0;
/**
* 3.4 发送单聊自定义(信令)消息(最大支持 12KB
*
* 自定义消息本质就是一端二进制
* buffer您可以在其上自由组织自己的消息格式常用于发送信令但是自定义消息不支持云端敏感词过滤。
*
* @return 返回消息的唯一标识 ID
* @note 该接口发送的消息默认不会推送,如果需要推送,请调用 @ref
* V2TIMMessageManager::SendMessage 接口。
*/
virtual V2TIMString SendC2CCustomMessage(const V2TIMBuffer &customData,
const V2TIMString &userID,
V2TIMSendCallback *callback) = 0;
/**
* 3.5 发送群聊普通文本消息(最大支持 12KB
*
* @param priority 设置消息的优先级,我们没有办法所有消息都能 100%
* 送达每一个用户,但高优先级的消息会有更高的送达成功率。
* - @ref
* V2TIM_PRIORITY_HIGH云端会优先传输适用于在群里发送重要消息比如主播发送的文本消息等。
* - @ref
* V2TIM_PRIORITY_NORMAL云端按默认优先级传输适用于在群里发送非重要消息比如观众发送的弹幕消息等。
* @return 返回消息的唯一标识 ID
*/
virtual V2TIMString SendGroupTextMessage(const V2TIMString &text, const V2TIMString &groupID,
V2TIMMessagePriority priority,
V2TIMSendCallback *callback) = 0;
/**
* 3.6 发送群聊自定义(信令)消息(最大支持 12KB
*
* @param priority 设置消息的优先级,我们没有办法所有消息都能 100%
* 送达每一个用户,但高优先级的消息会有更高的送达成功率。
* - @ref
* V2TIM_PRIORITY_HIGH云端会优先传输适用于在群里发送重要信令比如连麦邀请PK邀请、礼物赠送等关键性信令。
* - @ref
* V2TIM_PRIORITY_NORMAL云端按默认优先级传输适用于在群里发送非重要信令比如观众的点赞提醒等等。
* @return 返回消息的唯一标识 ID
* @note 该接口发送的消息默认不会推送,如果需要推送,请调用 @ref
* V2TIMMessageManager::SendMessage 接口。
*/
virtual V2TIMString SendGroupCustomMessage(const V2TIMBuffer &customData,
const V2TIMString &groupID,
V2TIMMessagePriority priority,
V2TIMSendCallback *callback) = 0;
/////////////////////////////////////////////////////////////////////////////////
//
// 群相关操作
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 4.1 设置群组监听器
*/
virtual void AddGroupListener(V2TIMGroupListener *listener) = 0;
/**
* 4.2 设置群组监听器
*/
virtual void RemoveGroupListener(V2TIMGroupListener *listener) = 0;
/**
* 4.3 创建群组
*
* @param groupType
* 群类型,我们为您预定义好了几种常用的群类型,您也可以在控制台定义自己需要的群类型:
* - "Work" :工作群,成员上限 200 人,不支持由用户主动加入,需要他人邀请入群,适合用于类似微信中随意组建的工作群(对应老版本的 Private 群)。
* - "Public" :公开群,成员上限 2000 人,任何人都可以申请加群,但加群需群主或管理员审批,适合用于类似 QQ 中由群主管理的兴趣群。
* - "Meeting" :会议群,成员上限 6000 人,任何人都可以自由进出,且加群无需被审批,适合用于视频会议和在线培训等场景(对应老版本的 ChatRoom 群)。
* - "Community" :社群,成员上限 100000 人任何人都可以自由进出且加群无需被审批适合用于知识分享和游戏交流等超大社区群聊场景。5.8 版本开始支持,需要您购买旗舰版套餐。
* - "AVChatRoom" :直播群,人数无上限,任何人都可以自由进出,消息吞吐量大,适合用作直播场景中的高并发弹幕聊天室。
*
* @param groupID 自定义群组 ID可以传空字符串此时系统会自动分配 groupID并通过 callback 返回。
* "Community" 类型自定义群组 ID 必须以 "@TGS#_" 作为前缀。
* @param groupName 群名称,不能为空字符串。
*
* @note 请注意如下特殊逻辑:
* - 不支持在同一个 SDKAPPID 下创建两个相同 groupID 的群。
* - 社群Community功能仅 5.8.1668 增强版及以上版本支持,需[购买旗舰版套餐包](https://buy.cloud.tencent.com/avc?from=17213)并[申请开通](https://cloud.tencent.com/document/product/269/3916?from=17215)后方可使用。
* - 直播群AVChatRoom在进程重启或重新登录之后如果想继续接收直播群的消息请您调用 joinGroup 重新加入直播群。
*/
virtual void CreateGroup(const V2TIMString &groupType, const V2TIMString &groupID,
const V2TIMString &groupName,
V2TIMValueCallback<V2TIMString> *callback) = 0;
/**
* 4.4 加入群组
*
* @note 请注意如下特殊逻辑:
* - 工作群Work不能主动入群只能通过群成员调用 V2TIMGroupManager::InviteUserToGroup() 接口邀请入群。
* - 公开群Public申请入群后需要管理员审批管理员在收到 V2TIMGroupListener::OnReceiveJoinApplication 回调后调用
* V2TIMGroupManager::GetGroupApplicationList() 接口处理加群请求。
* - 其他群:可以直接入群。
* - 直播群AVChatRoom在进程重启或重新登录之后如果想继续接收直播群的消息请您调用 joinGroup 重新加入直播群。
* - 直播群AVChatRoom直播群新成员可以查看入群前消息该功能为 IM 旗舰版功能,[购买旗舰版套餐包](https://buy.cloud.tencent.com/avc?from=17484)后可使用,详见[价格说明](https://cloud.tencent.com/document/product/269/11673?from=17179#.E5.9F.BA.E7.A1.80.E6.9C.8D.E5.8A.A1.E8.AF.A6.E6.83.85)
*/
virtual void JoinGroup(const V2TIMString &groupID, const V2TIMString &message,
V2TIMCallback *callback) = 0;
/**
* 4.5 退出群组
*
* @note 在公开群Public、会议Meeting和直播群AVChatRoom群主是不可以退群的群主只能调用 DismissGroup 解散群组。
*/
virtual void QuitGroup(const V2TIMString &groupID, V2TIMCallback *callback) = 0;
/**
* 4.6 解散群组
* @note 请注意如下特殊逻辑:
* - Work任何人都无法解散群组。
* - 其他群:群主可以解散群组。
*/
virtual void DismissGroup(const V2TIMString &groupID, V2TIMCallback *callback) = 0;
/////////////////////////////////////////////////////////////////////////////////
//
// 资料相关操作
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 5.1 获取用户资料
*
* @note 请注意:
* - 获取自己的资料,传入自己的 ID 即可。
* - userIDList 建议一次最大 100 个,因为数量过多可能会导致数据包太大被后台拒绝,后台限制数据包最大为 1MB。
*/
virtual void GetUsersInfo(const V2TIMStringVector &userIDList,
V2TIMValueCallback<V2TIMUserFullInfoVector> *callback) = 0;
/**
* 5.2 修改个人资料
*/
virtual void SetSelfInfo(const V2TIMUserFullInfo &info, V2TIMCallback *callback) = 0;
/**
* 5.3 查询用户状态,从 6.3 版本开始支持
*
* @param userIDList 需要获取的用户 ID
*
* @note 请注意:
* - 如果您想查询自己的自定义状态,您只需要传入自己的 userID 即可
* - 当您批量查询时,接口只会返回查询成功的用户状态信息;当所有用户均查询失败时,接口会报错
* - 查询其他用户状态为 IM 旗舰版功能,[购买旗舰版套餐包](https://buy.cloud.tencent.com/avc?from=17491)后可使用,详见[价格说明](https://cloud.tencent.com/document/product/269/11673?from=17472#.E5.9F.BA.E7.A1.80.E6.9C.8D.E5.8A.A1.E8.AF.A6.E6.83.85)。
*/
virtual void GetUserStatus(const V2TIMStringVector &userIDList,
V2TIMValueCallback<V2TIMUserStatusVector> *callback) = 0;
/**
* 5.4 设置自己的状态,从 6.3 版本开始支持
*
* @param status 待设置的自定义状态
*
* @note 请注意,该接口只支持设置自己的自定义状态,即 V2TIMUserStatus.customStatus
*/
virtual void SetSelfStatus(const V2TIMUserStatus &status, V2TIMCallback *callback) = 0;
/**
* 5.5 订阅用户状态,从 6.3 版本开始支持
*
* @param userIDList 待订阅的用户 ID
*
* @note 请注意
* - 当成功订阅用户状态后,当对方的状态(包含在线状态、自定义状态)发生变更后,您可以监听 OnUserStatusChanged 回调来感知
* - 如果您需要订阅好友列表的状态,您只需要在控制台上打开开关即可,无需调用该接口
* - 该接口不支持订阅自己,您可以通过监听 OnUserStatusChanged 回调来感知自身的自定义状态的变更
* - 订阅列表有个数限制,超过限制后,会自动淘汰最先订阅的用户
* - 该功能为 IM 旗舰版功能,[购买旗舰版套餐包](https://buy.cloud.tencent.com/avc?from=17491)后可使用,详见[价格说明](https://cloud.tencent.com/document/product/269/11673?from=17472#.E5.9F.BA.E7.A1.80.E6.9C.8D.E5.8A.A1.E8.AF.A6.E6.83.85)。
*/
virtual void SubscribeUserStatus(const V2TIMStringVector &userIDList, V2TIMCallback *callback) = 0;
/**
* 5.6 取消订阅用户状态,从 6.3 版本开始支持
*
* @note
* - 当 userIDList 为空时,取消当前所有的订阅
* - 该功能为 IM 旗舰版功能,[购买旗舰版套餐包](https://buy.cloud.tencent.com/avc?from=17491)后可使用,详见[价格说明](https://cloud.tencent.com/document/product/269/11673?from=17472#.E5.9F.BA.E7.A1.80.E6.9C.8D.E5.8A.A1.E8.AF.A6.E6.83.85)。
*/
virtual void UnsubscribeUserStatus(const V2TIMStringVector &userIDList, V2TIMCallback *callback) = 0;
/////////////////////////////////////////////////////////////////////////////////
//
// 高级功能
//
/////////////////////////////////////////////////////////////////////////////////
/**
* ## 高级消息功能入口
*
* @return 高级消息管理类实例
*/
virtual V2TIMMessageManager *GetMessageManager() = 0;
/**
* ## 高级群组功能入口
*
* @return 高级群组管理类实例
*/
virtual V2TIMGroupManager *GetGroupManager() = 0;
/**
* ## 会话功能入口
*
* @return 会话管理类实例
*/
virtual V2TIMConversationManager *GetConversationManager() = 0;
/**
* ## 关系链功能入口
*
* @return 关系链管理类实例
*/
virtual V2TIMFriendshipManager *GetFriendshipManager() = 0;
/**
* ## 离线推送功能入口
*
* @return 离线推送功能类实例
*/
virtual V2TIMOfflinePushManager *GetOfflinePushManager() = 0;
/**
* ## 信令功能入口
*
* @return 信令管理类实例
*/
virtual V2TIMSignalingManager *GetSignalingManager() = 0;
/////////////////////////////////////////////////////////////////////////////////
//
// 扩展接口
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 实验性 API 接口
*
* @param api 接口名称
* @param param 接口参数
*
* @note 该接口提供一些实验性功能
*/
virtual void CallExperimentalAPI(const V2TIMString &api, const void *param,
V2TIMValueCallback<V2TIMBaseObject> *callback) = 0;
};
#endif // __V2TIM_MANAGER_H__

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,494 @@
// Copyright (c) 2021 Tencent. All rights reserved.
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 IMSDK
//
// 消息高级接口,里面包含了所有高级消息的创建、收发逻辑
//
/////////////////////////////////////////////////////////////////////
#ifndef __V2TIM_MESSAGE_MANAGER_H__
#define __V2TIM_MESSAGE_MANAGER_H__
#include "V2TIMCallback.h"
#include "V2TIMDefine.h"
#include "V2TIMListener.h"
#include "V2TIMMessage.h"
class V2TIMMessageManager {
public:
virtual ~V2TIMMessageManager() {}
/////////////////////////////////////////////////////////////////////////////////
//
// 监听 - 高级(图片、语音、视频等)消息
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 1.1 添加高级消息的事件监听器
*/
virtual void AddAdvancedMsgListener(V2TIMAdvancedMsgListener *listener) = 0;
/**
* 1.2 移除高级消息监听器
*/
virtual void RemoveAdvancedMsgListener(V2TIMAdvancedMsgListener *listener) = 0;
/////////////////////////////////////////////////////////////////////////////////
//
// 创建 - 高级(图片、语音、视频等)消息
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 2.1 创建文本消息
*/
virtual V2TIMMessage CreateTextMessage(const V2TIMString &text) = 0;
/**
* 2.2 创建文本消息,并且可以附带 @ 提醒功能(该接口已弃用,推荐使用 CreateAtSignedGroupMessage 接口)
*
* 提醒消息仅适用于在群组中发送的消息
*
* @param atUserList 需要 @ 的用户列表,如果需要 @ALL请传入 kImSDK_MesssageAtALL 常量字符串。
* 举个例子,假设该条文本消息希望@提醒 denny 和 lucy 两个用户,同时又希望 @所有人atUserList
* 传 {"denny","lucy",kImSDK_MesssageAtALL}
*
* @note atUserList 使用注意事项
* - 默认情况下,最多支持 @ 30个用户超过限制后消息会发送失败。
* - atUserList 的总数不能超过默认最大数,包括 @ALL。
* - 直播群AVChatRoom不支持发送 @ 消息。
*/
virtual V2TIMMessage CreateTextAtMessage(const V2TIMString &text,
const V2TIMStringVector &atUserList) = 0;
/**
* 2.3 创建自定义消息
*/
virtual V2TIMMessage CreateCustomMessage(const V2TIMBuffer &data) = 0;
/**
* 2.4 创建自定义消息
*
* @param description 自定义消息描述信息做离线Push时文本展示。
* @param extension 离线 Push 时扩展字段信息。
*/
virtual V2TIMMessage CreateCustomMessage(const V2TIMBuffer &data,
const V2TIMString &description,
const V2TIMString &extension) = 0;
/**
* 2.5 创建图片消息(图片最大支持 28 MB
*/
virtual V2TIMMessage CreateImageMessage(const V2TIMString &imagePath) = 0;
/**
* 2.6 创建语音消息(语音最大支持 28 MB
*
* @param duration 语音时长,单位 s
*/
virtual V2TIMMessage CreateSoundMessage(const V2TIMString &soundPath, uint32_t duration) = 0;
/**
* 2.7 创建视频消息(视频最大支持 100 MB
*
* @param type 视频类型,如 mp4 mov 等
* @param duration 视频时长,单位 s
* @param snapshotPath 视频封面图片路径
*/
virtual V2TIMMessage CreateVideoMessage(const V2TIMString &videoFilePath,
const V2TIMString &type, uint32_t duration,
const V2TIMString &snapshotPath) = 0;
/**
* 2.8 创建文件消息(文件最大支持 100 MB
*/
virtual V2TIMMessage CreateFileMessage(const V2TIMString &filePath,
const V2TIMString &fileName) = 0;
/**
* 2.9 创建地理位置消息
*/
virtual V2TIMMessage CreateLocationMessage(const V2TIMString &desc, double longitude,
double latitude) = 0;
/**
* 2.10 创建表情消息
*
* SDK 并不提供表情包,如果开发者有表情包,可使用 index 存储表情在表情包中的索引,
* 或者直接使用 data 存储表情二进制信息以及字符串 key都由用户自定义SDK 内部只做透传。
*
* @param index 表情索引
* @param data 自定义数据
*/
virtual V2TIMMessage CreateFaceMessage(uint32_t index, const V2TIMBuffer &data) = 0;
/**
* 2.11 创建合并消息5.2.210 及以上版本支持)
*
* <p> 我们在收到一条合并消息的时候,通常会在聊天界面这样显示:
* <p> |vinson 和 lynx 的聊天记录 | -- title (标题)
* <p> |vinson新版本 SDK 计划什么时候上线呢? | -- abstract1 摘要信息1
* <p> |lynx计划下周一具体时间要看下这两天的系统测试情况..| -- abstract2 摘要信息2
* <p> |vinson好的. | -- abstract3 摘要信息3
* <p> 聊天界面通常只会展示合并消息的标题和摘要信息,完整的转发消息列表,需要用户主动点击转发消息 UI 后再获取。
*
* <p> 多条被转发的消息可以被创建成一条合并消息 V2TIMMessage然后调用 SendMessage 接口发送,实现步骤如下:
* <p> 1. 调用 CreateMergerMessage 创建一条合并消息 V2TIMMessage。
* <p> 2. 调用 SendMessage 发送转发消息 V2TIMMessage。
*
* <p> 收到合并消息解析步骤:
* <p> 1. 通过 V2TIMMessage 获取 mergerElem。
* <p> 2. 通过 mergerElem 获取 title 和 abstractList UI 展示。
* <p> 3. 当用户点击摘要信息 UI 的时候,调用 DownloadMessageList 接口获取转发消息列表。
*
*
* @param messageList 消息列表(最大支持 300 条,消息对象必须是 V2TIM_MSG_STATUS_SEND_SUCC 状态,消息类型不能为 V2TIMGroupTipsElem
* @param title 合并消息的来源,比如 "vinson 和 lynx 的聊天记录"、"xxx 群聊的聊天记录"。
* @param abstractList 合并消息的摘要列表(最大支持 5 条摘要,每条摘要的最大长度不超过 100 个字符),不同的消息类型可以设置不同的摘要信息,比如:
* 文本消息可以设置为sendertext图片消息可以设置为sender[图片]文件消息可以设置为sender[文件]。
* @param compatibleText 合并消息兼容文本,低版本 SDK 如果不支持合并消息,默认会收到一条文本消息,文本消息的内容为 compatibleText
* 该参数不能为空字符串。
*/
virtual V2TIMMessage CreateMergerMessage(const V2TIMMessageVector &messageList,
const V2TIMString &title,
const V2TIMStringVector &abstractList,
const V2TIMString &compatibleText) = 0;
/**
* 2.12 创建转发消息5.2.210 及以上版本支持)
*
* 如果需要转发一条消息,不能直接调用 SendMessage 接口发送原消息,需要先 CreateForwardMessage
* 创建一条转发消息再发送。
*
* @param message 待转发的消息对象,消息状态必须为 V2TIM_MSG_STATUS_SEND_SUCC消息类型不能为
* V2TIMGroupTipsElem。
* @return 转发消息对象elem 内容和原消息完全一致。
*/
virtual V2TIMMessage CreateForwardMessage(const V2TIMMessage &message) = 0;
/**
* 2.13 创建定向群消息6.0 及以上版本支持)
*
* 如果您需要在群内给指定群成员列表发消息,可以创建一条定向群消息,定向群消息只有指定群成员才能收到。
*
* @param message 原始消息对象
* @param receiverList 消息接收者列表
* @return 定向群消息对象
*
* @note 请注意:
* - 原始消息对象不支持群 @ 消息。
* - 消息接收者列表最大支持 50 个。
* - 社群Community和直播群AVChatRoom不支持发送定向群消息。
* - 定向群消息默认不计入群会话的未读计数。
*/
virtual V2TIMMessage CreateTargetedGroupMessage(const V2TIMMessage &message, const V2TIMStringVector &receiverList) = 0;
/**
* 2.14 创建带 @ 标记的群消息7.0 及以上版本支持)
*
* 如果您需要发送的群消息附带 @ 提醒功能,可以创建一条带 @ 标记的群消息。
*
* @param message 原始消息对象
* @param atUserList 需要 @ 的用户列表,如果需要 @ALL请传入 kImSDK_MesssageAtALL 常量字符串。
* 举个例子,假设该条消息希望@提醒 denny 和 lucy 两个用户,同时又希望@所有人atUserList 传 @[@"denny",@"lucy",kImSDK_MesssageAtALL]
* @return 群 @ 消息对象
*
* @note atUserList 使用注意事项
* - 默认情况下,最多支持 @ 30个用户超过限制后消息会发送失败。
* - atUserList 的总数不能超过默认最大数,包括 @ALL。
* - 直播群AVChatRoom不支持发送 @ 消息。
*/
virtual V2TIMMessage CreateAtSignedGroupMessage(const V2TIMMessage &message, const V2TIMStringVector &atUserList) = 0;
/////////////////////////////////////////////////////////////////////////////////
//
// 发送 - 高级(图片、语音、视频等)消息
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 3.1 发送高级消息(高级版本:可以指定优先级,推送信息等特性)
*
* @param message 待发送的消息对象,需要通过对应的 CreateXXXMessage 接口进行创建。
* @param receiver 消息接收者的 userID, 如果是发送 C2C 单聊消息,只需要指定 receiver
* 即可。
* @param groupID 目标群组 ID如果是发送群聊消息只需要指定 groupID 即可。
* @param priority
* 消息优先级,仅针对群聊消息有效。请把重要消息设置为高优先级(比如红包、礼物消息),高频且不重要的消息设置为低优先级(比如点赞消息)。
* @param onlineUserOnly 是否只有在线用户才能收到,如果设置为 true
* ,接收方历史消息拉取不到,常被用于实现“对方正在输入”或群组里的非重要提示等弱提示功能,该字段不支持
* AVChatRoom。
* @param offlinePushInfo 离线推送时携带的标题和内容。
* @return 消息唯一标识
* @note
* - 设置 offlinePushInfo 字段,需要先在 V2TIMOfflinePushManager
* 开启推送,推送开启后,除了自定义消息,其他消息默认都会推送。
* - 如果自定义消息也需要推送,请设置 offlinePushInfo 的 desc
* 字段,设置成功后,推送的时候会默认展示 desc 信息。
* - AVChatRoom 群聊不支持 onlineUserOnly 字段,如果是 AVChatRoom 请将该字段设置为 false。
* - 如果设置 onlineUserOnly 为 true 时,该消息为在线消息且不会被计入未读计数。
*/
virtual V2TIMString SendMessage(V2TIMMessage &message, const V2TIMString &receiver,
const V2TIMString &groupID, V2TIMMessagePriority priority,
bool onlineUserOnly,
const V2TIMOfflinePushInfo &offlinePushInfo,
V2TIMSendCallback *callback) = 0;
/////////////////////////////////////////////////////////////////////////////////
//
// 接收 - 设置消息的接口选项(接收|接收但不提醒|不接收)
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 4.1 设置针对某个用户的 C2C 消息接收选项(支持批量设置)
* <p>5.3.425 及以上版本支持
*
* @note 请注意:
* - 该接口支持批量设置,您可以通过参数 userIDList 设置一批用户,但一次最大允许设置 30 个用户。
* - 该接口调用频率被限制为1秒内最多调用5次。
*
*
* @param opt 三种类型的消息接收选项:
* V2TIMMessage.V2TIM_RECEIVE_MESSAGE在线正常接收消息离线时会有厂商的离线推送通知
* V2TIMMessage.V2TIM_NOT_RECEIVE_MESSAGE不会接收到消息
* V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE在线正常接收消息离线不会有推送通知
*
*/
virtual void SetC2CReceiveMessageOpt(const V2TIMStringVector &userIDList,
V2TIMReceiveMessageOpt opt, V2TIMCallback *callback) = 0;
/**
* 4.2 查询针对某个用户的 C2C 消息接收选项
* <p>5.3.425 及以上版本支持
*/
virtual void GetC2CReceiveMessageOpt(
const V2TIMStringVector &userIDList,
V2TIMValueCallback<V2TIMReceiveMessageOptInfoVector> *callback) = 0;
/**
* 4.3 设置群消息的接收选项
*
* @param opt 三种类型的消息接收选项:
* V2TIMMessage.V2TIM_RECEIVE_MESSAGE在线正常接收消息离线时会有厂商的离线推送通知
* V2TIMMessage.V2TIM_NOT_RECEIVE_MESSAGE不会接收到群消息
* V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE在线正常接收消息离线不会有推送通知
*/
virtual void SetGroupReceiveMessageOpt(const V2TIMString &groupID, V2TIMReceiveMessageOpt opt,
V2TIMCallback *callback) = 0;
/////////////////////////////////////////////////////////////////////////////////
//
// 获取历史消息、撤回、删除、标记已读等高级接口
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 5.1 获取历史消息高级接口
*
* @param option 拉取消息选项设置,可以设置从云端、本地拉取更老或更新的消息
*
* @note 请注意:
* - 如果设置为拉取云端消息,当 SDK 检测到没有网络,默认会直接返回本地数据
* -
* 只有会议群Meeting才能拉取到进群前的历史消息直播群AVChatRoom消息不存漫游和本地数据库调用这个接口无效
*/
virtual void GetHistoryMessageList(const V2TIMMessageListGetOption &option,
V2TIMValueCallback<V2TIMMessageVector> *callback) = 0;
/**
* 5.2 撤回消息
*
* @note 请注意:
* - 撤回消息的时间限制默认 2 minutes超过 2 minutes 的消息不能撤回,您也可以在 [控制台](https://console.cloud.tencent.com/im)(功能配置 -> 登录与消息 ->
* 消息撤回设置)自定义撤回时间限制。
* - 仅支持单聊和群组中发送的普通消息,无法撤销 onlineUserOnly 为 true 即仅在线用户才能收到的消息也无法撤销直播群AVChatRoom中的消息。
* - 如果发送方撤回消息,已经收到消息的一方会收到 V2TIMAdvancedMsgListener::OnRecvMessageRevoked 回调。
*/
virtual void RevokeMessage(const V2TIMMessage &message, V2TIMCallback *callback) = 0;
/**
* 5.3 消息变更
*
* @note 请注意:
* - 如果消息修改成功自己和对端用户C2C或群组成员Group都会收到 OnRecvMessageModified 回调。
* - 如果在修改消息过程中消息已经被其他人修改callback 会返回 ERR_SDK_MSG_MODIFY_CONFLICT 错误。
* - 消息无论修改成功或则失败callback 都会返回最新的消息对象。
*/
virtual void ModifyMessage(const V2TIMMessage &message, V2TIMCompleteCallback<V2TIMMessage> *callback) = 0;
/**
* 5.4 删除本地及云端的消息
*
* @note 该接口删除本地及云端的消息,且无法恢复。需要注意的是:
* - 一次最多只能删除 30 条消息
* - 要删除的消息必须属于同一会话
* - 一秒钟最多只能调用一次该接口
* -
* 如果该账号在其他设备上拉取过这些消息,那么调用该接口删除后,这些消息仍然会保存在那些设备上,即删除消息不支持多端同步。
*/
virtual void DeleteMessages(const V2TIMMessageVector &messages, V2TIMCallback *callback) = 0;
/**
* 5.5 清空单聊本地及云端的消息(不删除会话)
* <p> 5.4.666 及以上版本支持
*
* @note 请注意:
* - 会话内的消息在本地删除的同时,在服务器也会同步删除。
*
*/
virtual void ClearC2CHistoryMessage(const V2TIMString &userID, V2TIMCallback *callback) = 0;
/**
* 5.6 清空群聊本地及云端的消息(不删除会话)
* <p> 5.4.666 及以上版本支持
*
* @note 请注意:
* - 会话内的消息在本地删除的同时,在服务器也会同步删除。
*/
virtual void ClearGroupHistoryMessage(const V2TIMString &groupID, V2TIMCallback *callback) = 0;
/**
* 5.7 向群组消息列表中添加一条消息
*
* 该接口主要用于满足向群组聊天会话中插入一些提示性消息的需求,比如“您已经退出该群”,这类消息有展示
* 在聊天消息区的需求,但并没有发送给其他人的必要。
* 所以 InsertGroupMessageToLocalStorage() 相当于一个被禁用了网络发送能力的 SendMessage() 接口。
*
* @return msgID 消息唯一标识
*
* @note 通过该接口 save 的消息只存本地,程序卸载后会丢失。
*/
virtual V2TIMString InsertGroupMessageToLocalStorage(
V2TIMMessage &message, const V2TIMString &groupID, const V2TIMString &sender,
V2TIMValueCallback<V2TIMMessage> *callback) = 0;
/**
* 5.8 向C2C消息列表中添加一条消息
*
* 该接口主要用于满足向C2C聊天会话中插入一些提示性消息的需求比如“您已成功发送消息”这类消息有展示
* 在聊天消息去的需求,但并没有发送给对方的必要。
* 所以 InsertC2CMessageToLocalStorage()相当于一个被禁用了网络发送能力的 SendMessage() 接口。
*
* @return msgID 消息唯一表示
* @note 通过该接口 save 的消息只存本地,程序卸载后会丢失。
*/
virtual V2TIMString InsertC2CMessageToLocalStorage(
V2TIMMessage &message, const V2TIMString &userID, const V2TIMString &sender,
V2TIMValueCallback<V2TIMMessage> *callback) = 0;
/**
* 5.9 根据 messageID 查询指定会话中的本地消息
* @param messageIDList 消息 ID 列表
*/
virtual void FindMessages(const V2TIMStringVector &messageIDList,
V2TIMValueCallback<V2TIMMessageVector> *callback) = 0;
/**
* 5.10 搜索本地消息5.4.666 及以上版本支持,需要您购买旗舰版套餐)
* @param searchParam 消息搜索参数,详见 V2TIMMessageSearchParam 的定义
* @note 该功能为 IM 旗舰版功能,[购买旗舰版套餐包](https://buy.cloud.tencent.com/avc?from=17474)后可使用,详见[价格说明](https://cloud.tencent.com/document/product/269/11673?from=17176#.E5.9F.BA.E7.A1.80.E6.9C.8D.E5.8A.A1.E8.AF.A6.E6.83.85)
*/
virtual void SearchLocalMessages(const V2TIMMessageSearchParam &searchParam,
V2TIMValueCallback<V2TIMMessageSearchResult> *callback) = 0;
/**
* 5.11 发送消息已读回执6.1 及其以上版本支持)
*
* @note 请注意:
* - 该功能为旗舰版功能,[购买旗舰版套餐包](https://buy.cloud.tencent.com/avc?from=17485)后可使用,详见[价格说明](https://cloud.tencent.com/document/product/269/11673?from=17221#.E5.9F.BA.E7.A1.80.E6.9C.8D.E5.8A.A1.E8.AF.A6.E6.83.85)。
* - 向群消息发送已读回执,需要您先到控制台打开对应的开关,详情参考文档 [群消息已读回执](https://cloud.tencent.com/document/product/269/75343#.E8.AE.BE.E7.BD.AE.E6.94.AF.E6.8C.81.E5.B7.B2.E8.AF.BB.E5.9B.9E.E6.89.A7.E7.9A.84.E7.BE.A4.E7.B1.BB.E5.9E.8B) 。
* - messageList 里的消息必须在同一个会话中。
* - 该接口调用成功后,会话未读数不会变化,消息发送者会收到 onRecvMessageReadReceipts 回调,回调里面会携带消息的最新已读信息。
*/
virtual void SendMessageReadReceipts(const V2TIMMessageVector &messageList, V2TIMCallback *callback) = 0;
/**
* 5.12 获取消息已读回执6.1 及其以上版本支持)
* @param messageList 消息列表
*
* @note 请注意:
* - 该功能为旗舰版功能,[购买旗舰版套餐包](https://buy.cloud.tencent.com/avc?from=17485)后可使用,详见[价格说明](https://cloud.tencent.com/document/product/269/11673?from=17221#.E5.9F.BA.E7.A1.80.E6.9C.8D.E5.8A.A1.E8.AF.A6.E6.83.85)。
* - 获取群消息已读回执,需要您先到控制台打开对应的开关,详情参考文档 [群消息已读回执](https://cloud.tencent.com/document/product/269/75343#.E8.AE.BE.E7.BD.AE.E6.94.AF.E6.8C.81.E5.B7.B2.E8.AF.BB.E5.9B.9E.E6.89.A7.E7.9A.84.E7.BE.A4.E7.B1.BB.E5.9E.8B) 。
* - messageList 里的消息必须在同一个会话中。
*/
virtual void GetMessageReadReceipts(const V2TIMMessageVector &messageList, V2TIMValueCallback<V2TIMMessageReceiptVector> *callback) = 0;
/**
* 5.13 获取群消息已读群成员列表6.1 及其以上版本支持)
* @param message 群消息
* @param filter 指定拉取已读或未读群成员列表。
* @param nextSeq 分页拉取的游标,第一次默认取传 0后续分页拉取时传上一次分页拉取成功回调里的 nextSeq。
* @param count 分页拉取的个数,最多支持 100 个。
*
* @note 请注意:
* - 该功能为旗舰版功能,[购买旗舰版套餐包](https://buy.cloud.tencent.com/avc?from=17485)后可使用,详见[价格说明](https://cloud.tencent.com/document/product/269/11673?from=17221#.E5.9F.BA.E7.A1.80.E6.9C.8D.E5.8A.A1.E8.AF.A6.E6.83.85)。
* - 使用该功能之前,请您先到控制台打开对应的开关,详情参考文档 [群消息已读回执](https://cloud.tencent.com/document/product/269/75343#.E8.AE.BE.E7.BD.AE.E6.94.AF.E6.8C.81.E5.B7.B2.E8.AF.BB.E5.9B.9E.E6.89.A7.E7.9A.84.E7.BE.A4.E7.B1.BB.E5.9E.8B) 。
*/
virtual void GetGroupMessageReadMemberList(const V2TIMMessage &message, V2TIMGroupMessageReadMembersFilter filter, uint64_t nextSeq, uint32_t count, V2TIMValueCallback<V2TIMGroupMessageReadMemberList> *callback) = 0;
/**
* 5.14 设置消息扩展6.7 及其以上版本支持,需要您购买旗舰版套餐)
* @param message 消息对象消息需满足三个条件1、消息发送前需设置 supportMessageExtension 为 true2、消息必须是发送成功的状态3、消息不能是社群Community和直播群AVChatRoom消息。
* @param extensions 扩展信息,如果扩展 key 已经存在,则修改扩展的 value 信息,如果扩展 key 不存在,则新增扩展。
*
* @note
* - 扩展 key 最大支持 100 字节,扩展 value 最大支持 1KB单次最多支持设置 20 个扩展,单条消息最多可设置 300 个扩展。
* - 当多个用户同时设置或删除同一个扩展 key 时,只有第一个用户可以执行成功,其它用户会收到 23001 错误码和最新的扩展信息,在收到错误码和扩展信息后,请按需重新发起设置操作。
* - 我们强烈建议不同的用户设置不同的扩展 key这样大部分场景都不会冲突比如投票、接龙、问卷调查都可以把自己的 userID 作为扩展 key。
*/
virtual void SetMessageExtensions(const V2TIMMessage &message, const V2TIMMessageExtensionVector &extensions, V2TIMValueCallback<V2TIMMessageExtensionResultVector> *callback) = 0;
/**
* 5.15 获取消息扩展6.7 及其以上版本支持,需要您购买旗舰版套餐)
*/
virtual void GetMessageExtensions(const V2TIMMessage &message, V2TIMValueCallback<V2TIMMessageExtensionVector> *callback) = 0;
/**
* 5.16 删除消息扩展6.7 及其以上版本支持,需要您购买旗舰版套餐)
* @param keys 消息扩展 key 列表, 单次最大支持删除 20 个消息扩展,如果设置为 nil ,表示删除所有消息扩展
*
* @note
* - 当多个用户同时设置或删除同一个扩展 key 时,只有第一个用户可以执行成功,其它用户会收到 23001 错误码和最新的扩展信息,在收到错误码和扩展信息后,请按需重新发起删除操作。
*/
virtual void DeleteMessageExtensions(const V2TIMMessage &message, const V2TIMStringVector &keys, V2TIMValueCallback<V2TIMMessageExtensionResultVector> *callback) = 0;
/**
* 5.17 翻译文本消息
*
* @param sourceTextList 待翻译文本数组。
* @param sourceLanguage 源语言。可以设置为特定语言或 ”auto“。“auto“ 表示自动识别源语言。传空默认为 ”auto“。
* @param targetLanguage 目标语言。支持的目标语言有多种,例如:英语-“en“简体中文-”zh“法语-”fr“德语-”de“等。详情请参考文档[文本翻译语言支持](https://cloud.tencent.com/document/product/269/85380#.E6.96.87.E6.9C.AC.E7.BF.BB.E8.AF.91.E8.AF.AD.E8.A8.80.E6.94.AF.E6.8C.81)。
* @param callback 翻译结果回调。其中 result 的 key 为待翻译文本, value 为翻译后文本。
*/
virtual void TranslateText(const V2TIMStringVector &sourceTextList,
const V2TIMString &sourceLanguage, const V2TIMString &targetLanguage,
V2TIMValueCallback<V2TIMStringToV2TIMStringMap> *callback) = 0;
/**
* 5.18 标记单聊会话已读(待废弃接口,请使用 CleanConversationUnreadMessageCount 接口)
* @note 请注意:
* - 该接口调用成功后,自己的未读数会清 0对端用户会收到 OnRecvC2CReadReceipt 回调,回调里面会携带标记会话已读的时间。
* - 从 5.8 版本开始,当 userID 为 nil 时,标记所有单聊会话为已读状态。
*/
virtual void MarkC2CMessageAsRead(const V2TIMString &userID, V2TIMCallback *callback) = 0;
/**
* 5.19 标记群组会话已读(待废弃接口,请使用 CleanConversationUnreadMessageCount 接口)
* @note 请注意:
* - 该接口调用成功后,自己的未读数会清 0。
* - 从 5.8 版本开始,当 groupID 为 nil 时,标记所有群组会话为已读状态。
*/
virtual void MarkGroupMessageAsRead(const V2TIMString &groupID, V2TIMCallback *callback) = 0;
/**
* 5.20 标记所有会话为已读(待废弃接口,请使用 CleanConversationUnreadMessageCount 接口)
*/
virtual void MarkAllMessageAsRead(V2TIMCallback *callback) = 0;
};
#endif // __V2TIM_MESSAGE_MANAGER_H__

View File

@@ -0,0 +1,50 @@
// Copyright (c) 2022 Tencent. All rights reserved.
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 IMSDK
//
// 离线推送的接口
//
/////////////////////////////////////////////////////////////////////
#ifndef __V2TIM_OFFLINE_PUSH_MANAGER_H__
#define __V2TIM_OFFLINE_PUSH_MANAGER_H__
#include "V2TIMCallback.h"
#include "V2TIMMessage.h"
class V2TIMOfflinePushManager {
public:
virtual ~V2TIMOfflinePushManager () {}
/**
* 设置离线推送配置信息
* note
* - 如果您想关闭离线推送,请把 config 设置为 V2TIMOfflinePushConfig()
* @param config 离线推送配置
* @param callback 回调
*/
virtual void SetOfflinePushConfig(const V2TIMOfflinePushConfig &config, V2TIMCallback *callback) = 0;
/**
* APP 检测到应用退后台时可以调用此接口,可以用作桌面应用角标的初始化未读数量。
*
* - 从 6.1 版本开始,如果配置了离线推送,会收到厂商或 TPNS 的离线推送通道下发的通知栏消息。
*
* @param unreadCount 未读数量
* @param callback 回调
*/
virtual void DoBackground(uint32_t unreadCount, V2TIMCallback *callback) = 0;
/**
* APP 检测到应用进前台时可以调用此接口
*
* - 从 6.1 版本开始,调用 DoForeground会停止离线推送。但如果应用被 kill仍然可以正常接收离线推送。
*
* @param callback 回调
*/
virtual void DoForeground(V2TIMCallback *callback) = 0;
};
#endif // __V2TIM_OFFLINE_PUSH_MANAGER_H__

View File

@@ -0,0 +1,57 @@
// Copyright (c) 2021 Tencent. All rights reserved.
#ifndef __V2TIM_SIGNALING_H__
#define __V2TIM_SIGNALING_H__
#include "V2TIMCommon.h"
#include "V2TIMDefine.h"
#include "V2TIMMessage.h"
/////////////////////////////////////////////////////////////////////////////////
//
// (一)枚举值定义
//
/////////////////////////////////////////////////////////////////////////////////
// 操作类型
enum V2TIMSignalingActionType {
// 邀请方发起邀请
SignalingActionType_Invite = 1,
// 邀请方取消邀请
SignalingActionType_Cancel_Invite = 2,
// 被邀请方接受邀请
SignalingActionType_Accept_Invite = 3,
// 被邀请方拒绝邀请
SignalingActionType_Reject_Invite = 4,
// 邀请超时
SignalingActionType_Invite_Timeout = 5,
};
/////////////////////////////////////////////////////////////////////////////////
//
// (二)结构体定义
//
/////////////////////////////////////////////////////////////////////////////////
struct TIM_API V2TIMSignalingInfo {
// 信令ID
V2TIMString inviteID;
// 如果是群组信令groupID 为会话群组ID否则为空
V2TIMString groupID;
// 邀请方的ID
V2TIMString inviter;
// 被邀请方列表
V2TIMStringVector inviteeList;
// 信令内容
V2TIMString data;
// 信令操作类型
V2TIMSignalingActionType actionType;
// 信令超时时间
int timeout;
V2TIMSignalingInfo();
V2TIMSignalingInfo(const V2TIMSignalingInfo& signalingInfo);
~V2TIMSignalingInfo();
};
#endif /* __V2TIM_SIGNALING_H__ */

View File

@@ -0,0 +1,142 @@
// Copyright (c) 2021 Tencent. All rights reserved.
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 IMSDK
//
// 消息高级接口,里面包含了所有高级消息的创建、收发逻辑
//
/////////////////////////////////////////////////////////////////////
#ifndef __V2TIM_SIGNALING_MANAGER_H__
#define __V2TIM_SIGNALING_MANAGER_H__
#include "V2TIMCallback.h"
#include "V2TIMDefine.h"
#include "V2TIMListener.h"
#include "V2TIMSignaling.h"
class TIM_API V2TIMSignalingManager {
public:
virtual ~V2TIMSignalingManager() {}
/**
* 添加信令监听
*/
virtual void AddSignalingListener(V2TIMSignalingListener* listener) = 0;
/**
* 移除信令监听
*/
virtual void RemoveSignalingListener(V2TIMSignalingListener* listener) = 0;
/**
* 邀请某个人
*
* @param invitee 被邀请人用户 ID
* @param data 自定义数据
* @param onlineUserOnly 是否只有在线用户才能收到邀请,如果设置为 true只有在线用户才能收到
* 并且 Invite 操作也不会产生历史消息(针对该次 Invite 的后续
* Cancel、Accept、Reject、Timeout 操作也同样不会产生历史消息)。
* @param offlinePushInfo 离线推送信息,其中 desc 为必填字段,推送的时候会默认展示 desc 信息。
* @param timeout 超时时间,单位秒,如果设置为 0SDK 不会做超时检测,也不会触发
* onInvitationTimeout 回调
* @return inviteID 邀请 ID如果邀请失败返回空字符串
*/
virtual V2TIMString Invite(const V2TIMString& invitee, const V2TIMString& data,
bool onlineUserOnly,
const V2TIMOfflinePushInfo& offlinePushInfo, int timeout,
V2TIMCallback* callback) = 0;
/**
* 邀请群内的某些人
*
* @param groupID 发起邀请所在群组
* @param inviteeList 被邀请人列表inviteeList 必须已经在 groupID 群里,否则邀请无效
* @param onlineUserOnly 是否只有在线用户才能收到邀请,如果设置为 true只有在线用户才能收到
* 并且 Invite 操作也不会产生历史消息(针对该次 Invite 的后续
* Cancel、Accept、Reject、Timeout 操作也同样不会产生历史消息)。
* @param timeout 超时时间,单位秒,如果设置为 0SDK 不会做超时检测,也不会触发
* onInvitationTimeout 回调
* @return inviteID 邀请 ID如果邀请失败返回空字符串
*
* @note
* 群邀请暂不支持离线推送,如果您需要离线推送,可以针对被邀请的用户单独发离线推送自定义消息,
* 详细代码请参考 TRTCAVCallImpl -> sendOnlineMessageWithOfflinePushInfo 函数。
*/
virtual V2TIMString InviteInGroup(const V2TIMString& groupID,
const V2TIMStringVector& inviteeList, const V2TIMString& data,
bool onlineUserOnly, int timeout,
V2TIMCallback* callback) = 0;
/**
* 邀请方取消邀请
*
* @param inviteID 邀请 ID
*
* @note 如果所有被邀请人都已经处理了当前邀请(包含超时),不能再取消当前邀请。
*/
virtual void Cancel(const V2TIMString& inviteID, const V2TIMString& data,
V2TIMCallback* callback) = 0;
/**
* 接收方接收邀请
*
* @note 不能接受不是针对自己的邀请,请在收到 OnReceiveNewInvitation 回调的时候先判断
* inviteeList 有没有自己,如果没有自己,不能 Accept 邀请。
*/
virtual void Accept(const V2TIMString& inviteID, const V2TIMString& data,
V2TIMCallback* callback) = 0;
/**
* 接收方拒绝邀请
*
* @note 不能拒绝不是针对自己的邀请,请在收到 OnReceiveNewInvitation 回调的时候先判断
* inviteeList 有没有自己,如果没有自己,不能 Reject 邀请。
*/
virtual void Reject(const V2TIMString& inviteID, const V2TIMString& data,
V2TIMCallback* callback) = 0;
/**
* 获取信令信息
*
* 如果 Invite 设置 onlineUserOnly 为 false每次信令操作包括
* Invite、Cancel、Accept、Reject、Timeout都会产生一条自定义消息 该消息会通过
* V2TIMAdvancedMsgListener -> onRecvNewMessage
* 抛给用户,用户也可以通过历史消息拉取,如果需要根据信令信息做自定义化文本展示,可以调用下面接口获取信令信息。
*
* @param msg 消息对象
* @return V2TIMSignalingInfo 信令信息,如果 V2TIMSignalingInfo::inviteID 为空字符串,则 msg 不是一条信令消息。
*/
virtual V2TIMSignalingInfo GetSignalingInfo(const V2TIMMessage& msg) = 0;
/**
* 添加邀请信令
*
* 主要用于邀请者在被邀请者离线期间,发送了群聊邀请,被邀请者上线后将该信令同步给 SDK从而正常使用信令功能。
*
* 当被邀请者点击离线推送提示,拉起 App 时:
* 1. 如果被邀请者离线期间,邀请者发送的是 1V1 信令SDK 可以自动同步邀请信令。邀请未超时,回调 onReceiveNewInvitation。
*
* 2. 如果被邀请者离线期间,邀请者发送的是群聊信令,不同 SDK 版本表现如下:
* - 6.7 以前的版本:
* SDK 无法自动同步邀请信令(信令本质上就是一条自定义消息,群离线消息在程序启动后无法自动同步)。
* 如果被邀请者需要处理该邀请信令,可以让邀请者在发起信令时,向每个被邀请者额外发送一条 C2C 离线推送消息,消息携带 V2TIMSignalingInfo 信息。
* 被邀请者收到离线推送时通过 addInvitedSignaling 将 V2TIMSignalingInfo 信息告知 SDK。
* - 6.7 及以后的版本:
* SDK 会自动同步最近 30 秒的消息。如果其中包含了未超时的邀请信令,回调 onReceiveNewInvitation。您无需再调用本接口同步邀请信令。
*
* @note 如果添加的信令信息已存在fail callback 会抛 ERR_SDK_SIGNALING_ALREADY_EXISTS 错误码。
*/
virtual void AddInvitedSignaling(const V2TIMSignalingInfo& info, V2TIMCallback* callback) = 0;
/**
* 修改邀请信令6.7 及其以上版本支持)
*
* @note 仅支持修改邀请信令的自定义字段 data。只有在线用户才能收到的邀请信令不能被修改。
*/
virtual void ModifyInvitation(const V2TIMString& inviteID, const V2TIMString& data,
V2TIMCallback* callback) = 0;
};
#endif // __V2TIM_SIGNALING_MANAGER_H__

View File

@@ -0,0 +1,48 @@
// Copyright (c) 2021 Tencent. All rights reserved.
#ifndef __V2TIM_STRING_H__
#define __V2TIM_STRING_H__
#include "V2TIMDefine.h"
#include <cstddef>
class V2TIMStringIMPL;
class TIM_API V2TIMString {
public:
V2TIMString();
V2TIMString(const char *pStr);
V2TIMString(const char *pStr, size_t size);
V2TIMString(const V2TIMString &str);
virtual ~V2TIMString();
V2TIMString &operator=(const V2TIMString &str);
V2TIMString &operator=(const char *pStr);
bool operator==(const V2TIMString &str) const;
bool operator!=(const V2TIMString &str) const;
bool operator<(const V2TIMString &str) const;
char &operator[](int index);
size_t Size() const;
size_t Length() const;
bool Empty() const;
const char *CString() const;
private:
V2TIMStringIMPL *impl_;
};
#endif /* __V2TIM_STRING_H__ */