This commit is contained in:
启星
2025-08-08 10:49:36 +08:00
parent 6400cf78bb
commit b5ce3d580a
8780 changed files with 978183 additions and 0 deletions

View File

@@ -0,0 +1,17 @@
// Copyright (c) 2023 Tencent. All rights reserved.
#ifndef SRC_PLATFORM_CROSS_PLATFORM_INCLUDE_TIM_CLOUD_H_
#define SRC_PLATFORM_CROSS_PLATFORM_INCLUDE_TIM_CLOUD_H_
#include "TIMCommunityManager.h"
#include "TIMConversationManager.h"
#include "TIMErrorCode.h"
#include "TIMExperimentalAPI.h"
#include "TIMFriendshipManager.h"
#include "TIMGroupManager.h"
#include "TIMManager.h"
#include "TIMMessageManager.h"
#include "TIMOfflinePushManager.h"
#include "TIMSignalingManager.h"
#endif // SRC_PLATFORM_CROSS_PLATFORM_INCLUDE_TIM_CLOUD_H_

View File

@@ -0,0 +1,108 @@
// Copyright (c) 2021 Tencent. All rights reserved.
#ifndef SRC_PLATFORM_CROSS_PLATFORM_INCLUDE_TIM_CLOUD_COMM_H_
#define SRC_PLATFORM_CROSS_PLATFORM_INCLUDE_TIM_CLOUD_COMM_H_
#include <sys/types.h>
#ifndef _MSC_VER
// stdint.h is part of C99 but MSVC doesn't have it.
#include <stdint.h> // For intptr_t.
#endif
/* define int types*/
#if defined(__GNUC__)
#ifndef _STDINT_H
#if defined(__PROSPERO__) || defined(__ORBIS__)
typedef u_int8_t uint8_t;
typedef u_int16_t uint16_t;
typedef u_int32_t uint32_t;
typedef u_int64_t uint64_t;
#elif !defined(_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
/* FreeBSD has these C99 int types defined in /sys/inttypes.h already */
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 // defined(__PROSPERO__) || defined(__ORBIS__)
#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
#ifndef __cplusplus
/* Even in pure C, we still need a standard boolean typedef */
#ifndef bool
typedef unsigned char bool;
#endif
#ifndef true
#define true (1)
#endif
#ifndef false
#define false (0)
#endif
#endif /* !__cplusplus */
#if defined(_WIN32) || defined(__PROSPERO__) || defined(__ORBIS__)
#if defined(ENABLE_STATIC_LIB)
#define TIM_API
#else
#if defined(TIM_EXPORTS)
#define TIM_API __declspec(dllexport)
#else
#define TIM_API __declspec(dllimport)
#endif
#endif
#else
#define TIM_API __attribute__ ((visibility ("default")))
#endif
#define TIM_DECL TIM_API
#endif // SRC_PLATFORM_CROSS_PLATFORM_INCLUDE_TIM_CLOUD_COMM_H_

View File

@@ -0,0 +1,79 @@
// Copyright (c) 2023 Tencent. All rights reserved.
#ifndef SRC_PLATFORM_CROSS_PLATFORM_INCLUDE_TIM_CLOUD_DEF_H_
#define SRC_PLATFORM_CROSS_PLATFORM_INCLUDE_TIM_CLOUD_DEF_H_
#include "TIMCloudComm.h"
// 模块简介
// - 公共配置选项 和 通用回调 的定义
/////////////////////////////////////////////////////////////////////////////////
//
// 一. SDK 接口常用配置选项
//
/////////////////////////////////////////////////////////////////////////////////
/// 1.1 调用接口的返回值(若接口参数中有回调,只有当接口返回 TIM_SUCC 时,回调才会被调用)
enum TIMResult {
/// 接口调用成功
TIM_SUCC = 0,
/// 接口调用失败ImSDK 未初始化
TIM_ERR_SDKUNINIT = -1,
/// 接口调用失败,用户未登录
TIM_ERR_NOTLOGIN = -2,
/// 接口调用失败,错误的 Json 格式或 Json Key
TIM_ERR_JSON = -3,
/// 接口调用失败,参数错误
TIM_ERR_PARAM = -4,
/// 接口调用失败,无效的会话
TIM_ERR_CONV = -5,
/// 接口调用失败,无效的群组
TIM_ERR_GROUP = -6,
};
/// 1.2 会话类型
enum TIMConvType {
/// 无效会话
kTIMConv_Invalid,
/// 个人会话
kTIMConv_C2C,
/// 群组会话
kTIMConv_Group,
/// 系统会话,已废弃
kTIMConv_System,
};
/// 1.3 消息接收选项
enum TIMReceiveMessageOpt {
/// 在线正常接收消息,离线时会进行 APNs 推送
kTIMRecvMsgOpt_Receive = 0,
/// 不会接收到消息,离线不会有推送通知
kTIMRecvMsgOpt_Not_Receive,
/// 在线正常接收消息,离线不会有推送通知
kTIMRecvMsgOpt_Not_Notify,
/// 在线接收消息,离线只接收 at 消息的推送
kTIMRecvMsgOpt_Not_Notify_Except_At,
/// 在线和离线都只接收@消息
kTIMRecvMsgOpt_Not_Receive_Except_At,
};
/////////////////////////////////////////////////////////////////////////////////
//
// 二. SDK 接口通用回调
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 接口通用回调的定义
*
* @param code 值为 ERR_SUCC 表示成功,其他值表示失败。详情请参考 [错误码](https://cloud.tencent.com/document/product/269/1671)
* @param desc 错误描述字符串
* @param json_params Json 字符串不同的接口Json 字符串不一样
* @param user_data ImSDK 负责透传的用户自定义数据,未做任何处理
*
* @note
* 所有回调均需判断 code 是否等于 ERR_SUCC若不等于说明接口调用失败了具体原因可以看 code 的值以及 desc 描述。详情请参考 [错误码](https://cloud.tencent.com/document/product/269/1671)
*/
typedef void (*TIMCommCallback)(int32_t code, const char* desc, const char* json_params, const void* user_data);
#endif // SRC_PLATFORM_CROSS_PLATFORM_INCLUDE_TIM_CLOUD_DEF_H_

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,455 @@
// Copyright (c) 2023 Tencent. All rights reserved.
#ifndef SRC_PLATFORM_CROSS_PLATFORM_INCLUDE_TIM_ERROR_CODE_H_
#define SRC_PLATFORM_CROSS_PLATFORM_INCLUDE_TIM_ERROR_CODE_H_
/////////////////////////////////////////////////////////////////////////////////
//
// 错误码
//
/////////////////////////////////////////////////////////////////////////////////
//详细 [错误码](https://cloud.tencent.com/document/product/269/1671),请您移步官网查看
enum TIMErrCode {
// ///////////////////////////////////////////////////////////////////////////////
//
// 一. 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视频、文件最大限制 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_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_INVALID_MSG_RECEIVER = 6032, // 无效的消息接收方,请在 IM 控制台检查消息的接收方是否存在。
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_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 被禁用,请 [提交工单](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_COMM_SENSITIVE_IMAGE = 80004, // 图片安全打击,图片中可能包含敏感内容。
// 账号错误码
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_PROFILE_SUBSCRIPTION_DISABLED = 72012, // 用户资料变更订阅能力未开启,请参见 [订阅非好友用户资料](https://cloud.tencent.com/document/product/269/75416#53edea52-35ef-4d82-aae9-941ba690f051),登录 [IM 控制台](https://console.tencentcloud.com/im) 开启该功能。
// 关系链错误码
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_ALREADY_FRIENDS = 30015, // 已经存在好友关系。
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_FRIENDSHIP_SELF_FOLLOWING_COUNT_EXCEEDS_LIMIT = 32100, // 自己的关注数量到达上限。
ERR_SVR_FRIENDSHIP_PEER_FOLLOWERS_COUNT_EXCEEDS_LIMIT = 32101, // 对方的粉丝数量到达上限。
ERR_SVR_FRIENDSHIP_SELF_MUTUAL_FOLLOWERS_COUNT_EXCEEDS_LIMIT = 32102, // 自己的互关数量到达上限。
ERR_SVR_FRIENDSHIP_PEER_MUTUAL_FOLLOWERS_COUNT_EXCEEDS_LIMIT = 32103, // 对方的互关数量到达上限。
// 最近联系人错误码
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_REACTION_COUNT_LIMIT = 23005, // 单条消息 Reaction 数量超过最大限制。
ERR_SVR_MSG_REACTION_USER_COUNT_LIMIT = 23006, // 单个 Reaction 用户数量超过最大限制。
ERR_SVR_MSG_REACTION_ALREADY_CONTAIN_USER = 23007, // Reaction 已经包含当前操作用户。
ERR_SVR_MSG_REACTION_NOT_EXISTS = 23008, // Reaction 不存在。
ERR_SVR_MSG_REACTION_NOT_CONTAIN_USER = 23009, // Reaction 不包含当前操作用户。
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_GROUP_PINNED_MESSAGE_COUNT_LIMIT = 10070, // 置顶消息超出数量限制时。
ERR_SVR_GROUP_MESSAGE_ALREADY_PINNED = 10071, // 消息已经被置顶。
// ///////////////////////////////////////////////////////////////////////////////
//
// 三. 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 // SRC_PLATFORM_CROSS_PLATFORM_INCLUDE_TIM_ERROR_CODE_H_

View File

@@ -0,0 +1,326 @@
// Copyright (c) 2023 Tencent. All rights reserved.
#ifndef SRC_PLATFORM_CROSS_PLATFORM_INCLUDE_TIM_EXPERIMENTAL_API_H_
#define SRC_PLATFORM_CROSS_PLATFORM_INCLUDE_TIM_EXPERIMENTAL_API_H_
#include "TIMCloudDef.h"
#ifdef __cplusplus
extern "C" {
#endif
// 模块简介
// - 实验性 API, 用于提供一些实验性功能
//
// 模块参数说明
// - API 的参数采用 json 字符串格式,请使用文件中预先定义的 JsonKey 进行参数传递和解析
// - 如果参数中包含非英文字符,请使用 UTF-8 编码
//
// 模块回调说明
// 1. 回调的类型:
// - 调用 API 时传入的 TIMCommCallback 回调,用于异步返回 API 的调用结果
// - 调用 TIMSetXXXCallback 设置的全局回调,用于接收后台推送的通知
// 2. 回调触发的线程:
// - 对于 Windows 平台,当在主线程中调用 @ref TIMInit 接口时SDK 会将所有回调抛到主线程,请确保主线程已创建消息循环;否则,回调将在 SDK 内部的逻辑线程触发
// - 对于 Android 平台,当调用 @ref TIMInit 接口的线程支持消息循环时SDK 会将所有回调抛到该线程;否则,回调将在 SDK 内部的逻辑线程触发
// - 对于 iOS 和 MAC 平台SDK 默认将所有回调抛到主线程
// - 对于 Linux 平台,暂不支持将回调抛到主线程,回调将在 SDK 内部的逻辑线程触发
/////////////////////////////////////////////////////////////////////////////////
//
// 一. ImSDK 实验性通知回调
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 1.1 实验性通知的回调7.4 及其以上版本支持)
*
* @param key 通知 key
* @param data 通知数据
*/
typedef void (*TIMExperimentalNotifyCallback)(const char* key, const char* data, const void* user_data);
/////////////////////////////////////////////////////////////////////////////////
//
// 二. 注册实验性通知回调
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 2.1 实验性通知的回调
* @param cb 实验性通知的回调,请参考 @ref TIMExperimentalNotifyCallback
* @param user_data 用户自定义数据ImSDK只负责传回给回调函数cb不做任何处理
*/
TIM_API void TIMSetExperimentalNotifyCallback(TIMExperimentalNotifyCallback cb, const void *user_data);
/////////////////////////////////////////////////////////////////////////////////
//
// 三. 实验性 API
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 3.1 实验性 API
*
* @note 该接口提供一些实验性功能
*/
TIM_API int callExperimentalAPI(const char* json_param, TIMCommCallback cb, const void* user_data);
/////////////////////////////////////////////////////////////////////////////////
//
// 四. 实验性 API 参数相关的 Json Key 定义
//
/////////////////////////////////////////////////////////////////////////////////
//------------------------------------------------------------------------------
// 4.1 TIMInternalOperation(实验性接口的操作类型)
static const char* kTIMInternalOperationSSOData = "internal_operation_sso_data";
static const char* kTIMInternalOperationUserId2TinyId = "internal_operation_userid_tinyid";
static const char* kTIMInternalOperationTinyId2UserId = "internal_operation_tinyid_userid";
static const char* kTIMInternalOperationSetEnv = "internal_operation_set_env";
static const char* kTIMInternalOperationDisableCrashReport = "internal_operation_disable_crash_report";
static const char* kTIMInternalOperationSetIPv6Prior = "internal_operation_set_ipv6_prior";
static const char* kTIMInternalOperationSetMaxRetryCount = "internal_operation_set_max_retry_count";
static const char* kTIMInternalOperationSetPacketRequestTimeout = "internal_operation_set_packet_request_timeout";
static const char* kTIMInternalOperationSetCustomServerInfo = "internal_operation_set_custom_server_info";
static const char* kTIMInternalOperationEnableQuicChannel = "internal_operation_enable_quic_channel";
static const char* kTIMInternalOperationSetSM4GCMCallback = "internal_operation_set_sm4_gcm_callback";
static const char* kTIMInternalOperationInitLocalStorage = "internal_operation_init_local_storage";
static const char* kTIMInternalOperationSetCosSaveRegionForConversation = "internal_operation_set_cos_save_region_for_conversation";
static const char* kTIMInternalOperationSetUIPlatform = "internal_operation_set_ui_platform";
static const char* kTIMInternalOperationSetDatabaseEncryptInfo = "internal_operation_set_database_encrypt_info";
static const char* kTIMInternalOperationIsCommercialAbilityEnabled = "internal_operation_is_commercial_ability_enabled";
static const char* kTIMInternalOperationSetOfflinePushState = "internal_operation_set_offline_push_state";
static const char* kTIMInternalOperationGetOfflinePushState = "internal_operation_get_offline_push_state";
static const char* kTIMInternalOperationGetMessageRevoker = "internal_operation_get_message_revoker";
static const char* kTIMInternalOperationSetLogSetting = "internal_operation_set_log_setting";
static const char* kTIMInternalOperationWriteLog = "internal_operation_write_log";
static const char* kTIMInternalOperationClearLocalHistoryMessage = "internal_operation_clear_local_history_message";
static const char* kTIMInternalOperationUpdateProxyInfo = "internal_operation_update_proxy_info";
static const char* kTIMInternalOperationReportTUIComponentUsage = "internal_operation_report_tuicomponent_usage";
static const char* kTIMInternalOperationSendTRTCCustomData = "internal_operation_send_trtc_custom_data";
static const char* kTIMInternalOperationSendRoomCustomData = "internal_operation_send_room_custom_data";
static const char* kTIMInternalOperationSetApplicationID = "internal_operation_set_application_id";
static const char* kTIMInternalOperationGetServerConfig = "internal_operation_get_server_config";
static const char* kTIMInternalOperationSetIgnoreRepeatLogin = "internal_operation_set_ignore_repeat_login";
static const char* kTIMInternalOperationStartMessageLongPolling = "internal_operation_start_message_long_polling";
static const char* kTIMInternalOperationStopMessageLongPolling = "internal_operation_stop_message_long_polling";
static const char* kTIMInternalOperationFindMergerMessages = "internal_operation_find_merger_messages";
static const char* kTIMInternalOperationGetBriefGroupMemberList = "internal_operation_get_brief_group_member_list";
static const char* kTIMInternalOperationSetCustomLoginInfo = "internal_operation_set_custom_login_info";
static const char* kTIMInternalOperationDisableHttpRequest = "internal_operation_disable_http_request";
static const char* kTIMInternalOperationSetNetworkInfo = "internal_operation_set_network_info";
//------------------------------------------------------------------------------
// 4.2 SSODataParam(发送 sso data 的参数)
// string, 只写(必填), sso请求的命令字
static const char* kTIMSSODataParamCmd = "sso_data_param_cmd";
// string, 只写(必填), sso请求的内容内容是二进制需要外部传入base64编码后的字符串sdk内部回解码成原二进制
static const char* kTIMSSODataParamBody = "sso_data_param_body";
// uint64, 只写(选填), sso请求的超时时间默认是15秒
static const char* kTIMSSODataParamTimeout = "sso_data_param_timeout";
//------------------------------------------------------------------------------
// 4.3 SSODataRes(发送 sso data 的返回信息)
// string, 只读(必填), sso返回数据对应请求的命令字
static const char* kTIMSSODataResCmd = "sso_data_res_cmd";
// string, 只读(必填), sso返回的内容内容是二进制sdk内部使用base64编码了外部使用前需要base64解码
static const char* kTIMSSODataResBody = "sso_data_res_body";
//------------------------------------------------------------------------------
// 4.4 UserInfo(用户账号信息)
static const char* kTIMUserInfoUserId = "user_info_userid";
static const char* kTIMUserInfoTinyId = "user_info_tinyid";
//------------------------------------------------------------------------------
// 4.5 ServerAddress(服务器地址)
// string, 只写(必填), 服务器 IP
static const char* kTIMServerAddressIp = "server_address_ip";
// int, 只写(必填), 服务器端口
static const char* kTIMServerAddressPort = "server_address_port";
// bool, 只写(选填), 是否 IPv6 地址,默认为 false
static const char* kTIMServerAddressIsIPv6 = "server_address_is_ipv6";
// bool, 只写(选填), 是否 Quic 地址,默认为 false
static const char* kTIMServerAddressIsQuic = "server_address_is_quic";
//------------------------------------------------------------------------------
// 4.6 CustomServerInfo(自定义服务器信息)
// array @ref ServerAddress, 只写(必填), 长连接服务器地址列表
static const char* kTIMCustomServerInfoLongConnectionAddressArray = "longconnection_address_array";
// array @ref ServerAddress, 只写(选填), 短连接服务器地址列表
static const char* kTIMCustomServerInfoShortConnectionAddressArray = "shortconnection_address_array";
// string, 只写(必填), 服务器公钥
static const char* kTIMCustomServerInfoServerPublicKey = "server_public_key";
//------------------------------------------------------------------------------
// 4.7 QuicChannelInfo(Quic 通道信息)
// bool, 只写(必填), 是否启用 Quic 通道true打开false不打开
static const char* kTIMQuicChannelInfoEnableQuic = "quic_channel_info_enable_quic";
//------------------------------------------------------------------------------
// 4.8 SM4GCMCallbackParam(国密 SM4 GCM 回调函数地址的参数)
// uint64 只写(必填), SM4 GCM 加密回调函数地址
static const char* kTIMSM4GCMCallbackParamEncrypt = "sm4_gcm_callback_param_encrypt";
// uint64, 只写(必填), SM4 GCM 解密回调函数地址
static const char* kTIMSM4GCMCallbackParamDecrypt = "sm4_gcm_callback_param_decrypt";
//------------------------------------------------------------------------------
// 4.9 CosSaveRegionForConversationParam(设置 cos 存储区域)
// string, 只写(必填), 会话 ID
static const char* kTIMCosSaveRegionForConversationParamConversationID = "cos_save_region_for_conversation_param_conversation_id";
// string, 只写(必填), 存储区域
static const char* kTIMCosSaveRegionForConversationParamCosSaveRegion = "cos_save_region_for_conversation_param_cos_save_region";
//------------------------------------------------------------------------------
// 4.10 DatabaseEncryptInfo(数据库加密信息)
// int, 只写(必填), 数据库加密类型0 不加密默认1:按位异或2:TEA3:国密4:AES
static const char* kTIMDatabaseEncryptInfoEncryptType = "database_encrypt_info_encrypt_type";
// string, 只写(选填), 数据库加密类型 key ,除了 按位异或 算法,其他算法的加密 key必须是长度是 32 base16 字符串,不填写就使用 IMSDK 内部生成的 key由于数据库加密数据持久化到文件中因此一旦 key 被使用过,不能够再更换
static const char* kTIMDatabaseEncryptInfoEncryptKey = "database_encrypt_info_encrypt_key";
//------------------------------------------------------------------------------
// 4.11 CommercialAbilityResult(商业化能力项的查询结果)
// bool, 只读(必填), 查询是否支持指定的商业化能力项的结果true支持false不支持
static const char* kTIMCommercialAbilityResultEnabled = "commercial_ability_result_enabled";
//------------------------------------------------------------------------------
// 4.12 LogSetting(日志配置)
// bool, 只写(必填), 是否关闭自动清理truefalse
static const char* kTIMLogSettingDisableAutoClean = "log_setting_disable_auto_clean";
// uint64, 只写(选填), 日志文件的最大大小,单位 Bytes默认 100MB不能小于 150KB
static const char* kTIMLogSettingMaxFileSize = "log_setting_max_file_size";
//------------------------------------------------------------------------------
// 4.13 RequestParam(callExperimentalAPI 接口请求的参数)
// string @ref TIMInternalOperation, 只写(必填), 内部接口的操作类型
static const char* kTIMRequestInternalOperation = "request_internal_operation";
// object @ref SSODataParam, 只写(选填), sso发包请求, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationSSOData 时需要设置
static const char* kTIMRequestSSODataParam = "request_sso_data_param";
// array string, 只写(选填), 请求需要转换成tinyid的userid列表, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationUserId2TinyId 时需要设置
static const char* kTIMRequestUserId2TinyIdParam = "request_userid_tinyid_param";
// array uint64, 只写(选填), 请求需要转换成userid的tinyid列表, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationTinyId2UserId 时需要设置
static const char* kTIMRequestTinyId2UserIdParam = "request_tinyid_userid_param";
// bool, 只写(选填), true 表示设置当前环境为测试环境false表示设置当前环境是正式环境默认是正式环境, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationSetEnv 时需要设置
static const char* kTIMRequestSetEnvParam = "request_set_env_param";
// bool, 只写(选填), true 表示关闭 crash 上报false 表示开启 crash 上报,默认开启, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationDisableCrashReport 时需要设置
static const char* kTIMRequestDisableCrashReportParam = "request_disable_crash_report_param";
// bool, 只写(选填), 在 IPv6 双栈网络下,是否优先使用 IPv6 协议,当 kTIMRequestInternalOperation 为 kTIMInternalOperationSetIPv6Prior 时需要设置
static const char* kTIMRequestSetIPv6PriorParam = "request_set_ipv6_prior_param";
// uint32, 只写(选填), 设置登录、发消息请求的重试次数, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationSetMaxRetryCount 时需要设置
static const char* kTIMRequestSetMaxRetryCountParam = "request_set_max_retry_count_param";
// int64, 只写(选填), 设置登录、发消息请求的超时时间, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationSetPacketRequestTimeout 时需要设置
static const char* kTIMRequestSetPacketRequestTimeoutParam = "request_set_packet_request_timeout_param";
// object @ref CustomServerInfo, 只写(选填), 自定义服务器信息, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationSetCustomServerInfo 时需要设置
static const char* kTIMRequestSetCustomServerInfoParam = "request_set_custom_server_info_param";
// bool, 只写(选填), true 表示设置 Quic 通道信息, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationEnableQuicChannel 时需要设置
static const char* kTIMRequestEnableQuicChannelParam = "request_enable_quic_channel_param";
// object @ref SM4GCMCallbackParam, 只写(选填), 国密 SM4 GCM 回调函数地址的参数, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationSetSM4GCMCallback 时需要设置
static const char* kTIMRequestSetSM4GCMCallbackParam = "request_set_sm4_gcm_callback_param";
// string, 只写(选填), 初始化 Database 的用户 ID, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationInitLocalStorage 时需要设置
static const char* kTIMRequestInitLocalStorageParam = "request_init_local_storage_user_id_param";
// object @ref CosSaveRegionForConversationParam, 只写(选填), 设置 cos 存储区域的参数, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationSetCosSaveRegionForConversation 时需要设置
static const char* kTIMRequestSetCosSaveRegionForConversationParam = "request_set_cos_save_region_for_conversation_param";
// uint32, 只写(选填), 设置 UI 平台,当 kTIMRequestInternalOperation 为 kTIMInternalOperationSetUIPlatform 时需要设置
static const char* kTIMRequestSetUIPlatformParam = "request_set_ui_platform_param";
// object @ref DatabaseEncryptInfo, 只写(选填), 设置数据库加密信息, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationSetDatabaseEncryptInfo 时需要设置
static const char* kTIMRequestSetDatabaseEncryptInfoParam = "request_set_database_encrypt_info_param";
// uint64, 只写(选填), 商业化能力项枚举的组合值, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationIsCommercialAbilityEnabled 时需要设置
static const char* kTIMRequestIsCommercialAbilityEnabledParam = "request_is_commercial_ability_enabled_param";
// uint32, 只写(选填), 设置推送状态0 - 不设置 1 - 开启推送 2 - 关闭推送, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationSetOfflinePushState 时需要设置
static const char* kTIMRequestSetOfflinePushStateParam = "request_set_offline_push_state_param";
// array string, 只写(选填), 撤回消息的 id, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationGetMessageRevoker 时需要设置
static const char* kTIMRequestMessageRevokerMessageIdArray = "request_message_revoker_message_id_array";
// object @ref LogSetting, 只写(选填), 设置日志参数, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationSetLogSetting 时需要设置
static const char* kTIMRequestSetLogSettingParam = "request_set_log_setting_param";
// int, 只写(选填), 打印日志的级别, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationWriteLog 时需要设置
static const char* kTIMRequestWriteLogLogLevelParam = "request_write_log_log_level_param";
// string, 只写(选填), 打印日志的内容, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationWriteLog 时需要设置
static const char* kTIMRequestWriteLogLogContentParam = "request_write_log_log_content_param";
// string, 只写(选填), 打印日志的文件名, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationWriteLog 时需要设置
static const char* kTIMRequestWriteLogFileNameParam = "request_write_log_file_name_param";
// string, 只写(选填), 打印日志的函数名, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationWriteLog 时需要设置
static const char* kTIMRequestWriteLogFuncNameParam = "request_write_log_func_name_param";
// int, 只写(选填), 打印日志的所在行数, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationWriteLog 时需要设置
static const char* kTIMRequestWriteLogLineNumberParam = "request_write_log_line_number_param";
// string, 只写(选填), 设置要删除消息的会话 ID, 其中单聊格式为 "c2c_userID", 群聊会话格式为 "group_groupID", 当输入为 "c2c" 或者 "group" 时会同时操作所有 单聊 或者 群聊 会话,当输入为 "" 时会同时操纵所有会话,当 kTIMRequestInternalOperation 为 kTIMInternalOperationClearLocalHistoryMessage 时需要设置
static const char* kTIMRequestClearLocalHistoryMessageConversationIDParam = "request_clear_local_history_message_conversation_id_param";
// uint64, 只写(选填), 设置要删除消息时间范围的开始时间, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationClearLocalHistoryMessage 时需要设置
static const char* kTIMRequestClearLocalHistoryMessageBeginTimestampParam = "request_clear_local_history_message_begin_timestamp_param";
// uint64, 只写(选填), 设置要删除消息时间范围的结束时间,删除消息时间范围为 [begin_time, end_time],若结束时间设置为 0则删除开始时间之后的所有消息若开始和结束时间都被设置为 0则清空指定会话的所有消息当 kTIMRequestInternalOperation 为 kTIMInternalOperationClearLocalHistoryMessage 时需要设置
static const char* kTIMRequestClearLocalHistoryMessageEndTimestampParam = "request_clear_local_history_message_end_timestamp_param";
static const char* kTIMRequestReportTUIComponentUsageUIComponentTypeParam = "report_tuicomponent_usage_uicomponent_type_param";
static const char* kTIMRequestReportTUIComponentUsageUIStyleTypeParam = "report_tuicomponent_usage_uistyle_type_param";
// string, 只写(必填),长连接透传发送的数据,当 kTIMRequestInternalOperation 为 kTIMInternalOperationSendTRTCCustomData 时需要设置
static const char* kTIMRequestSendTRTCCustomDataParam = "request_send_trtc_custom_data_param";
// string, 只写(必填),长连接透传发送的数据,当 kTIMRequestInternalOperation 为 kTIMInternalOperationSendRoomCustomData 时需要设置
static const char* kTIMRequestSendRoomCustomDataServiceCommandParam = "request_send_room_custom_data_service_command_param";
// string, 只写(必填),长连接透传发送的数据,当 kTIMRequestInternalOperation 为 kTIMInternalOperationSendRoomCustomData 时需要设置
static const char* kTIMRequestSendRoomCustomDataRequestContentParam = "request_send_room_custom_data_request_content_param";
// uint8, 只写(选填), 当 kTIMRequestInternalOperation 为 kTIMInternalOperationSetApplicationID 时需要设置
static const char* kTIMRequestSetApplicationIDParam = "request_set_application_id_param";
// string, 只写(必填), 当 kTIMRequestInternalOperation 为 kTIMInternalOperationGetServerConfig 时需要设置
static const char* kTIMRequestGetServerConfigKeyParam = "request_get_server_config_key_param";
// string, 只写(必填), 当 kTIMRequestInternalOperation 为 kTIMInternalOperationGetServerConfig 时需要设置
// 0或不填: 无效, 1:数值类型 2:字符串类型
static const char* kTIMRequestGetServerConfigValueTypeParam = "request_get_server_config_value_type_param";
// bool, 只写(选填), 设置「SDK 是否忽略重复登录请求」, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationSetIgnoreRepeatLogin 时有效
static const char* kTIMRequestSetIgnoreRepeatLoginParam = "request_set_ignore_repeat_login_param";
// string, 只写(必填),直播群 ID, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationStartMessageLongPolling 时需要设置
static const char* kTIMRequestStartMessageLongPollingIDParam = "request_start_message_long_polling_id_param";
// string, 只写(必填),直播群长轮询的 key, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationStartMessageLongPolling 时需要设置
static const char* kTIMRequestStartMessageLongPollingKeyParam = "request_start_message_long_polling_key_param";
// string, 只写(必填),长轮询起始的 sequence, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationStartMessageLongPolling 时需要设置
static const char* kTIMRequestStartMessageLongPollingSequenceParam = "request_start_message_long_polling_sequence_param";
// string, 只写(必填),直播群 ID, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationStopMessageLongPolling 时需要设置
static const char* kTIMRequestStopMessageLongPollingIDParam = "request_stop_message_long_polling_id_param";
// string, 只写(必填),消息 ID当 kTIMRequestInternalOperation 为 kTIMInternalOperationFindMergerMessages 时需要设置
static const char* kTIMRequestFindMergerMessagesMessageIDParam = "request_find_merger_messages_message_id_param";
// array, 只写(必填),合并消息 ID 列表,当 kTIMRequestInternalOperation 为 kTIMInternalOperationFindMergerMessages 时需要设置
static const char* kTIMRequestFindMergerMessagesMergerMessageIDListParam = "request_find_merger_messages_merger_message_id_list_param";
// string, 只写(选填),群 ID, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationGetBriefGroupMemberList 时需要设置
static const char* kTIMRequestGetBriefGroupMemberListGroupIDParam = "request_get_brief_group_member_list_group_id_param";
// string, 只写(选填), 自定义登录信息, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationSetCustomLoginInfo 时需要设置
static const char* kTIMRequestSetCustomLoginInfoUserIDParam = "request_set_custom_login_info_user_id_param";
static const char* kTIMRequestSetCustomLoginInfoCustomInfoParam = "request_set_custom_login_info_custom_info_param";
// bool, 只写(选填), 设置是否禁用 http 请求, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationDisableHttpRequest 时需要设置
static const char* kTIMRequestDisableHttpRequestParam = "request_disable_http_request_param";
// int32, 只写(选填), 设置网络类型, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationSetNetworkInfo 时需要设置
static const char* kTIMRequestSetNetworkInfoNetworkTypeParam = "request_set_network_info_network_type_param";
// int32, 只写(选填), 设置 IP 协议类型, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationSetNetworkInfo 时需要设置
static const char* kTIMRequestSetNetworkInfoIPTypeParam = "request_set_network_info_ip_type_param";
// string, 只写(选填), 设置网络标识, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationSetNetworkInfo 时需要设置
static const char* kTIMRequestSetNetworkInfoNetworkIdParam = "request_set_network_info_network_id_param";
// uint64, 只写(选填), 设置 WIFI 的网卡接口信息, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationSetNetworkInfo 时需要设置
static const char* kTIMRequestSetNetworkInfoWifiNetworkHandleParam = "request_set_network_info_wifi_network_handle_param";
// uint64, 只写(选填), 设置 XG 的网卡接口信息, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationSetNetworkInfo 时需要设置
static const char* kTIMRequestSetNetworkInfoXgNetworkHandleParam = "request_set_network_info_xg_network_handle_param";
// bool, 只写(选填), 设置网络连接状态, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationSetNetworkInfo 时需要设置
static const char* kTIMRequestSetNetworkInfoNetworkConnectedParam = "request_set_network_info_network_connected_param";
// int64, 只写(选填), 设置获取网络信息的耗时, 当 kTIMRequestInternalOperation 为 kTIMInternalOperationSetNetworkInfo 时需要设置
static const char* kTIMRequestSetNetworkInfoInitializeCostTimeParam = "request_set_network_info_initialize_cost_time_param";
//------------------------------------------------------------------------------
// 4.14 ResponseInfo(callExperimentalAPI 接口回调返回的数据)
// string @ref TIMInternalOperation, 只读(必填), 响应的内部操作
static const char* kTIMResponseInternalOperation = "response_internal_operation";
// object @ref SSODataRes, 只读(选填), sso发包请求的响应, 当 kTIMResponseInternalOperation 为 kTIMInternalOperationSSOData 时有值
static const char* kTIMResponseSSODataRes = "response_sso_data_res";
// array @ref UserInfo, 只读(选填), 响应的tinyid列表, 当 kTIMResponseInternalOperation 为 kTIMInternalOperationUserId2TinyId 时有值
static const char* kTIMResponseUserId2TinyIdRes = "response_userid_tinyid_res";
// array @ref UserInfo, 只读(选填), 响应的tinyid列表, 当 kTIMResponseInternalOperation 为 kTIMInternalOperationTinyId2UserId 时有值
static const char* kTIMResponseTinyId2UserIdRes = "response_tinyid_userid_res";
// bool, 只读(选填), true 表示当前环境为测试环境false表示当前环境是正式环境, 当 kTIMResponseInternalOperation 为 kTIMInternalOperationSetEnv 时有值
static const char* kTIMResponseSetEvnRes = "response_set_env_res";
// uint32, 只读(选填), 推送状态0 - 不设置 1 - 开启推送 2 - 关闭推送, 当 kTIMResponseInternalOperation 为 kTIMInternalOperationGetOfflinePushState 时有值
static const char* kTIMResponseGetOfflinePushStateRes = "response_get_offline_push_state_res";
// string, 只读(选填), 撤回消息的 id, 当 kTIMResponseInternalOperation 为 kTIMInternalOperationGetMessageRevoker 时有值
static const char* kTIMResponseMessageId = "response_message_id";
// string, 只读(选填), 撤回消息的操作者, 当 kTIMResponseInternalOperation 为 kTIMInternalOperationGetMessageRevoker 时有值
static const char* kTIMResponseMessageRevoker = "response_message_revoker";
#ifdef __cplusplus
}
#endif // __cplusplus
#endif // SRC_PLATFORM_CROSS_PLATFORM_INCLUDE_TIM_EXPERIMENTAL_API_H_

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,262 @@
// Copyright (c) 2023 Tencent. All rights reserved.
#ifndef SRC_PLATFORM_CROSS_PLATFORM_INCLUDE_TIM_OFFLINE_PUSH_MANAGER_H_
#define SRC_PLATFORM_CROSS_PLATFORM_INCLUDE_TIM_OFFLINE_PUSH_MANAGER_H_
#include "TIMCloudDef.h"
#ifdef __cplusplus
extern "C" {
#endif
// 模块简介
// * -离线推送接口,用于支持离线推送功能
//
// 模块参数说明
// * -API 的参数采用 json 字符串格式,请使用文件中预先定义的 JsonKey 进行参数传递和解析
// * -如果参数中包含非英文字符,请使用 UTF-8 编码
//
// 模块回调说明
// 1. 回调的类型:
// * -调用 API 时传入的 TIMCommCallback 回调,用于异步返回 API 的调用结果
// * -调用 TIMSetXXXCallback 设置的全局回调,用于接收后台推送的通知
// 2. 回调触发的线程:
// * -对于 Windows 平台,当在主线程中调用 @ref TIMInit 接口时SDK 会将所有回调抛到主线程,请确保主线程已创建消息循环;否则,回调将在 SDK 内部的逻辑线程触发
// * -对于 Android 平台,当调用 @ref TIMInit 接口的线程支持消息循环时SDK 会将所有回调抛到该线程;否则,回调将在 SDK 内部的逻辑线程触发
// * -对于 iOS 和 MAC 平台SDK 默认将所有回调抛到主线程
// * -对于 Linux 平台,暂不支持将回调抛到主线程,回调将在 SDK 内部的逻辑线程触发
/////////////////////////////////////////////////////////////////////////////////
//
// 一. 离线推送相关配置选项定义
//
/////////////////////////////////////////////////////////////////////////////////
// 1.1 离线推送注册的 token 类型
enum TIMOfflinePushTokenType {
// 默认厂商 token, 例如 APNS/小米 push/Huawei push 等
TIMOfflinePushTokenType_Default = 0,
// TPNS
TIMOfflinePushTokenType_TPNS = 1,
// VoIP push
TIMOfflinePushTokenType_VOIP = 2,
};
// 1.2 iOS 离线推送的类型
enum TIMIOSOfflinePushType {
// 普通的 APNs 推送
TIMIOSOfflinePushType_APNS = 0,
// VoIP 推送
TIMIOSOfflinePushType_VOIP = 1,
};
// 1.3 Android 离线推送模式
enum TIMAndroidOfflinePushNotifyMode {
// 普通通知栏消息模式,离线消息下发后,点击通知栏消息直接启动应用,不会给应用进行回调
kTIMAndroidOfflinePushNotifyMode_Normal,
// 自定义消息模式,离线消息下发后,点击通知栏消息会给应用进行回调
kTIMAndroidOfflinePushNotifyMode_Custom,
};
// 1.4 推送规则
enum TIMOfflinePushFlag {
// 按照默认规则进行推送
kTIMOfflinePushFlag_Default,
// 不进行推送
kTIMOfflinePushFlag_NoPush,
};
/////////////////////////////////////////////////////////////////////////////////
//
// 二. 离线推送相关 API
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 2.1 设置离线推送配置信息iOS 和 Android 平台专用)
*
* @param json_token 离线推送配置 Json 字符串, Json Key 请参考 @ref OfflinePushToken。注意 kTIMOfflinePushTokenToken 字段要填写为设备 Token 的 hex 字符串(即 base16 编码)。
* @param cb 成功与否的回调。回调函数定义请参考 @ref TIMCommCallback
* @param user_data 用户自定义数据ImSDK只负责传回给回调函数cb不做任何处理
* @return int 返回TIM_SUCC表示接口调用成功接口只有返回TIM_SUCC回调cb才会被调用其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
*
* @note
* - 接口成功设置后会开启离线推送功能,如果您需要自定义推送的格式信息,请参考 @ref TIMMsgSendMessage 接口。
* - 如果您想关闭离线推送,请把 json_token 设置为 NULL。
*
* __示例__
* @code{.cpp}
* Json::Value json_parameters;
* json_parameters[kTIMOfflinePushTokenToken] = "token base16 string";
* json_parameters[kTIMOfflinePushTokenBusinessID] = 1234578;
* json_parameters[kTIMOfflinePushTokenType] = 0;
* TIMMsgSetOfflinePushToken(json_parameters.toStyledString().c_str(),
* [](int32_t code, const char* desc, const char* json_params, const void* user_data) {
* }, nullptr);
* @endcode
*/
TIM_API int TIMMsgSetOfflinePushToken(const char *json_token, TIMCommCallback cb, const void* user_data);
/**
* 2.2 APP 检测到应用退后台时可以调用此接口可以用作桌面应用角标的初始化未读数量iOS 和 Android 平台专用)
*
* @param unread_count 未读数量
* @param cb 成功与否的回调。回调函数定义请参考 @ref TIMCommCallback
* @param user_data 用户自定义数据ImSDK只负责传回给回调函数cb不做任何处理
* @return int 返回TIM_SUCC表示接口调用成功接口只有返回TIM_SUCC回调cb才会被调用其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
*
* @note
* - 从 6.1 版本开始,如果配置了离线推送,会收到厂商或 TPNS 的离线推送通道下发的通知栏消息。
*/
TIM_API int TIMMsgDoBackground(uint32_t unread_count, TIMCommCallback cb, const void* user_data);
/**
* 2.3 APP 检测到应用进前台时可以调用此接口iOS 和 Android 平台专用)
*
* @param cb 成功与否的回调。回调函数定义请参考 @ref TIMCommCallback
* @param user_data 用户自定义数据ImSDK只负责传回给回调函数cb不做任何处理
* @return int 返回TIM_SUCC表示接口调用成功接口只有返回TIM_SUCC回调cb才会被调用其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
*
* @note
* - 从 6.1 版本开始,调用 TIMMsgDoForeground会停止离线推送。但如果应用被 kill仍然可以正常接收离线推送。
*/
TIM_API int TIMMsgDoForeground(TIMCommCallback cb, const void* user_data);
/////////////////////////////////////////////////////////////////////////////////
//
// 三. 离线推送 API 参数相关的 Json Key 定义
//
/////////////////////////////////////////////////////////////////////////////////
//------------------------------------------------------------------------------
// 3.1 OfflinePushToken(设置离线推送配置信息)
// string, 只写(选填), 注册应用到厂商平台的 token。注意填写为设备 Token 的 hex 字符串(即 base16 编码)。
static const char* kTIMOfflinePushTokenToken = "offline_push_token_token";
// uint32, 只写(选填), IM 控制台证书 ID
static const char* kTIMOfflinePushTokenBusinessID = "offline_push_token_business_id";
// uint @ref TIMOfflinePushTokenType, 只写(选填), 厂商 token 类型。默认为 TIMOfflinePushTokenType_Default。其中 TIMOfflinePushTokenType_TPNS 为待废弃状态,如果您之前通过 TPNS 接入离线推送,并且在 TPNS 控制台配置推送信息,可以继续按照该方式接入推送功能。如果您从未接入 TPNS从未在 TPNS 控制台配置推送信息IM 将不在支持 TPNS 方式接入离线推送功能, 推荐参照 [官网](https://cloud.tencent.com/document/product/269/74284) 接入
static const char* kTIMOfflinePushTokenType = "offline_push_token_type";
//------------------------------------------------------------------------------
// 3.2 IOSOfflinePushConfigSoundConfig(iOS 离线推送声音设置选项)
// string, 选项, 接收时不会播放声音
static const char* kIOSOfflinePushNoSound = "push.no_sound";
// string, 选项, 接收时播放系统声音
static const char* kIOSOfflinePushDefaultSound = "default";
//------------------------------------------------------------------------------
// 3.3 IOSOfflinePushConfig(消息在 iOS 系统上的离线推送配置)
// string, 读写, 通知标题
static const char* kTIMIOSOfflinePushConfigTitle = "ios_offline_push_config_title";
// string, 读写, 离线推送声音设置(仅对 iOS 生效),可设置的选项请参考 @ref IOSOfflinePushConfigSoundConfig。当 iOSSound = kIOSOfflinePushNoSound表示接收时不会播放声音当 iOSSound = kIOSOfflinePushDefaultSound表示接收时播放系统声音如果要自定义 iOSSound需要先把语音文件链接进 Xcode 工程,然后把语音文件名(带后缀)设置给 iOSSound。
static const char* kTIMIOSOfflinePushConfigSound = "ios_offline_push_config_sound";
// bool, 读写, 是否忽略badge计数。若为true在iOS接收端这条消息不会使App的应用图标未读计数增加
static const char* kTIMIOSOfflinePushConfigIgnoreBadge = "ios_offline_push_config_ignore_badge";
// uint @ref TIMIOSOfflinePushType, 读写iOS 离线推送的类型(仅对 iOS 生效),默认值是 TIMIOSOfflinePushType_APNS
static const char* kTIMIOSOfflinePushConfigPushType = "ios_offline_push_config_push_type";
// string, 读写, 设置 APNs 离线推送的通知图片 url, 借助 iOS 10 Service Extension 特性,可以下载并展示在弹窗上. url 使用的协议必须是 HTTPS 协议取值样例https://example.com/image.png
// @note
// 限制说明:
// - 图片:支持 JPEG、GIF、PNG大小不超过 10 MB
// 使用说明:
// - 需要在 IM 控制台打开 mutable-content 属性,支持 iOS 10 Service Extension 特性
// - 获取 iOSImage 资源的 key 值是 "image"
static const char* kTIMIOSOfflinePushConfigImage = "ios_offline_push_config_image";
/// string, 读写, iOS 离线推送的通知级别 (iOS 15 及以上支持)
/// 使用说明:
/// "passive",不会发出声音、振动或横幅提示,只会静默地出现在通知中心。适用于不紧急的信息,例如应用内的社交活动更新或推荐内容。
/// "active", 会发出声音或振动,并显示横幅提示。适用于一般的重要通知,例如消息提醒、日历事件等。(默认类型)
/// "time-sensitive"会发出声音或振动并显示横幅提示这种级别的通知会打扰用户即使用户启用了“专注模式”Focus Mode。适用于需要用户立即关注的紧急通知例如安全警报、重要的时间提醒等。打开需要在苹果开发者平台和 xcode 项目中增加相应的配置。
/// "critical", 会发出声音或振动,并显示横幅提示。这种级别的通知会打扰用户,即使设备处于静音模式。适用于极其重要的紧急通知,例如公共安全警报、严重的健康警告等。打开需要向 Apple 特殊申请。
static const char* kTIMIOSOfflinePushConfigInterruptionLevel = "ios_offline_push_config_interruption_level";
/// bool, 读写, 设置 iOS 后台透传消息, 设置打开后,离线接收会唤起应用并透传消息内容 ext
static const char* kTIMIOSOfflinePushConfigEnableBackgroundNotification = "ios_offline_push_config_enable_background_notification";
//------------------------------------------------------------------------------
// 3.4 AndroidOfflinePushConfig(消息在 Android 系统上的离线推送配置)
// @note ChannelID 的说明:
// - Android 8.0系统以上通知栏消息增加了 channelID 的设置,目前 oppo 要求必须填写,否则在 8.0 及以上的 OPPO 手机上会收不到离线推送消息。
// - 后续可能会增加 xiaomi_channel_id_huawei_channel_id 等。
// string, 读写, 通知标题
static const char* kTIMAndroidOfflinePushConfigTitle = "android_offline_push_config_title";
// string, 读写, 离线推送声音设置(仅对 Android 生效)。只有华为和谷歌手机支持设置声音提示,小米手机设置声音提示,请您参照 [官网](https://dev.mi.com/console/doc/detail?pId=1278%23_3_0)。另外,谷歌手机 FCM 推送在 Android 8.0 及以上系统设置声音提示,必须调用 setAndroidFCMChannelID 设置好 channelID才能生效。AndroidSound: Android 工程里 raw 目录中的铃声文件名,不需要后缀名。
static const char* kTIMAndroidOfflinePushConfigSound = "android_offline_push_config_sound";
// uint @ref TIMAndroidOfflinePushNotifyMode, 读写, 当前消息的通知模式
static const char* kTIMAndroidOfflinePushConfigNotifyMode = "android_offline_push_config_notify_mode";
// string, 读写, 离线推送设置 VIVO 推送消息类别,详见 [官网](https://dev.vivo.com.cn/documentCenter/doc/359)。
static const char* kTIMAndroidOfflinePushConfigVIVOCategory = "android_offline_push_config_vivo_category";
// string, 读写, 离线推送设置 OPPO 手机 8.0 系统及以上的渠道 ID仅对 Android 生效)。
static const char* kTIMAndroidOfflinePushConfigOPPOChannelID = "android_offline_push_config_oppo_channel_id";
// string, 读写, 离线推送设置小米手机 8.0 系统及以上的渠道 ID仅对 Android 生效)。
static const char* kTIMAndroidOfflinePushConfigXiaoMiChannelID = "android_offline_push_config_xiaomi_channel_id";
// string, 读写, 离线推送设置 FCM 通道手机 8.0 系统及以上的渠道 ID仅对 Android 生效)。
static const char* kTIMAndroidOfflinePushConfigFCMChannelID = "android_offline_push_config_fcm_channel_id";
// string, 读写, 离线推送设置华为推送消息分类,详见 [官网]( https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/message-classification-0000001149358835)
static const char* kTIMAndroidOfflinePushConfigHuaWeiCategory = "android_offline_push_config_huawei_category";
// string, 读写, 离线推送设置 OPPO 推送消息分类详见https://open.oppomobile.com/new/developmentDoc/info?id=13189。 通讯与服务类型有:"IM""ACCOUNT"等;内容与营销类型有:"NEWS""CONTENT"等
static const char* kTIMAndroidOfflinePushConfigOPPOCategory = "android_offline_push_config_oppo_category";
// uint @ref TIMAndroidOfflinePushConfigOPPONotifyLevel, 读写, 离线推送设置 OPPO 推送通知栏消息提醒等级详见https://open.oppomobile.com/new/developmentDoc/info?id=13189。使用生效前需要先设置 AndroidOPPOCategory 指定 category 为 IM 类消息。消息提醒等级有1通知栏2通知栏 + 锁屏 默认16通知栏 + 锁屏 + 横幅 + 震动 + 铃声;
static const char* kTIMAndroidOfflinePushConfigOPPONotifyLevel = "android_offline_push_config_oppo_notify_level";
// uint @ref TIMAndroidOfflinePushConfigHonorImportance, 读写, 离线推送设置 Honor 推送消息分类详见https://developer.honor.com/cn/docs/11002/guides/notification-class, "NORMAL", 表示消息为服务通讯类;"LOW", 表示消息为资讯营销类
static const char* kTIMAndroidOfflinePushConfigHonorImportance = "android_offline_push_config_honor_importance";
// string, 读写, 设置华为设备离线推送的通知图片 url, url 使用的协议必须是 HTTPS 协议取值样例https://example.com/image.png
// @note
// string, 读写, 图片文件须小于 512KB规格建议为 40dp x 40dp弧角大小为 8dp。超出建议规格的图片会存在图片压缩或图片显示不全的情况。图片格式建议使用 JPG/JPEG/PNG。
static const char* kTIMAndroidOfflinePushConfigHuaWeiImage = "android_offline_push_config_huawei_image";
// string, 读写, 设置荣耀设备离线推送的通知图片 url, url 使用的协议必须是 HTTPS 协议取值样例https://example.com/image.png
// @note
// 图标文件大小须小于 100KB图标建议规格大小160px x 160px弧角大小为 32px超出规格大小的图标会存在图片压缩或显示不全的情况。
static const char* kTIMAndroidOfflinePushConfigHonorImage = "android_offline_push_config_honor_image";
// string, 读写, 设置 Google FCM 设备离线推送的通知图片 url未展开消息时显示为大图标展开消息后展示为大图片. url 使用的协议必须是 HTTPS 协议取值样例https://example.com/image.png
// @note
// 图标文件大小须小于 1 MB超出规格大小的图标会存在图片压缩或显示不全的情况。
static const char* kTIMAndroidOfflinePushConfigFCMImage = "android_offline_push_config_fcm_image";
//------------------------------------------------------------------------------
// 3.4 HarmonyOfflinePushConfig(消息在 Harmony 系统上推送配置)
// string, 读写, 通知标题
static const char* kTIMHarmonyOfflinePushConfigTitle = "harmony_offline_push_config_title";
// string, 读写, 设置鸿蒙设备离线推送的通知图片URL使用的协议必须是HTTPS协议取值样例https://example.com/image.png。
// @note
// 支持图片格式为png、jpg、jpeg、heif、gif、bmp图片长*宽 < 25000像素。
static const char* kTIMHarmonyOfflinePushConfigImage = "harmony_offline_push_config_image";
// string, 读写, 设置鸿蒙设备离线推送通知消息类别详见https://developer.huawei.com/consumer/cn/doc/HMSCore-Guides/message-classification-0000001149358835
static const char* kTIMHarmonyOfflinePushConfigCategory = "harmony_offline_push_config_category";
// uint32, 读写,离线推送忽略 badge 计数(仅对 Harmony 生效),
// 如果设置为 YES在 Harmony 接收端,这条消息不会使 APP 的应用图标未读计数增加。
static const char* kTIMHarmonyOfflinePushConfigIgnoreBadge = "harmony_offline_push_config_ignore_badge";
//------------------------------------------------------------------------------
// 3.5 OfflinePushConfig(消息离线推送配置)
// string, 读写, 当前消息在对方收到离线推送时候展示标题
static const char* kTIMOfflinePushConfigTitle = "offline_push_config_title";
// string, 读写, 当前消息在对方收到离线推送时候展示内容
static const char* kTIMOfflinePushConfigDesc = "offline_push_config_desc";
// string, 读写, 当前消息离线推送时的扩展字段
static const char* kTIMOfflinePushConfigExt = "offline_push_config_ext";
// uint @ref TIMOfflinePushFlag, 读写, 当前消息是否允许推送,默认允许推送 kTIMOfflinePushFlag_Default
static const char* kTIMOfflinePushConfigFlag = "offline_push_config_flag";
// object @ref IOSOfflinePushConfig, 读写, iOS离线推送配置
static const char* kTIMOfflinePushConfigIOSConfig = "offline_push_config_ios_config";
// object @ref AndroidOfflinePushConfig, 读写, Android离线推送配置
static const char* kTIMOfflinePushConfigAndroidConfig = "offline_push_config_android_config";
// object @ref HarmonyOfflinePushConfig, 读写, Harmony离线推送配置
static const char* kTIMOfflinePushConfigHarmonyConfig = "offline_push_config_harmony_config";
/////////////////////////////////////////////////////////////////////////////////
//
// 四. 废弃字段
//
/////////////////////////////////////////////////////////////////////////////////
//------------------------------------------------------------------------------
// 4.1 AndroidOfflinePushConfig(消息在 Android 系统上的离线推送配置, 已废弃的部分)
// uint32, 读写,离线推送设置 VIVO 推送消息分类 (待废弃字段VIVO 推送服务于 2023 年 4 月 3 日优化消息分类规则,推荐使用 kTIMAndroidOfflinePushConfigVIVOCategory 设置消息类别) VIVO 手机离线推送消息分类0运营消息1系统消息。默认取值为 1 。
static const char* kTIMAndroidOfflinePushConfigVIVOClassification = "android_offline_push_config_vivo_classification";
#ifdef __cplusplus
}
#endif // __cplusplus
#endif // SRC_PLATFORM_CROSS_PLATFORM_INCLUDE_TIM_OFFLINE_PUSH_MANAGER_H_

View File

@@ -0,0 +1,395 @@
// Copyright (c) 2023 Tencent. All rights reserved.
#ifndef SRC_PLATFORM_CROSS_PLATFORM_INCLUDE_TIM_SIGNALING_MANAGER_H_
#define SRC_PLATFORM_CROSS_PLATFORM_INCLUDE_TIM_SIGNALING_MANAGER_H_
#include "TIMCloudDef.h"
#ifdef __cplusplus
extern "C" {
#endif
// 模块简介
// - 信令接口,包含通话邀请相关功能
//
// 模块参数说明
// - API 的参数采用 json 字符串格式,请使用文件中预先定义的 JsonKey 进行参数传递和解析
// - 如果参数中包含非英文字符,请使用 UTF-8 编码
//
// 模块回调说明
// 1. 回调的类型:
// - 调用 API 时传入的 TIMCommCallback 回调,用于异步返回 API 的调用结果
// - 调用 TIMSetXXXCallback 设置的全局回调,用于接收后台推送的通知
// 2. 回调触发的线程:
// - 对于 Windows 平台,当在主线程中调用 @ref TIMInit 接口时SDK 会将所有回调抛到主线程,请确保主线程已创建消息循环;否则,回调将在 SDK 内部的逻辑线程触发
// - 对于 Android 平台,当调用 @ref TIMInit 接口的线程支持消息循环时SDK 会将所有回调抛到该线程;否则,回调将在 SDK 内部的逻辑线程触发
// - 对于 iOS 和 MAC 平台SDK 默认将所有回调抛到主线程
// - 对于 Linux 平台,暂不支持将回调抛到主线程,回调将在 SDK 内部的逻辑线程触发
/////////////////////////////////////////////////////////////////////////////////
//
// 一. 信令相关配置选项定义
//
/////////////////////////////////////////////////////////////////////////////////
// 1.1 信令响应类型
enum TIMSignalingActionType {
// 未定义
TIMSignalingActionType_Unknown,
// 邀请方发起邀请
TIMSignalingActionType_Invite,
// 邀请方取消邀请
TIMSignalingActionType_CancelInvite,
// 被邀请方接受邀请
TIMSignalingActionType_AcceptInvite,
// 被邀请方拒绝邀请
TIMSignalingActionType_RejectInvite,
// 邀请超时
TIMSignalingActionType_InviteTimeout,
};
/////////////////////////////////////////////////////////////////////////////////
//
// 二. 信令事件回调定义
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 2.1 收到邀请的回调
*
* @param invite_id 邀请 ID
* @param inviter 邀请者 userID
* @param group_id 群组 ID
* @param json_invitee_list 被邀请者 userID 列表json 字符串类型
* @param data 自定义字段
* @param user_data ImSDK负责透传的用户自定义数据未做任何处理
*/
typedef void (*TIMSignalingReceiveNewInvitationCallback)(const char* invite_id, const char* inviter, const char* group_id,
const char* json_invitee_list, const char* data, const void* user_data);
/**
* 2.2 邀请被取消的回调
*
* @param invite_id 邀请 ID
* @param inviter 邀请者 userID
* @param data 自定义字段
* @param user_data ImSDK负责透传的用户自定义数据未做任何处理
*/
typedef void (*TIMSignalingInvitationCancelledCallback)(const char* invite_id, const char* inviter, const char* data, const void* user_data);
/**
* 2.3 被邀请者接受邀请的回调
*
* @param invite_id 邀请 ID
* @param invitee 被邀请者 userID
* @param data 自定义字段
* @param user_data ImSDK负责透传的用户自定义数据未做任何处理
*/
typedef void (*TIMSignalingInviteeAcceptedCallback)(const char* invite_id, const char* invitee, const char* data, const void* user_data);
/**
* 2.4 被邀请者拒绝邀请的回调
*
* @param invite_id 邀请 ID
* @param invitee 被邀请者 userID
* @param data 自定义字段
* @param user_data ImSDK负责透传的用户自定义数据未做任何处理
*/
typedef void (*TIMSignalingInviteeRejectedCallback)(const char* invite_id, const char* invitee, const char* data, const void* user_data);
/**
* 2.5 邀请超时的回调
*
* @param invite_id 邀请 ID
* @param json_invitee_list 被邀请者 userID 列表json 字符串类型
* @param user_data ImSDK负责透传的用户自定义数据未做任何处理
*/
typedef void (*TIMSignalingInvitationTimeoutCallback)(const char* invite_id, const char* json_invitee_list, const void* user_data);
/**
* 2.6 邀请被修改的回调6.7 及其以上版本支持)
*
* @param invite_id 邀请 ID
* @param data 自定义字段
* @param user_data ImSDK负责透传的用户自定义数据未做任何处理
*/
typedef void (*TIMSignalingInvitationModifiedCallback)(const char* invite_id, const char* data, const void* user_data);
/////////////////////////////////////////////////////////////////////////////////
//
// 三. 注册信令事件回调 API
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 3.1 设置收到信令邀请的回调
*
* @param cb 收到信令邀请的回调,请参考 @ref TIMSignalingReceiveNewInvitationCallback
* @param user_data 用户自定义数据ImSDK只负责传回给回调函数cb不做任何处理
*/
TIM_API void TIMSetSignalingReceiveNewInvitationCallback(TIMSignalingReceiveNewInvitationCallback cb, const void *user_data);
/**
* 3.2 设置信令邀请被取消的回调
*
* @param cb 信令邀请被取消的回调,请参考 @ref TIMSignalingInvitationCancelledCallback
* @param user_data 用户自定义数据ImSDK只负责传回给回调函数cb不做任何处理
*/
TIM_API void TIMSetSignalingInvitationCancelledCallback(TIMSignalingInvitationCancelledCallback cb, const void *user_data);
/**
* 3.3 设置信令邀请被接收者同意的回调
*
* @param cb 同意信令邀请的回调,请参考 @ref TIMSignalingInviteeAcceptedCallback
* @param user_data 用户自定义数据ImSDK只负责传回给回调函数cb不做任何处理
*/
TIM_API void TIMSetSignalingInviteeAcceptedCallback(TIMSignalingInviteeAcceptedCallback cb, const void *user_data);
/**
* 3.4 设置信令邀请被接收者拒绝的回调
*
* @param cb 拒绝信令邀请的回调,请参考 @ref TIMSignalingInviteeRejectedCallback
* @param user_data 用户自定义数据ImSDK只负责传回给回调函数cb不做任何处理
*/
TIM_API void TIMSetSignalingInviteeRejectedCallback(TIMSignalingInviteeRejectedCallback cb, const void *user_data);
/**
* 3.5 设置信令邀请超时的回调
*
* @param cb 信令邀请超时的回调,请参考 @ref TIMSignalingInvitationTimeoutCallback
* @param user_data 用户自定义数据ImSDK只负责传回给回调函数cb不做任何处理
*/
TIM_API void TIMSetSignalingInvitationTimeoutCallback(TIMSignalingInvitationTimeoutCallback cb, const void *user_data);
/**
* 3.6 设置信令邀请被修改的回调
*
* @param cb 信令邀请被修改的回调,请参考 @ref TIMSignalingInvitationModifiedCallback
* @param user_data 用户自定义数据ImSDK只负责传回给回调函数cb不做任何处理
*/
TIM_API void TIMSetSignalingInvitationModifiedCallback(TIMSignalingInvitationModifiedCallback cb, const void *user_data);
/////////////////////////////////////////////////////////////////////////////////
//
// 四. 信令 API
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 4.1 邀请某个人
*
* @param invitee 被邀请人的 userID
* @param data 自定义数据
* @param online_user_only 是否只有在线用户才能收到邀请,如果设置为 true只有在线用户才能收到并且 invite 操作也不会产生历史消息(针对该次 invite 的后续 cancel、accept、reject、timeout 操作也同样不会产生历史消息)
* @param json_offline_push_info 离线推送时携带的标题和声音,其中 desc 为必填字段,推送的时候会默认展示 desc 信息Json key 的定义请参考 @ref OfflinePushConfig
* @param timeout 超时时间,单位 s如果设置为 0SDK 不会做超时检测,也不触发 @ref TIMSignalingInvitationTimeoutCallback 回调
* @param invite_id_buffer 出参,邀请 ID分配内存大小不能低于 128 字节,如果不需要,可传入 nullptr调用接口后可以读取到以 '\0' 结尾的字符串
* @param cb 回调
* @param user_data 用户自定义数据ImSDK只负责传回给回调函数cb不做任何处理
* @return int 返回TIM_SUCC表示接口调用成功接口只有返回TIM_SUCC回调cb才会被调用其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
*
* __示例__
* @code{.cpp}
* Json::Value json_offline_push_info;
* json_offline_push_info[kTIMOfflinePushConfigDesc] = "push desc";
*
* const size_t kMessageIDLength = 128;
* char invite_id_buffer[kMessageIDLength] = {0};
* int ret = TIMSignalingInvite("user", "custom data", true, json_offline_push_info, 30, invite_id_buffer,
* [](int32_t code, const char* desc, const char* json_params, const void* user_data){
* if (ERR_SUCC == code) {
* // 邀请成功
* } else {
* // 邀请失败
* }
* }, nullptr);
* @endcode
*/
TIM_API int TIMSignalingInvite(const char* invitee, const char* data, bool online_user_only, const char* json_offline_push_info, int timeout, char* invite_id_buffer, TIMCommCallback cb, const void* user_data);
/**
* 4.2 邀请群内的某些人
*
* @param group_id 发起邀请所在群组
* @param json_invitee_array 被邀请人列表,且被邀请人必须已经在群组内,否则邀请无效
* @param data 自定义字段
* @param online_user_only 是否只有在线用户才能收到邀请,如果设置为 true只有在线用户才能收到并且 invite 操作也不会产生历史消息(针对该次 invite 的后续 cancel、accept、reject、timeout 操作也同样不会产生历史消息)
* @param timeout 超时时间,单位 s如果设置为 0SDK 不会做超时检测,也不触发 @ref TIMSignalingInvitationTimeoutCallback 回调
* @param invite_id_buffer 出参邀请ID分配内存大小不能低于 128 字节,如果不需要,可传入 nullptr调用接口后可以读取到以 '\0' 结尾的字符串
* @param cb 回调
* @param user_data 用户自定义数据ImSDK只负责传回给回调函数cb不做任何处理
* @return int 返回TIM_SUCC表示接口调用成功接口只有返回TIM_SUCC回调cb才会被调用其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
*
* __示例__
* @code{.cpp}
* Json::Value json_invitee_array(Json::arrayValue);
* json_invitee_array.append("user1");
* json_invitee_array.append("user2");
*
* const size_t kMessageIDLength = 128;
* char invite_id_buffer[kMessageIDLength] = {0};
* int ret = TIMSignalingInviteInGroup("group_id", json_invitee_array, "custom data", true, 30, invite_id_buffer,
* [](int32_t code, const char* desc, const char* json_params, const void* user_data){
* if (ERR_SUCC == code) {
* // 邀请成功
* } else {
* // 邀请失败
* }
* }, nullptr);
* @endcode
*/
TIM_API int TIMSignalingInviteInGroup(const char* group_id, const char* json_invitee_array, const char* data, bool online_user_only, int timeout, char* invite_id_buffer, TIMCommCallback cb, const void* user_data);
/**
* 4.3 邀请方取消邀请
*
* @param invite_id 邀请 ID
* @param data 自定义字段
* @param cb 回调
* @param user_data 用户自定义数据ImSDK只负责传回给回调函数cb不做任何处理
* @return int 返回TIM_SUCC表示接口调用成功接口只有返回TIM_SUCC回调cb才会被调用其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
*
* @note 如果所有被邀请人都已经处理了当前邀请(包含超时),不能再取消当前邀请。
*
* __示例__
* @code{.cpp}
* const char *invite_id = "XXX-XXX-XXX-XXX";
* int ret = TIMSignalingCancel(invite_id, "",
* [](int32_t code, const char* desc, const char* json_params, const void* user_data){
* if (ERR_SUCC == code) {
* // 取消成功
* } else {
* // 取消失败
* }
* }, nullptr);
* @endcode
*/
TIM_API int TIMSignalingCancel(const char* invite_id, const char* data, TIMCommCallback cb, const void* user_data);
/**
* 4.4 被邀请方接受邀请
*
* @param invite_id 邀请 ID
* @param data 自定义字段
* @param cb 回调
* @param user_data 用户自定义数据ImSDK只负责传回给回调函数cb不做任何处理
* @return int 返回TIM_SUCC表示接口调用成功接口只有返回TIM_SUCC回调cb才会被调用其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
*
* @note 不能接受不是针对自己的邀请,请在收到 @ref TIMSignalingReceiveNewInvitation 回调的时候先判断 json_invitee_array 有没有自己,如果没有自己,不能 accept 邀请。
*
* __示例__
* @code{.cpp}
* const char *invite_id = "XXX-XXX-XXX-XXX";
* int ret = TIMSignalingAccept(invite_id, "",
* [](int32_t code, const char* desc, const char* json_params, const void* user_data){
* if (ERR_SUCC == code) {
* // 接受邀请成功
* } else {
* // 接受邀请失败
* }
* }, nullptr);
* @endcode
*/
TIM_API int TIMSignalingAccept(const char* invite_id, const char* data, TIMCommCallback cb, const void* user_data);
/**
* 4.5 被邀请方拒绝邀请
*
* @param invite_id 邀请 ID
* @param data 自定义字段
* @param cb 回调
* @param user_data 用户自定义数据ImSDK只负责传回给回调函数cb不做任何处理
* @return int 返回TIM_SUCC表示接口调用成功接口只有返回TIM_SUCC回调cb才会被调用其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
*
* @note 不能拒绝不是针对自己的邀请,请在收到 @ref TIMSignalingReceiveNewInvitation 回调的时候先判断 json_invitee_array 有没有自己,如果没有自己,不能 reject 邀请。
*
* __示例__
* @code{.cpp}
* const char *invite_id = "XXX-XXX-XXX-XXX";
* int ret = TIMSignalingReject(invite_id, "",
* [](int32_t code, const char* desc, const char* json_params, const void* user_data){
* if (ERR_SUCC == code) {
* // 拒绝邀请成功
* } else {
* // 拒绝邀请失败
* }
* }, nullptr);
* @endcode
*/
TIM_API int TIMSignalingReject(const char* invite_id, const char* data, TIMCommCallback cb, const void* user_data);
/**
* 4.6 获取信令信息
*
* @param json_msg 消息 json 字符串
* @param json_signaling_info_cb 获取信令消息的回调,您可以在该回调中根据 code == ERR_SUCC 来确定当前 json_msg 为信令消息
* @param user_data 用户自定义数据ImSDK只负责传回给回调函数cb不做任何处理
* @return int 返回TIM_SUCC表示接口调用成功接口只有返回TIM_SUCC回调cb才会被调用其他值表示接口调用失败。每个返回值的定义请参考 @ref TIMResult
*
* @note
* 如果 invite 设置 online_user_only 为 false每次信令操作包括 invite、cancel、accept、reject、timeout都会产生一条自定义消息该消息会通过 @ref TIMRecvNewMsgCallback 抛给用户,用户也可以通过历史消息拉取,如果需要根据信令信息做自定义化文本展示,可以调用下面接口获取信令信息。
*
* __示例__
* @code{.cpp}
* const char *json_msg = "";
* int ret = TIMGetSignalingInfo(json_msg,
* [](int32_t code, const char* desc, const char* json_params, const void* user_data){
* if (ERR_SUCC == code) {
* // 当前消息是信令消息
* } else {
* // 当前消息为普通消息
* }
* }, nullptr);
* @endcode
*/
TIM_API int TIMGetSignalingInfo(const char *json_msg, TIMCommCallback json_signaling_info_cb, const void* user_data);
/**
* 4.7 修改邀请信令6.7 及其以上版本支持)
*
* @note 仅支持修改邀请信令的自定义字段 data。只有在线用户才能收到的邀请信令不能被修改。
*
* __示例__
* @code{.cpp}
* const char *invite_id = "XXX-XXX-XXX-XXX";
* int ret = TIMSignalingModifyInvitation(invite_id, "",
* [](int32_t code, const char* desc, const char* json_params, const void* user_data){
* if (ERR_SUCC == code) {
* // 修改邀请成功
* } else {
* // 修改邀请失败
* }
* }, nullptr);
* @endcode
*/
TIM_API int TIMSignalingModifyInvitation(const char* invite_id, const char* data, TIMCommCallback cb, const void* user_data);
/////////////////////////////////////////////////////////////////////////////////
//
// 五. 信令 API 参数相关的 Json Key 定义
//
/////////////////////////////////////////////////////////////////////////////////
//------------------------------------------------------------------------------
// 5.1 SignalingInfo(信令基础信息定义)
// string, 只读, 邀请 ID
static const char* kTIMSignalingInfoInviteID = "signaling_info_invite_id";
// string, 只读, 群组 ID
static const char* kTIMSignalingInfoGroupID = "signaling_info_group_id";
// string, 只读, 邀请方的 ID
static const char* kTIMSignalingInfoInviter = "signaling_info_inviter";
// string, 只读, 被邀请方列表
static const char* kTIMSignalingInfoInviteeList = "signaling_info_invitee_list";
// string, 只读, 信令自定义内容
static const char* kTIMSignalingInfoData = "signaling_info_data";
// int @ref TIMSignalingActionType, 只读, 信令响应类型
static const char* kTIMSignalingInfoActionType = "signaling_info_action_type";
// int, 只读, 超时时间
static const char* kTIMSignalingInfoTimeout = "signaling_info_timeout";
#ifdef __cplusplus
}
#endif // __cplusplus
#endif // SRC_PLATFORM_CROSS_PLATFORM_INCLUDE_TIM_SIGNALING_MANAGER_H_

View File

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

View File

@@ -0,0 +1,19 @@
// Copyright (c) 2025 Tencent. All rights reserved.
#ifndef TIM_IM_SDK_PLUS_H_
#define TIM_IM_SDK_PLUS_H_
#import "TIMErrorCode.h"
#import "V2TIMManager.h"
#import "V2TIMManager+APNS.h"
#import "V2TIMManager+Friendship.h"
#import "V2TIMManager+Conversation.h"
#import "V2TIMManager+Group.h"
#import "V2TIMManager+Community.h"
#import "V2TIMManager+Message.h"
#import "V2TIMManager+Signaling.h"
#import "V2TIMManager+VOIP.h"
#import "V2TIMManager+LiveActivity.h"
#endif

View File

@@ -0,0 +1,446 @@
// 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_HTTP_NO_CLEARTEXT_TRAFFIC_PERMISSION = 6029, ///< 无 http 协议的访问权限iOS 9.0 和 Android P 开始默认限制 http 协议iOS 平台可配置 NSAppTransportSecurity 选项Android 平台可配置 cleartextTrafficPermitted 选项,取消 http 协议的限制。
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_BLOCKED_BY_SENSITIVE_WORD = 7015, ///< SDK 本地内容审核,命中敏感词
// 账号错误码
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_INVALID_MSG_RECEIVER = 6032, ///< 无效的消息接收方,请在 IM 控制台检查消息的接收方是否存在。
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_COMM_SENSITIVE_IMAGE = 80004, ///< 图片安全打击,图片中可能包含敏感内容。
// 账号错误码
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_LOW_SDK_VERSION = 70404, ///< 您的SDK版本过低请升级到最新版本.
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_PROFILE_SUBSCRIPTION_DISABLED = 72012, ///< 用户资料变更订阅能力未开启,请参见 [订阅非好友用户资料](https://cloud.tencent.com/document/product/269/75416#53edea52-35ef-4d82-aae9-941ba690f051),登录 [IM 控制台](https://console.tencentcloud.com/im) 开启该功能。
// 关系链错误码
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_ALREADY_FRIENDS = 30015, ///< 已经存在好友关系。
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_FRIENDSHIP_SELF_FOLLOWING_COUNT_EXCEEDS_LIMIT = 32100, ///< 自己的关注数量到达上限。
ERR_SVR_FRIENDSHIP_PEER_FOLLOWERS_COUNT_EXCEEDS_LIMIT = 32101, ///< 对方的粉丝数量到达上限。
ERR_SVR_FRIENDSHIP_SELF_MUTUAL_FOLLOWERS_COUNT_EXCEEDS_LIMIT = 32102, ///< 自己的互关数量到达上限。
ERR_SVR_FRIENDSHIP_PEER_MUTUAL_FOLLOWERS_COUNT_EXCEEDS_LIMIT = 32103, ///< 对方的互关数量到达上限。
// 最近联系人错误码
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_REACTION_COUNT_LIMIT = 23005, ///< 单条消息 Reaction 数量超过最大限制。
ERR_SVR_MSG_REACTION_USER_COUNT_LIMIT = 23006, ///< 单个 Reaction 用户数量超过最大限制。
ERR_SVR_MSG_REACTION_ALREADY_CONTAIN_USER = 23007, ///< Reaction 已经包含当前操作用户。
ERR_SVR_MSG_REACTION_NOT_EXISTS = 23008, ///< Reaction 不存在。
ERR_SVR_MSG_REACTION_NOT_CONTAIN_USER = 23009, ///< Reaction 不包含当前操作用户。
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_GROUP_PINNED_MESSAGE_COUNT_LIMIT = 10070, ///< 置顶消息超出数量限制。
ERR_SVR_GROUP_MESSAGE_ALREADY_PINNED = 10071, ///< 消息已经被置顶。
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,111 @@
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 IMSDK
//
// 模块名称V2TIMManager+APNS
//
// 消息推送接口,里面包含了消息的推送的开启逻辑
//
/////////////////////////////////////////////////////////////////////
#import "V2TIMManager.h"
@class V2TIMAPNSConfig;
V2TIM_EXPORT @protocol V2TIMAPNSListener;
V2TIM_EXPORT @interface V2TIMManager (APNS)
/////////////////////////////////////////////////////////////////////////////////
//
// 设置 APNS 推送
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 1.1 设置 APNS 监听
*/
- (void)setAPNSListener:(_Nullable id<V2TIMAPNSListener>)apnsListener NS_SWIFT_NAME(setAPNSListener(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* _Nullable)config succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setAPNS(config:succ: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,482 @@
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 IMSDK
//
// 模块名称V2TIMManager+Community
//
// 社群接口,里面包含了创建话题、删除话题、修改话题、获取话题列表等逻辑
//
/////////////////////////////////////////////////////////////////////
#import "V2TIMManager.h"
#import "V2TIMManager+Group.h"
V2TIM_EXPORT @protocol V2TIMCommunityListener;
@class V2TIMTopicInfo;
@class V2TIMTopicInfoResult;
@class V2TIMTopicOperationResult;
@class V2TIMPermissionGroupInfo;
@class V2TIMPermissionGroupOperationResult;
@class V2TIMPermissionGroupInfoResult;
@class V2TIMPermissionGroupMemberOperationResult;
@class V2TIMPermissionGroupMemberInfoResult;
@class V2TIMTopicPermissionOperationResult;
@class V2TIMTopicPermissionResult;
V2TIM_EXPORT @interface V2TIMManager (Community)
/// 操作话题列表结果
typedef void(^V2TIMTopicOperationResultSucc)(NSMutableArray<V2TIMTopicOperationResult *> *resultList);
/// 获取话题列表结果
typedef void(^V2TIMTopicInfoResultListSucc)(NSMutableArray<V2TIMTopicInfoResult *> *resultList);
/// 创建话题成功回调
typedef void (^V2TIMCreateTopicSucc)(NSString * _Nullable topicID);
/// 创建权限组成功回调
typedef void (^V2TIMCreatePermissionGroupSucc)(NSString * _Nullable permissionGroupID);
/// 操作权限组结果
typedef void (^V2TIMPermissionGroupOperationResultSucc)(NSMutableArray<V2TIMPermissionGroupOperationResult *> *resultList);
/// 获取权限组列表结果
typedef void (^V2TIMPermissionGroupInfoResultListSucc)(NSMutableArray<V2TIMPermissionGroupInfoResult *> *resultList);
/// 操作权限组成员结果
typedef void (^V2TIMPermissionGroupMemberOperationResultListSucc)(NSMutableArray<V2TIMPermissionGroupMemberOperationResult *> *resultList);
/// 获取权限组成员结果
typedef void (^V2TIMPermissionGroupMemberInfoResultListSucc)(NSString * _Nullable nextCursor, NSMutableArray<V2TIMGroupMemberFullInfo *> *resultList);
/// 获取话题权限结果
typedef void (^V2TIMTopicPermissionResultSucc)(NSMutableArray<V2TIMTopicPermissionResult *> *resultList);
/// 社群权限值
typedef NS_ENUM(NSInteger, V2TIMCommunityPermissionValue) {
V2TIM_COMMUNITY_PERMISSION_MANAGE_GROUP_INFO = 0x1, ///< 修改群资料权限。该位设置为0表示没有该权限设置为1表示有该权限。
V2TIM_COMMUNITY_PERMISSION_MANAGE_GROUP_MEMBER = 0x1 << 1, ///< 群成员管理权限包含踢人进群审核、修改成员资料等。该位设置为0表示没有该权限设置为1表示有该权限。
V2TIM_COMMUNITY_PERMISSION_MANAGE_PERMISSION_GROUP_INFO = 0x1 << 2, ///< 管理权限组资料权限。该位设置为0表示没有该权限设置为1表示有该权限。权限包含创建、修改、删除权限组在权限组中添加、修改、删除话题权限。
V2TIM_COMMUNITY_PERMISSION_MANAGE_PERMISSION_GROUP_MEMBER = 0x1 << 3, ///< 权限组成员管理权限包含邀请成员进权限组和把成员从权限组踢出等。该位设置为0表示没有该权限设置为1表示有该权限。
V2TIM_COMMUNITY_PERMISSION_MANAGE_TOPIC_IN_COMMUNITY = 0x1 << 4, ///< 话题管理权限包含创建、修改、删除话题等。该位设置为0表示没有该权限设置为1表示有该权限。
V2TIM_COMMUNITY_PERMISSION_MUTE_MEMBER = 0x1 << 5, ///< 对某群成员在社群下所有话题的禁言权限。该位设置为0表示没有该权限设置为1表示有该权限。
V2TIM_COMMUNITY_PERMISSION_SEND_MESSAGE = 0x1 << 6, ///< 群成员在社群下所有话题的发消息权限。该位设置为0表示没有该权限设置为1表示有该权限。
V2TIM_COMMUNITY_PERMISSION_AT_ALL = 0x1 << 7, ///< 在社群下所有话题发 at all 消息权限。该位设置为0表示没有该权限设置为1表示有该权限。
V2TIM_COMMUNITY_PERMISSION_GET_HISTORY_MESSAGE = 0x1 << 8, ///< 在社群下所有话题拉取入群前的历史消息权限。该位设置为0表示没有该权限设置为1表示有该权限。
V2TIM_COMMUNITY_PERMISSION_REVOKE_OTHER_MEMBER_MESSAGE = 0x1 << 9, ///< 在社群下所有话题撤回他人消息权限。该位设置为0表示没有该权限设置为1表示有该权限。
V2TIM_COMMUNITY_PERMISSION_BAN_MEMBER = 0x1 << 10, ///< 封禁社群成员权限。该位设置为0表示没有该权限设置为1表示有该权限。
};
/// 话题权限值
typedef NS_ENUM(NSInteger, V2TIMTopicPermissionValue) {
V2TIM_TOPIC_PERMISSION_MANAGE_TOPIC = 0x1, ///< 管理当前话题的权限包括修改当前话题的资料、删除当前话题。该位设置为0表示没有该权限设置为1表示有该权限
V2TIM_TOPIC_PERMISSION_MANAGE_TOPIC_PERMISSION = 0x1 << 1, ///< 在当前话题中管理话题权限包括添加、修改、移除话题权限。该位设置为0表示没有该权限设置为1表示有该权限
V2TIM_TOPIC_PERMISSION_MUTE_MEMBER = 0x1 << 2, ///< 在当前话题中禁言成员权限。该位设置为0表示没有该权限设置为1表示有该权限
V2TIM_TOPIC_PERMISSION_SEND_MESSAGE = 0x1 << 3, ///< 在当前话题中发消息权限。该位设置为0表示没有该权限设置为1表示有该权限
V2TIM_TOPIC_PERMISSION_GET_HISTORY_MESSAGE = 0x1 << 4, ///< 在当前话题中拉取入群前的历史消息权限。该位设置为0表示没有该权限设置为1表示有该权限
V2TIM_TOPIC_PERMISSION_REVOKE_OTHER_MEMBER_MESSAGE = 0x1 << 5, ///< 在当前话题中撤回他人消息权限。该位设置为0表示没有该权限设置为1表示有该权限
V2TIM_TOPIC_PERMISSION_AT_ALL = 0x1 << 6, ///< 在当前话题中发消息时有 at all 权限。该位设置为0表示没有该权限设置为1表示有该权限
};
/////////////////////////////////////////////////////////////////////////////////
//
// 社群监听器
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 1.1 添加社群监听器
*/
- (void)addCommunityListener:(id<V2TIMCommunityListener>)listener NS_SWIFT_NAME(addCommunityListener(listener:));
/**
* 1.2 移除社群监听器
*/
- (void)removeCommunityListener:(id<V2TIMCommunityListener>)listener NS_SWIFT_NAME(removeCommunityListener(listener:));
/////////////////////////////////////////////////////////////////////////////////
//
// 社群接口
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 2.1 创建支持话题的社群
*/
- (void)createCommunity:(V2TIMGroupInfo*)info memberList:(NSArray<V2TIMCreateGroupMemberInfo *>* _Nullable)memberList succ:(V2TIMCreateGroupSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(createCommunity(info:memberList:succ:fail:));
/**
* 2.1 获取当前用户已经加入的支持话题的社群列表
*/
- (void)getJoinedCommunityList:(V2TIMGroupInfoListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getJoinedCommunityList(succ:fail:));
/**
* 2.2 创建话题
*
* @param groupID 社群 ID必须以 @TGS#_ 开头。
*/
- (void)createTopicInCommunity:(NSString *)groupID topicInfo:(V2TIMTopicInfo *)topicInfo succ:(V2TIMCreateTopicSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(createTopicInCommunity(groupID:topicInfo:succ:fail:));
/**
* 2.3 删除话题
*/
- (void)deleteTopicFromCommunity:(NSString *)groupID topicIDList:(NSArray<NSString *>*)topicIDList succ:(V2TIMTopicOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(deleteTopicFromCommunity(groupID:topicIDList:succ:fail:));
/**
* 2.4 修改话题信息
*/
- (void)setTopicInfo:(V2TIMTopicInfo *)topicInfo succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setTopicInfo(topicInfo:succ:fail:));
/**
* 2.5 获取话题列表。
* @note: topicIDList 传空时,获取此社群下的所有话题列表
*/
- (void)getTopicInfoList:(NSString *)groupID topicIDList:(NSArray<NSString *>* _Nullable)topicIDList succ:(V2TIMTopicInfoResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getTopicInfoList(groupID:topicIDList:succ:fail:));
/////////////////////////////////////////////////////////////////////////////////
//
// 权限组接口
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 3.1 创建社群权限组7.8 及其以上版本支持)
* @note
* - 该功能为旗舰版功能,需要您购买旗舰版套餐。
*/
- (void)createPermissionGroupInCommunity:(V2TIMPermissionGroupInfo *)permissionGroupInfo succ:(V2TIMCreatePermissionGroupSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(createPermissionGroupInCommunity(permissionGroupInfo:succ:fail:));
/**
* 3.2 删除社群权限组7.8 及其以上版本支持)
* @note
* - 该功能为旗舰版功能,需要您购买旗舰版套餐。
*/
- (void)deletePermissionGroupFromCommunity:(NSString *)groupID permissionGroupIDList:(NSArray<NSString *>*)permissionGroupIDList succ:(V2TIMPermissionGroupOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(deletePermissionGroupFromCommunity(groupID:permissionGroupIDList:succ:fail:));
/**
* 3.3 修改社群权限组7.8 及其以上版本支持)
* @note
* - 该功能为旗舰版功能,需要您购买旗舰版套餐。
*/
- (void)modifyPermissionGroupInfoInCommunity:(V2TIMPermissionGroupInfo *)permissionGroupInfo succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(modifyPermissionGroupInfoInCommunity(permissionGroupInfo:succ:fail:));
/**
* 3.4 获取已加入的社群权限组列表7.8 及其以上版本支持)
* @note
* - 该功能为旗舰版功能,需要您购买旗舰版套餐。
*/
- (void)getJoinedPermissionGroupListInCommunity:(NSString *)groupID succ:(V2TIMPermissionGroupInfoResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getJoinedPermissionGroupListInCommunity(groupID:succ:fail:));
/**
* 3.5 获取社群权限组列表7.8 及其以上版本支持)
* @note
* - 该功能为旗舰版功能,需要您购买旗舰版套餐。
* - permissionGroupIDList 为空时,获取所有的权限组列表;不为空时,获取指定的权限组列表
*/
- (void)getPermissionGroupListInCommunity:(NSString *)groupID permissionGroupIDList:(NSArray<NSString *>* _Nullable)permissionGroupIDList succ:(V2TIMPermissionGroupInfoResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getPermissionGroupListInCommunity(groupID:permissionGroupIDList:succ:fail:));
/**
* 3.6 向社群权限组添加成员7.7 及其以上版本支持)
* @note
* - 该功能为旗舰版功能,需要您购买旗舰版套餐。
*/
- (void)addCommunityMembersToPermissionGroup:(NSString *)groupID permissionGroupID:(NSString *)permissionGroupID memberList:(NSArray<NSString *>*)memberList succ:(V2TIMPermissionGroupMemberOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(addCommunityMembersToPermissionGroup(groupID:permissionGroupID:memberList:succ:fail:));
/**
* 3.7 从社群权限组删除成员7.8 及其以上版本支持)
*/
- (void)removeCommunityMembersFromPermissionGroup:(NSString *)groupID permissionGroupID:(NSString *)permissionGroupID memberList:(NSArray<NSString *>*)memberList succ:(V2TIMPermissionGroupMemberOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(removeCommunityMembersFromPermissionGroup(groupID:permissionGroupID:memberList:succ:fail:));
/**
* 3.8 获取社群权限组成员列表7.8 及其以上版本支持)
* @note
* - 该功能为旗舰版功能,需要您购买旗舰版套餐。
*/
- (void)getCommunityMemberListInPermissionGroup:(NSString *)groupID permissionGroupID:(NSString *)permissionGroupID nextCursor:(NSString * _Nullable)nextCursor succ:(V2TIMPermissionGroupMemberInfoResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getCommunityMemberListInPermissionGroup(groupID:permissionGroupID:nextCursor:succ:fail:));
/**
* 3.9 向权限组添加话题权限7.8 及其以上版本支持)
* @note
* - 该功能为旗舰版功能,需要您购买旗舰版套餐。
*/
- (void)addTopicPermissionToPermissionGroup:(NSString *)groupID permissionGroupID:(NSString *)permissionGroupID topicPermissionMap:(NSDictionary<NSString *, NSNumber *>*)topicPermissionMap succ:(V2TIMTopicOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(addTopicPermissionToPermissionGroup(groupID:permissionGroupID:topicPermissionMap:succ:fail:));
/**
* 3.10 从权限组中删除话题权限7.8 及其以上版本支持)
* @note
* - 该功能为旗舰版功能,需要您购买旗舰版套餐。
*/
- (void)deleteTopicPermissionFromPermissionGroup:(NSString *)groupID permissionGroupID:(NSString *)permissionGroupID topicIDList:(NSArray<NSString *>*)topicIDList succ:(V2TIMTopicOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(deleteTopicPermissionFromPermissionGroup(groupID:permissionGroupID:topicIDList:succ:fail:));
/**
* 3.11 修改权限组中的话题权限7.8 及其以上版本支持)
* @note
* - 该功能为旗舰版功能,需要您购买旗舰版套餐。
*/
- (void)modifyTopicPermissionInPermissionGroup:(NSString *)groupID permissionGroupID:(NSString *)permissionGroupID topicPermissionMap:(NSDictionary<NSString *, NSNumber *>*)topicPermissionMap succ:(V2TIMTopicOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(modifyTopicPermissionInPermissionGroup(groupID:permissionGroupID:topicPermissionMap:succ:fail:));
/**
* 3.12 获取权限组中的话题权限7.8 及其以上版本支持)
* @note
* - 该功能为旗舰版功能,需要您购买旗舰版套餐。
*/
- (void)getTopicPermissionInPermissionGroup:(NSString *)groupID permissionGroupID:(NSString *)permissionGroupID topicIDList:(NSArray<NSString *>*)topicIDList succ:(V2TIMTopicPermissionResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getTopicPermissionInPermissionGroup(groupID:permissionGroupID:topicIDList:succ:fail:));
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 社群回调
//
/////////////////////////////////////////////////////////////////////////////////
/// 资料关系链回调
V2TIM_EXPORT @protocol V2TIMCommunityListener <NSObject>
@optional
/// 话题创建回调
- (void)onCreateTopic:(NSString * _Nullable)groupID topicID:(NSString * _Nullable)topicID NS_SWIFT_NAME(onCreateTopic(groupID:topicID:));
/// 话题被删除回调
- (void)onDeleteTopic:(NSString * _Nullable)groupID topicIDList:(NSArray<NSString *> *)topicIDList NS_SWIFT_NAME(onDeleteTopic(groupID:topicIDList:));
/// 话题更新回调
- (void)onChangeTopicInfo:(NSString * _Nullable)groupID topicInfo:(V2TIMTopicInfo *)topicInfo NS_SWIFT_NAME(onChangeTopicInfo(groupID:topicInfo:));
/// 收到 RESTAPI 下发的话题自定义系统消息
- (void)onReceiveTopicRESTCustomData:(NSString * _Nullable)topicID data:(NSData * _Nullable)data NS_SWIFT_NAME(onReceiveTopicRESTCustomData(topicID:data:));
/// 权限组创建通知
- (void)onCreatePermissionGroup:(NSString * _Nullable)groupID permissionGroupInfo:(V2TIMPermissionGroupInfo *)permissionGroupInfo NS_SWIFT_NAME(onCreatePermissionGroup(groupID:permissionGroupInfo:));
/// 权限组删除通知
- (void)onDeletePermissionGroup:(NSString * _Nullable)groupID permissionGroupIDList:(NSArray<NSString *> *)permissionGroupIDList NS_SWIFT_NAME(onDeletePermissionGroup(groupID:permissionGroupIDList:));
/// 权限组更新通知
- (void)onChangePermissionGroupInfo:(NSString * _Nullable)groupID permissionGroupInfo:(V2TIMPermissionGroupInfo *)permissionGroupInfo NS_SWIFT_NAME(onChangePermissionGroupInfo(groupID:permissionGroupInfo:));
/// 添加成员到权限组通知
- (void)onAddMembersToPermissionGroup:(NSString * _Nullable)groupID permissionGroupID:(NSString * _Nullable)permissionGroupID memberIDList:(NSArray<NSString *> *)memberIDList NS_SWIFT_NAME(onAddMembersToPermissionGroup(groupID:permissionGroupID:memberIDList:));
/// 从权限组中删除成员通知
- (void)onRemoveMembersFromPermissionGroup:(NSString * _Nullable)groupID permissionGroupID:(NSString * _Nullable)permissionGroupID memberIDList:(NSArray<NSString *> *)memberIDList NS_SWIFT_NAME(onRemoveMembersFromPermissionGroup(groupID:permissionGroupID:memberIDList:));
/// 话题权限添加通知
- (void)onAddTopicPermission:(NSString * _Nullable)groupID permissionGroupID:(NSString * _Nullable)permissionGroupID topicPermissionMap:(NSDictionary<NSString *, NSNumber *>*)topicPermissionMap NS_SWIFT_NAME(onAddTopicPermission(groupID:permissionGroupID:topicPermissionMap:));
/// 话题权限删除通知
- (void)onDeleteTopicPermission:(NSString * _Nullable)groupID permissionGroupID:(NSString * _Nullable)permissionGroupID topicIDList:(NSArray<NSString *>*)topicIDList NS_SWIFT_NAME(onDeleteTopicPermission(groupID:permissionGroupID:topicIDList:));
/// 话题权限修改通知
- (void)onModifyTopicPermission:(NSString * _Nullable)groupID permissionGroupID:(NSString * _Nullable)permissionGroupID topicPermissionMap:(NSDictionary<NSString *, NSNumber *>*)topicPermissionMap NS_SWIFT_NAME(onModifyTopicPermission(groupID:permissionGroupID:topicPermissionMap:));
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 话题基本资料
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMTopicInfo : NSObject
/// 话题 ID只能在创建话题或者修改话题信息的时候设置。组成方式为社群 ID + @TOPIC#_xxx例如社群 ID 为 @TGS#_123则话题 ID 为 @TGS#_123@TOPIC#_xxx
@property(nonatomic, strong, nullable) NSString *topicID;
/// 话题类型(默认为 Public 话题)(从 8.4 版本开始支持)
/// "Public" :公开话题,社群内成员可以自由进出发言。
/// "Private" :私密话题,有自己的成员列表(成员上限 10000 人),社群成员需要加入话题才能发言(私密话题需要购买企业版套餐包)。
@property(nonatomic, strong, nullable) NSString *topicType;
/// 话题名称,最长 150 字节,使用 UTF-8 编码
@property(nonatomic, strong, nullable) NSString *topicName;
/// 话题头像,最长 500 字节,使用 UTF-8 编码
@property(nonatomic, strong, nullable) NSString *topicFaceURL;
/// 话题介绍,最长 400 字节,使用 UTF-8 编码
@property(nonatomic, strong, nullable) NSString *introduction;
/// 话题公告,最长 400 字节,使用 UTF-8 编码
@property(nonatomic, strong, nullable) NSString *notification;
/// 话题全员禁言
@property(nonatomic, assign) BOOL isAllMuted;
/// 当前用户在话题中的禁言时间,单位:秒
@property(nonatomic, assign, readonly) uint32_t selfMuteTime;
/// 话题自定义字段
@property(nonatomic, strong, nullable) NSString *customString;
/// 话题消息接收选项,修改话题消息接收选项请调用 setGroupReceiveMessageOpt 接口
@property(nonatomic, assign, readonly) V2TIMReceiveMessageOpt recvOpt;
/// 话题草稿
@property(nonatomic, strong, nullable) NSString *draftText;
/// 话题消息未读数量
@property(nonatomic, assign, readonly) uint64_t unreadCount;
/// 话题 lastMessage
@property(nonatomic,strong,readonly, nullable) V2TIMMessage *lastMessage;
/// 话题已读消息的 sequence从 7.8 版本开始支持
@property(nonatomic, assign, readonly) uint64_t readSequence;
/// 话题 at 信息列表
@property(nonatomic, strong, readonly, nullable) NSArray<V2TIMGroupAtInfo *> *groupAtInfolist;
/// 话题创建时间,单位:秒
@property(nonatomic, assign, readonly) uint32_t createTime;
/// 申请加入话题是否需要管理员审批(私密话题有效,默认不需要审批,可以自由加入)(从 8.4 版本开始支持)
@property(nonatomic, assign) V2TIMGroupAddOpt topicAddOpt;
/// 邀请加入话题是否需要管理员审批(私密话题有效,默认不需要审批,可以自由加入)(从 8.4 版本开始支持)
@property(nonatomic, assign) V2TIMGroupAddOpt topicApproveOpt;
/// 话题默认群成员(私密话题有效,最大支持 100 个群成员,只能在创建话题的时候设置)(从 8.4 版本开始支持)
@property(nonatomic, strong, nullable) NSArray<V2TIMCreateGroupMemberInfo *> *memberList;
/// 话题成员的最大个数(私密话题有效,最大支持 10000默认 10000只能在创建话题的时候设置从 8.4 版本开始支持)
@property(nonatomic, assign) uint32_t memberMaxCount;
/// 话题默认权限7.8 版本开始支持
/// 群成员在没有加入任何权限组时的默认权限,仅在社群资料 V2TIMGroupInfo 中 enablePermissionGroup = true 打开权限组之后生效
@property(nonatomic, assign) uint64_t defaultPermissions;
/// 登录用户在话题中的消息接收选项是否继承社群。该功能仅增强版 SDK 8.1 及以上版本支持。
- (BOOL)isInheritMessageReceiveOptionFromCommunity;
/**
* 设置登录用户在话题中的消息接收选项是否继承社群。该功能仅增强版 SDK 8.1 及以上版本支持。
*/
- (void)setInheritMessageReceiveOptionFromCommunity:(BOOL)isInherit succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 话题处理结果
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMTopicOperationResult : NSObject
/// 结果 0成功非0失败
@property(nonatomic, assign) int errorCode;
/// 错误信息
@property(nonatomic, strong, nullable) NSString *errorMsg;
/// 话题 ID
@property(nonatomic, strong, nullable) NSString *topicID;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 话题资料获取结果
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMTopicInfoResult : NSObject
/// 结果 0成功非0失败
@property(nonatomic, assign) int errorCode;
/// 错误信息
@property(nonatomic, strong, nullable) NSString *errorMsg;
/// 话题资料
@property(nonatomic, strong) V2TIMTopicInfo *topicInfo;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 权限组信息
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMPermissionGroupInfo : NSObject
/// 群 ID
@property(nonatomic, strong, nullable) NSString *groupID;
/// 权限组 ID
@property(nonatomic, strong, nullable) NSString *permissionGroupID;
/// 权限组名称
@property(nonatomic, strong, nullable) NSString *permissionGroupName;
/// 群权限
@property(nonatomic, assign) uint64_t groupPermission;
/// 自定义数据
@property(nonatomic, strong, nullable) NSString *customData;
/// 成员人数
@property(nonatomic, assign, readonly) uint64_t memberCount;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 权限组信息获取结果
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMPermissionGroupInfoResult : NSObject
/// 结果 0成功非0失败
@property(nonatomic,assign) int resultCode;
/// 如果获取失败,会返回错误信息
@property(nonatomic,strong,nullable) NSString *resultMsg;
/// 如果获取成功,会返回对应的 info
@property(nonatomic,strong) V2TIMPermissionGroupInfo *info;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 权限组处理结果
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMPermissionGroupOperationResult : NSObject
/// 结果 0成功非0失败
@property(nonatomic,assign) int resultCode;
/// 如果获取失败,会返回错误信息
@property(nonatomic,strong,nullable) NSString *resultMsg;
/// 如果获取成功,会返回对应的 info
@property(nonatomic,strong,nullable) NSString *permissionGroupID;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 权限组成员处理结果
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMPermissionGroupMemberOperationResult : NSObject
/// 成员 userID
@property(nonatomic,strong,nullable) NSString *memberID;
/// 结果 0成功非0失败
@property(nonatomic,assign) int resultCode;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 话题权限获取结果
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMTopicPermissionResult : NSObject
/// 话题
@property(nonatomic,strong,nullable) NSString *topicID;
/// 结果 0成功非0失败
@property(nonatomic,assign) int resultCode;
/// 如果获取失败,会返回错误信息
@property(nonatomic,strong,nullable) NSString *resultMsg;
/// 话题权限
@property(nonatomic,assign) uint64_t topicPermission;
/// 社群 ID
@property(nonatomic,strong,nullable) NSString *groupID;
/// 权限组 ID
@property(nonatomic,strong,nullable) NSString *permissionGroupID;
@end

View File

@@ -0,0 +1,505 @@
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 IMSDK
//
// 模块名称V2TIMManager+Conversation
//
// 会话接口,里面包含了会话的获取,删除,更新的逻辑
//
/////////////////////////////////////////////////////////////////////
#import "V2TIMManager.h"
#import "V2TIMManager+Group.h"
#import "V2TIMManager+Message.h"
V2TIM_EXPORT @protocol V2TIMConversationListener;
@class V2TIMConversation;
@class V2TIMConversationListFilter;
@class V2TIMConversationOperationResult;
@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 NS_SWIFT_NAME(getConversationList(nextSeq:count:succ: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 NS_SWIFT_NAME(getConversation(conversationID:succ: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 NS_SWIFT_NAME(getConversationList(conversationIDList:succ: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 NS_SWIFT_NAME(getConversationListByFilter(filter:nextSeq:count:succ:fail:));
/**
* 1.7 删除会话以及该会话中的历史消息
*
* @param conversationID 会话唯一 IDC2C 单聊组成方式:[NSString stringWithFormat:@"c2c_%@",userID];群聊组成方式为 [NSString stringWithFormat:@"group_%@",groupID]
*
* @note
* - 该会话以及会话中的历史消息,会被 SDK 从本地和服务端一同删除掉,并且不可恢复。
*/
- (void)deleteConversation:(NSString *)conversationID succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(deleteConversation(conversation:succ: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 NS_SWIFT_NAME(deleteConversationList(conversationIDList:clearMessage:succ:fail:));
/**
* 1.9 设置会话草稿
*
* @param conversationID 会话唯一 IDC2C 单聊组成方式:[NSString stringWithFormat:@"c2c_%@",userID];群聊组成方式为 [NSString stringWithFormat:@"group_%@",groupID]
*
* 只在本地保存,不会存储 Server不能多端同步程序卸载重装会失效。
*/
- (void)setConversationDraft:(NSString *)conversationID draftText:(NSString * _Nullable)draftText succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setConversationDraft(conversationID:draftText:succ:fail:));
/**
* 1.10 设置会话自定义数据(从 6.5 版本开始支持)
*
* @param customData 自定义数据,最大支持 256 bytes
*/
- (void)setConversationCustomData:(NSArray<NSString *> *)conversationIDList customData:(NSData * _Nullable)customData succ:(V2TIMConversationOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(setConversationCustomData(conversationIDList:customData:succ: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:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(pinConversation(conversationID:isPinned:succ: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 NS_SWIFT_NAME(markConversation(conversationIDList:markType:enableMark:succ:fail:));
/**
* 1.13 获取所有会话的未读消息总数5.3.425 及以上版本支持)
* @note
* - 调用该接口以后任意会话的未读数发生变化时SDK 都会给您抛 onTotalUnreadMessageCountChanged 回调。
* - 未读总数会减去设置为免打扰的会话的未读数,即消息接收选项设置为 V2TIMMessage.V2TIM_NOT_RECEIVE_MESSAGE 或 V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE 或 V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE_EXCEPT_AT 的会话。
*/
- (void)getTotalUnreadMessageCount:(V2TIMTotalUnreadMessageCountSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getTotalUnreadMessageCount(succ:fail:));
/**
* 1.14 获取根据 filter 过滤的会话未读总数7.0 及以上版本支持)
*
* @param filter 会话 filter
*
* @note
* - 未读总数会减去设置为免打扰的会话的未读数,即消息接收选项设置为 V2TIMMessage.V2TIM_NOT_RECEIVE_MESSAGE 或 V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE 或 V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE_EXCEPT_AT 的会话。
*/
- (void)getUnreadMessageCountByFilter:(V2TIMConversationListFilter *)filter succ:(V2TIMTotalUnreadMessageCountSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getUnreadMessageCountByFilter(filter:succ:fail:));
/**
* 1.15 注册监听指定 filter 的会话未读总数变化7.0 及以上版本支持)
*
* @param filter 会话 filter
*
* @note
* - 当您调用这个接口以后,该 filter 下的未读数发生变化时SDK 会给您抛 onUnreadMessageCountChangedByFilter 回调。
*/
- (void)subscribeUnreadMessageCountByFilter:(V2TIMConversationListFilter *)filter NS_SWIFT_NAME(subscribeUnreadMessageCountByFilter(filter:));
/**
* 1.16 取消监听指定 filter 的会话未读总数变化7.0 及以上版本支持)
*
* @param filter 会话 filter
*
*/
- (void)unsubscribeUnreadMessageCountByFilter:(V2TIMConversationListFilter *)filter NS_SWIFT_NAME(unsubscribeUnreadMessageCountByFilter(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 * _Nullable)conversationID cleanTimestamp:(uint64_t)cleanTimestamp cleanSequence:(uint64_t)cleanSequence succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(cleanConversationUnreadMessageCount(conversationID:cleanTimestamp:cleanSequence:succ:fail:));
/**
* 1.18 设置会话监听器(待废弃接口,请使用 addConversationListener 和 removeConversationListener 接口)
*/
- (void)setConversationListener:(id<V2TIMConversationListener>)listener NS_SWIFT_NAME(setConversationListener(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 NS_SWIFT_NAME(createConversationGroup(groupName:conversationIDList:succ:fail:));
/**
* 2.2 获取会话分组列表
*
* @note 该接口获取的是本地缓存的会话分组,建议在 onSyncServerFinish 之后调用。
*/
- (void)getConversationGroupList:(V2TIMConversationGroupListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getConversationGroupList(succ:fail:));
/**
* 2.3 删除会话分组
*/
- (void)deleteConversationGroup:(NSString *)groupName succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(deleteConversationGroup(groupName:succ:fail:));
/**
* 2.4 重命名会话分组
*/
- (void)renameConversationGroup:(NSString*)oldName newName:(NSString*)newName succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(renameConversationGroup(oldName:newName:succ:fail:));
/**
* 2.5 添加会话到一个会话分组
*/
- (void)addConversationsToGroup:(NSString *)groupName conversationIDList:(NSArray<NSString *> *)conversationIDList succ:(V2TIMConversationOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(addConversationsToGroup(groupName:conversationIDList:succ:fail:));
/**
* 2.6 从一个会话分组中删除会话
*/
- (void)deleteConversationsFromGroup:(NSString *)groupName conversationIDList:(NSArray<NSString *> *)conversationIDList succ:(V2TIMConversationOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(deleteConversationsFromGroup(groupName:conversationIDList:succ:fail:));
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 会话变更监听器
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @protocol V2TIMConversationListener <NSObject>
@optional
/////////////////////////////////////////////////////////////////////////////////
// 会话基础通知
/////////////////////////////////////////////////////////////////////////////////
/**
* 同步服务器会话开始SDK 会在登录成功或者断网重连后自动同步服务器会话,您可以监听这个事件做一些 UI 进度展示操作。
*/
- (void)onSyncServerStart;
/**
* 同步服务器会话完成,如果会话有变更,会通过 onNewConversation | onConversationChanged 回调告知客户
*/
- (void)onSyncServerFinish;
/**
* 同步服务器会话失败
*/
- (void)onSyncServerFailed;
/**
* 有新的会话(比如收到一个新同事发来的单聊消息、或者被拉入了一个新的群组中),可以根据会话的 orderKey 重新对会话列表做排序。
*/
- (void)onNewConversation:(NSArray<V2TIMConversation*> *) conversationList NS_SWIFT_NAME(onNewConversation(conversationList:));
/**
* 某些会话的关键信息发生变化(未读计数发生变化、最后一条消息被更新等等),可以根据会话的 orderKey 重新对会话列表做排序。
*/
- (void)onConversationChanged:(NSArray<V2TIMConversation*> *) conversationList NS_SWIFT_NAME(onConversationChanged(conversationList:));
/**
* 会话被删除的通知7.2 及以上版本支持)
*
* @note
* conversationIDList 表示被删除的会话唯一 ID 列表。C2C 单聊组成方式:[NSString stringWithFormat:@"c2c_%@",userID];群聊组成方式为 [NSString stringWithFormat:@"group_%@",groupID]
*/
- (void)onConversationDeleted:(NSArray<NSString *> *)conversationIDList NS_SWIFT_NAME(onConversationDeleted(conversationIDList:));
/**
* 全部会话未读总数变更的通知5.3.425 及以上版本支持)
* @note
* - 当您调用 getTotalUnreadMessageCount 获取全部会话未读总数以后任意会话的未读数发生变化时SDK 都会通过该回调把最新的未读总数通知给您。
* - 未读总数会减去设置为免打扰的会话的未读数,即消息接收选项设置为 V2TIMMessage.V2TIM_NOT_RECEIVE_MESSAGE 或 V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE 或 V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE_EXCEPT_AT 的会话。
*/
- (void)onTotalUnreadMessageCountChanged:(UInt64)totalUnreadCount NS_SWIFT_NAME(onTotalUnreadMessageCountChanged(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 或 V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE_EXCEPT_AT 的会话。
*/
- (void)onUnreadMessageCountChangedByFilter:(V2TIMConversationListFilter *)filter totalUnreadCount:(UInt64)totalUnreadCount NS_SWIFT_NAME(onUnreadMessageCountChangedByFilter(filter:totalUnreadCount:));
/////////////////////////////////////////////////////////////////////////////////
// 会话分组相关通知(从 6.5 版本开始支持)
/////////////////////////////////////////////////////////////////////////////////
/**
* 会话分组被创建
*/
- (void)onConversationGroupCreated:(NSString * _Nullable)groupName conversationList:(NSArray<V2TIMConversation *> *)conversationList NS_SWIFT_NAME(onConversationGroupCreated(groupName:conversationList:));
/**
* 会话分组被删除
*/
- (void)onConversationGroupDeleted:(NSString * _Nullable)groupName NS_SWIFT_NAME(onConversationGroupDeleted(groupName:));
/**
* 会话分组名变更
*/
- (void)onConversationGroupNameChanged:(NSString * _Nullable)oldName newName:(NSString * _Nullable)newName NS_SWIFT_NAME(onConversationGroupNameChanged(oldName:newName:));
/**
* 会话分组新增会话
*/
- (void)onConversationsAddedToGroup:(NSString * _Nullable)groupName conversationList:(NSArray<V2TIMConversation *> *)conversationList NS_SWIFT_NAME(onConversationsAddedToGroup(groupName:conversationList:));
/**
* 会话分组删除会话
* @note
* - reason 表示会话从所在分组删除的原因,其取值有:
* - 当 reason 为 0 时,表示由用户主动调用 deleteConversationsFromGroup 触发
* - 当 reason 为 1 时,表示添加到分组的会话数量超过 1000最早添加进分组的会话被淘汰
*/
- (void)onConversationsDeletedFromGroup:(NSString * _Nullable)groupName conversationList:(NSArray<V2TIMConversation *> *)conversationList reason:(uint32_t)reason NS_SWIFT_NAME(onConversationsDeletedFromGroup(groupName:conversationList:reason:));
/**
* 会话分组删除会话(待废弃接口,请使用 onConversationsDeletedFromGroup:conversationList:reason: 接口)
*/
- (void)onConversationsDeletedFromGroup:(NSString * _Nullable)groupName conversationList:(NSArray<V2TIMConversation *> *)conversationList NS_SWIFT_NAME(onConversationsDeletedFromGroup(groupName:conversationList:)) __attribute__((deprecated("use onConversationsDeletedFromGroup:conversationList:reason: instead")));
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 会话对象 V2TIMConversation
//
/////////////////////////////////////////////////////////////////////////////////
/// 会话对象
V2TIM_EXPORT @interface V2TIMConversation : NSObject
/// 会话类型
@property(nonatomic,assign,readonly) V2TIMConversationType type;
/// 会话唯一 ID如果是 C2C 单聊,组成方式为 c2c_userID如果是群聊组成方式为 group_groupID
@property(nonatomic,strong,readonly,nullable) NSString *conversationID;
/// 如果会话类型为 C2C 单聊userID 会存储对方的用户ID否则为 nil
@property(nonatomic,strong,readonly,nullable) NSString *userID;
/// 如果会话类型为群聊groupID 会存储当前群的群 ID否则为 nil
@property(nonatomic,strong,readonly,nullable) NSString *groupID;
/// 如果会话类型为群聊groupType 为当前群类型,否则为 nil
@property(nonatomic,strong,readonly,nullable) NSString *groupType;
/// 会话展示名称(群组:群名称 >> 群 IDC2C对方好友备注 >> 对方昵称 >> 对方的 userID
@property(nonatomic,strong,readonly,nullable) NSString *showName;
/// 会话展示头像群组群头像C2C对方头像
@property(nonatomic,strong,readonly,nullable) 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,nullable) V2TIMMessage *lastMessage;
/// 群会话 @ 信息列表,用于展示 "有人@我" 或 "@所有人" 这两种提醒状态
@property(nonatomic,strong,readonly,nullable) NSArray<V2TIMGroupAtInfo *> *groupAtInfolist;
/// 草稿信息,设置草稿信息请调用 setConversationDraft() 接口
@property(nonatomic,strong,readonly,nullable) NSString *draftText;
/// 上次设置草稿时的 UTC 时间戳
@property(nonatomic,strong,readonly,nullable) 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,nullable) NSArray<NSNumber *> * markList;
/// 会话自定义数据(从 6.5 版本开始支持)
@property(nonatomic,strong,readonly,nullable) NSData *customData;
/// 会话所属分组列表(从 6.5 版本开始支持)
@property(nonatomic,strong,readonly,nullable) NSArray<NSString *> *conversationGroupList;
/// 最新已读消息的 UTC 时间戳,仅对单聊会话生效(从 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;
/// 会话分组名称
/// 不设置表示不过滤此项,设置为 @"" 代表过滤不属于任何分组的会话
@property(nonatomic,strong,nullable) NSString *conversationGroup;
/// 标记类型,取值详见 @V2TIMConversationMarkType
/// 不设置表示不过滤此项,设置为 0 代表过滤不含任何标记的会话
@property(nonatomic,assign) NSUInteger markType;
/// 会话未读数
/// 不设置表示不过滤此项,设置为 YES 代表过滤含未读数的会话;设置为 NO 代表过滤不含未读数的会话
@property(nonatomic,assign) BOOL hasUnreadCount;
/// 会话 @ 信息
/// 不设置表示不过滤此项,设置为 YES 代表过滤含群 @ 消息的会话;设置为 NO 代表过滤不含群 @ 消息的会话
@property(nonatomic,assign) BOOL hasGroupAtInfo;
@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,nullable) NSString* conversationID;
/// 返回码
@property(nonatomic,assign) NSInteger resultCode;
/// 返回信息
@property(nonatomic,strong,nullable) NSString *resultInfo;
@end

View File

@@ -0,0 +1,838 @@
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 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;
@class V2TIMOfficialAccountInfo;
@class V2TIMOfficialAccountInfoResult;
@class V2TIMFollowOperationResult;
@class V2TIMFollowInfo;
@class V2TIMFollowTypeCheckResult;
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 void (^V2TIMOfficialAccountInfoResultListSucc)(NSArray<V2TIMOfficialAccountInfoResult *> *resultList);
/// 关注/取关用户操作成功的回调
typedef void (^V2TIMFollowOperationResultListSucc)(NSArray<V2TIMFollowOperationResult *> *resultList);
/// 获取自己 关注/粉丝/互关 列表成功的回调
typedef void (^V2TIMUserInfoResultSucc)(NSString * _Nullable nextCursor, NSArray<V2TIMUserFullInfo *> *userInfoList);
/// 获取用户关注数量信息成功的回调
typedef void (^V2TIMFollowInfoResultListSucc)(NSArray<V2TIMFollowInfo *> *resultList);
/// 用户关注类型检查成功回调
typedef void (^V2TIMFollowTypeCheckResultListSucc)(NSArray<V2TIMFollowTypeCheckResult *> *resultList);
/// 好友申请类型
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, ///< 接受加好友并加对方为好友(建立双向好友)
};
/// 关注类型
typedef NS_ENUM(NSInteger, V2TIMFollowType) {
V2TIM_FOLLOW_TYPE_NONE = 0x0, ///< 无任何关注关系
V2TIM_FOLLOW_TYPE_IN_MY_FOLLOWING_LIST = 0x1, ///< 对方在我的关注列表中
V2TIM_FOLLOW_TYPE_IN_MY_FOLLOWERS_LIST = 0x2, ///< 对方在我的粉丝列表中
V2TIM_FOLLOW_TYPE_IN_BOTH_FOLLOWERS_LIST = 0x3, ///< 对方与我互相关注
};
/////////////////////////////////////////////////////////////////////////////////
//
// 关系链和用户资料监听器
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 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 NS_SWIFT_NAME(getFriendList(succ: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:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setFriendInfo(info:succ:fail:));
/**
* 2.4 搜索好友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)
* - 该接口返回的是本地存储的用户资料,包含好友和非好友资料,您可以根据 V2TIMFriendInfoResult 中的 getRelation 来判断是否为好友。
*/
- (void)searchFriends:(V2TIMFriendSearchParam *)searchParam succ:(V2TIMFriendInfoResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(searchFriends(searchParam:succ:fail:));
/**
* 2.5 添加好友
*/
- (void)addFriend:(V2TIMFriendAddApplication *)application succ:(V2TIMFriendOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(addFriend(application:succ:fail:));
/**
* 2.6 删除好友
* @param userIDList 要删除的好友 userID 列表
* - ID 建议一次最大 100 个,因为数量过多可能会导致数据包太大被后台拒绝,后台限制数据包最大为 1M。
* @param deleteType 删除类型(单向好友、双向好友)
*/
- (void)deleteFromFriendList:(NSArray *)userIDList deleteType:(V2TIMFriendType)deleteType succ:(V2TIMFriendOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(deleteFromFriendList(userIDList:deleteType:succ: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 NS_SWIFT_NAME(checkFriend(userIDList:checkType:succ:fail:));
/////////////////////////////////////////////////////////////////////////////////
//
// 好友申请、删除相关逻辑
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 3.1 获取好友申请列表
*
* @note
* - 好友申请列表包括发起的好友申请和收到的好友申请。
* - 最多支持100个。
*/
- (void)getFriendApplicationList:(V2TIMFriendApplicationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getFriendApplicationList(succ:fail:));
/**
* 3.2 同意好友申请
*
* @param application 好友申请信息getFriendApplicationList 成功后会返回
* @param acceptType 建立单向/双向好友关系
*/
- (void)acceptFriendApplication:(V2TIMFriendApplication *)application type:(V2TIMFriendAcceptType)acceptType succ:(V2TIMFriendOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(acceptFriendApplication(application:acceptType:succ:fail:));
/**
* 3.3 同意好友申请,并设置备注
*
* @param application 好友申请信息getFriendApplicationList 成功后会返回
* @param acceptType 建立单向/双向好友关系
* - @ref V2TIMFriendApplication.V2TIM_FRIEND_ACCEPT_AGREE同意添加单向好友
* - @ref V2TIMFriendApplication.V2TIM_FRIEND_ACCEPT_AGREE_AND_ADD同意并添加为双向好友
* @param remark 好友备注
*/
- (void)acceptFriendApplication:(V2TIMFriendApplication *)application type:(V2TIMFriendAcceptType)acceptType remark:(NSString* _Nullable)remark succ:(V2TIMFriendOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(acceptFriendApplication(application:acceptType:remark:succ:fail:));
/**
* 3.4 拒绝好友申请
*
* @param application 好友申请信息getFriendApplicationList 成功后会返回
*/
- (void)refuseFriendApplication:(V2TIMFriendApplication *)application succ:(V2TIMFriendOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(refuseFriendApplication(application:succ:fail:));
/**
* 3.5 删除好友申请
*
* @param application 好友申请信息getFriendApplicationList 成功后会返回
*/
- (void)deleteFriendApplication:(V2TIMFriendApplication *)application succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(deleteFriendApplication(application:succ:fail:));
/**
* 3.6 设置好友申请已读
*/
- (void)setFriendApplicationRead:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setFriendApplicationRead(succ:fail:));
/////////////////////////////////////////////////////////////////////////////////
//
// 黑名单
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 4.1 添加用户到黑名单
*/
- (void)addToBlackList:(NSArray *)userIDList succ:(V2TIMFriendOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(addToBlackList(userIDList:succ:fail:));
/**
* 4.2 把用户从黑名单中删除
*/
- (void)deleteFromBlackList:(NSArray *)userIDList succ:(V2TIMFriendOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(deleteFromBlackList(userIDList:succ:fail:));
/**
* 4.3 获取黑名单列表
*/
- (void)getBlackList:(V2TIMFriendInfoListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getBlackList(succ:fail:));
/////////////////////////////////////////////////////////////////////////////////
//
// 好友分组
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 5.1 新建好友分组
*
* @param groupName 分组名称
* @param userIDList 要添加到分组中的好友
*/
- (void)createFriendGroup:(NSString *)groupName userIDList:(NSArray * _Nullable)userIDList succ:(V2TIMFriendOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(createFriendGroup(groupName:userIDList:succ:fail:));
/**
* 5.2 获取分组信息
*
* @param groupNameList 要获取信息的好友分组名称列表,传入 nil 获得所有分组信息
*/
- (void)getFriendGroupList:(NSArray * _Nullable)groupNameList succ:(V2TIMFriendGroupListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getFriendGroupList(groupNameList:succ:fail:));
/**
* 5.3 删除好友分组
*/
- (void)deleteFriendGroup:(NSArray *)groupNameList succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(deleteFriendGroup(groupNameList:succ:fail:));
/**
* 5.4 修改好友分组的名称
*/
- (void)renameFriendGroup:(NSString*)oldName newName:(NSString*)newName succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(renameFriendGroup(oldName:newName:succ:fail:));
/**
* 5.5 添加好友到一个好友分组
*/
- (void)addFriendsToFriendGroup:(NSString *)groupName userIDList:(NSArray *)userIDList succ:(V2TIMFriendOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(addFriendsToFriendGroup(groupName:userIDList:succ:fail:));
/**
* 5.6 从好友分组中删除好友
*/
- (void)deleteFriendsFromFriendGroup:(NSString *)groupName userIDList:(NSArray *)userIDList succ:(V2TIMFriendOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(deleteFriendsFromFriendGroup(groupName:userIDList:succ:fail:));
/////////////////////////////////////////////////////////////////////////////////
//
// 公众号订阅、取消订阅、获取公众号列表接口
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 6.1 订阅公众号7.6 及其以上版本支持)
*/
- (void)subscribeOfficialAccount:(NSString *)officialAccountID succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(subscribeOfficialAccount(officialAccountID:succ:fail:));
/**
* 6.2 取消订阅公众号7.6 及其以上版本支持)
*/
- (void)unsubscribeOfficialAccount:(NSString *)officialAccountID succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(unsubscribeOfficialAccount(officialAccountID:succ:fail:));
/**
* 6.3 获取公众号列表7.6 及其以上版本支持)
* @note officialAccountIDList 传空时,获取订阅的公众号列表
*/
- (void)getOfficialAccountsInfo:(NSArray<NSString *> * _Nullable)officialAccountIDList succ:(V2TIMOfficialAccountInfoResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getOfficialAccountsInfo(officialAccountIDList:succ:fail:));
/////////////////////////////////////////////////////////////////////////////////
//
// 关注/粉丝 相关接口
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 7.1 关注用户(从 7.8 版本开始支持)
*
* @note
* - 一次最多支持关注 20 个用户。
* - 该功能为 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)followUser:(NSArray<NSString *> *)userIDList succ:(V2TIMFollowOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(followUser(userIDList:succ:fail:));
/**
* 7.2 取消关注用户(从 7.8 版本开始支持)
*
* @note
* - 一次最多支持取消关注 20 个用户。
* - 该功能为 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)unfollowUser:(NSArray<NSString *> *)userIDList succ:(V2TIMFollowOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(unfollowUser(userIDList:succ:fail:));
/**
* 7.3 获取我的关注列表(从 7.8 版本开始支持)
*
* @note
* - 该功能为 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)。
*
* @param nextCursor 分页拉取标志,第一次拉取填 nil 或 @"",回调成功如果 nextCursor 不为 @"",需要分页,可以传入该值再次拉取,直至 nextCursor 返回为 @""
*
* @note
* - 该功能为 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)getMyFollowingList:(NSString * _Nullable)nextCursor succ:(V2TIMUserInfoResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getMyFollowingList(nextCursor:succ:fail:));
/**
* 7.4 获取我的粉丝列表(从 7.8 版本开始支持)
*
* @param nextCursor 分页拉取标志,第一次拉取填 nil 或 @"",回调成功如果 nextCursor 不为 @"",需要分页,可以传入该值再次拉取,直至 nextCursor 返回为 @""
*
* @note
* - 该功能为 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)getMyFollowersList:(NSString * _Nullable)nextCursor succ:(V2TIMUserInfoResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getMyFollowersList(nextCursor:succ:fail:));
/**
* 7.5 获取我的互关列表(从 7.8 版本开始支持)
*
* @param nextCursor 分页拉取标志,第一次拉取填 nil 或 @"",回调成功如果 nextCursor 不为 @"",需要分页,可以传入该值再次拉取,直至 nextCursor 返回为 @""
*
* @note
* - 该功能为 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)getMutualFollowersList:(NSString * _Nullable)nextCursor succ:(V2TIMUserInfoResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getMutualFollowersList(nextCursor:succ:fail:));
/**
* 7.6 获取指定用户的 关注/粉丝/互关 数量信息(从 7.8 版本开始支持)
*
* @note
* - 该功能为 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)getUserFollowInfo:(NSArray *)userIDList succ:(V2TIMFollowInfoResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getUserFollowInfo(userIDList:succ:fail:));
/**
* 7.7 检查指定用户的关注类型(从 7.8 版本开始支持)
*
* @note
* - 该功能为 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)checkFollowType:(NSArray<NSString *> *)userIDList succ:(V2TIMFollowTypeCheckResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(checkFollowType(userIDList:succ:fail:));
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 资料关系链回调
//
/////////////////////////////////////////////////////////////////////////////////
/// 资料关系链回调
V2TIM_EXPORT @protocol V2TIMFriendshipListener <NSObject>
@optional
/**
* 好友申请新增通知,两种情况会收到这个回调:
* 1. 自己申请加别人好友
* 2. 别人申请加自己好友
*/
- (void)onFriendApplicationListAdded:(NSArray<V2TIMFriendApplication *> *)applicationList NS_SWIFT_NAME(onFriendApplicationListAdded(applicationList:));
/**
* 好友申请删除通知,四种情况会收到这个回调:
* 1. 调用 deleteFriendApplication 主动删除好友申请
* 2. 调用 refuseFriendApplication 拒绝好友申请
* 3. 调用 acceptFriendApplication 同意好友申请
* 4. 申请加别人好友被拒绝
*/
- (void)onFriendApplicationListDeleted:(NSArray *)userIDList NS_SWIFT_NAME(onFriendApplicationListDeleted(userIDList:));
/**
* 好友申请已读通知,如果调用 setFriendApplicationRead 设置好友申请列表已读,会收到这个回调(主要用于多端同步)
*/
- (void)onFriendApplicationListRead NS_SWIFT_NAME(onFriendApplicationListRead());
/**
* 好友新增通知
*/
- (void)onFriendListAdded:(NSArray<V2TIMFriendInfo *>*)infoList NS_SWIFT_NAME(onFriendListAdded(infoList:));
/**
* 好友删除通知,两种情况会收到这个回调:
* 1. 自己删除好友(单向和双向删除都会收到回调)
* 2. 好友把自己删除(双向删除会收到)
*/
- (void)onFriendListDeleted:(NSArray*)userIDList NS_SWIFT_NAME(onFriendListDeleted(userIDList:));
/**
* 黑名单新增通知
*/
- (void)onBlackListAdded:(NSArray<V2TIMFriendInfo *>*)infoList NS_SWIFT_NAME(onBlackListAdded(infoList:));
/**
* 黑名单删除通知
*/
- (void)onBlackListDeleted:(NSArray*)userIDList NS_SWIFT_NAME(onBlackListDeleted(userIDList:));
/**
* 好友资料变更通知
*/
- (void)onFriendProfileChanged:(NSArray<V2TIMFriendInfo *> *)infoList NS_SWIFT_NAME(onFriendProfileChanged(infoList:));
/**
* 好友分组被创建
*/
- (void)onFriendGroupCreated:(NSString * _Nullable)groupName friendInfoList:(NSArray<V2TIMFriendInfo *> *)friendInfoList NS_SWIFT_NAME(onFriendGroupCreated(groupName:friendInfoList:));
/**
* 好友分组被删除
*/
- (void)onFriendGroupDeleted:(NSArray<NSString *> *)groupNameList NS_SWIFT_NAME(onFriendGroupDeleted(groupNameList:));
/**
* 好友分组名变更
*/
- (void)onFriendGroupNameChanged:(NSString * _Nullable)oldGroupName newGroupName:(NSString * _Nullable)newGroupName NS_SWIFT_NAME(onFriendGroupNameChanged(oldGroupName:newGroupName:));
/**
* 好友分组新增好友
*/
- (void)onFriendsAddedToGroup:(NSString * _Nullable)groupName friendInfoList:(NSArray<V2TIMFriendInfo *> *)friendInfoList NS_SWIFT_NAME(onFriendsAddedToGroup(groupName:friendInfoList:));
/**
* 好友分组删除好友
*/
- (void)onFriendsDeletedFromGroup:(NSString * _Nullable)groupName friendIDList:(NSArray<NSString *> *)friendIDList NS_SWIFT_NAME(onFriendsDeletedFromGroup(groupName:friendIDList:));
/**
* 订阅公众号通知
*/
- (void)onOfficialAccountSubscribed:(V2TIMOfficialAccountInfo *)officialAccountInfo NS_SWIFT_NAME(onOfficialAccountSubscribed(officialAccountInfo:));
/**
* 取消订阅公众号通知
*/
- (void)onOfficialAccountUnsubscribed:(NSString * _Nullable)officialAccountID NS_SWIFT_NAME(onOfficialAccountUnsubscribed(officialAccountID:));
/**
* 订阅的公众号被删除通知
*/
- (void)onOfficialAccountDeleted:(NSString * _Nullable)officialAccountID NS_SWIFT_NAME(onOfficialAccountDeleted(officialAccountID:));
/**
* 订阅的公众号资料更新通知
*/
- (void)onOfficialAccountInfoChanged:(V2TIMOfficialAccountInfo *)officialAccountInfo NS_SWIFT_NAME(onOfficialAccountInfoChanged(officialAccountInfo:));
/**
* 关注列表变更通知
*/
- (void)onMyFollowingListChanged:(NSArray<V2TIMUserFullInfo *> *)userInfoList isAdd:(BOOL)isAdd NS_SWIFT_NAME(onMyFollowingListChanged(userInfoList:isAdd:));
/**
* 粉丝列表变更通知
*/
- (void)onMyFollowersListChanged:(NSArray<V2TIMUserFullInfo *> *)userInfoList isAdd:(BOOL)isAdd NS_SWIFT_NAME(onMyFollowersListChanged(userInfoList:isAdd:));
/**
* 互关列表变更通知
*/
- (void)onMutualFollowersListChanged:(NSArray<V2TIMUserFullInfo *> *)userInfoList isAdd:(BOOL)isAdd NS_SWIFT_NAME(onMutualFollowersListChanged(userInfoList:isAdd:));
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 好友资料获取结果
//
/////////////////////////////////////////////////////////////////////////////////
/// 好友资料获取结果
V2TIM_EXPORT @interface V2TIMFriendInfoResult : NSObject
/// 返回码
@property(nonatomic,assign) int resultCode;
/// 返结果表述
@property(nonatomic,strong,nullable) NSString *resultInfo;
/// 好友类型
@property(nonatomic,assign) V2TIMFriendRelationType relation;
/// 好友个人资料,如果不是好友,除了 userID 字段,其他字段都为空
@property(nonatomic,strong) V2TIMFriendInfo *friendInfo;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 好友资料
//
/////////////////////////////////////////////////////////////////////////////////
/// 好友资料
V2TIM_EXPORT @interface V2TIMFriendInfo : NSObject
/// 好友 ID
@property(nonatomic,strong,nullable) 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,nullable) NSString *friendRemark;
/// 添加好友的 UTC 时间戳
@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,nullable) NSString* friendRemark;
/// 预分组名最大96字节
@property (nonatomic,strong,nullable) NSString* friendGroup;
/// 请求说明最大120字节
@property (nonatomic,strong,nullable) NSString* addWording;
/// 添加来源
@property (nonatomic,strong,nullable) 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,nullable) NSString* userID;
/// 用户昵称
@property(nonatomic,strong,readonly,nullable) NSString* nickName;
/// 用户头像
@property(nonatomic,strong,readonly,nullable) NSString* faceUrl;
/// 添加好友的 UTC 时间戳
@property(nonatomic,assign,readonly) uint64_t addTime;
/// 来源
@property(nonatomic,strong,readonly,nullable) NSString* addSource;
/// 加好友附言
@property(nonatomic,strong,readonly,nullable) NSString* addWording;
/// 好友申请类型
@property(nonatomic,assign,readonly) V2TIMFriendApplicationType type;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 好友关系链检查结果
//
/////////////////////////////////////////////////////////////////////////////////
/// 好友关系链检查结果
V2TIM_EXPORT @interface V2TIMFriendCheckResult : NSObject
/// 用户id
@property(nonatomic,strong,nullable) NSString* userID;
/// 返回码
@property(nonatomic,assign) NSInteger resultCode;
/// 返回信息
@property(nonatomic,strong,nullable) NSString *resultInfo;
/// 检查结果
@property(nonatomic,assign) V2TIMFriendRelationType relationType;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 好友操作结果(添加、删除、加黑名单、添加分组等)
//
/////////////////////////////////////////////////////////////////////////////////
/// 好友操作结果(添加、删除、加黑名单、添加分组等)
V2TIM_EXPORT @interface V2TIMFriendOperationResult : NSObject
/// 用户Id
@property(nonatomic,strong,nullable) NSString* userID;
/// 返回码
@property(nonatomic,assign) NSInteger resultCode;
/// 返回信息
@property(nonatomic,strong,nullable) NSString *resultInfo;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 好友分组
//
/////////////////////////////////////////////////////////////////////////////////
/// 好友分组
V2TIM_EXPORT @interface V2TIMFriendGroup : NSObject
/// 好友分组名称
@property(nonatomic,strong,nullable) 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
/////////////////////////////////////////////////////////////////////////////////
//
// 公众号资料
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMOfficialAccountInfo : NSObject
/// 公众号 ID
@property(nonatomic,strong,readonly,nullable) NSString* officialAccountID;
/// 公众号名称
@property(nonatomic,strong,readonly,nullable) NSString* officialAccountName;
/// 公众号头像
@property(nonatomic,strong,readonly,nullable) NSString* faceUrl;
/// 公众号所有者
@property(nonatomic,strong,readonly,nullable) NSString* ownerUserID;
/// 公众号组织
@property(nonatomic,strong,readonly,nullable) NSString* organization;
/// 公众号简介
@property(nonatomic,strong,readonly,nullable) NSString* introduction;
/// 公众号自定义数据
@property(nonatomic,strong,readonly,nullable) NSString* customData;
/// 公众号创建时间,单位:秒
@property(nonatomic,assign,readonly) uint64_t createTime;
/// 公众号订阅者数量
@property(nonatomic,assign,readonly) uint64_t subscriberCount;
/// 订阅公众号的时间,单位:秒
@property(nonatomic,assign,readonly) uint64_t subscribeTime;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 公众号资料获取结果
//
/////////////////////////////////////////////////////////////////////////////////
/// 公众号资料获取结果
V2TIM_EXPORT @interface V2TIMOfficialAccountInfoResult : NSObject
/// 返回码
@property(nonatomic,assign) int resultCode;
/// 返回结果表述
@property(nonatomic,strong,nullable) NSString *resultInfo;
/// 公众号资料
@property(nonatomic,strong) V2TIMOfficialAccountInfo *officialAccountInfo;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 关注/取关用户的操作结果
//
/////////////////////////////////////////////////////////////////////////////////
/// 关注/取关用户的操作结果
V2TIM_EXPORT @interface V2TIMFollowOperationResult : NSObject
/// 用户 ID
@property(nonatomic,strong,nullable) NSString* userID;
/// 返回码
@property(nonatomic,assign) NSInteger resultCode;
/// 返回信息
@property(nonatomic,strong,nullable) NSString *resultInfo;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 用户关注数量信息获取结果
//
/////////////////////////////////////////////////////////////////////////////////
/// 用户关注数量信息获取结果
V2TIM_EXPORT @interface V2TIMFollowInfo : NSObject
/// 返回码
@property(nonatomic,assign) NSInteger resultCode;
/// 返回结果表述
@property(nonatomic,strong,nullable) NSString *resultInfo;
/// 用户 ID
@property(nonatomic,strong,nullable) NSString *userID;
/// 用户的关注数量
@property(nonatomic,assign) uint64_t followingCount;
/// 用户的粉丝数量
@property(nonatomic,assign) uint64_t followersCount;
/// 用户的互关数量
@property(nonatomic,assign) uint64_t mutualFollowersCount;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 指定用户的关注类型检查结果
//
/////////////////////////////////////////////////////////////////////////////////
/// 指定用户的关注类型检查结果
V2TIM_EXPORT @interface V2TIMFollowTypeCheckResult : NSObject
/// 用户 ID
@property(nonatomic,strong,nullable) NSString* userID;
/// 返回码
@property(nonatomic,assign) NSInteger resultCode;
/// 返回信息
@property(nonatomic,strong,nullable) NSString *resultInfo;
/// 关注类型
@property(nonatomic,assign) V2TIMFollowType followType;
@end

View File

@@ -0,0 +1,752 @@
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 IMSDK
//
// 模块名称V2TIMManager+Group
//
// 群组高级接口,里面包含了群组的高级功能,比如群成员邀请、非群成员申请进群等操作接口。
//
/////////////////////////////////////////////////////////////////////
#import "V2TIMManager.h"
#import "V2TIMManager+Message.h"
@class V2TIMGroupMemberOperationResult;
@class V2TIMGroupApplicationResult;
@class V2TIMCreateGroupMemberInfo;
@class V2TIMGroupInfo;
@class V2TIMGroupInfoResult;
@class V2TIMGroupApplication;
@class V2TIMGroupSearchParam;
@class V2TIMGroupSearchResult;
@class V2TIMGroupMemberSearchParam;
@class V2TIMGroupMemberSearchResult;
@class V2TIMGroupAtInfo;
/////////////////////////////////////////////////////////////////////////////////
//
// 群相关的高级接口
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMManager (Group)
/// 获取已加入群列表成功回调
typedef void (^V2TIMGroupInfoListSucc)(NSArray<V2TIMGroupInfo *> *groupList);
/// 获取指定群列表成功回调
typedef void (^V2TIMGroupInfoResultListSucc)(NSArray<V2TIMGroupInfoResult *> *groupResultList);
/// 云端搜索群组的结果回调
typedef void (^V2TIMGroupSearchResultSucc)(V2TIMGroupSearchResult *searchResult);
/// 获取群属性列表成功回调
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 (^V2TIMGroupMemberSearchResultSucc)(V2TIMGroupMemberSearchResult *searchResult);
/// 群成员操作成功回调
typedef void (^V2TIMGroupMemberOperationResultListSucc)(NSArray<V2TIMGroupMemberOperationResult*> * resultList);
/// 获取好友申请列表成功回调
typedef void (^V2TIMGroupApplicationResultSucc)(V2TIMGroupApplicationResult *result);
/// 获取群在线人数成功回调
typedef void (^V2TIMGroupOnlineMemberCountSucc)(NSInteger count);
/// 群计数器操作成功的回调
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
* - 后台限制邀请的群成员个数不能超过 20
* - 其他限制请参考 V2TIMManager.h -> createGroup 注释
*/
- (void)createGroup:(V2TIMGroupInfo*)info memberList:(NSArray<V2TIMCreateGroupMemberInfo *>* _Nullable )memberList succ:(V2TIMCreateGroupSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(createGroup(info:memberList:succ:fail:));
/**
* 1.2 获取当前用户已经加入的群列表
*
* @note
* - 直播群AVChatRoom不支持该 API
* - 该接口有频限检测SDK 限制调用频率为 1 秒 10 次,超过限制后会报 ERR_SDK_COMM_API_CALL_FREQUENCY_LIMIT 7008错误
*/
- (void)getJoinedGroupList:(V2TIMGroupInfoListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getJoinedGroupList(succ: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 NS_SWIFT_NAME(searchGroups(searchParam:succ:fail:));
/**
* 2.3 搜索云端群资料8.4 及以上版本支持)
* @note 该功能为 IM 增值功能,详见[价格说明](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)searchCloudGroups:(V2TIMGroupSearchParam *)searchParam succ:(V2TIMGroupSearchResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(searchCloudGroups(searchParam:succ:fail:));
/**
* 2.4 修改群资料
*/
- (void)setGroupInfo:(V2TIMGroupInfo *)info succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setGroupInfo(info:succ:fail:));
/**
* 2.5 初始化群属性,会清空原有的群属性列表
*
* @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:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(initGroupAttributes(groupID:attributes:succ:fail:));
/**
* 2.6 设置群属性,已有该群属性则更新其 value 值,没有该群属性则添加该群属性。
* @note
* - 6.7 及其以前版本,只支持 AVChatRoom 直播群;
* - 从 6.8 版本开始,同时支持 AVChatRoom、Public、Meeting、Work 四种群类型;
* - 从 7.0 版本开始,除了话题外,群属性支持所有的群类型。
*/
- (void)setGroupAttributes:(NSString*)groupID attributes:(NSDictionary<NSString *,NSString *> *)attributes succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setGroupAttributes(groupID:attributes:succ:fail:));
/**
* 2.7 删除群指定属性keys 传 nil 则清空所有群属性。
* @note
* - 6.7 及其以前版本,只支持 AVChatRoom 直播群;
* - 从 6.8 版本开始,同时支持 AVChatRoom、Public、Meeting、Work 四种群类型;
* - 从 7.0 版本开始,除了话题外,群属性支持所有的群类型。
*/
- (void)deleteGroupAttributes:(NSString*)groupID keys:(NSArray<NSString *> * _Nullable)keys succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(deleteGroupAttributes(groupID:keys:succ:fail:));
/**
* 2.8 获取群指定属性keys 传 nil 则获取所有群属性。
* @note
* - 6.7 及其以前版本,只支持 AVChatRoom 直播群;
* - 从 6.8 版本开始,同时支持 AVChatRoom、Public、Meeting、Work 四种群类型;
* - 从 7.0 版本开始,除了话题外,群属性支持所有的群类型。
*/
- (void)getGroupAttributes:(NSString*)groupID keys:(NSArray<NSString *> * _Nullable)keys succ:(V2TIMGroupAttributeListSucc)succ fail:(V2TIMFail)fail;
/**
* 2.9 获取指定群在线人数
*
* @param groupID 群id
* @param succ 成功回调
* @param fail 失败回调
*
* @note
* - IMSDK 7.3 以前的版本仅支持直播群( AVChatRoom
* - IMSDK 7.3 及其以后的版本支持所有群类型。
*/
- (void)getGroupOnlineMemberCount:(NSString*)groupID succ:(V2TIMGroupOnlineMemberCountSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getGroupOnlineMemberCount(groupID:succ:fail:));
/**
* 2.10 设置群计数器7.0 及其以上版本支持)
*
* @note
* - 该计数器的 key 如果存在,则直接更新计数器的 value 值;如果不存在,则添加该计数器的 key-value
* - 当群计数器设置成功后,在 succ 回调中会返回最终成功设置的群计数器信息;
* - 除了社群和话题,群计数器支持所有的群组类型。
*/
- (void)setGroupCounters:(NSString *)groupID counters:(NSDictionary<NSString *, NSNumber *> *)counters succ:(V2TIMGroupCounterResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(setGroupCounters(groupID:counters:succ:fail:));
/**
* 2.11 获取群计数器7.0 及其以上版本支持)
*
* @note
* - 如果 keys 为空,则表示获取群内的所有计数器;
* - 除了社群和话题,群计数器支持所有的群组类型。
*/
- (void)getGroupCounters:(NSString *)groupID keys:(NSArray<NSString *> * _Nullable)keys succ:(V2TIMGroupCounterResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getGroupCounters(groupID:keys:succ: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)increaseGroupCounter:(NSString *)groupID key:(NSString *)key value:(NSInteger)value succ:(V2TIMGroupCounterResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(increaseGroupCounter(groupID:key:value:succ:fail:));
/**
* 2.13 递减群计数器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 NS_SWIFT_NAME(decreaseGroupCounter(groupID:key:value:succ:fail:));
/////////////////////////////////////////////////////////////////////////////////
// 群成员管理
/////////////////////////////////////////////////////////////////////////////////
/**
* 3.1 获取群成员列表
*
* @param filter 指定群成员类型。
* @param nextSeq 分页拉取标志,第一次拉取填 0回调成功如果 nextSeq 不为零,需要分页,传入再次拉取,直至为 0。
*
* @note
* - 普通群(工作群、会议群、公开群)的限制:
* 1. filter 只能设置为 V2TIMGroupMemberFilter 定义的数值SDK 会返回指定角色的成员。
*
* - 直播群AVChatRoom的限制
* 1. 如果设置 filter 为 V2TIMGroupMemberFilter 定义的数值SDK 返回全部成员。返回的人数规则为:拉取最近入群群成员最多 1000 人,新进来的成员排在前面,需要升级旗舰版,并且在 [控制台](https://console.cloud.tencent.com/im) 开启“直播群在线成员列表”开关6.3 及以上版本支持)。
* 2. 如果设置 filter 为群成员自定义标记,旗舰版支持拉取指定标记的成员列表。标记群成员的设置请参考 markGroupMemberList:memberList:markType:enableMark:succ:fail: API。
* 3. 程序重启后,请重新加入群组,否则拉取群成员会报 10007 错误码。
* 4. 群成员资料信息仅支持 userID | nickName | faceURL | role 字段。
*
* - 社群Community的限制
* 1. 如果设置 filter 为 V2TIMGroupMemberFilter 定义的数值SDK 返回指定角色的成员。
* 2. 如果设置 filter 为群成员自定义标记,旗舰版支持拉取指定标记的成员列表(7.5 及以上版本支持)。标记群成员的设置请参考 markGroupMemberList:memberList:markType:enableMark:succ:fail: API。
*/
- (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 NS_SWIFT_NAME(getGroupMembersInfo(groupID:memberList:succ: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 NS_SWIFT_NAME(searchGroupMembers(searchParam:succ:fail:));
/**
* 3.4 搜索云端群成员资料8.4 及以上版本支持)
*
* @param searchParam 搜索参数
* @note 该功能为 IM 增值功能,详见[价格说明](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)searchCloudGroupMembers:(V2TIMGroupMemberSearchParam *)searchParam succ:(V2TIMGroupMemberSearchResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(searchCloudGroupMembers(searchParam:succ:fail:));
/**
* 3.5 修改指定的群成员资料
*/
- (void)setGroupMemberInfo:(NSString*)groupID info:(V2TIMGroupMemberFullInfo *)info succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setGroupMemberInfo(groupID:info:succ:fail:));
/**
* 3.6 禁言群成员(只有管理员或群主能够调用)
*
* @param seconds 禁言时间长度,单位秒,表示调用该接口成功后多少秒内不允许被禁言用户再发言。
*/
- (void)muteGroupMember:(NSString*)groupID member:(NSString*)userID muteTime:(uint32_t)seconds succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(muteGroupMember(groupID:memberUserID:muteTimeSeconds:succ:fail:));
/**
* 3.7 禁言全体群成员只有管理员或群主能够调用7.5 及以上版本支持)
*
* @param groupID 群组 ID
* @param isMute YES 表示禁言NO 表示解除禁言
*
* @note
* - 禁言全体群成员没有时间限制,设置 isMute 为 NO 则解除禁言。
* - 禁言或解除禁言后,会触发 V2TIMGroupListener 中的 onAllGroupMembersMuted:isMute: 回调。
* - 群主和管理员可以禁言普通成员。普通成员不能操作禁言/解除禁言。
*/
- (void)muteAllGroupMembers:(NSString*)groupID isMute:(BOOL)isMute succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(muteAllGroupMembers(groupID:isMute:succ:fail:));
/**
* 3.8 邀请他人入群
*
* @note 请注意不同类型的群有如下限制:
* - 工作群Work群里的任何人都可以邀请其他人进群。
* - 会议群Meeting和公开群Public默认不允许邀请加入群您可以修改群资料 V2TIMGroupInfo 的 groupApproveOpt 字段打开邀请入群方式。打开该选项之后,群里的任何人都可以邀请其他人进群。
* - 直播群AVChatRoom不支持此功能。
* - 后台限制单次邀请的群成员个数不能超过 20。
*/
- (void)inviteUserToGroup:(NSString*)groupID userList:(NSArray<NSString *>*)userList succ:(V2TIMGroupMemberOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(inviteUserToGroup(groupID:userList:succ:fail:));
/**
* 3.9 踢人
*
* @param groupID 群 id
* @param memberList 被踢用户的 userID 列表
* @param reason 被踢的原因
* @param duration 指定自被踢出群组开始算起,禁止被踢用户重新申请加群的时长,单位:秒
* @param succ 成功后的回调
* @param fail 失败后的回调
*
* @note
* - 从 7.2 版本开始,支持设置一个时长参数,用于指定用户从被踢出群组开始算起,禁止重新申请加群的时长;
* - 工作群Work只有群主或 APP 管理员可以踢人;
* - 公开群Public、会议群Meeting群主、管理员和 APP 管理员可以踢人;
* - 直播群AVChatRoom6.6 之前版本只支持禁言muteGroupMember不支持踢人。6.6 及以上版本支持禁言和踢人。需要您购买旗舰版套餐;
* - 该接口其他使用限制请查阅https://cloud.tencent.com/document/product/269/75400#.E8.B8.A2.E4.BA.BA。
*/
- (void)kickGroupMember:(NSString *)groupID memberList:(NSArray<NSString *> *)memberList reason:(NSString * _Nullable)reason duration:(uint32_t)duration succ:(V2TIMGroupMemberOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(kickGroupMember(groupID:memberList:reason:duration:succ:fail:));
/**
* 3.10 切换群成员的角色
*
* @note 请注意不同类型的群有如下限制:
* - 工作群Work不支持设置群成员角色。
* - 只有群主才能对群成员进行普通成员和管理员之间的角色切换。
* - 转让群组请调用 @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:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setGroupMemberRole(groupID:memberUserID:newRole:succ:fail:));
/**
* 3.11 标记群成员(需要您购买旗舰版套餐)
*
* @param groupID 群 ID。
* @param memberList 群成员 ID 列表。
* @param markType 标记类型。数字类型,大于等于 1000您可以自定义一个群组里最多允许定义 10 个标记。
* @param enableMark YES 表示添加标记NO 表示移除标记。
* @note
* - 直播群从 6.6 版本开始支持。
* - 社群从 7.5 版本开始支持。
* - 只有群主才有权限标记群组中其他人。
*/
- (void)markGroupMemberList:(NSString *)groupID memberList:(NSArray<NSString *> *)memberList markType:(uint32_t)markType enableMark:(BOOL)enableMark succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(markGroupMemberList(groupID:memberList:markType:enableMark:succ:fail:));
/**
* 3.12 转让群主
*
* @note 请注意不同类型的群有如下限制:
* - 普通类型的群Work、Public、Meeting只有群主才有权限进行群转让操作。
* - 直播群AVChatRoom不支持转让群主。
*/
- (void)transferGroupOwner:(NSString*)groupID member:(NSString*)userID succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(transferGroupOwner(groupID:memberUserID:succ:fail:));
/**
* 3.13 踢人(直播群踢人从 6.6 版本开始支持,需要您购买旗舰版套餐)
*
* @note 使用限制如下:
* - 待废弃接口,请使用 kickGroupMember:memberList:reason:duration:succ:fail: 接口;
* - 工作群Work只有群主或 APP 管理员可以踢人;
* - 公开群Public、会议群Meeting群主、管理员和 APP 管理员可以踢人;
* - 直播群AVChatRoom6.6 之前版本只支持禁言muteGroupMember不支持踢人。6.6 及以上版本支持禁言和踢人;
* - 该接口其他使用限制请查阅https://cloud.tencent.com/document/product/269/75400#.E8.B8.A2.E4.BA.BA。
*/
- (void)kickGroupMember:(NSString *)groupID memberList:(NSArray<NSString *> *)memberList reason:(NSString * _Nullable)reason succ:(V2TIMGroupMemberOperationResultListSucc)succ fail:(V2TIMFail)fail __attribute__((deprecated("use kickGroupMember:memberList:reason:succ:fail:")));
/////////////////////////////////////////////////////////////////////////////////
// 加群申请
/////////////////////////////////////////////////////////////////////////////////
/**
* 4.1 获取加群申请列表
* @note 最多支持50个
*/
- (void)getGroupApplicationList:(V2TIMGroupApplicationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getGroupApplicationList(succ:fail:));
/**
* 4.2 同意某一条加群申请
*/
- (void)acceptGroupApplication:(V2TIMGroupApplication *)application reason:(NSString* _Nullable)reason succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(acceptGroupApplication(application:reason:succ:fail:));
/**
* 4.3 拒绝某一条加群申请
*/
- (void)refuseGroupApplication:(V2TIMGroupApplication *)application reason:(NSString* _Nullable)reason succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(refuseGroupApplication(application:reason:succ:fail:));
/**
* 4.4 标记申请列表为已读
*/
- (void)setGroupApplicationRead:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setGroupApplicationRead(succ:fail:));
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 群基本资料(可以通过 getGroupInfo 获取,不支持由客户自行创建)
//
/////////////////////////////////////////////////////////////////////////////////
/// 群资料
V2TIM_EXPORT @interface V2TIMGroupInfo : NSObject
/**
* 群组 ID
*
* @note 自定义群组 ID 必须为可打印 ASCII 字符0x20-0x7e最长 48 个字节,且前缀不能为 @TGS#(避免与默认分配的群组 ID 混淆)
*/
@property(nonatomic,strong,nullable) NSString* groupID;
/// 群类型
@property(nonatomic,strong,nullable) NSString* groupType;
/**
* 社群是否支持创建话题
* @note 只在群类型为 Community 时有效
*/
@property(nonatomic,assign) BOOL isSupportTopic;
/**
* 群名称
*
* @note 群名称最长 100 字节,使用 UTF-8 编码
*/
@property(nonatomic,strong,nullable) NSString* groupName;
/**
* 群公告
*
* @note 群公告最长 400 字节,使用 UTF-8 编码
*/
@property(nonatomic,strong,nullable) NSString* notification;
/**
* 群简介
*
* @note 群简介最长 400 字节,使用 UTF-8 编码
*/
@property(nonatomic,strong,nullable) NSString* introduction;
/**
* 群头像
*
* @note 群头像 URL 最长 500 字节,使用 UTF-8 编码
*/
@property(nonatomic,strong,nullable) 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,nullable) NSString *owner;
/// 创建群组的 UTC 时间戳
@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;
/// 上次修改群信息的 UTC 时间戳
@property(nonatomic,assign,readonly) uint32_t lastInfoTime;
/// 群最近一次发消息时间
@property(nonatomic,assign,readonly) uint32_t lastMessageTime;
/// 已加入的群成员数量
@property(nonatomic,assign,readonly) uint32_t memberCount;
/// 在线的群成员数量(待废弃字段,请使用 getGroupOnlineMemberCount:succ:fail: 接口获取群在线人数)
@property(nonatomic,assign,readonly) uint32_t onlineCount __attribute__((deprecated("use getGroupOnlineMemberCount:succ:fail: instead")));
/// 最多允许加入的群成员数量
/// @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;
/// 当前用户加入此群的 UTC 时间戳,不支持设置,系统自动生成
@property(nonatomic,assign,readonly) uint32_t joinTime;
/// 是否开启权限组能力仅支持社群7.8 版本开始支持
/// 开启后,管理员角色的权限失效,用群权限、话题权限和权限组能力来对社群、话题进行管理。
@property(nonatomic,assign) BOOL enablePermissionGroup;
/// 群权限仅支持社群7.8 版本开始支持
/// 群成员在没有加入任何权限组时的默认权限,仅在 enablePermissionGroup = true 打开权限组之后生效
@property(nonatomic,assign) uint64_t defaultPermissions;
@end
/// 获取群组资料结果
V2TIM_EXPORT @interface V2TIMGroupInfoResult : NSObject
/// 结果 0成功非0失败
@property(nonatomic,assign) int resultCode;
/// 如果获取失败,会返回错误信息
@property(nonatomic,strong,nullable) NSString *resultMsg;
/// 如果获取成功,会返回对应的 info
@property(nonatomic,strong) V2TIMGroupInfo *info;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 群申请信息(可以通过 getGroupApplicationList 获取,不支持由客户自行创建)
//
/////////////////////////////////////////////////////////////////////////////////
/// 群申请信息
V2TIM_EXPORT @interface V2TIMGroupApplication : NSObject
/// 群组 ID
@property(nonatomic,strong,readonly,nullable) NSString* groupID;
/// 请求者 userID
@property(nonatomic,strong,readonly,nullable) NSString* fromUser;
/// 请求者昵称
@property(nonatomic,strong,readonly,nullable) NSString* fromUserNickName;
/// 请求者头像
@property(nonatomic,strong,readonly,nullable) NSString* fromUserFaceUrl;
/// 判决者id有人请求加群:0邀请其他人加群:被邀请人用户 ID
@property(nonatomic,strong,readonly,nullable) NSString* toUser;
/// 申请时间
@property(nonatomic,assign,readonly) uint64_t addTime;
/// 申请或邀请附加信息
@property(nonatomic,strong,readonly,nullable) NSString* requestMsg;
/// 审批信息:同意或拒绝信息
@property(nonatomic,strong,readonly,nullable) 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,nullable) NSString* userID;
/// 返回状态
@property(nonatomic,assign) V2TIMGroupMemberResult result;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 创建群时指定群成员
//
/////////////////////////////////////////////////////////////////////////////////
/// 创建群时指定群成员
V2TIM_EXPORT @interface V2TIMCreateGroupMemberInfo : NSObject
/// 被操作成员
@property(nonatomic,strong,nullable) 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个。
/// 如果是本地搜索,您需主动设置 keyword 是否匹配群 ID、群名称。
/// 如果是云端搜索keyword 会自动匹配群 ID、群名称。
@property(nonatomic, strong) NSArray<NSString *> *keywordList;
/// 设置是否搜索群 ID仅本地搜索有效
@property(nonatomic, assign) BOOL isSearchGroupID;
/// 设置是否搜索群名称(仅本地搜索有效)
@property(nonatomic, assign) BOOL isSearchGroupName;
/// 指定关键字列表匹配类型,可设置为“或”关系搜索或者“与”关系搜索(仅云端搜索有效)
/// 取值分别为 V2TIM_KEYWORD_LIST_MATCH_TYPE_OR 和 V2TIM_KEYWORD_LIST_MATCH_TYPE_AND默认为“或”关系搜索。
@property(nonatomic,assign) V2TIMKeywordListMatchType keywordListMatchType;
/// 设置每次云端搜索返回结果的条数(必须大于 0最大支持 100默认 20仅云端搜索有效
@property(nonatomic,assign) NSUInteger searchCount;
/// 设置每次云端搜索的起始位置。第一次填空字符串,续拉时填写 V2TIMGroupSearchResult 中的返回值(仅云端搜索有效)
@property(nonatomic,strong) NSString *searchCursor;
@end
V2TIM_EXPORT @interface V2TIMGroupSearchResult : NSObject
/// 满足搜索条件的群列表是否已经全部返回
@property(nonatomic,assign) BOOL isFinished;
/// 满足搜索条件的群总数量
@property(nonatomic,assign) NSUInteger totalCount;
/// 下一次云端搜索的起始位置
@property(nonatomic,strong,nullable) NSString *nextCursor;
/// 当前一次云端搜索返回的群列表
@property(nonatomic,strong) NSArray<V2TIMGroupInfo *> *groupList;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 群成员搜索
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMGroupMemberSearchParam : NSObject
/// 搜索关键字列表,最多支持 5 个
/// 如果是本地搜索,您需主动设置 keyword 是否匹配群成员 ID、昵称、备注、群名片。
/// 如果是云端搜索keyword 会自动匹配群成员 ID、昵称、群名片。
@property(nonatomic, strong) NSArray<NSString *> *keywordList;
/// 指定群 ID 列表,若为 null 则搜索全部群中的群成员
@property(nonatomic, strong,nullable) NSArray<NSString *> *groupIDList;
/// 设置是否搜索群成员 userID仅本地搜索有效
@property(nonatomic, assign) BOOL isSearchMemberUserID;
/// 设置是否搜索群成员昵称(仅本地搜索有效)
@property(nonatomic, assign) BOOL isSearchMemberNickName;
/// 设置是否搜索群成员备注(仅本地搜索有效)
@property(nonatomic, assign) BOOL isSearchMemberRemark;
/// 设置是否搜索群成员名片(仅本地搜索有效)
@property(nonatomic, assign) BOOL isSearchMemberNameCard;
/// 指定关键字列表匹配类型,可设置为“或”关系搜索或者“与”关系搜索(仅云端搜索有效)
/// 取值分别为 V2TIM_KEYWORD_LIST_MATCH_TYPE_OR 和 V2TIM_KEYWORD_LIST_MATCH_TYPE_AND默认为“或”关系搜索。
@property(nonatomic,assign) V2TIMKeywordListMatchType keywordListMatchType;
/// 设置每次云端搜索返回结果的条数(必须大于 0最大支持 100默认 20仅云端搜索有效
@property(nonatomic,assign) NSUInteger searchCount;
/// 设置每次云端搜索的起始位置。第一次填空字符串,续拉时填写 V2TIMGroupMemberSearchResult 中的返回值(仅云端搜索有效)
@property(nonatomic,strong) NSString *searchCursor;
@end
V2TIM_EXPORT @interface V2TIMGroupMemberSearchResult : NSObject
/// 满足搜索条件的群成员列表是否已经全部返回
@property(nonatomic,assign) BOOL isFinished;
/// 满足搜索条件的群成员总数量
@property(nonatomic,assign) NSUInteger totalCount;
/// 下一次云端搜索的起始位置
@property(nonatomic,strong,nullable) NSString *nextCursor;
/// 当前一次云端搜索返回的群成员列表
@property(nonatomic,strong) NSDictionary<NSString *, NSArray<V2TIMGroupMemberFullInfo *> *> *memberList;
@end

View File

@@ -0,0 +1,43 @@
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 IMSDK
//
// 模块名称V2TIMManager+LiveActivity
//
// 消息 LiveActivity 推送接口
//
/////////////////////////////////////////////////////////////////////
#import "V2TIMManager.h"
@class V2TIMLiveActivityConfig;
V2TIM_EXPORT @interface V2TIMManager (LiveActivity)
/**
* 1.1 设置 LiveActivity 远端推送配置;当 config 为 nil 时,清除所有的远端推送配置
*/
- (void)setLiveActivity:(V2TIMLiveActivityConfig * _Nullable)config succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setLiveActivity(config:succ:fail:));
@end
V2TIM_EXPORT @interface V2TIMLiveActivityConfig : NSObject
/**
* 创建 LiveActivity 时自定义的 activityID用来标识该 LiveActivity
*/
@property(nonatomic,strong) NSString *activityID;
/**
* LiveActivity token
*/
@property (nonatomic, strong, nullable) NSData *token;
/**
* IM 控制台上传的 P8 证书 ID
*/
@property (nonatomic, assign) int businessID;
@end

View File

@@ -0,0 +1,168 @@
#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* _Nullable)invite:(NSString *)invitee
data:(NSString * _Nullable)data
onlineUserOnly:(BOOL)onlineUserOnly
offlinePushInfo:(V2TIMOfflinePushInfo * _Nullable)offlinePushInfo
timeout:(int)timeout
succ:(_Nullable V2TIMSucc)succ
fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(invite(invitee:data:onlineUserOnly:offlinePushInfo:timeout:succ: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* _Nullable)inviteInGroup:(NSString *)groupID
inviteeList:(NSArray *)inviteeList
data:(NSString * _Nullable)data
onlineUserOnly:(BOOL)onlineUserOnly
timeout:(int)timeout
succ:(_Nullable V2TIMSucc)succ
fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(inviteInGroup(groupID:inviteeList:data:onlineUserOnly:timeout:succ:fail:));
/**
* 邀请方取消邀请
*
* @param inviteID 邀请 ID
*
* @note 如果所有被邀请人都已经处理了当前邀请(包含超时),不能再取消当前邀请。
*/
- (void)cancel:(NSString *)inviteID data:(NSString * _Nullable)data succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(cancel(inviteID:data:succ:fail:));
/**
* 接收方接受邀请
*
* @note 不能接受不是针对自己的邀请,请在收到 onReceiveNewInvitation 回调的时候先判断 inviteeList 有没有自己,如果没有自己,不能 accept 邀请。
*/
- (void)accept:(NSString *)inviteID data:(NSString * _Nullable)data succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(accept(inviteID:data:succ:fail:));
/**
* 接收方拒绝邀请
*
* @note 不能拒绝不是针对自己的邀请,请在收到 onReceiveNewInvitation 回调的时候先判断 inviteeList 有没有自己,如果没有自己,不能 reject 邀请。
*/
- (void)reject:(NSString *)inviteID data:(NSString * _Nullable)data succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(reject(inviteID:data:succ:fail:));
/**
* 获取信令信息
*
* 如果 invite 设置 onlineUserOnly 为 NO每次信令操作包括 invite、cancel、accept、reject、timeout都会产生一条自定义消息该消息会通过 V2TIMAdvancedMsgListener -> onRecvNewMessage 抛给用户,用户也可以通过历史消息拉取,如果需要根据信令信息做自定义化文本展示,可以调用下面接口获取信令信息。
*
* @param msg 消息对象
* @return V2TIMSignalingInfo 信令信息,如果为 nil则 msg 不是一条信令消息。
*/
- (V2TIMSignalingInfo * _Nullable)getSignallingInfo:(V2TIMMessage *)msg NS_SWIFT_NAME(getSignallingInfo(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:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(addInvitedSignaling(signallingInfo:succ:fail:));
/**
* 修改邀请信令6.7 及其以上版本支持)
*
* @note 仅支持修改邀请信令的自定义字段 data。只有在线用户才能收到的邀请信令不能被修改。
*/
- (void)modifyInvitation:(NSString *)inviteID data:(NSString *)data succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(modifyInvitation(inviteID:data:succ:fail:));
@end
V2TIM_EXPORT @protocol V2TIMSignalingListener <NSObject>
@optional
/// 收到邀请的回调
-(void)onReceiveNewInvitation:(NSString *)inviteID inviter:(NSString * _Nullable)inviter groupID:(NSString * _Nullable)groupID inviteeList:(NSArray<NSString *> *)inviteeList data:(NSString * _Nullable)data NS_SWIFT_NAME(onReceiveNewInvitation(inviteID:inviter:groupID:inviteeList:data:));
/// 被邀请者接受邀请
-(void)onInviteeAccepted:(NSString *)inviteID invitee:(NSString * _Nullable)invitee data:(NSString * _Nullable)data NS_SWIFT_NAME(onInviteeAccepted(inviteID:invitee:data:));
/// 被邀请者拒绝邀请
-(void)onInviteeRejected:(NSString *)inviteID invitee:(NSString * _Nullable)invitee data:(NSString * _Nullable)data NS_SWIFT_NAME(onInviteeRejected(inviteID:invitee:data:));
/// 邀请被取消
-(void)onInvitationCancelled:(NSString *)inviteID inviter:(NSString * _Nullable)inviter data:(NSString * _Nullable)data NS_SWIFT_NAME(onInvitationCancelled(inviteID:inviter:data:));
/// 邀请超时
-(void)onInvitationTimeout:(NSString *)inviteID inviteeList:(NSArray<NSString *> *)inviteeList NS_SWIFT_NAME(onInvitationTimeout(inviteID:inviteeList:));
/// 邀请被修改6.7 及其以上版本支持)
-(void)onInvitationModified:(NSString *)inviteID data:(NSString * _Nullable)data NS_SWIFT_NAME(onInvitationModified(inviteID: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,nullable) NSString *inviteID;
@property(nonatomic,strong,nullable) NSString *groupID;
@property(nonatomic,strong,nullable) NSString *inviter;
@property(nonatomic,strong) NSMutableArray *inviteeList;
@property(nonatomic,strong,nullable) NSString *data;
@property(nonatomic,assign) uint32_t timeout;
@property(nonatomic,assign) SignalingActionType actionType;
@end

View File

@@ -0,0 +1,37 @@
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 IMSDK
//
// 模块名称V2TIMManager+VOIP
//
// 消息 VoIP 推送接口
//
/////////////////////////////////////////////////////////////////////
#import "V2TIMManager.h"
@class V2TIMVOIPConfig;
V2TIM_EXPORT @interface V2TIMManager (VOIP)
/**
* 1.1 设置 VoIP 推送
*/
- (void)setVOIP:(V2TIMVOIPConfig * _Nullable)config succ:(V2TIMSucc _Nullable)succ fail:(V2TIMFail _Nullable)fail NS_SWIFT_NAME(setVOIP(config:succ: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

View File

@@ -0,0 +1,843 @@
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 IMSDK
//
// 模块名称V2TIMManager
//
// TIM SDK 2.0 版的接口,相比于 1.0 版本更加简洁易用,接入速度更快,高级特性接口详见:
// - V2TIMManager+Message.h 消息相关的高级功能接口,比如图片消息,视频消息,消息撤回,消息已读等功能。
// - V2TIMManager+APNS.h 推送相关的高级功能接口,主要用于开启消息推送功能。
// - V2TIMManager+Conversation.h 会话相关的高级功能接口,一个会话对应一个聊天窗口。
// - V2TIMManager+Group.h 群组相关的高级功能接口,比如邀请人进群,处理加群请求等功能。
// - V2TIMManager+Friendship.h 关系链相关的高级功能接口,比如黑名单,好友列表等功能。
// - V2TIMManager+Community.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 V2TIMUserSearchParam;
@class V2TIMUserSearchResult;
@class V2TIMGroupMemberInfo;
@class V2TIMGroupMemberFullInfo;
@class V2TIMGroupChangeInfo;
@class V2TIMGroupMemberChangeInfo;
@class V2TIMUserReceiveMessageOptInfo;
@class V2TIMTopicInfo;
@class V2TIMUserStatus;
@class V2TIMReceiveMessageOptInfo;
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 * _Nullable desc);
/// 创建群组成功回调
typedef void (^V2TIMCreateGroupSucc)(NSString * _Nullable groupID);
/// 获取用户资料成功回调
typedef void (^V2TIMUserFullInfoListSucc)(NSArray <V2TIMUserFullInfo *> *infoList);
/// 搜索云端用户的结果回调
typedef void (^V2TIMUserSearchResultSucc)(V2TIMUserSearchResult *searchResult);
/// 实验性 API 接口成功回调
typedef void (^V2TIMCallExperimentalAPISucc)(NSObject * _Nullable 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 NS_ENUM(NSInteger, V2TIMKeywordListMatchType) {
V2TIM_KEYWORD_LIST_MATCH_TYPE_OR = 0,
V2TIM_KEYWORD_LIST_MATCH_TYPE_AND = 1
};
/// 日志回调
typedef void (^V2TIMLogListener)(V2TIMLogLevel logLevel, NSString * _Nullable 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 NS_SWIFT_NAME(addIMSDKListener(listener:));
/**
* 1.4 移除 IM 监听
*/
- (void)removeIMSDKListener:(id<V2TIMSDKListener>)listener NS_SWIFT_NAME(removeIMSDKListener(listener:));
/**
* 1.5 反初始化 SDK
*/
- (void)unInitSDK;
/**
* 1.6 获取版本号
*
* @return 返回版本号,字符串表示,例如 5.0.10
*/
- (NSString*)getVersion;
/**
* 1.7 获取服务器时间戳
*
* @return UTC 时间戳,单位 s
*/
- (uint64_t)getServerTime;
/**
* 初始化 SDK待废弃接口请使用 initSDK 和 addIMSDKListener 接口)
*/
- (BOOL)initSDK:(int)sdkAppID config:(V2TIMSDKConfig*)config listener:(_Nullable 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:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(login(userID:userSig:succ:fail:));
/**
* 2.2 登出
*
* 退出登录,如果切换账号,需要 logout 回调成功或者失败后才能再次 login否则 login 可能会失败。
*/
- (void)logout:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(logout(succ:fail:));
/**
* 2.3 获取登录用户
*/
- (NSString * _Nullable)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:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(sendC2CTextMessage(text:to:succ:fail:));
/**
* 3.4 发送单聊自定义(信令)消息(最大支持 12KB
*
* 自定义消息本质就是一端二进制 buffer您可以在其上自由组织自己的消息格式常用于发送信令但是自定义消息不支持云端敏感词过滤。
* @return 返回消息的唯一标识 ID
*
* @note 该接口发送的消息默认不会推送,如果需要推送,请调用 V2TIMManager+Message.h -> sendMessage 接口。
*/
- (NSString*)sendC2CCustomMessage:(NSData *)customData to:(NSString *)userID succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(sendC2CCustomMessage(customData:to:succ: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:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(sendGroupTextMessage(text:to:priority:succ: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:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(sendGroupCustomMessage(customData:to:priority:succ: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最长 100 字节,使用 UTF-8 编码1 个汉字占 3 个字节。
*
* @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* _Nullable)groupID groupName:(NSString *)groupName succ:(V2TIMCreateGroupSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(createGroup(groupType:groupID:groupName:succ: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* _Nullable)msg succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(joinGroup(groupID:msg:succ:fail:));
/**
* 4.5 退出群组
*
* @note 在公开群Public、会议Meeting和直播群AVChatRoom群主是不可以退群的群主只能调用 dismissGroup 解散群组。
*/
- (void)quitGroup:(NSString*)groupID succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(quitGroup(groupID:succ:fail:));
/**
* 4.6 解散群组
*
* @note 请注意如下特殊逻辑:
* - 好友工作群Work的解散最为严格即使群主也不能随意解散只能由您的业务服务器调用 [解散群组 REST API](https://cloud.tencent.com/document/product/269/1624) 解散。
* - 其他类型群的群主可以解散群组。
*/
- (void)dismissGroup:(NSString*)groupID succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(dismissGroup(groupID:succ: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:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setSelfInfo(info:succ:fail:));
/**
* 5.3 订阅用户资料,从 7.4 版本开始支持
*
* @param userIDList 待订阅的用户 ID
*
* @note
* - 该接口用于订阅陌生人的资料变更事件,订阅成功后,当订阅用户资料发生变更,您可以通过监听 onUserInfoChanged 回调来感知
* - 订阅列表最多允许订阅 200 个,超过限制后,会自动淘汰最先订阅的用户
* - 自己的资料变更通知不需要订阅,默认会通过 onSelfInfoUpdated 回调通知给您
* - 好友的资料变更通知不需要订阅,默认会通过 onFriendInfoChange 回调通知给您
* - 该功能为 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)subscribeUserInfo:(NSArray *)userIDList succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(subscribeUserInfo(userIDList:succ:fail:));
/**
* 5.4 取消订阅用户资料,从 7.4 版本开始支持
*
* @param userIDList 需要取消订阅的用户 ID
*
* @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)。
*/
- (void)unsubscribeUserInfo:(NSArray * _Nullable)userIDList succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(unsubscribeUserInfo(userIDList:succ:fail:));
/**
* 5.5 搜索云端用户资料8.4 及以上版本支持)
* @param searchParam 用户搜索参数,详见 V2TIMUserSearchParam 的定义
* @note
* - 该功能为 IM 增值功能,详见[价格说明](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)
* - 如果您没有开通该服务,调用接口会返回 60020 错误码
* - 该接口返回的是云端存储的用户资料,包括好友和非好友资料,您可以调用 checkFriend 接口来判断是否为好友。
*/
- (void)searchUsers:(V2TIMUserSearchParam *)searchParam succ:(V2TIMUserSearchResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(searchUsers(searchParam:succ:fail:));
/**
* 5.6 查询用户状态,从 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 NS_SWIFT_NAME(getUserStatus(userIDList:succ:fail:));
/**
* 5.7 设置自己的状态,从 6.3 版本开始支持
*
* @param status 待设置的自定义状态
*
* @note 该接口只支持设置自己的自定义状态,即 V2TIMUserStatus.customStatus
*/
- (void)setSelfStatus:(V2TIMUserStatus *)status succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setSelfStatus(status:succ:fail:));
/**
* 5.8 订阅用户状态,从 6.3 版本开始支持
*
* @param userIDList 待订阅的用户 ID
*
* @note
* - 当成功订阅用户状态后,当对方的状态(包含在线状态、自定义状态)发生变更后,您可以监听 @onUserStatusChanged 回调来感知
* - 如果您需要订阅好友列表的状态,您只需要在控制台上打开开关即可,无需调用该接口
* - 该接口不支持订阅自己,您可以通过监听 @onUserStatusChanged 回调来感知自身的自定义状态的变更
* - 订阅列表最多允许订阅 200 个,超过限制后,会自动淘汰最先订阅的用户
* - 该功能为 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:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(subscribeUserStatus(userIDList:succ:fail:));
/**
* 5.9 取消订阅用户状态,从 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 * _Nullable)userIDList succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(unsubscribeUserStatus(userIDList:succ:fail:));
// 5.10 更多功能,详见 V2TIMManager+Friendship.h
/////////////////////////////////////////////////////////////////////////////////
// 扩展接口
/////////////////////////////////////////////////////////////////////////////////
/**
* 6.1 实验性 API 接口
*
* @param api 接口名称
* @param param 接口参数
*
* @note 该接口提供一些实验性功能
*/
- (void)callExperimentalAPI:(NSString *)api
param:(NSObject * _Nullable)param
succ:(V2TIMCallExperimentalAPISucc)succ
fail:(V2TIMFail)fail NS_SWIFT_NAME(callExperimentalAPI(api:param:succ:fail:));
@end
/////////////////////////////////////////////////////////////////////////////////
//
// IMSDK 主核心回调,帮助您时刻关注 IMSDK 的在线状态
//
/////////////////////////////////////////////////////////////////////////////////
/// IMSDK 主核心回调
V2TIM_EXPORT @protocol V2TIMSDKListener <NSObject>
@optional
/// SDK 正在连接到服务器
- (void)onConnecting;
/// SDK 已经成功连接到服务器
- (void)onConnectSuccess;
/// SDK 连接服务器失败
- (void)onConnectFailed:(int)code err:(NSString* _Nullable)err;
/// 当前用户被踢下线,此时可以 UI 提示用户,并再次调用 V2TIMManager 的 login() 函数重新登录。
- (void)onKickedOffline;
/// 在线时票据过期:此时您需要生成新的 userSig 并再次调用 V2TIMManager 的 login() 函数重新登录。
- (void)onUserSigExpired;
/// 当前用户的资料发生了更新
- (void)onSelfInfoUpdated:(V2TIMUserFullInfo *)Info NS_SWIFT_NAME(onSelfInfoUpdated(info:));
/**
* 用户状态变更通知
*
* @note 收到通知的情况:
* 1. 订阅过的用户发生了状态变更(包括在线状态和自定义状态),会触发该回调
* 2. 在 IM 控制台打开了好友状态通知开关,即使未主动订阅,当好友状态发生变更时,也会触发该回调
* 3. 同一个账号多设备登录,当其中一台设备修改了自定义状态,所有设备都会收到该回调
*/
- (void)onUserStatusChanged:(NSArray<V2TIMUserStatus *> *)userStatusList NS_SWIFT_NAME(onUserStatusChanged(userStatusList:));
/**
* 用户资料变更通知
*
* @note
* 仅当通过 subscribeUserInfo 成功订阅的用户(仅限非好友用户)的资料发生变更时,才会激活此回调函数
*/
- (void)onUserInfoChanged:(NSArray<V2TIMUserFullInfo *> *)userInfoList NS_SWIFT_NAME(onUserInfoChanged(userInfoList:));
/**
* 全局消息接收选项变更通知
*/
- (void)onAllReceiveMessageOptChanged:(V2TIMReceiveMessageOptInfo *)receiveMessageOptInfo NS_SWIFT_NAME(onAllReceiveMessageOptChanged(receiveMessageOptInfo:));
/**
* 实验性事件通知
*/
- (void)onExperimentalNotify:(NSString *)key param:(NSObject * _Nullable)param NS_SWIFT_NAME(onExperimentalNotify(key:param:));
@end
/////////////////////////////////////////////////////////////////////////////////
//
// IMSDK 基本消息回调 (高级消息请参考 V2TIMManager+Message.h -> V2TIMAdvancedMsgListener
//
/////////////////////////////////////////////////////////////////////////////////
/// IMSDK 基本消息回调
V2TIM_EXPORT @protocol V2TIMSimpleMsgListener <NSObject>
@optional
/// 收到 C2C 文本消息
- (void)onRecvC2CTextMessage:(NSString *)msgID sender:(V2TIMUserInfo *)info text:(NSString * _Nullable)text NS_SWIFT_NAME(onRecvC2CTextMessage(msgID:sender:text:));
/// 收到 C2C 自定义(信令)消息
- (void)onRecvC2CCustomMessage:(NSString *)msgID sender:(V2TIMUserInfo *)info customData:(NSData * _Nullable)data NS_SWIFT_NAME(onRecvC2CCustomMessage(msgID:sender:customData:));
/// 收到群文本消息
- (void)onRecvGroupTextMessage:(NSString *)msgID groupID:(NSString * _Nullable)groupID sender:(V2TIMGroupMemberInfo *)info text:(NSString * _Nullable)text NS_SWIFT_NAME(onRecvGroupTextMessage(msgID:groupID:sender:text:));
/// 收到群自定义(信令)消息
- (void)onRecvGroupCustomMessage:(NSString *)msgID groupID:(NSString * _Nullable)groupID sender:(V2TIMGroupMemberInfo *)info customData:(NSData * _Nullable)data NS_SWIFT_NAME(onRecvGroupCustomMessage(msgID:groupID:sender:customData:));
@end
/////////////////////////////////////////////////////////////////////////////////
//
// IMSDK 群组事件回调
//
/////////////////////////////////////////////////////////////////////////////////
/// IMSDK 群组事件回调
V2TIM_EXPORT @protocol V2TIMGroupListener <NSObject>
@optional
/////////////////////////////////////////////////////////////////////////////////
// 群成员相关通知
/////////////////////////////////////////////////////////////////////////////////
/// 有新成员加入群(该群所有的成员都能收到)
/// 会议群Meeting默认无此回调如需回调请前往 [控制台](https://console.cloud.tencent.com/im) (功能配置 -> 群组配置 -> 群系统通知配置 -> 群成员变更通知) 主动配置。
- (void)onMemberEnter:(NSString * _Nullable)groupID memberList:(NSArray<V2TIMGroupMemberInfo *>*)memberList NS_SWIFT_NAME(onMemberEnter(groupID:memberList:));
/// 有成员离开群(该群所有的成员都能收到)
/// 会议群Meeting默认无此回调如需回调请前往 [控制台](https://console.cloud.tencent.com/im) (功能配置 -> 群组配置 -> 群系统通知配置 -> 群成员变更通知) 主动配置。
- (void)onMemberLeave:(NSString * _Nullable)groupID member:(V2TIMGroupMemberInfo *)member NS_SWIFT_NAME(onMemberLeave(groupID:member:));
/// 某成员被拉入某群(该群所有的成员都能收到)
- (void)onMemberInvited:(NSString * _Nullable)groupID opUser:(V2TIMGroupMemberInfo *)opUser memberList:(NSArray<V2TIMGroupMemberInfo *>*)memberList NS_SWIFT_NAME(onMemberInvited(groupID:opUser:memberList:));
/// 有成员被踢出某群(该群所有的成员都能收到)
- (void)onMemberKicked:(NSString * _Nullable)groupID opUser:(V2TIMGroupMemberInfo *)opUser memberList:(NSArray<V2TIMGroupMemberInfo *>*)memberList NS_SWIFT_NAME(onMemberKicked(groupID:opUser:memberList:));
/// 某成员信息发生变更(该群所有的成员都能收到)
/// 会议群Meeting和直播群AVChatRoom默认无此回调如需回调请前往 [控制台](https://console.cloud.tencent.com/im) (功能配置 -> 群组配置 -> 群系统通知配置 -> 群成员资料变更通知) 主动配置。
- (void)onMemberInfoChanged:(NSString * _Nullable)groupID changeInfoList:(NSArray <V2TIMGroupMemberChangeInfo *> *)changeInfoList NS_SWIFT_NAME(onMemberInfoChanged(groupID:changeInfoList:));
/// 群组全体成员被禁言/解除禁言了(该群所有的成员都能收到)
/// 需要提前在 [控制台](https://console.cloud.tencent.com/im) 开启通知开关。开关路径:功能配置 -> 群组配置 -> 群系统通知配置 -> 群资料变更通知 -> 群禁言变更通知。
/// 7.5 及以上版本支持。
- (void)onAllGroupMembersMuted:(NSString * _Nullable)groupID isMute:(BOOL)isMute NS_SWIFT_NAME(onAllGroupMembersMuted(groupID:isMute:));
/// 有成员被标记(该群所有的成员都能收到)
/// 仅社群Community支持该回调。
/// 7.5 及以上版本支持,需要您购买旗舰版套餐。
- (void)onMemberMarkChanged:(NSString * _Nullable)groupID memberIDList:(NSArray<NSString *> *)memberIDList markType:(int)markType enableMark:(BOOL)enableMark NS_SWIFT_NAME(onMemberMarkChanged(groupID:memberIDList:markType:enableMark:));
/////////////////////////////////////////////////////////////////////////////////
// 群生命周期相关通知
/////////////////////////////////////////////////////////////////////////////////
/// 有新的群创建(创建者能收到,应用于多端消息同步的场景)
- (void)onGroupCreated:(NSString * _Nullable)groupID NS_SWIFT_NAME(onGroupCreated(groupID:));
/// 某个已加入的群被解散了(该群所有的成员都能收到)
- (void)onGroupDismissed:(NSString * _Nullable)groupID opUser:(V2TIMGroupMemberInfo *)opUser NS_SWIFT_NAME(onGroupDismissed(groupID:opUser:));
/// 某个已加入的群被回收了(该群所有的成员都能收到)
- (void)onGroupRecycled:(NSString * _Nullable)groupID opUser:(V2TIMGroupMemberInfo *)opUser NS_SWIFT_NAME(onGroupRecycled(groupID:opUser:));
/// 某个已加入的群的信息被修改了(该群所有的成员都能收到)
/// 以下字段的修改可能会引发该通知 groupName & introduction & notification & faceUrl & owner & allMute & custom
/// 控制指定字段 下发通知/存漫游 请前往 [控制台](https://console.cloud.tencent.com/im) (功能配置 -> 群组配置 -> 群系统通知配置 -> 群资料变更通知) 主动配置。
- (void)onGroupInfoChanged:(NSString * _Nullable)groupID changeInfoList:(NSArray <V2TIMGroupChangeInfo *> *)changeInfoList NS_SWIFT_NAME(onGroupInfoChanged(groupID:changeInfoList:));
/// 某个已加入的群的属性被修改了,会返回所在群组的所有属性(该群所有的成员都能收到)
- (void)onGroupAttributeChanged:(NSString *)groupID attributes:(NSMutableDictionary<NSString *,NSString *> *)attributes;
/// 某个已加入的群的计数器被修改了,会返回当前变更的群计数器(该群所有的成员都能收到)
- (void)onGroupCounterChanged:(NSString * _Nullable)groupID key:(NSString *)key newValue:(NSInteger)newValue NS_SWIFT_NAME(onGroupCounterChanged(groupID:key:newValue:));
/////////////////////////////////////////////////////////////////////////////////
// 加群申请相关通知
/////////////////////////////////////////////////////////////////////////////////
/// 有新的加群请求(只有群主和管理员会收到)
- (void)onReceiveJoinApplication:(NSString * _Nullable)groupID member:(V2TIMGroupMemberInfo *)member opReason:(NSString * _Nullable)opReason NS_SWIFT_NAME(onReceiveJoinApplication(groupID:member:opReason:));
/// 加群或者邀请加群请求已经被群主或管理员处理了(只有申请人能够收到)
- (void)onApplicationProcessed:(NSString * _Nullable)groupID opUser:(V2TIMGroupMemberInfo *)opUser opResult:(BOOL)isAgreeJoin opReason:(NSString * _Nullable)opReason NS_SWIFT_NAME(onApplicationProcessed(groupID:opUser:opResult:opReason:));
/////////////////////////////////////////////////////////////////////////////////
// 其他相关通知
/////////////////////////////////////////////////////////////////////////////////
/// 指定管理员身份
- (void)onGrantAdministrator:(NSString * _Nullable)groupID opUser:(V2TIMGroupMemberInfo *)opUser memberList:(NSArray <V2TIMGroupMemberInfo *> *)memberList NS_SWIFT_NAME(onGrantAdministrator(groupID:opUser:memberList:));
/// 取消管理员身份
- (void)onRevokeAdministrator:(NSString * _Nullable)groupID opUser:(V2TIMGroupMemberInfo *)opUser memberList:(NSArray <V2TIMGroupMemberInfo *> *)memberList NS_SWIFT_NAME(onRevokeAdministrator(groupID:opUser:memberList:));
/// 自己主动退出群组(主要用于多端同步)
- (void)onQuitFromGroup:(NSString * _Nullable)groupID NS_SWIFT_NAME(onQuitFromGroup(groupID:));
/// 收到 RESTAPI 下发的自定义系统消息
- (void)onReceiveRESTCustomData:(NSString * _Nullable)groupID data:(NSData * _Nullable)data NS_SWIFT_NAME(onReceiveRESTCustomData(groupID:data:));
/////////////////////////////////////////////////////////////////////////////////
// 话题事件监听回调
/////////////////////////////////////////////////////////////////////////////////
/// 话题创建回调
- (void)onTopicCreated:(NSString * _Nullable)groupID topicID:(NSString * _Nullable)topicID NS_SWIFT_NAME(onTopicCreated(groupID:topicID:));
/// 话题被删除回调
- (void)onTopicDeleted:(NSString * _Nullable)groupID topicIDList:(NSArray<NSString *> *)topicIDList NS_SWIFT_NAME(onTopicDeleted(groupID:topicIDList:));
/// 话题更新回调
- (void)onTopicChanged:(NSString * _Nullable)groupID topicInfo:(V2TIMTopicInfo *)topicInfo NS_SWIFT_NAME(onTopicChanged(groupID:topicInfo:));
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 用户资料
//
/////////////////////////////////////////////////////////////////////////////////
/// 用户基本资料
V2TIM_EXPORT @interface V2TIMUserInfo : NSObject
/// 用户 ID
@property(nonatomic,strong,readonly,nullable) NSString* userID;
/// 用户昵称
@property(nonatomic,strong,nullable) NSString* nickName;
/// 用户头像
@property(nonatomic,strong,nullable) NSString* faceURL;
@end
/// 用户详细资料
V2TIM_EXPORT @interface V2TIMUserFullInfo : V2TIMUserInfo
/// 用户签名
@property(nonatomic,strong,nullable) 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,nullable) NSDictionary<NSString *,NSData *> * customInfo;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 用户搜索
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMUserSearchParam : NSObject
/// 搜索的关键字列表,关键字列表最多支持 5 个keyword 会自动匹配用户 ID、昵称。
@property(nonatomic, strong,nullable) NSArray<NSString *> *keywordList;
/// 指定关键字列表匹配类型,可设置为“或”关系搜索或者“与”关系搜索。
/// 取值分别为 V2TIM_KEYWORD_LIST_MATCH_TYPE_OR 和 V2TIM_KEYWORD_LIST_MATCH_TYPE_AND默认为“或”关系搜索。
@property(nonatomic,assign) V2TIMKeywordListMatchType keywordListMatchType;
/// 用户性别(如果不设置,默认男性和女性都会返回)
@property(nonatomic,assign) V2TIMGender gender;
/// 用户最小生日(如果不设置,默认值为 0
@property(nonatomic,assign) uint32_t minBirthday;
/// 用户最大生日(如果不设置,默认 birthday >= minBirthday 的用户都会返回)
@property(nonatomic,assign) uint32_t maxBirthday;
/// 每次云端搜索返回结果的条数(必须大于 0最大支持 100默认 20
@property(nonatomic,assign) NSUInteger searchCount;
/// 每次云端搜索的起始位置。第一次填空字符串,续拉时填写 V2TIMUserSearchResult 中的返回值。
@property(nonatomic,strong) NSString *searchCursor;
@end
V2TIM_EXPORT @interface V2TIMUserSearchResult : NSObject
/// 是否已经返回全部满足搜索条件的用户列表
@property(nonatomic,assign) BOOL isFinished;
/// 满足搜索条件的用户总数量
@property(nonatomic,assign) NSUInteger totalCount;
/// 下一次云端搜索的起始位置
@property(nonatomic,strong,nullable) NSString *nextCursor;
/// 当前一次云端搜索返回的用户列表
@property(nonatomic,strong) NSArray<V2TIMUserFullInfo *> *userList;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 用户状态
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMUserStatus : NSObject
/// 用户的 ID
@property (nonatomic, copy, readonly, nullable) NSString *userID;
/// 用户的状态
@property (nonatomic, assign, readonly) V2TIMUserStatusType statusType;
/// 用户的自定义状态, 最大 100 字节
@property (nonatomic, copy, nullable) NSString *customStatus;
/// 用户在线设备列表
@property (nonatomic, strong, readonly) NSMutableArray<NSString *> *onlineDevices;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 群成员资料
//
/////////////////////////////////////////////////////////////////////////////////
/// 群成员基本资料
V2TIM_EXPORT @interface V2TIMGroupMemberInfo : NSObject
/// 用户 ID
@property(nonatomic,strong,nullable) NSString* userID;
/// 用户昵称
@property(nonatomic,strong,readonly,nullable) NSString* nickName;
/// 用户好友备注
@property(nonatomic,strong,readonly,nullable) NSString* friendRemark;
/// 群成员名片
@property(nonatomic,strong,nullable) NSString* nameCard;
/// 用户头像
@property(nonatomic,strong,readonly,nullable) NSString* faceURL;
/// 群成员在线终端列表
@property(nonatomic,strong,readonly) NSMutableArray<NSString*>* onlineDevices;
@end
/// 群成员详细资料
V2TIM_EXPORT @interface V2TIMGroupMemberFullInfo : V2TIMGroupMemberInfo
/// 群成员自定义字段
/// 首先要在 [控制台](https://console.cloud.tencent.com/im) (功能配置 -> 群成员自定义字段) 配置用户自定义字段,然后再调用该接口进行设置。
@property(nonatomic,strong,nullable) 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;
/// 群成员是否在线
/// @note
/// - 不支持直播群 AVChatRoom
/// - 该字段仅在调用 - getGroupMemberList:filter:nextSeq:succ:fail: 接口时有效;
/// - 7.3 及其以上版本支持,需要您购买旗舰版套餐。
@property(nonatomic,assign,readonly) BOOL isOnline;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// SDK 配置参数表
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMSDKConfig : NSObject
/// 本地写 log 文件的等级,默认 DEBUG 等级, IMSDK 的日志默认存储于 /Library/Caches/ 目录下
@property(nonatomic,assign) V2TIMLogLevel logLevel;
/// log 监听回调(回调在主线程,日志回调可能比较频繁,请注意不要在回调里面同步处理太多耗时任务,可能会堵塞主线程)
@property(nonatomic,copy,nullable) V2TIMLogListener logListener;
@end
#endif

View File

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

View File

@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyCollectedDataTypes</key>
<array/>
<key>NSPrivacyTrackingDomains</key>
<array/>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategorySystemBootTime</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>35F9.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryDiskSpace</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>E174.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>C617.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string>
</array>
</dict>
</array>
</dict>
</plist>

View File

@@ -0,0 +1 @@
Versions/Current/Headers

View File

@@ -0,0 +1 @@
Versions/Current/ImSDK_Plus

View File

@@ -0,0 +1 @@
Versions/Current/Modules

View File

@@ -0,0 +1 @@
Versions/Current/Resources

View File

@@ -0,0 +1,19 @@
// Copyright (c) 2025 Tencent. All rights reserved.
#ifndef TIM_IM_SDK_PLUS_H_
#define TIM_IM_SDK_PLUS_H_
#import "TIMErrorCode.h"
#import "V2TIMManager.h"
#import "V2TIMManager+APNS.h"
#import "V2TIMManager+Friendship.h"
#import "V2TIMManager+Conversation.h"
#import "V2TIMManager+Group.h"
#import "V2TIMManager+Community.h"
#import "V2TIMManager+Message.h"
#import "V2TIMManager+Signaling.h"
#import "V2TIMManager+VOIP.h"
#import "V2TIMManager+LiveActivity.h"
#endif

View File

@@ -0,0 +1,446 @@
// 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_HTTP_NO_CLEARTEXT_TRAFFIC_PERMISSION = 6029, ///< 无 http 协议的访问权限iOS 9.0 和 Android P 开始默认限制 http 协议iOS 平台可配置 NSAppTransportSecurity 选项Android 平台可配置 cleartextTrafficPermitted 选项,取消 http 协议的限制。
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_BLOCKED_BY_SENSITIVE_WORD = 7015, ///< SDK 本地内容审核,命中敏感词
// 账号错误码
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_INVALID_MSG_RECEIVER = 6032, ///< 无效的消息接收方,请在 IM 控制台检查消息的接收方是否存在。
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_COMM_SENSITIVE_IMAGE = 80004, ///< 图片安全打击,图片中可能包含敏感内容。
// 账号错误码
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_LOW_SDK_VERSION = 70404, ///< 您的SDK版本过低请升级到最新版本.
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_PROFILE_SUBSCRIPTION_DISABLED = 72012, ///< 用户资料变更订阅能力未开启,请参见 [订阅非好友用户资料](https://cloud.tencent.com/document/product/269/75416#53edea52-35ef-4d82-aae9-941ba690f051),登录 [IM 控制台](https://console.tencentcloud.com/im) 开启该功能。
// 关系链错误码
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_ALREADY_FRIENDS = 30015, ///< 已经存在好友关系。
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_FRIENDSHIP_SELF_FOLLOWING_COUNT_EXCEEDS_LIMIT = 32100, ///< 自己的关注数量到达上限。
ERR_SVR_FRIENDSHIP_PEER_FOLLOWERS_COUNT_EXCEEDS_LIMIT = 32101, ///< 对方的粉丝数量到达上限。
ERR_SVR_FRIENDSHIP_SELF_MUTUAL_FOLLOWERS_COUNT_EXCEEDS_LIMIT = 32102, ///< 自己的互关数量到达上限。
ERR_SVR_FRIENDSHIP_PEER_MUTUAL_FOLLOWERS_COUNT_EXCEEDS_LIMIT = 32103, ///< 对方的互关数量到达上限。
// 最近联系人错误码
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_REACTION_COUNT_LIMIT = 23005, ///< 单条消息 Reaction 数量超过最大限制。
ERR_SVR_MSG_REACTION_USER_COUNT_LIMIT = 23006, ///< 单个 Reaction 用户数量超过最大限制。
ERR_SVR_MSG_REACTION_ALREADY_CONTAIN_USER = 23007, ///< Reaction 已经包含当前操作用户。
ERR_SVR_MSG_REACTION_NOT_EXISTS = 23008, ///< Reaction 不存在。
ERR_SVR_MSG_REACTION_NOT_CONTAIN_USER = 23009, ///< Reaction 不包含当前操作用户。
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_GROUP_PINNED_MESSAGE_COUNT_LIMIT = 10070, ///< 置顶消息超出数量限制。
ERR_SVR_GROUP_MESSAGE_ALREADY_PINNED = 10071, ///< 消息已经被置顶。
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,111 @@
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 IMSDK
//
// 模块名称V2TIMManager+APNS
//
// 消息推送接口,里面包含了消息的推送的开启逻辑
//
/////////////////////////////////////////////////////////////////////
#import "V2TIMManager.h"
@class V2TIMAPNSConfig;
V2TIM_EXPORT @protocol V2TIMAPNSListener;
V2TIM_EXPORT @interface V2TIMManager (APNS)
/////////////////////////////////////////////////////////////////////////////////
//
// 设置 APNS 推送
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 1.1 设置 APNS 监听
*/
- (void)setAPNSListener:(_Nullable id<V2TIMAPNSListener>)apnsListener NS_SWIFT_NAME(setAPNSListener(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* _Nullable)config succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setAPNS(config:succ: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,482 @@
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 IMSDK
//
// 模块名称V2TIMManager+Community
//
// 社群接口,里面包含了创建话题、删除话题、修改话题、获取话题列表等逻辑
//
/////////////////////////////////////////////////////////////////////
#import "V2TIMManager.h"
#import "V2TIMManager+Group.h"
V2TIM_EXPORT @protocol V2TIMCommunityListener;
@class V2TIMTopicInfo;
@class V2TIMTopicInfoResult;
@class V2TIMTopicOperationResult;
@class V2TIMPermissionGroupInfo;
@class V2TIMPermissionGroupOperationResult;
@class V2TIMPermissionGroupInfoResult;
@class V2TIMPermissionGroupMemberOperationResult;
@class V2TIMPermissionGroupMemberInfoResult;
@class V2TIMTopicPermissionOperationResult;
@class V2TIMTopicPermissionResult;
V2TIM_EXPORT @interface V2TIMManager (Community)
/// 操作话题列表结果
typedef void(^V2TIMTopicOperationResultSucc)(NSMutableArray<V2TIMTopicOperationResult *> *resultList);
/// 获取话题列表结果
typedef void(^V2TIMTopicInfoResultListSucc)(NSMutableArray<V2TIMTopicInfoResult *> *resultList);
/// 创建话题成功回调
typedef void (^V2TIMCreateTopicSucc)(NSString * _Nullable topicID);
/// 创建权限组成功回调
typedef void (^V2TIMCreatePermissionGroupSucc)(NSString * _Nullable permissionGroupID);
/// 操作权限组结果
typedef void (^V2TIMPermissionGroupOperationResultSucc)(NSMutableArray<V2TIMPermissionGroupOperationResult *> *resultList);
/// 获取权限组列表结果
typedef void (^V2TIMPermissionGroupInfoResultListSucc)(NSMutableArray<V2TIMPermissionGroupInfoResult *> *resultList);
/// 操作权限组成员结果
typedef void (^V2TIMPermissionGroupMemberOperationResultListSucc)(NSMutableArray<V2TIMPermissionGroupMemberOperationResult *> *resultList);
/// 获取权限组成员结果
typedef void (^V2TIMPermissionGroupMemberInfoResultListSucc)(NSString * _Nullable nextCursor, NSMutableArray<V2TIMGroupMemberFullInfo *> *resultList);
/// 获取话题权限结果
typedef void (^V2TIMTopicPermissionResultSucc)(NSMutableArray<V2TIMTopicPermissionResult *> *resultList);
/// 社群权限值
typedef NS_ENUM(NSInteger, V2TIMCommunityPermissionValue) {
V2TIM_COMMUNITY_PERMISSION_MANAGE_GROUP_INFO = 0x1, ///< 修改群资料权限。该位设置为0表示没有该权限设置为1表示有该权限。
V2TIM_COMMUNITY_PERMISSION_MANAGE_GROUP_MEMBER = 0x1 << 1, ///< 群成员管理权限包含踢人进群审核、修改成员资料等。该位设置为0表示没有该权限设置为1表示有该权限。
V2TIM_COMMUNITY_PERMISSION_MANAGE_PERMISSION_GROUP_INFO = 0x1 << 2, ///< 管理权限组资料权限。该位设置为0表示没有该权限设置为1表示有该权限。权限包含创建、修改、删除权限组在权限组中添加、修改、删除话题权限。
V2TIM_COMMUNITY_PERMISSION_MANAGE_PERMISSION_GROUP_MEMBER = 0x1 << 3, ///< 权限组成员管理权限包含邀请成员进权限组和把成员从权限组踢出等。该位设置为0表示没有该权限设置为1表示有该权限。
V2TIM_COMMUNITY_PERMISSION_MANAGE_TOPIC_IN_COMMUNITY = 0x1 << 4, ///< 话题管理权限包含创建、修改、删除话题等。该位设置为0表示没有该权限设置为1表示有该权限。
V2TIM_COMMUNITY_PERMISSION_MUTE_MEMBER = 0x1 << 5, ///< 对某群成员在社群下所有话题的禁言权限。该位设置为0表示没有该权限设置为1表示有该权限。
V2TIM_COMMUNITY_PERMISSION_SEND_MESSAGE = 0x1 << 6, ///< 群成员在社群下所有话题的发消息权限。该位设置为0表示没有该权限设置为1表示有该权限。
V2TIM_COMMUNITY_PERMISSION_AT_ALL = 0x1 << 7, ///< 在社群下所有话题发 at all 消息权限。该位设置为0表示没有该权限设置为1表示有该权限。
V2TIM_COMMUNITY_PERMISSION_GET_HISTORY_MESSAGE = 0x1 << 8, ///< 在社群下所有话题拉取入群前的历史消息权限。该位设置为0表示没有该权限设置为1表示有该权限。
V2TIM_COMMUNITY_PERMISSION_REVOKE_OTHER_MEMBER_MESSAGE = 0x1 << 9, ///< 在社群下所有话题撤回他人消息权限。该位设置为0表示没有该权限设置为1表示有该权限。
V2TIM_COMMUNITY_PERMISSION_BAN_MEMBER = 0x1 << 10, ///< 封禁社群成员权限。该位设置为0表示没有该权限设置为1表示有该权限。
};
/// 话题权限值
typedef NS_ENUM(NSInteger, V2TIMTopicPermissionValue) {
V2TIM_TOPIC_PERMISSION_MANAGE_TOPIC = 0x1, ///< 管理当前话题的权限包括修改当前话题的资料、删除当前话题。该位设置为0表示没有该权限设置为1表示有该权限
V2TIM_TOPIC_PERMISSION_MANAGE_TOPIC_PERMISSION = 0x1 << 1, ///< 在当前话题中管理话题权限包括添加、修改、移除话题权限。该位设置为0表示没有该权限设置为1表示有该权限
V2TIM_TOPIC_PERMISSION_MUTE_MEMBER = 0x1 << 2, ///< 在当前话题中禁言成员权限。该位设置为0表示没有该权限设置为1表示有该权限
V2TIM_TOPIC_PERMISSION_SEND_MESSAGE = 0x1 << 3, ///< 在当前话题中发消息权限。该位设置为0表示没有该权限设置为1表示有该权限
V2TIM_TOPIC_PERMISSION_GET_HISTORY_MESSAGE = 0x1 << 4, ///< 在当前话题中拉取入群前的历史消息权限。该位设置为0表示没有该权限设置为1表示有该权限
V2TIM_TOPIC_PERMISSION_REVOKE_OTHER_MEMBER_MESSAGE = 0x1 << 5, ///< 在当前话题中撤回他人消息权限。该位设置为0表示没有该权限设置为1表示有该权限
V2TIM_TOPIC_PERMISSION_AT_ALL = 0x1 << 6, ///< 在当前话题中发消息时有 at all 权限。该位设置为0表示没有该权限设置为1表示有该权限
};
/////////////////////////////////////////////////////////////////////////////////
//
// 社群监听器
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 1.1 添加社群监听器
*/
- (void)addCommunityListener:(id<V2TIMCommunityListener>)listener NS_SWIFT_NAME(addCommunityListener(listener:));
/**
* 1.2 移除社群监听器
*/
- (void)removeCommunityListener:(id<V2TIMCommunityListener>)listener NS_SWIFT_NAME(removeCommunityListener(listener:));
/////////////////////////////////////////////////////////////////////////////////
//
// 社群接口
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 2.1 创建支持话题的社群
*/
- (void)createCommunity:(V2TIMGroupInfo*)info memberList:(NSArray<V2TIMCreateGroupMemberInfo *>* _Nullable)memberList succ:(V2TIMCreateGroupSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(createCommunity(info:memberList:succ:fail:));
/**
* 2.1 获取当前用户已经加入的支持话题的社群列表
*/
- (void)getJoinedCommunityList:(V2TIMGroupInfoListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getJoinedCommunityList(succ:fail:));
/**
* 2.2 创建话题
*
* @param groupID 社群 ID必须以 @TGS#_ 开头。
*/
- (void)createTopicInCommunity:(NSString *)groupID topicInfo:(V2TIMTopicInfo *)topicInfo succ:(V2TIMCreateTopicSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(createTopicInCommunity(groupID:topicInfo:succ:fail:));
/**
* 2.3 删除话题
*/
- (void)deleteTopicFromCommunity:(NSString *)groupID topicIDList:(NSArray<NSString *>*)topicIDList succ:(V2TIMTopicOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(deleteTopicFromCommunity(groupID:topicIDList:succ:fail:));
/**
* 2.4 修改话题信息
*/
- (void)setTopicInfo:(V2TIMTopicInfo *)topicInfo succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setTopicInfo(topicInfo:succ:fail:));
/**
* 2.5 获取话题列表。
* @note: topicIDList 传空时,获取此社群下的所有话题列表
*/
- (void)getTopicInfoList:(NSString *)groupID topicIDList:(NSArray<NSString *>* _Nullable)topicIDList succ:(V2TIMTopicInfoResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getTopicInfoList(groupID:topicIDList:succ:fail:));
/////////////////////////////////////////////////////////////////////////////////
//
// 权限组接口
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 3.1 创建社群权限组7.8 及其以上版本支持)
* @note
* - 该功能为旗舰版功能,需要您购买旗舰版套餐。
*/
- (void)createPermissionGroupInCommunity:(V2TIMPermissionGroupInfo *)permissionGroupInfo succ:(V2TIMCreatePermissionGroupSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(createPermissionGroupInCommunity(permissionGroupInfo:succ:fail:));
/**
* 3.2 删除社群权限组7.8 及其以上版本支持)
* @note
* - 该功能为旗舰版功能,需要您购买旗舰版套餐。
*/
- (void)deletePermissionGroupFromCommunity:(NSString *)groupID permissionGroupIDList:(NSArray<NSString *>*)permissionGroupIDList succ:(V2TIMPermissionGroupOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(deletePermissionGroupFromCommunity(groupID:permissionGroupIDList:succ:fail:));
/**
* 3.3 修改社群权限组7.8 及其以上版本支持)
* @note
* - 该功能为旗舰版功能,需要您购买旗舰版套餐。
*/
- (void)modifyPermissionGroupInfoInCommunity:(V2TIMPermissionGroupInfo *)permissionGroupInfo succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(modifyPermissionGroupInfoInCommunity(permissionGroupInfo:succ:fail:));
/**
* 3.4 获取已加入的社群权限组列表7.8 及其以上版本支持)
* @note
* - 该功能为旗舰版功能,需要您购买旗舰版套餐。
*/
- (void)getJoinedPermissionGroupListInCommunity:(NSString *)groupID succ:(V2TIMPermissionGroupInfoResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getJoinedPermissionGroupListInCommunity(groupID:succ:fail:));
/**
* 3.5 获取社群权限组列表7.8 及其以上版本支持)
* @note
* - 该功能为旗舰版功能,需要您购买旗舰版套餐。
* - permissionGroupIDList 为空时,获取所有的权限组列表;不为空时,获取指定的权限组列表
*/
- (void)getPermissionGroupListInCommunity:(NSString *)groupID permissionGroupIDList:(NSArray<NSString *>* _Nullable)permissionGroupIDList succ:(V2TIMPermissionGroupInfoResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getPermissionGroupListInCommunity(groupID:permissionGroupIDList:succ:fail:));
/**
* 3.6 向社群权限组添加成员7.7 及其以上版本支持)
* @note
* - 该功能为旗舰版功能,需要您购买旗舰版套餐。
*/
- (void)addCommunityMembersToPermissionGroup:(NSString *)groupID permissionGroupID:(NSString *)permissionGroupID memberList:(NSArray<NSString *>*)memberList succ:(V2TIMPermissionGroupMemberOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(addCommunityMembersToPermissionGroup(groupID:permissionGroupID:memberList:succ:fail:));
/**
* 3.7 从社群权限组删除成员7.8 及其以上版本支持)
*/
- (void)removeCommunityMembersFromPermissionGroup:(NSString *)groupID permissionGroupID:(NSString *)permissionGroupID memberList:(NSArray<NSString *>*)memberList succ:(V2TIMPermissionGroupMemberOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(removeCommunityMembersFromPermissionGroup(groupID:permissionGroupID:memberList:succ:fail:));
/**
* 3.8 获取社群权限组成员列表7.8 及其以上版本支持)
* @note
* - 该功能为旗舰版功能,需要您购买旗舰版套餐。
*/
- (void)getCommunityMemberListInPermissionGroup:(NSString *)groupID permissionGroupID:(NSString *)permissionGroupID nextCursor:(NSString * _Nullable)nextCursor succ:(V2TIMPermissionGroupMemberInfoResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getCommunityMemberListInPermissionGroup(groupID:permissionGroupID:nextCursor:succ:fail:));
/**
* 3.9 向权限组添加话题权限7.8 及其以上版本支持)
* @note
* - 该功能为旗舰版功能,需要您购买旗舰版套餐。
*/
- (void)addTopicPermissionToPermissionGroup:(NSString *)groupID permissionGroupID:(NSString *)permissionGroupID topicPermissionMap:(NSDictionary<NSString *, NSNumber *>*)topicPermissionMap succ:(V2TIMTopicOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(addTopicPermissionToPermissionGroup(groupID:permissionGroupID:topicPermissionMap:succ:fail:));
/**
* 3.10 从权限组中删除话题权限7.8 及其以上版本支持)
* @note
* - 该功能为旗舰版功能,需要您购买旗舰版套餐。
*/
- (void)deleteTopicPermissionFromPermissionGroup:(NSString *)groupID permissionGroupID:(NSString *)permissionGroupID topicIDList:(NSArray<NSString *>*)topicIDList succ:(V2TIMTopicOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(deleteTopicPermissionFromPermissionGroup(groupID:permissionGroupID:topicIDList:succ:fail:));
/**
* 3.11 修改权限组中的话题权限7.8 及其以上版本支持)
* @note
* - 该功能为旗舰版功能,需要您购买旗舰版套餐。
*/
- (void)modifyTopicPermissionInPermissionGroup:(NSString *)groupID permissionGroupID:(NSString *)permissionGroupID topicPermissionMap:(NSDictionary<NSString *, NSNumber *>*)topicPermissionMap succ:(V2TIMTopicOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(modifyTopicPermissionInPermissionGroup(groupID:permissionGroupID:topicPermissionMap:succ:fail:));
/**
* 3.12 获取权限组中的话题权限7.8 及其以上版本支持)
* @note
* - 该功能为旗舰版功能,需要您购买旗舰版套餐。
*/
- (void)getTopicPermissionInPermissionGroup:(NSString *)groupID permissionGroupID:(NSString *)permissionGroupID topicIDList:(NSArray<NSString *>*)topicIDList succ:(V2TIMTopicPermissionResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getTopicPermissionInPermissionGroup(groupID:permissionGroupID:topicIDList:succ:fail:));
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 社群回调
//
/////////////////////////////////////////////////////////////////////////////////
/// 资料关系链回调
V2TIM_EXPORT @protocol V2TIMCommunityListener <NSObject>
@optional
/// 话题创建回调
- (void)onCreateTopic:(NSString * _Nullable)groupID topicID:(NSString * _Nullable)topicID NS_SWIFT_NAME(onCreateTopic(groupID:topicID:));
/// 话题被删除回调
- (void)onDeleteTopic:(NSString * _Nullable)groupID topicIDList:(NSArray<NSString *> *)topicIDList NS_SWIFT_NAME(onDeleteTopic(groupID:topicIDList:));
/// 话题更新回调
- (void)onChangeTopicInfo:(NSString * _Nullable)groupID topicInfo:(V2TIMTopicInfo *)topicInfo NS_SWIFT_NAME(onChangeTopicInfo(groupID:topicInfo:));
/// 收到 RESTAPI 下发的话题自定义系统消息
- (void)onReceiveTopicRESTCustomData:(NSString * _Nullable)topicID data:(NSData * _Nullable)data NS_SWIFT_NAME(onReceiveTopicRESTCustomData(topicID:data:));
/// 权限组创建通知
- (void)onCreatePermissionGroup:(NSString * _Nullable)groupID permissionGroupInfo:(V2TIMPermissionGroupInfo *)permissionGroupInfo NS_SWIFT_NAME(onCreatePermissionGroup(groupID:permissionGroupInfo:));
/// 权限组删除通知
- (void)onDeletePermissionGroup:(NSString * _Nullable)groupID permissionGroupIDList:(NSArray<NSString *> *)permissionGroupIDList NS_SWIFT_NAME(onDeletePermissionGroup(groupID:permissionGroupIDList:));
/// 权限组更新通知
- (void)onChangePermissionGroupInfo:(NSString * _Nullable)groupID permissionGroupInfo:(V2TIMPermissionGroupInfo *)permissionGroupInfo NS_SWIFT_NAME(onChangePermissionGroupInfo(groupID:permissionGroupInfo:));
/// 添加成员到权限组通知
- (void)onAddMembersToPermissionGroup:(NSString * _Nullable)groupID permissionGroupID:(NSString * _Nullable)permissionGroupID memberIDList:(NSArray<NSString *> *)memberIDList NS_SWIFT_NAME(onAddMembersToPermissionGroup(groupID:permissionGroupID:memberIDList:));
/// 从权限组中删除成员通知
- (void)onRemoveMembersFromPermissionGroup:(NSString * _Nullable)groupID permissionGroupID:(NSString * _Nullable)permissionGroupID memberIDList:(NSArray<NSString *> *)memberIDList NS_SWIFT_NAME(onRemoveMembersFromPermissionGroup(groupID:permissionGroupID:memberIDList:));
/// 话题权限添加通知
- (void)onAddTopicPermission:(NSString * _Nullable)groupID permissionGroupID:(NSString * _Nullable)permissionGroupID topicPermissionMap:(NSDictionary<NSString *, NSNumber *>*)topicPermissionMap NS_SWIFT_NAME(onAddTopicPermission(groupID:permissionGroupID:topicPermissionMap:));
/// 话题权限删除通知
- (void)onDeleteTopicPermission:(NSString * _Nullable)groupID permissionGroupID:(NSString * _Nullable)permissionGroupID topicIDList:(NSArray<NSString *>*)topicIDList NS_SWIFT_NAME(onDeleteTopicPermission(groupID:permissionGroupID:topicIDList:));
/// 话题权限修改通知
- (void)onModifyTopicPermission:(NSString * _Nullable)groupID permissionGroupID:(NSString * _Nullable)permissionGroupID topicPermissionMap:(NSDictionary<NSString *, NSNumber *>*)topicPermissionMap NS_SWIFT_NAME(onModifyTopicPermission(groupID:permissionGroupID:topicPermissionMap:));
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 话题基本资料
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMTopicInfo : NSObject
/// 话题 ID只能在创建话题或者修改话题信息的时候设置。组成方式为社群 ID + @TOPIC#_xxx例如社群 ID 为 @TGS#_123则话题 ID 为 @TGS#_123@TOPIC#_xxx
@property(nonatomic, strong, nullable) NSString *topicID;
/// 话题类型(默认为 Public 话题)(从 8.4 版本开始支持)
/// "Public" :公开话题,社群内成员可以自由进出发言。
/// "Private" :私密话题,有自己的成员列表(成员上限 10000 人),社群成员需要加入话题才能发言(私密话题需要购买企业版套餐包)。
@property(nonatomic, strong, nullable) NSString *topicType;
/// 话题名称,最长 150 字节,使用 UTF-8 编码
@property(nonatomic, strong, nullable) NSString *topicName;
/// 话题头像,最长 500 字节,使用 UTF-8 编码
@property(nonatomic, strong, nullable) NSString *topicFaceURL;
/// 话题介绍,最长 400 字节,使用 UTF-8 编码
@property(nonatomic, strong, nullable) NSString *introduction;
/// 话题公告,最长 400 字节,使用 UTF-8 编码
@property(nonatomic, strong, nullable) NSString *notification;
/// 话题全员禁言
@property(nonatomic, assign) BOOL isAllMuted;
/// 当前用户在话题中的禁言时间,单位:秒
@property(nonatomic, assign, readonly) uint32_t selfMuteTime;
/// 话题自定义字段
@property(nonatomic, strong, nullable) NSString *customString;
/// 话题消息接收选项,修改话题消息接收选项请调用 setGroupReceiveMessageOpt 接口
@property(nonatomic, assign, readonly) V2TIMReceiveMessageOpt recvOpt;
/// 话题草稿
@property(nonatomic, strong, nullable) NSString *draftText;
/// 话题消息未读数量
@property(nonatomic, assign, readonly) uint64_t unreadCount;
/// 话题 lastMessage
@property(nonatomic,strong,readonly, nullable) V2TIMMessage *lastMessage;
/// 话题已读消息的 sequence从 7.8 版本开始支持
@property(nonatomic, assign, readonly) uint64_t readSequence;
/// 话题 at 信息列表
@property(nonatomic, strong, readonly, nullable) NSArray<V2TIMGroupAtInfo *> *groupAtInfolist;
/// 话题创建时间,单位:秒
@property(nonatomic, assign, readonly) uint32_t createTime;
/// 申请加入话题是否需要管理员审批(私密话题有效,默认不需要审批,可以自由加入)(从 8.4 版本开始支持)
@property(nonatomic, assign) V2TIMGroupAddOpt topicAddOpt;
/// 邀请加入话题是否需要管理员审批(私密话题有效,默认不需要审批,可以自由加入)(从 8.4 版本开始支持)
@property(nonatomic, assign) V2TIMGroupAddOpt topicApproveOpt;
/// 话题默认群成员(私密话题有效,最大支持 100 个群成员,只能在创建话题的时候设置)(从 8.4 版本开始支持)
@property(nonatomic, strong, nullable) NSArray<V2TIMCreateGroupMemberInfo *> *memberList;
/// 话题成员的最大个数(私密话题有效,最大支持 10000默认 10000只能在创建话题的时候设置从 8.4 版本开始支持)
@property(nonatomic, assign) uint32_t memberMaxCount;
/// 话题默认权限7.8 版本开始支持
/// 群成员在没有加入任何权限组时的默认权限,仅在社群资料 V2TIMGroupInfo 中 enablePermissionGroup = true 打开权限组之后生效
@property(nonatomic, assign) uint64_t defaultPermissions;
/// 登录用户在话题中的消息接收选项是否继承社群。该功能仅增强版 SDK 8.1 及以上版本支持。
- (BOOL)isInheritMessageReceiveOptionFromCommunity;
/**
* 设置登录用户在话题中的消息接收选项是否继承社群。该功能仅增强版 SDK 8.1 及以上版本支持。
*/
- (void)setInheritMessageReceiveOptionFromCommunity:(BOOL)isInherit succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 话题处理结果
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMTopicOperationResult : NSObject
/// 结果 0成功非0失败
@property(nonatomic, assign) int errorCode;
/// 错误信息
@property(nonatomic, strong, nullable) NSString *errorMsg;
/// 话题 ID
@property(nonatomic, strong, nullable) NSString *topicID;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 话题资料获取结果
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMTopicInfoResult : NSObject
/// 结果 0成功非0失败
@property(nonatomic, assign) int errorCode;
/// 错误信息
@property(nonatomic, strong, nullable) NSString *errorMsg;
/// 话题资料
@property(nonatomic, strong) V2TIMTopicInfo *topicInfo;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 权限组信息
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMPermissionGroupInfo : NSObject
/// 群 ID
@property(nonatomic, strong, nullable) NSString *groupID;
/// 权限组 ID
@property(nonatomic, strong, nullable) NSString *permissionGroupID;
/// 权限组名称
@property(nonatomic, strong, nullable) NSString *permissionGroupName;
/// 群权限
@property(nonatomic, assign) uint64_t groupPermission;
/// 自定义数据
@property(nonatomic, strong, nullable) NSString *customData;
/// 成员人数
@property(nonatomic, assign, readonly) uint64_t memberCount;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 权限组信息获取结果
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMPermissionGroupInfoResult : NSObject
/// 结果 0成功非0失败
@property(nonatomic,assign) int resultCode;
/// 如果获取失败,会返回错误信息
@property(nonatomic,strong,nullable) NSString *resultMsg;
/// 如果获取成功,会返回对应的 info
@property(nonatomic,strong) V2TIMPermissionGroupInfo *info;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 权限组处理结果
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMPermissionGroupOperationResult : NSObject
/// 结果 0成功非0失败
@property(nonatomic,assign) int resultCode;
/// 如果获取失败,会返回错误信息
@property(nonatomic,strong,nullable) NSString *resultMsg;
/// 如果获取成功,会返回对应的 info
@property(nonatomic,strong,nullable) NSString *permissionGroupID;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 权限组成员处理结果
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMPermissionGroupMemberOperationResult : NSObject
/// 成员 userID
@property(nonatomic,strong,nullable) NSString *memberID;
/// 结果 0成功非0失败
@property(nonatomic,assign) int resultCode;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 话题权限获取结果
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMTopicPermissionResult : NSObject
/// 话题
@property(nonatomic,strong,nullable) NSString *topicID;
/// 结果 0成功非0失败
@property(nonatomic,assign) int resultCode;
/// 如果获取失败,会返回错误信息
@property(nonatomic,strong,nullable) NSString *resultMsg;
/// 话题权限
@property(nonatomic,assign) uint64_t topicPermission;
/// 社群 ID
@property(nonatomic,strong,nullable) NSString *groupID;
/// 权限组 ID
@property(nonatomic,strong,nullable) NSString *permissionGroupID;
@end

View File

@@ -0,0 +1,505 @@
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 IMSDK
//
// 模块名称V2TIMManager+Conversation
//
// 会话接口,里面包含了会话的获取,删除,更新的逻辑
//
/////////////////////////////////////////////////////////////////////
#import "V2TIMManager.h"
#import "V2TIMManager+Group.h"
#import "V2TIMManager+Message.h"
V2TIM_EXPORT @protocol V2TIMConversationListener;
@class V2TIMConversation;
@class V2TIMConversationListFilter;
@class V2TIMConversationOperationResult;
@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 NS_SWIFT_NAME(getConversationList(nextSeq:count:succ: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 NS_SWIFT_NAME(getConversation(conversationID:succ: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 NS_SWIFT_NAME(getConversationList(conversationIDList:succ: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 NS_SWIFT_NAME(getConversationListByFilter(filter:nextSeq:count:succ:fail:));
/**
* 1.7 删除会话以及该会话中的历史消息
*
* @param conversationID 会话唯一 IDC2C 单聊组成方式:[NSString stringWithFormat:@"c2c_%@",userID];群聊组成方式为 [NSString stringWithFormat:@"group_%@",groupID]
*
* @note
* - 该会话以及会话中的历史消息,会被 SDK 从本地和服务端一同删除掉,并且不可恢复。
*/
- (void)deleteConversation:(NSString *)conversationID succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(deleteConversation(conversation:succ: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 NS_SWIFT_NAME(deleteConversationList(conversationIDList:clearMessage:succ:fail:));
/**
* 1.9 设置会话草稿
*
* @param conversationID 会话唯一 IDC2C 单聊组成方式:[NSString stringWithFormat:@"c2c_%@",userID];群聊组成方式为 [NSString stringWithFormat:@"group_%@",groupID]
*
* 只在本地保存,不会存储 Server不能多端同步程序卸载重装会失效。
*/
- (void)setConversationDraft:(NSString *)conversationID draftText:(NSString * _Nullable)draftText succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setConversationDraft(conversationID:draftText:succ:fail:));
/**
* 1.10 设置会话自定义数据(从 6.5 版本开始支持)
*
* @param customData 自定义数据,最大支持 256 bytes
*/
- (void)setConversationCustomData:(NSArray<NSString *> *)conversationIDList customData:(NSData * _Nullable)customData succ:(V2TIMConversationOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(setConversationCustomData(conversationIDList:customData:succ: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:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(pinConversation(conversationID:isPinned:succ: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 NS_SWIFT_NAME(markConversation(conversationIDList:markType:enableMark:succ:fail:));
/**
* 1.13 获取所有会话的未读消息总数5.3.425 及以上版本支持)
* @note
* - 调用该接口以后任意会话的未读数发生变化时SDK 都会给您抛 onTotalUnreadMessageCountChanged 回调。
* - 未读总数会减去设置为免打扰的会话的未读数,即消息接收选项设置为 V2TIMMessage.V2TIM_NOT_RECEIVE_MESSAGE 或 V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE 或 V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE_EXCEPT_AT 的会话。
*/
- (void)getTotalUnreadMessageCount:(V2TIMTotalUnreadMessageCountSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getTotalUnreadMessageCount(succ:fail:));
/**
* 1.14 获取根据 filter 过滤的会话未读总数7.0 及以上版本支持)
*
* @param filter 会话 filter
*
* @note
* - 未读总数会减去设置为免打扰的会话的未读数,即消息接收选项设置为 V2TIMMessage.V2TIM_NOT_RECEIVE_MESSAGE 或 V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE 或 V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE_EXCEPT_AT 的会话。
*/
- (void)getUnreadMessageCountByFilter:(V2TIMConversationListFilter *)filter succ:(V2TIMTotalUnreadMessageCountSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getUnreadMessageCountByFilter(filter:succ:fail:));
/**
* 1.15 注册监听指定 filter 的会话未读总数变化7.0 及以上版本支持)
*
* @param filter 会话 filter
*
* @note
* - 当您调用这个接口以后,该 filter 下的未读数发生变化时SDK 会给您抛 onUnreadMessageCountChangedByFilter 回调。
*/
- (void)subscribeUnreadMessageCountByFilter:(V2TIMConversationListFilter *)filter NS_SWIFT_NAME(subscribeUnreadMessageCountByFilter(filter:));
/**
* 1.16 取消监听指定 filter 的会话未读总数变化7.0 及以上版本支持)
*
* @param filter 会话 filter
*
*/
- (void)unsubscribeUnreadMessageCountByFilter:(V2TIMConversationListFilter *)filter NS_SWIFT_NAME(unsubscribeUnreadMessageCountByFilter(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 * _Nullable)conversationID cleanTimestamp:(uint64_t)cleanTimestamp cleanSequence:(uint64_t)cleanSequence succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(cleanConversationUnreadMessageCount(conversationID:cleanTimestamp:cleanSequence:succ:fail:));
/**
* 1.18 设置会话监听器(待废弃接口,请使用 addConversationListener 和 removeConversationListener 接口)
*/
- (void)setConversationListener:(id<V2TIMConversationListener>)listener NS_SWIFT_NAME(setConversationListener(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 NS_SWIFT_NAME(createConversationGroup(groupName:conversationIDList:succ:fail:));
/**
* 2.2 获取会话分组列表
*
* @note 该接口获取的是本地缓存的会话分组,建议在 onSyncServerFinish 之后调用。
*/
- (void)getConversationGroupList:(V2TIMConversationGroupListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getConversationGroupList(succ:fail:));
/**
* 2.3 删除会话分组
*/
- (void)deleteConversationGroup:(NSString *)groupName succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(deleteConversationGroup(groupName:succ:fail:));
/**
* 2.4 重命名会话分组
*/
- (void)renameConversationGroup:(NSString*)oldName newName:(NSString*)newName succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(renameConversationGroup(oldName:newName:succ:fail:));
/**
* 2.5 添加会话到一个会话分组
*/
- (void)addConversationsToGroup:(NSString *)groupName conversationIDList:(NSArray<NSString *> *)conversationIDList succ:(V2TIMConversationOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(addConversationsToGroup(groupName:conversationIDList:succ:fail:));
/**
* 2.6 从一个会话分组中删除会话
*/
- (void)deleteConversationsFromGroup:(NSString *)groupName conversationIDList:(NSArray<NSString *> *)conversationIDList succ:(V2TIMConversationOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(deleteConversationsFromGroup(groupName:conversationIDList:succ:fail:));
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 会话变更监听器
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @protocol V2TIMConversationListener <NSObject>
@optional
/////////////////////////////////////////////////////////////////////////////////
// 会话基础通知
/////////////////////////////////////////////////////////////////////////////////
/**
* 同步服务器会话开始SDK 会在登录成功或者断网重连后自动同步服务器会话,您可以监听这个事件做一些 UI 进度展示操作。
*/
- (void)onSyncServerStart;
/**
* 同步服务器会话完成,如果会话有变更,会通过 onNewConversation | onConversationChanged 回调告知客户
*/
- (void)onSyncServerFinish;
/**
* 同步服务器会话失败
*/
- (void)onSyncServerFailed;
/**
* 有新的会话(比如收到一个新同事发来的单聊消息、或者被拉入了一个新的群组中),可以根据会话的 orderKey 重新对会话列表做排序。
*/
- (void)onNewConversation:(NSArray<V2TIMConversation*> *) conversationList NS_SWIFT_NAME(onNewConversation(conversationList:));
/**
* 某些会话的关键信息发生变化(未读计数发生变化、最后一条消息被更新等等),可以根据会话的 orderKey 重新对会话列表做排序。
*/
- (void)onConversationChanged:(NSArray<V2TIMConversation*> *) conversationList NS_SWIFT_NAME(onConversationChanged(conversationList:));
/**
* 会话被删除的通知7.2 及以上版本支持)
*
* @note
* conversationIDList 表示被删除的会话唯一 ID 列表。C2C 单聊组成方式:[NSString stringWithFormat:@"c2c_%@",userID];群聊组成方式为 [NSString stringWithFormat:@"group_%@",groupID]
*/
- (void)onConversationDeleted:(NSArray<NSString *> *)conversationIDList NS_SWIFT_NAME(onConversationDeleted(conversationIDList:));
/**
* 全部会话未读总数变更的通知5.3.425 及以上版本支持)
* @note
* - 当您调用 getTotalUnreadMessageCount 获取全部会话未读总数以后任意会话的未读数发生变化时SDK 都会通过该回调把最新的未读总数通知给您。
* - 未读总数会减去设置为免打扰的会话的未读数,即消息接收选项设置为 V2TIMMessage.V2TIM_NOT_RECEIVE_MESSAGE 或 V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE 或 V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE_EXCEPT_AT 的会话。
*/
- (void)onTotalUnreadMessageCountChanged:(UInt64)totalUnreadCount NS_SWIFT_NAME(onTotalUnreadMessageCountChanged(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 或 V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE_EXCEPT_AT 的会话。
*/
- (void)onUnreadMessageCountChangedByFilter:(V2TIMConversationListFilter *)filter totalUnreadCount:(UInt64)totalUnreadCount NS_SWIFT_NAME(onUnreadMessageCountChangedByFilter(filter:totalUnreadCount:));
/////////////////////////////////////////////////////////////////////////////////
// 会话分组相关通知(从 6.5 版本开始支持)
/////////////////////////////////////////////////////////////////////////////////
/**
* 会话分组被创建
*/
- (void)onConversationGroupCreated:(NSString * _Nullable)groupName conversationList:(NSArray<V2TIMConversation *> *)conversationList NS_SWIFT_NAME(onConversationGroupCreated(groupName:conversationList:));
/**
* 会话分组被删除
*/
- (void)onConversationGroupDeleted:(NSString * _Nullable)groupName NS_SWIFT_NAME(onConversationGroupDeleted(groupName:));
/**
* 会话分组名变更
*/
- (void)onConversationGroupNameChanged:(NSString * _Nullable)oldName newName:(NSString * _Nullable)newName NS_SWIFT_NAME(onConversationGroupNameChanged(oldName:newName:));
/**
* 会话分组新增会话
*/
- (void)onConversationsAddedToGroup:(NSString * _Nullable)groupName conversationList:(NSArray<V2TIMConversation *> *)conversationList NS_SWIFT_NAME(onConversationsAddedToGroup(groupName:conversationList:));
/**
* 会话分组删除会话
* @note
* - reason 表示会话从所在分组删除的原因,其取值有:
* - 当 reason 为 0 时,表示由用户主动调用 deleteConversationsFromGroup 触发
* - 当 reason 为 1 时,表示添加到分组的会话数量超过 1000最早添加进分组的会话被淘汰
*/
- (void)onConversationsDeletedFromGroup:(NSString * _Nullable)groupName conversationList:(NSArray<V2TIMConversation *> *)conversationList reason:(uint32_t)reason NS_SWIFT_NAME(onConversationsDeletedFromGroup(groupName:conversationList:reason:));
/**
* 会话分组删除会话(待废弃接口,请使用 onConversationsDeletedFromGroup:conversationList:reason: 接口)
*/
- (void)onConversationsDeletedFromGroup:(NSString * _Nullable)groupName conversationList:(NSArray<V2TIMConversation *> *)conversationList NS_SWIFT_NAME(onConversationsDeletedFromGroup(groupName:conversationList:)) __attribute__((deprecated("use onConversationsDeletedFromGroup:conversationList:reason: instead")));
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 会话对象 V2TIMConversation
//
/////////////////////////////////////////////////////////////////////////////////
/// 会话对象
V2TIM_EXPORT @interface V2TIMConversation : NSObject
/// 会话类型
@property(nonatomic,assign,readonly) V2TIMConversationType type;
/// 会话唯一 ID如果是 C2C 单聊,组成方式为 c2c_userID如果是群聊组成方式为 group_groupID
@property(nonatomic,strong,readonly,nullable) NSString *conversationID;
/// 如果会话类型为 C2C 单聊userID 会存储对方的用户ID否则为 nil
@property(nonatomic,strong,readonly,nullable) NSString *userID;
/// 如果会话类型为群聊groupID 会存储当前群的群 ID否则为 nil
@property(nonatomic,strong,readonly,nullable) NSString *groupID;
/// 如果会话类型为群聊groupType 为当前群类型,否则为 nil
@property(nonatomic,strong,readonly,nullable) NSString *groupType;
/// 会话展示名称(群组:群名称 >> 群 IDC2C对方好友备注 >> 对方昵称 >> 对方的 userID
@property(nonatomic,strong,readonly,nullable) NSString *showName;
/// 会话展示头像群组群头像C2C对方头像
@property(nonatomic,strong,readonly,nullable) 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,nullable) V2TIMMessage *lastMessage;
/// 群会话 @ 信息列表,用于展示 "有人@我" 或 "@所有人" 这两种提醒状态
@property(nonatomic,strong,readonly,nullable) NSArray<V2TIMGroupAtInfo *> *groupAtInfolist;
/// 草稿信息,设置草稿信息请调用 setConversationDraft() 接口
@property(nonatomic,strong,readonly,nullable) NSString *draftText;
/// 上次设置草稿时的 UTC 时间戳
@property(nonatomic,strong,readonly,nullable) 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,nullable) NSArray<NSNumber *> * markList;
/// 会话自定义数据(从 6.5 版本开始支持)
@property(nonatomic,strong,readonly,nullable) NSData *customData;
/// 会话所属分组列表(从 6.5 版本开始支持)
@property(nonatomic,strong,readonly,nullable) NSArray<NSString *> *conversationGroupList;
/// 最新已读消息的 UTC 时间戳,仅对单聊会话生效(从 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;
/// 会话分组名称
/// 不设置表示不过滤此项,设置为 @"" 代表过滤不属于任何分组的会话
@property(nonatomic,strong,nullable) NSString *conversationGroup;
/// 标记类型,取值详见 @V2TIMConversationMarkType
/// 不设置表示不过滤此项,设置为 0 代表过滤不含任何标记的会话
@property(nonatomic,assign) NSUInteger markType;
/// 会话未读数
/// 不设置表示不过滤此项,设置为 YES 代表过滤含未读数的会话;设置为 NO 代表过滤不含未读数的会话
@property(nonatomic,assign) BOOL hasUnreadCount;
/// 会话 @ 信息
/// 不设置表示不过滤此项,设置为 YES 代表过滤含群 @ 消息的会话;设置为 NO 代表过滤不含群 @ 消息的会话
@property(nonatomic,assign) BOOL hasGroupAtInfo;
@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,nullable) NSString* conversationID;
/// 返回码
@property(nonatomic,assign) NSInteger resultCode;
/// 返回信息
@property(nonatomic,strong,nullable) NSString *resultInfo;
@end

View File

@@ -0,0 +1,838 @@
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 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;
@class V2TIMOfficialAccountInfo;
@class V2TIMOfficialAccountInfoResult;
@class V2TIMFollowOperationResult;
@class V2TIMFollowInfo;
@class V2TIMFollowTypeCheckResult;
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 void (^V2TIMOfficialAccountInfoResultListSucc)(NSArray<V2TIMOfficialAccountInfoResult *> *resultList);
/// 关注/取关用户操作成功的回调
typedef void (^V2TIMFollowOperationResultListSucc)(NSArray<V2TIMFollowOperationResult *> *resultList);
/// 获取自己 关注/粉丝/互关 列表成功的回调
typedef void (^V2TIMUserInfoResultSucc)(NSString * _Nullable nextCursor, NSArray<V2TIMUserFullInfo *> *userInfoList);
/// 获取用户关注数量信息成功的回调
typedef void (^V2TIMFollowInfoResultListSucc)(NSArray<V2TIMFollowInfo *> *resultList);
/// 用户关注类型检查成功回调
typedef void (^V2TIMFollowTypeCheckResultListSucc)(NSArray<V2TIMFollowTypeCheckResult *> *resultList);
/// 好友申请类型
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, ///< 接受加好友并加对方为好友(建立双向好友)
};
/// 关注类型
typedef NS_ENUM(NSInteger, V2TIMFollowType) {
V2TIM_FOLLOW_TYPE_NONE = 0x0, ///< 无任何关注关系
V2TIM_FOLLOW_TYPE_IN_MY_FOLLOWING_LIST = 0x1, ///< 对方在我的关注列表中
V2TIM_FOLLOW_TYPE_IN_MY_FOLLOWERS_LIST = 0x2, ///< 对方在我的粉丝列表中
V2TIM_FOLLOW_TYPE_IN_BOTH_FOLLOWERS_LIST = 0x3, ///< 对方与我互相关注
};
/////////////////////////////////////////////////////////////////////////////////
//
// 关系链和用户资料监听器
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 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 NS_SWIFT_NAME(getFriendList(succ: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:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setFriendInfo(info:succ:fail:));
/**
* 2.4 搜索好友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)
* - 该接口返回的是本地存储的用户资料,包含好友和非好友资料,您可以根据 V2TIMFriendInfoResult 中的 getRelation 来判断是否为好友。
*/
- (void)searchFriends:(V2TIMFriendSearchParam *)searchParam succ:(V2TIMFriendInfoResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(searchFriends(searchParam:succ:fail:));
/**
* 2.5 添加好友
*/
- (void)addFriend:(V2TIMFriendAddApplication *)application succ:(V2TIMFriendOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(addFriend(application:succ:fail:));
/**
* 2.6 删除好友
* @param userIDList 要删除的好友 userID 列表
* - ID 建议一次最大 100 个,因为数量过多可能会导致数据包太大被后台拒绝,后台限制数据包最大为 1M。
* @param deleteType 删除类型(单向好友、双向好友)
*/
- (void)deleteFromFriendList:(NSArray *)userIDList deleteType:(V2TIMFriendType)deleteType succ:(V2TIMFriendOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(deleteFromFriendList(userIDList:deleteType:succ: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 NS_SWIFT_NAME(checkFriend(userIDList:checkType:succ:fail:));
/////////////////////////////////////////////////////////////////////////////////
//
// 好友申请、删除相关逻辑
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 3.1 获取好友申请列表
*
* @note
* - 好友申请列表包括发起的好友申请和收到的好友申请。
* - 最多支持100个。
*/
- (void)getFriendApplicationList:(V2TIMFriendApplicationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getFriendApplicationList(succ:fail:));
/**
* 3.2 同意好友申请
*
* @param application 好友申请信息getFriendApplicationList 成功后会返回
* @param acceptType 建立单向/双向好友关系
*/
- (void)acceptFriendApplication:(V2TIMFriendApplication *)application type:(V2TIMFriendAcceptType)acceptType succ:(V2TIMFriendOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(acceptFriendApplication(application:acceptType:succ:fail:));
/**
* 3.3 同意好友申请,并设置备注
*
* @param application 好友申请信息getFriendApplicationList 成功后会返回
* @param acceptType 建立单向/双向好友关系
* - @ref V2TIMFriendApplication.V2TIM_FRIEND_ACCEPT_AGREE同意添加单向好友
* - @ref V2TIMFriendApplication.V2TIM_FRIEND_ACCEPT_AGREE_AND_ADD同意并添加为双向好友
* @param remark 好友备注
*/
- (void)acceptFriendApplication:(V2TIMFriendApplication *)application type:(V2TIMFriendAcceptType)acceptType remark:(NSString* _Nullable)remark succ:(V2TIMFriendOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(acceptFriendApplication(application:acceptType:remark:succ:fail:));
/**
* 3.4 拒绝好友申请
*
* @param application 好友申请信息getFriendApplicationList 成功后会返回
*/
- (void)refuseFriendApplication:(V2TIMFriendApplication *)application succ:(V2TIMFriendOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(refuseFriendApplication(application:succ:fail:));
/**
* 3.5 删除好友申请
*
* @param application 好友申请信息getFriendApplicationList 成功后会返回
*/
- (void)deleteFriendApplication:(V2TIMFriendApplication *)application succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(deleteFriendApplication(application:succ:fail:));
/**
* 3.6 设置好友申请已读
*/
- (void)setFriendApplicationRead:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setFriendApplicationRead(succ:fail:));
/////////////////////////////////////////////////////////////////////////////////
//
// 黑名单
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 4.1 添加用户到黑名单
*/
- (void)addToBlackList:(NSArray *)userIDList succ:(V2TIMFriendOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(addToBlackList(userIDList:succ:fail:));
/**
* 4.2 把用户从黑名单中删除
*/
- (void)deleteFromBlackList:(NSArray *)userIDList succ:(V2TIMFriendOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(deleteFromBlackList(userIDList:succ:fail:));
/**
* 4.3 获取黑名单列表
*/
- (void)getBlackList:(V2TIMFriendInfoListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getBlackList(succ:fail:));
/////////////////////////////////////////////////////////////////////////////////
//
// 好友分组
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 5.1 新建好友分组
*
* @param groupName 分组名称
* @param userIDList 要添加到分组中的好友
*/
- (void)createFriendGroup:(NSString *)groupName userIDList:(NSArray * _Nullable)userIDList succ:(V2TIMFriendOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(createFriendGroup(groupName:userIDList:succ:fail:));
/**
* 5.2 获取分组信息
*
* @param groupNameList 要获取信息的好友分组名称列表,传入 nil 获得所有分组信息
*/
- (void)getFriendGroupList:(NSArray * _Nullable)groupNameList succ:(V2TIMFriendGroupListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getFriendGroupList(groupNameList:succ:fail:));
/**
* 5.3 删除好友分组
*/
- (void)deleteFriendGroup:(NSArray *)groupNameList succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(deleteFriendGroup(groupNameList:succ:fail:));
/**
* 5.4 修改好友分组的名称
*/
- (void)renameFriendGroup:(NSString*)oldName newName:(NSString*)newName succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(renameFriendGroup(oldName:newName:succ:fail:));
/**
* 5.5 添加好友到一个好友分组
*/
- (void)addFriendsToFriendGroup:(NSString *)groupName userIDList:(NSArray *)userIDList succ:(V2TIMFriendOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(addFriendsToFriendGroup(groupName:userIDList:succ:fail:));
/**
* 5.6 从好友分组中删除好友
*/
- (void)deleteFriendsFromFriendGroup:(NSString *)groupName userIDList:(NSArray *)userIDList succ:(V2TIMFriendOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(deleteFriendsFromFriendGroup(groupName:userIDList:succ:fail:));
/////////////////////////////////////////////////////////////////////////////////
//
// 公众号订阅、取消订阅、获取公众号列表接口
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 6.1 订阅公众号7.6 及其以上版本支持)
*/
- (void)subscribeOfficialAccount:(NSString *)officialAccountID succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(subscribeOfficialAccount(officialAccountID:succ:fail:));
/**
* 6.2 取消订阅公众号7.6 及其以上版本支持)
*/
- (void)unsubscribeOfficialAccount:(NSString *)officialAccountID succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(unsubscribeOfficialAccount(officialAccountID:succ:fail:));
/**
* 6.3 获取公众号列表7.6 及其以上版本支持)
* @note officialAccountIDList 传空时,获取订阅的公众号列表
*/
- (void)getOfficialAccountsInfo:(NSArray<NSString *> * _Nullable)officialAccountIDList succ:(V2TIMOfficialAccountInfoResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getOfficialAccountsInfo(officialAccountIDList:succ:fail:));
/////////////////////////////////////////////////////////////////////////////////
//
// 关注/粉丝 相关接口
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 7.1 关注用户(从 7.8 版本开始支持)
*
* @note
* - 一次最多支持关注 20 个用户。
* - 该功能为 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)followUser:(NSArray<NSString *> *)userIDList succ:(V2TIMFollowOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(followUser(userIDList:succ:fail:));
/**
* 7.2 取消关注用户(从 7.8 版本开始支持)
*
* @note
* - 一次最多支持取消关注 20 个用户。
* - 该功能为 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)unfollowUser:(NSArray<NSString *> *)userIDList succ:(V2TIMFollowOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(unfollowUser(userIDList:succ:fail:));
/**
* 7.3 获取我的关注列表(从 7.8 版本开始支持)
*
* @note
* - 该功能为 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)。
*
* @param nextCursor 分页拉取标志,第一次拉取填 nil 或 @"",回调成功如果 nextCursor 不为 @"",需要分页,可以传入该值再次拉取,直至 nextCursor 返回为 @""
*
* @note
* - 该功能为 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)getMyFollowingList:(NSString * _Nullable)nextCursor succ:(V2TIMUserInfoResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getMyFollowingList(nextCursor:succ:fail:));
/**
* 7.4 获取我的粉丝列表(从 7.8 版本开始支持)
*
* @param nextCursor 分页拉取标志,第一次拉取填 nil 或 @"",回调成功如果 nextCursor 不为 @"",需要分页,可以传入该值再次拉取,直至 nextCursor 返回为 @""
*
* @note
* - 该功能为 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)getMyFollowersList:(NSString * _Nullable)nextCursor succ:(V2TIMUserInfoResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getMyFollowersList(nextCursor:succ:fail:));
/**
* 7.5 获取我的互关列表(从 7.8 版本开始支持)
*
* @param nextCursor 分页拉取标志,第一次拉取填 nil 或 @"",回调成功如果 nextCursor 不为 @"",需要分页,可以传入该值再次拉取,直至 nextCursor 返回为 @""
*
* @note
* - 该功能为 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)getMutualFollowersList:(NSString * _Nullable)nextCursor succ:(V2TIMUserInfoResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getMutualFollowersList(nextCursor:succ:fail:));
/**
* 7.6 获取指定用户的 关注/粉丝/互关 数量信息(从 7.8 版本开始支持)
*
* @note
* - 该功能为 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)getUserFollowInfo:(NSArray *)userIDList succ:(V2TIMFollowInfoResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getUserFollowInfo(userIDList:succ:fail:));
/**
* 7.7 检查指定用户的关注类型(从 7.8 版本开始支持)
*
* @note
* - 该功能为 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)checkFollowType:(NSArray<NSString *> *)userIDList succ:(V2TIMFollowTypeCheckResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(checkFollowType(userIDList:succ:fail:));
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 资料关系链回调
//
/////////////////////////////////////////////////////////////////////////////////
/// 资料关系链回调
V2TIM_EXPORT @protocol V2TIMFriendshipListener <NSObject>
@optional
/**
* 好友申请新增通知,两种情况会收到这个回调:
* 1. 自己申请加别人好友
* 2. 别人申请加自己好友
*/
- (void)onFriendApplicationListAdded:(NSArray<V2TIMFriendApplication *> *)applicationList NS_SWIFT_NAME(onFriendApplicationListAdded(applicationList:));
/**
* 好友申请删除通知,四种情况会收到这个回调:
* 1. 调用 deleteFriendApplication 主动删除好友申请
* 2. 调用 refuseFriendApplication 拒绝好友申请
* 3. 调用 acceptFriendApplication 同意好友申请
* 4. 申请加别人好友被拒绝
*/
- (void)onFriendApplicationListDeleted:(NSArray *)userIDList NS_SWIFT_NAME(onFriendApplicationListDeleted(userIDList:));
/**
* 好友申请已读通知,如果调用 setFriendApplicationRead 设置好友申请列表已读,会收到这个回调(主要用于多端同步)
*/
- (void)onFriendApplicationListRead NS_SWIFT_NAME(onFriendApplicationListRead());
/**
* 好友新增通知
*/
- (void)onFriendListAdded:(NSArray<V2TIMFriendInfo *>*)infoList NS_SWIFT_NAME(onFriendListAdded(infoList:));
/**
* 好友删除通知,两种情况会收到这个回调:
* 1. 自己删除好友(单向和双向删除都会收到回调)
* 2. 好友把自己删除(双向删除会收到)
*/
- (void)onFriendListDeleted:(NSArray*)userIDList NS_SWIFT_NAME(onFriendListDeleted(userIDList:));
/**
* 黑名单新增通知
*/
- (void)onBlackListAdded:(NSArray<V2TIMFriendInfo *>*)infoList NS_SWIFT_NAME(onBlackListAdded(infoList:));
/**
* 黑名单删除通知
*/
- (void)onBlackListDeleted:(NSArray*)userIDList NS_SWIFT_NAME(onBlackListDeleted(userIDList:));
/**
* 好友资料变更通知
*/
- (void)onFriendProfileChanged:(NSArray<V2TIMFriendInfo *> *)infoList NS_SWIFT_NAME(onFriendProfileChanged(infoList:));
/**
* 好友分组被创建
*/
- (void)onFriendGroupCreated:(NSString * _Nullable)groupName friendInfoList:(NSArray<V2TIMFriendInfo *> *)friendInfoList NS_SWIFT_NAME(onFriendGroupCreated(groupName:friendInfoList:));
/**
* 好友分组被删除
*/
- (void)onFriendGroupDeleted:(NSArray<NSString *> *)groupNameList NS_SWIFT_NAME(onFriendGroupDeleted(groupNameList:));
/**
* 好友分组名变更
*/
- (void)onFriendGroupNameChanged:(NSString * _Nullable)oldGroupName newGroupName:(NSString * _Nullable)newGroupName NS_SWIFT_NAME(onFriendGroupNameChanged(oldGroupName:newGroupName:));
/**
* 好友分组新增好友
*/
- (void)onFriendsAddedToGroup:(NSString * _Nullable)groupName friendInfoList:(NSArray<V2TIMFriendInfo *> *)friendInfoList NS_SWIFT_NAME(onFriendsAddedToGroup(groupName:friendInfoList:));
/**
* 好友分组删除好友
*/
- (void)onFriendsDeletedFromGroup:(NSString * _Nullable)groupName friendIDList:(NSArray<NSString *> *)friendIDList NS_SWIFT_NAME(onFriendsDeletedFromGroup(groupName:friendIDList:));
/**
* 订阅公众号通知
*/
- (void)onOfficialAccountSubscribed:(V2TIMOfficialAccountInfo *)officialAccountInfo NS_SWIFT_NAME(onOfficialAccountSubscribed(officialAccountInfo:));
/**
* 取消订阅公众号通知
*/
- (void)onOfficialAccountUnsubscribed:(NSString * _Nullable)officialAccountID NS_SWIFT_NAME(onOfficialAccountUnsubscribed(officialAccountID:));
/**
* 订阅的公众号被删除通知
*/
- (void)onOfficialAccountDeleted:(NSString * _Nullable)officialAccountID NS_SWIFT_NAME(onOfficialAccountDeleted(officialAccountID:));
/**
* 订阅的公众号资料更新通知
*/
- (void)onOfficialAccountInfoChanged:(V2TIMOfficialAccountInfo *)officialAccountInfo NS_SWIFT_NAME(onOfficialAccountInfoChanged(officialAccountInfo:));
/**
* 关注列表变更通知
*/
- (void)onMyFollowingListChanged:(NSArray<V2TIMUserFullInfo *> *)userInfoList isAdd:(BOOL)isAdd NS_SWIFT_NAME(onMyFollowingListChanged(userInfoList:isAdd:));
/**
* 粉丝列表变更通知
*/
- (void)onMyFollowersListChanged:(NSArray<V2TIMUserFullInfo *> *)userInfoList isAdd:(BOOL)isAdd NS_SWIFT_NAME(onMyFollowersListChanged(userInfoList:isAdd:));
/**
* 互关列表变更通知
*/
- (void)onMutualFollowersListChanged:(NSArray<V2TIMUserFullInfo *> *)userInfoList isAdd:(BOOL)isAdd NS_SWIFT_NAME(onMutualFollowersListChanged(userInfoList:isAdd:));
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 好友资料获取结果
//
/////////////////////////////////////////////////////////////////////////////////
/// 好友资料获取结果
V2TIM_EXPORT @interface V2TIMFriendInfoResult : NSObject
/// 返回码
@property(nonatomic,assign) int resultCode;
/// 返结果表述
@property(nonatomic,strong,nullable) NSString *resultInfo;
/// 好友类型
@property(nonatomic,assign) V2TIMFriendRelationType relation;
/// 好友个人资料,如果不是好友,除了 userID 字段,其他字段都为空
@property(nonatomic,strong) V2TIMFriendInfo *friendInfo;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 好友资料
//
/////////////////////////////////////////////////////////////////////////////////
/// 好友资料
V2TIM_EXPORT @interface V2TIMFriendInfo : NSObject
/// 好友 ID
@property(nonatomic,strong,nullable) 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,nullable) NSString *friendRemark;
/// 添加好友的 UTC 时间戳
@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,nullable) NSString* friendRemark;
/// 预分组名最大96字节
@property (nonatomic,strong,nullable) NSString* friendGroup;
/// 请求说明最大120字节
@property (nonatomic,strong,nullable) NSString* addWording;
/// 添加来源
@property (nonatomic,strong,nullable) 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,nullable) NSString* userID;
/// 用户昵称
@property(nonatomic,strong,readonly,nullable) NSString* nickName;
/// 用户头像
@property(nonatomic,strong,readonly,nullable) NSString* faceUrl;
/// 添加好友的 UTC 时间戳
@property(nonatomic,assign,readonly) uint64_t addTime;
/// 来源
@property(nonatomic,strong,readonly,nullable) NSString* addSource;
/// 加好友附言
@property(nonatomic,strong,readonly,nullable) NSString* addWording;
/// 好友申请类型
@property(nonatomic,assign,readonly) V2TIMFriendApplicationType type;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 好友关系链检查结果
//
/////////////////////////////////////////////////////////////////////////////////
/// 好友关系链检查结果
V2TIM_EXPORT @interface V2TIMFriendCheckResult : NSObject
/// 用户id
@property(nonatomic,strong,nullable) NSString* userID;
/// 返回码
@property(nonatomic,assign) NSInteger resultCode;
/// 返回信息
@property(nonatomic,strong,nullable) NSString *resultInfo;
/// 检查结果
@property(nonatomic,assign) V2TIMFriendRelationType relationType;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 好友操作结果(添加、删除、加黑名单、添加分组等)
//
/////////////////////////////////////////////////////////////////////////////////
/// 好友操作结果(添加、删除、加黑名单、添加分组等)
V2TIM_EXPORT @interface V2TIMFriendOperationResult : NSObject
/// 用户Id
@property(nonatomic,strong,nullable) NSString* userID;
/// 返回码
@property(nonatomic,assign) NSInteger resultCode;
/// 返回信息
@property(nonatomic,strong,nullable) NSString *resultInfo;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 好友分组
//
/////////////////////////////////////////////////////////////////////////////////
/// 好友分组
V2TIM_EXPORT @interface V2TIMFriendGroup : NSObject
/// 好友分组名称
@property(nonatomic,strong,nullable) 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
/////////////////////////////////////////////////////////////////////////////////
//
// 公众号资料
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMOfficialAccountInfo : NSObject
/// 公众号 ID
@property(nonatomic,strong,readonly,nullable) NSString* officialAccountID;
/// 公众号名称
@property(nonatomic,strong,readonly,nullable) NSString* officialAccountName;
/// 公众号头像
@property(nonatomic,strong,readonly,nullable) NSString* faceUrl;
/// 公众号所有者
@property(nonatomic,strong,readonly,nullable) NSString* ownerUserID;
/// 公众号组织
@property(nonatomic,strong,readonly,nullable) NSString* organization;
/// 公众号简介
@property(nonatomic,strong,readonly,nullable) NSString* introduction;
/// 公众号自定义数据
@property(nonatomic,strong,readonly,nullable) NSString* customData;
/// 公众号创建时间,单位:秒
@property(nonatomic,assign,readonly) uint64_t createTime;
/// 公众号订阅者数量
@property(nonatomic,assign,readonly) uint64_t subscriberCount;
/// 订阅公众号的时间,单位:秒
@property(nonatomic,assign,readonly) uint64_t subscribeTime;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 公众号资料获取结果
//
/////////////////////////////////////////////////////////////////////////////////
/// 公众号资料获取结果
V2TIM_EXPORT @interface V2TIMOfficialAccountInfoResult : NSObject
/// 返回码
@property(nonatomic,assign) int resultCode;
/// 返回结果表述
@property(nonatomic,strong,nullable) NSString *resultInfo;
/// 公众号资料
@property(nonatomic,strong) V2TIMOfficialAccountInfo *officialAccountInfo;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 关注/取关用户的操作结果
//
/////////////////////////////////////////////////////////////////////////////////
/// 关注/取关用户的操作结果
V2TIM_EXPORT @interface V2TIMFollowOperationResult : NSObject
/// 用户 ID
@property(nonatomic,strong,nullable) NSString* userID;
/// 返回码
@property(nonatomic,assign) NSInteger resultCode;
/// 返回信息
@property(nonatomic,strong,nullable) NSString *resultInfo;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 用户关注数量信息获取结果
//
/////////////////////////////////////////////////////////////////////////////////
/// 用户关注数量信息获取结果
V2TIM_EXPORT @interface V2TIMFollowInfo : NSObject
/// 返回码
@property(nonatomic,assign) NSInteger resultCode;
/// 返回结果表述
@property(nonatomic,strong,nullable) NSString *resultInfo;
/// 用户 ID
@property(nonatomic,strong,nullable) NSString *userID;
/// 用户的关注数量
@property(nonatomic,assign) uint64_t followingCount;
/// 用户的粉丝数量
@property(nonatomic,assign) uint64_t followersCount;
/// 用户的互关数量
@property(nonatomic,assign) uint64_t mutualFollowersCount;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 指定用户的关注类型检查结果
//
/////////////////////////////////////////////////////////////////////////////////
/// 指定用户的关注类型检查结果
V2TIM_EXPORT @interface V2TIMFollowTypeCheckResult : NSObject
/// 用户 ID
@property(nonatomic,strong,nullable) NSString* userID;
/// 返回码
@property(nonatomic,assign) NSInteger resultCode;
/// 返回信息
@property(nonatomic,strong,nullable) NSString *resultInfo;
/// 关注类型
@property(nonatomic,assign) V2TIMFollowType followType;
@end

View File

@@ -0,0 +1,752 @@
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 IMSDK
//
// 模块名称V2TIMManager+Group
//
// 群组高级接口,里面包含了群组的高级功能,比如群成员邀请、非群成员申请进群等操作接口。
//
/////////////////////////////////////////////////////////////////////
#import "V2TIMManager.h"
#import "V2TIMManager+Message.h"
@class V2TIMGroupMemberOperationResult;
@class V2TIMGroupApplicationResult;
@class V2TIMCreateGroupMemberInfo;
@class V2TIMGroupInfo;
@class V2TIMGroupInfoResult;
@class V2TIMGroupApplication;
@class V2TIMGroupSearchParam;
@class V2TIMGroupSearchResult;
@class V2TIMGroupMemberSearchParam;
@class V2TIMGroupMemberSearchResult;
@class V2TIMGroupAtInfo;
/////////////////////////////////////////////////////////////////////////////////
//
// 群相关的高级接口
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMManager (Group)
/// 获取已加入群列表成功回调
typedef void (^V2TIMGroupInfoListSucc)(NSArray<V2TIMGroupInfo *> *groupList);
/// 获取指定群列表成功回调
typedef void (^V2TIMGroupInfoResultListSucc)(NSArray<V2TIMGroupInfoResult *> *groupResultList);
/// 云端搜索群组的结果回调
typedef void (^V2TIMGroupSearchResultSucc)(V2TIMGroupSearchResult *searchResult);
/// 获取群属性列表成功回调
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 (^V2TIMGroupMemberSearchResultSucc)(V2TIMGroupMemberSearchResult *searchResult);
/// 群成员操作成功回调
typedef void (^V2TIMGroupMemberOperationResultListSucc)(NSArray<V2TIMGroupMemberOperationResult*> * resultList);
/// 获取好友申请列表成功回调
typedef void (^V2TIMGroupApplicationResultSucc)(V2TIMGroupApplicationResult *result);
/// 获取群在线人数成功回调
typedef void (^V2TIMGroupOnlineMemberCountSucc)(NSInteger count);
/// 群计数器操作成功的回调
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
* - 后台限制邀请的群成员个数不能超过 20
* - 其他限制请参考 V2TIMManager.h -> createGroup 注释
*/
- (void)createGroup:(V2TIMGroupInfo*)info memberList:(NSArray<V2TIMCreateGroupMemberInfo *>* _Nullable )memberList succ:(V2TIMCreateGroupSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(createGroup(info:memberList:succ:fail:));
/**
* 1.2 获取当前用户已经加入的群列表
*
* @note
* - 直播群AVChatRoom不支持该 API
* - 该接口有频限检测SDK 限制调用频率为 1 秒 10 次,超过限制后会报 ERR_SDK_COMM_API_CALL_FREQUENCY_LIMIT 7008错误
*/
- (void)getJoinedGroupList:(V2TIMGroupInfoListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getJoinedGroupList(succ: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 NS_SWIFT_NAME(searchGroups(searchParam:succ:fail:));
/**
* 2.3 搜索云端群资料8.4 及以上版本支持)
* @note 该功能为 IM 增值功能,详见[价格说明](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)searchCloudGroups:(V2TIMGroupSearchParam *)searchParam succ:(V2TIMGroupSearchResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(searchCloudGroups(searchParam:succ:fail:));
/**
* 2.4 修改群资料
*/
- (void)setGroupInfo:(V2TIMGroupInfo *)info succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setGroupInfo(info:succ:fail:));
/**
* 2.5 初始化群属性,会清空原有的群属性列表
*
* @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:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(initGroupAttributes(groupID:attributes:succ:fail:));
/**
* 2.6 设置群属性,已有该群属性则更新其 value 值,没有该群属性则添加该群属性。
* @note
* - 6.7 及其以前版本,只支持 AVChatRoom 直播群;
* - 从 6.8 版本开始,同时支持 AVChatRoom、Public、Meeting、Work 四种群类型;
* - 从 7.0 版本开始,除了话题外,群属性支持所有的群类型。
*/
- (void)setGroupAttributes:(NSString*)groupID attributes:(NSDictionary<NSString *,NSString *> *)attributes succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setGroupAttributes(groupID:attributes:succ:fail:));
/**
* 2.7 删除群指定属性keys 传 nil 则清空所有群属性。
* @note
* - 6.7 及其以前版本,只支持 AVChatRoom 直播群;
* - 从 6.8 版本开始,同时支持 AVChatRoom、Public、Meeting、Work 四种群类型;
* - 从 7.0 版本开始,除了话题外,群属性支持所有的群类型。
*/
- (void)deleteGroupAttributes:(NSString*)groupID keys:(NSArray<NSString *> * _Nullable)keys succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(deleteGroupAttributes(groupID:keys:succ:fail:));
/**
* 2.8 获取群指定属性keys 传 nil 则获取所有群属性。
* @note
* - 6.7 及其以前版本,只支持 AVChatRoom 直播群;
* - 从 6.8 版本开始,同时支持 AVChatRoom、Public、Meeting、Work 四种群类型;
* - 从 7.0 版本开始,除了话题外,群属性支持所有的群类型。
*/
- (void)getGroupAttributes:(NSString*)groupID keys:(NSArray<NSString *> * _Nullable)keys succ:(V2TIMGroupAttributeListSucc)succ fail:(V2TIMFail)fail;
/**
* 2.9 获取指定群在线人数
*
* @param groupID 群id
* @param succ 成功回调
* @param fail 失败回调
*
* @note
* - IMSDK 7.3 以前的版本仅支持直播群( AVChatRoom
* - IMSDK 7.3 及其以后的版本支持所有群类型。
*/
- (void)getGroupOnlineMemberCount:(NSString*)groupID succ:(V2TIMGroupOnlineMemberCountSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getGroupOnlineMemberCount(groupID:succ:fail:));
/**
* 2.10 设置群计数器7.0 及其以上版本支持)
*
* @note
* - 该计数器的 key 如果存在,则直接更新计数器的 value 值;如果不存在,则添加该计数器的 key-value
* - 当群计数器设置成功后,在 succ 回调中会返回最终成功设置的群计数器信息;
* - 除了社群和话题,群计数器支持所有的群组类型。
*/
- (void)setGroupCounters:(NSString *)groupID counters:(NSDictionary<NSString *, NSNumber *> *)counters succ:(V2TIMGroupCounterResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(setGroupCounters(groupID:counters:succ:fail:));
/**
* 2.11 获取群计数器7.0 及其以上版本支持)
*
* @note
* - 如果 keys 为空,则表示获取群内的所有计数器;
* - 除了社群和话题,群计数器支持所有的群组类型。
*/
- (void)getGroupCounters:(NSString *)groupID keys:(NSArray<NSString *> * _Nullable)keys succ:(V2TIMGroupCounterResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getGroupCounters(groupID:keys:succ: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)increaseGroupCounter:(NSString *)groupID key:(NSString *)key value:(NSInteger)value succ:(V2TIMGroupCounterResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(increaseGroupCounter(groupID:key:value:succ:fail:));
/**
* 2.13 递减群计数器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 NS_SWIFT_NAME(decreaseGroupCounter(groupID:key:value:succ:fail:));
/////////////////////////////////////////////////////////////////////////////////
// 群成员管理
/////////////////////////////////////////////////////////////////////////////////
/**
* 3.1 获取群成员列表
*
* @param filter 指定群成员类型。
* @param nextSeq 分页拉取标志,第一次拉取填 0回调成功如果 nextSeq 不为零,需要分页,传入再次拉取,直至为 0。
*
* @note
* - 普通群(工作群、会议群、公开群)的限制:
* 1. filter 只能设置为 V2TIMGroupMemberFilter 定义的数值SDK 会返回指定角色的成员。
*
* - 直播群AVChatRoom的限制
* 1. 如果设置 filter 为 V2TIMGroupMemberFilter 定义的数值SDK 返回全部成员。返回的人数规则为:拉取最近入群群成员最多 1000 人,新进来的成员排在前面,需要升级旗舰版,并且在 [控制台](https://console.cloud.tencent.com/im) 开启“直播群在线成员列表”开关6.3 及以上版本支持)。
* 2. 如果设置 filter 为群成员自定义标记,旗舰版支持拉取指定标记的成员列表。标记群成员的设置请参考 markGroupMemberList:memberList:markType:enableMark:succ:fail: API。
* 3. 程序重启后,请重新加入群组,否则拉取群成员会报 10007 错误码。
* 4. 群成员资料信息仅支持 userID | nickName | faceURL | role 字段。
*
* - 社群Community的限制
* 1. 如果设置 filter 为 V2TIMGroupMemberFilter 定义的数值SDK 返回指定角色的成员。
* 2. 如果设置 filter 为群成员自定义标记,旗舰版支持拉取指定标记的成员列表(7.5 及以上版本支持)。标记群成员的设置请参考 markGroupMemberList:memberList:markType:enableMark:succ:fail: API。
*/
- (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 NS_SWIFT_NAME(getGroupMembersInfo(groupID:memberList:succ: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 NS_SWIFT_NAME(searchGroupMembers(searchParam:succ:fail:));
/**
* 3.4 搜索云端群成员资料8.4 及以上版本支持)
*
* @param searchParam 搜索参数
* @note 该功能为 IM 增值功能,详见[价格说明](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)searchCloudGroupMembers:(V2TIMGroupMemberSearchParam *)searchParam succ:(V2TIMGroupMemberSearchResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(searchCloudGroupMembers(searchParam:succ:fail:));
/**
* 3.5 修改指定的群成员资料
*/
- (void)setGroupMemberInfo:(NSString*)groupID info:(V2TIMGroupMemberFullInfo *)info succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setGroupMemberInfo(groupID:info:succ:fail:));
/**
* 3.6 禁言群成员(只有管理员或群主能够调用)
*
* @param seconds 禁言时间长度,单位秒,表示调用该接口成功后多少秒内不允许被禁言用户再发言。
*/
- (void)muteGroupMember:(NSString*)groupID member:(NSString*)userID muteTime:(uint32_t)seconds succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(muteGroupMember(groupID:memberUserID:muteTimeSeconds:succ:fail:));
/**
* 3.7 禁言全体群成员只有管理员或群主能够调用7.5 及以上版本支持)
*
* @param groupID 群组 ID
* @param isMute YES 表示禁言NO 表示解除禁言
*
* @note
* - 禁言全体群成员没有时间限制,设置 isMute 为 NO 则解除禁言。
* - 禁言或解除禁言后,会触发 V2TIMGroupListener 中的 onAllGroupMembersMuted:isMute: 回调。
* - 群主和管理员可以禁言普通成员。普通成员不能操作禁言/解除禁言。
*/
- (void)muteAllGroupMembers:(NSString*)groupID isMute:(BOOL)isMute succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(muteAllGroupMembers(groupID:isMute:succ:fail:));
/**
* 3.8 邀请他人入群
*
* @note 请注意不同类型的群有如下限制:
* - 工作群Work群里的任何人都可以邀请其他人进群。
* - 会议群Meeting和公开群Public默认不允许邀请加入群您可以修改群资料 V2TIMGroupInfo 的 groupApproveOpt 字段打开邀请入群方式。打开该选项之后,群里的任何人都可以邀请其他人进群。
* - 直播群AVChatRoom不支持此功能。
* - 后台限制单次邀请的群成员个数不能超过 20。
*/
- (void)inviteUserToGroup:(NSString*)groupID userList:(NSArray<NSString *>*)userList succ:(V2TIMGroupMemberOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(inviteUserToGroup(groupID:userList:succ:fail:));
/**
* 3.9 踢人
*
* @param groupID 群 id
* @param memberList 被踢用户的 userID 列表
* @param reason 被踢的原因
* @param duration 指定自被踢出群组开始算起,禁止被踢用户重新申请加群的时长,单位:秒
* @param succ 成功后的回调
* @param fail 失败后的回调
*
* @note
* - 从 7.2 版本开始,支持设置一个时长参数,用于指定用户从被踢出群组开始算起,禁止重新申请加群的时长;
* - 工作群Work只有群主或 APP 管理员可以踢人;
* - 公开群Public、会议群Meeting群主、管理员和 APP 管理员可以踢人;
* - 直播群AVChatRoom6.6 之前版本只支持禁言muteGroupMember不支持踢人。6.6 及以上版本支持禁言和踢人。需要您购买旗舰版套餐;
* - 该接口其他使用限制请查阅https://cloud.tencent.com/document/product/269/75400#.E8.B8.A2.E4.BA.BA。
*/
- (void)kickGroupMember:(NSString *)groupID memberList:(NSArray<NSString *> *)memberList reason:(NSString * _Nullable)reason duration:(uint32_t)duration succ:(V2TIMGroupMemberOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(kickGroupMember(groupID:memberList:reason:duration:succ:fail:));
/**
* 3.10 切换群成员的角色
*
* @note 请注意不同类型的群有如下限制:
* - 工作群Work不支持设置群成员角色。
* - 只有群主才能对群成员进行普通成员和管理员之间的角色切换。
* - 转让群组请调用 @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:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setGroupMemberRole(groupID:memberUserID:newRole:succ:fail:));
/**
* 3.11 标记群成员(需要您购买旗舰版套餐)
*
* @param groupID 群 ID。
* @param memberList 群成员 ID 列表。
* @param markType 标记类型。数字类型,大于等于 1000您可以自定义一个群组里最多允许定义 10 个标记。
* @param enableMark YES 表示添加标记NO 表示移除标记。
* @note
* - 直播群从 6.6 版本开始支持。
* - 社群从 7.5 版本开始支持。
* - 只有群主才有权限标记群组中其他人。
*/
- (void)markGroupMemberList:(NSString *)groupID memberList:(NSArray<NSString *> *)memberList markType:(uint32_t)markType enableMark:(BOOL)enableMark succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(markGroupMemberList(groupID:memberList:markType:enableMark:succ:fail:));
/**
* 3.12 转让群主
*
* @note 请注意不同类型的群有如下限制:
* - 普通类型的群Work、Public、Meeting只有群主才有权限进行群转让操作。
* - 直播群AVChatRoom不支持转让群主。
*/
- (void)transferGroupOwner:(NSString*)groupID member:(NSString*)userID succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(transferGroupOwner(groupID:memberUserID:succ:fail:));
/**
* 3.13 踢人(直播群踢人从 6.6 版本开始支持,需要您购买旗舰版套餐)
*
* @note 使用限制如下:
* - 待废弃接口,请使用 kickGroupMember:memberList:reason:duration:succ:fail: 接口;
* - 工作群Work只有群主或 APP 管理员可以踢人;
* - 公开群Public、会议群Meeting群主、管理员和 APP 管理员可以踢人;
* - 直播群AVChatRoom6.6 之前版本只支持禁言muteGroupMember不支持踢人。6.6 及以上版本支持禁言和踢人;
* - 该接口其他使用限制请查阅https://cloud.tencent.com/document/product/269/75400#.E8.B8.A2.E4.BA.BA。
*/
- (void)kickGroupMember:(NSString *)groupID memberList:(NSArray<NSString *> *)memberList reason:(NSString * _Nullable)reason succ:(V2TIMGroupMemberOperationResultListSucc)succ fail:(V2TIMFail)fail __attribute__((deprecated("use kickGroupMember:memberList:reason:succ:fail:")));
/////////////////////////////////////////////////////////////////////////////////
// 加群申请
/////////////////////////////////////////////////////////////////////////////////
/**
* 4.1 获取加群申请列表
* @note 最多支持50个
*/
- (void)getGroupApplicationList:(V2TIMGroupApplicationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getGroupApplicationList(succ:fail:));
/**
* 4.2 同意某一条加群申请
*/
- (void)acceptGroupApplication:(V2TIMGroupApplication *)application reason:(NSString* _Nullable)reason succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(acceptGroupApplication(application:reason:succ:fail:));
/**
* 4.3 拒绝某一条加群申请
*/
- (void)refuseGroupApplication:(V2TIMGroupApplication *)application reason:(NSString* _Nullable)reason succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(refuseGroupApplication(application:reason:succ:fail:));
/**
* 4.4 标记申请列表为已读
*/
- (void)setGroupApplicationRead:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setGroupApplicationRead(succ:fail:));
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 群基本资料(可以通过 getGroupInfo 获取,不支持由客户自行创建)
//
/////////////////////////////////////////////////////////////////////////////////
/// 群资料
V2TIM_EXPORT @interface V2TIMGroupInfo : NSObject
/**
* 群组 ID
*
* @note 自定义群组 ID 必须为可打印 ASCII 字符0x20-0x7e最长 48 个字节,且前缀不能为 @TGS#(避免与默认分配的群组 ID 混淆)
*/
@property(nonatomic,strong,nullable) NSString* groupID;
/// 群类型
@property(nonatomic,strong,nullable) NSString* groupType;
/**
* 社群是否支持创建话题
* @note 只在群类型为 Community 时有效
*/
@property(nonatomic,assign) BOOL isSupportTopic;
/**
* 群名称
*
* @note 群名称最长 100 字节,使用 UTF-8 编码
*/
@property(nonatomic,strong,nullable) NSString* groupName;
/**
* 群公告
*
* @note 群公告最长 400 字节,使用 UTF-8 编码
*/
@property(nonatomic,strong,nullable) NSString* notification;
/**
* 群简介
*
* @note 群简介最长 400 字节,使用 UTF-8 编码
*/
@property(nonatomic,strong,nullable) NSString* introduction;
/**
* 群头像
*
* @note 群头像 URL 最长 500 字节,使用 UTF-8 编码
*/
@property(nonatomic,strong,nullable) 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,nullable) NSString *owner;
/// 创建群组的 UTC 时间戳
@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;
/// 上次修改群信息的 UTC 时间戳
@property(nonatomic,assign,readonly) uint32_t lastInfoTime;
/// 群最近一次发消息时间
@property(nonatomic,assign,readonly) uint32_t lastMessageTime;
/// 已加入的群成员数量
@property(nonatomic,assign,readonly) uint32_t memberCount;
/// 在线的群成员数量(待废弃字段,请使用 getGroupOnlineMemberCount:succ:fail: 接口获取群在线人数)
@property(nonatomic,assign,readonly) uint32_t onlineCount __attribute__((deprecated("use getGroupOnlineMemberCount:succ:fail: instead")));
/// 最多允许加入的群成员数量
/// @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;
/// 当前用户加入此群的 UTC 时间戳,不支持设置,系统自动生成
@property(nonatomic,assign,readonly) uint32_t joinTime;
/// 是否开启权限组能力仅支持社群7.8 版本开始支持
/// 开启后,管理员角色的权限失效,用群权限、话题权限和权限组能力来对社群、话题进行管理。
@property(nonatomic,assign) BOOL enablePermissionGroup;
/// 群权限仅支持社群7.8 版本开始支持
/// 群成员在没有加入任何权限组时的默认权限,仅在 enablePermissionGroup = true 打开权限组之后生效
@property(nonatomic,assign) uint64_t defaultPermissions;
@end
/// 获取群组资料结果
V2TIM_EXPORT @interface V2TIMGroupInfoResult : NSObject
/// 结果 0成功非0失败
@property(nonatomic,assign) int resultCode;
/// 如果获取失败,会返回错误信息
@property(nonatomic,strong,nullable) NSString *resultMsg;
/// 如果获取成功,会返回对应的 info
@property(nonatomic,strong) V2TIMGroupInfo *info;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 群申请信息(可以通过 getGroupApplicationList 获取,不支持由客户自行创建)
//
/////////////////////////////////////////////////////////////////////////////////
/// 群申请信息
V2TIM_EXPORT @interface V2TIMGroupApplication : NSObject
/// 群组 ID
@property(nonatomic,strong,readonly,nullable) NSString* groupID;
/// 请求者 userID
@property(nonatomic,strong,readonly,nullable) NSString* fromUser;
/// 请求者昵称
@property(nonatomic,strong,readonly,nullable) NSString* fromUserNickName;
/// 请求者头像
@property(nonatomic,strong,readonly,nullable) NSString* fromUserFaceUrl;
/// 判决者id有人请求加群:0邀请其他人加群:被邀请人用户 ID
@property(nonatomic,strong,readonly,nullable) NSString* toUser;
/// 申请时间
@property(nonatomic,assign,readonly) uint64_t addTime;
/// 申请或邀请附加信息
@property(nonatomic,strong,readonly,nullable) NSString* requestMsg;
/// 审批信息:同意或拒绝信息
@property(nonatomic,strong,readonly,nullable) 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,nullable) NSString* userID;
/// 返回状态
@property(nonatomic,assign) V2TIMGroupMemberResult result;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 创建群时指定群成员
//
/////////////////////////////////////////////////////////////////////////////////
/// 创建群时指定群成员
V2TIM_EXPORT @interface V2TIMCreateGroupMemberInfo : NSObject
/// 被操作成员
@property(nonatomic,strong,nullable) 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个。
/// 如果是本地搜索,您需主动设置 keyword 是否匹配群 ID、群名称。
/// 如果是云端搜索keyword 会自动匹配群 ID、群名称。
@property(nonatomic, strong) NSArray<NSString *> *keywordList;
/// 设置是否搜索群 ID仅本地搜索有效
@property(nonatomic, assign) BOOL isSearchGroupID;
/// 设置是否搜索群名称(仅本地搜索有效)
@property(nonatomic, assign) BOOL isSearchGroupName;
/// 指定关键字列表匹配类型,可设置为“或”关系搜索或者“与”关系搜索(仅云端搜索有效)
/// 取值分别为 V2TIM_KEYWORD_LIST_MATCH_TYPE_OR 和 V2TIM_KEYWORD_LIST_MATCH_TYPE_AND默认为“或”关系搜索。
@property(nonatomic,assign) V2TIMKeywordListMatchType keywordListMatchType;
/// 设置每次云端搜索返回结果的条数(必须大于 0最大支持 100默认 20仅云端搜索有效
@property(nonatomic,assign) NSUInteger searchCount;
/// 设置每次云端搜索的起始位置。第一次填空字符串,续拉时填写 V2TIMGroupSearchResult 中的返回值(仅云端搜索有效)
@property(nonatomic,strong) NSString *searchCursor;
@end
V2TIM_EXPORT @interface V2TIMGroupSearchResult : NSObject
/// 满足搜索条件的群列表是否已经全部返回
@property(nonatomic,assign) BOOL isFinished;
/// 满足搜索条件的群总数量
@property(nonatomic,assign) NSUInteger totalCount;
/// 下一次云端搜索的起始位置
@property(nonatomic,strong,nullable) NSString *nextCursor;
/// 当前一次云端搜索返回的群列表
@property(nonatomic,strong) NSArray<V2TIMGroupInfo *> *groupList;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 群成员搜索
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMGroupMemberSearchParam : NSObject
/// 搜索关键字列表,最多支持 5 个
/// 如果是本地搜索,您需主动设置 keyword 是否匹配群成员 ID、昵称、备注、群名片。
/// 如果是云端搜索keyword 会自动匹配群成员 ID、昵称、群名片。
@property(nonatomic, strong) NSArray<NSString *> *keywordList;
/// 指定群 ID 列表,若为 null 则搜索全部群中的群成员
@property(nonatomic, strong,nullable) NSArray<NSString *> *groupIDList;
/// 设置是否搜索群成员 userID仅本地搜索有效
@property(nonatomic, assign) BOOL isSearchMemberUserID;
/// 设置是否搜索群成员昵称(仅本地搜索有效)
@property(nonatomic, assign) BOOL isSearchMemberNickName;
/// 设置是否搜索群成员备注(仅本地搜索有效)
@property(nonatomic, assign) BOOL isSearchMemberRemark;
/// 设置是否搜索群成员名片(仅本地搜索有效)
@property(nonatomic, assign) BOOL isSearchMemberNameCard;
/// 指定关键字列表匹配类型,可设置为“或”关系搜索或者“与”关系搜索(仅云端搜索有效)
/// 取值分别为 V2TIM_KEYWORD_LIST_MATCH_TYPE_OR 和 V2TIM_KEYWORD_LIST_MATCH_TYPE_AND默认为“或”关系搜索。
@property(nonatomic,assign) V2TIMKeywordListMatchType keywordListMatchType;
/// 设置每次云端搜索返回结果的条数(必须大于 0最大支持 100默认 20仅云端搜索有效
@property(nonatomic,assign) NSUInteger searchCount;
/// 设置每次云端搜索的起始位置。第一次填空字符串,续拉时填写 V2TIMGroupMemberSearchResult 中的返回值(仅云端搜索有效)
@property(nonatomic,strong) NSString *searchCursor;
@end
V2TIM_EXPORT @interface V2TIMGroupMemberSearchResult : NSObject
/// 满足搜索条件的群成员列表是否已经全部返回
@property(nonatomic,assign) BOOL isFinished;
/// 满足搜索条件的群成员总数量
@property(nonatomic,assign) NSUInteger totalCount;
/// 下一次云端搜索的起始位置
@property(nonatomic,strong,nullable) NSString *nextCursor;
/// 当前一次云端搜索返回的群成员列表
@property(nonatomic,strong) NSDictionary<NSString *, NSArray<V2TIMGroupMemberFullInfo *> *> *memberList;
@end

View File

@@ -0,0 +1,43 @@
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 IMSDK
//
// 模块名称V2TIMManager+LiveActivity
//
// 消息 LiveActivity 推送接口
//
/////////////////////////////////////////////////////////////////////
#import "V2TIMManager.h"
@class V2TIMLiveActivityConfig;
V2TIM_EXPORT @interface V2TIMManager (LiveActivity)
/**
* 1.1 设置 LiveActivity 远端推送配置;当 config 为 nil 时,清除所有的远端推送配置
*/
- (void)setLiveActivity:(V2TIMLiveActivityConfig * _Nullable)config succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setLiveActivity(config:succ:fail:));
@end
V2TIM_EXPORT @interface V2TIMLiveActivityConfig : NSObject
/**
* 创建 LiveActivity 时自定义的 activityID用来标识该 LiveActivity
*/
@property(nonatomic,strong) NSString *activityID;
/**
* LiveActivity token
*/
@property (nonatomic, strong, nullable) NSData *token;
/**
* IM 控制台上传的 P8 证书 ID
*/
@property (nonatomic, assign) int businessID;
@end

View File

@@ -0,0 +1,168 @@
#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* _Nullable)invite:(NSString *)invitee
data:(NSString * _Nullable)data
onlineUserOnly:(BOOL)onlineUserOnly
offlinePushInfo:(V2TIMOfflinePushInfo * _Nullable)offlinePushInfo
timeout:(int)timeout
succ:(_Nullable V2TIMSucc)succ
fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(invite(invitee:data:onlineUserOnly:offlinePushInfo:timeout:succ: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* _Nullable)inviteInGroup:(NSString *)groupID
inviteeList:(NSArray *)inviteeList
data:(NSString * _Nullable)data
onlineUserOnly:(BOOL)onlineUserOnly
timeout:(int)timeout
succ:(_Nullable V2TIMSucc)succ
fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(inviteInGroup(groupID:inviteeList:data:onlineUserOnly:timeout:succ:fail:));
/**
* 邀请方取消邀请
*
* @param inviteID 邀请 ID
*
* @note 如果所有被邀请人都已经处理了当前邀请(包含超时),不能再取消当前邀请。
*/
- (void)cancel:(NSString *)inviteID data:(NSString * _Nullable)data succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(cancel(inviteID:data:succ:fail:));
/**
* 接收方接受邀请
*
* @note 不能接受不是针对自己的邀请,请在收到 onReceiveNewInvitation 回调的时候先判断 inviteeList 有没有自己,如果没有自己,不能 accept 邀请。
*/
- (void)accept:(NSString *)inviteID data:(NSString * _Nullable)data succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(accept(inviteID:data:succ:fail:));
/**
* 接收方拒绝邀请
*
* @note 不能拒绝不是针对自己的邀请,请在收到 onReceiveNewInvitation 回调的时候先判断 inviteeList 有没有自己,如果没有自己,不能 reject 邀请。
*/
- (void)reject:(NSString *)inviteID data:(NSString * _Nullable)data succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(reject(inviteID:data:succ:fail:));
/**
* 获取信令信息
*
* 如果 invite 设置 onlineUserOnly 为 NO每次信令操作包括 invite、cancel、accept、reject、timeout都会产生一条自定义消息该消息会通过 V2TIMAdvancedMsgListener -> onRecvNewMessage 抛给用户,用户也可以通过历史消息拉取,如果需要根据信令信息做自定义化文本展示,可以调用下面接口获取信令信息。
*
* @param msg 消息对象
* @return V2TIMSignalingInfo 信令信息,如果为 nil则 msg 不是一条信令消息。
*/
- (V2TIMSignalingInfo * _Nullable)getSignallingInfo:(V2TIMMessage *)msg NS_SWIFT_NAME(getSignallingInfo(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:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(addInvitedSignaling(signallingInfo:succ:fail:));
/**
* 修改邀请信令6.7 及其以上版本支持)
*
* @note 仅支持修改邀请信令的自定义字段 data。只有在线用户才能收到的邀请信令不能被修改。
*/
- (void)modifyInvitation:(NSString *)inviteID data:(NSString *)data succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(modifyInvitation(inviteID:data:succ:fail:));
@end
V2TIM_EXPORT @protocol V2TIMSignalingListener <NSObject>
@optional
/// 收到邀请的回调
-(void)onReceiveNewInvitation:(NSString *)inviteID inviter:(NSString * _Nullable)inviter groupID:(NSString * _Nullable)groupID inviteeList:(NSArray<NSString *> *)inviteeList data:(NSString * _Nullable)data NS_SWIFT_NAME(onReceiveNewInvitation(inviteID:inviter:groupID:inviteeList:data:));
/// 被邀请者接受邀请
-(void)onInviteeAccepted:(NSString *)inviteID invitee:(NSString * _Nullable)invitee data:(NSString * _Nullable)data NS_SWIFT_NAME(onInviteeAccepted(inviteID:invitee:data:));
/// 被邀请者拒绝邀请
-(void)onInviteeRejected:(NSString *)inviteID invitee:(NSString * _Nullable)invitee data:(NSString * _Nullable)data NS_SWIFT_NAME(onInviteeRejected(inviteID:invitee:data:));
/// 邀请被取消
-(void)onInvitationCancelled:(NSString *)inviteID inviter:(NSString * _Nullable)inviter data:(NSString * _Nullable)data NS_SWIFT_NAME(onInvitationCancelled(inviteID:inviter:data:));
/// 邀请超时
-(void)onInvitationTimeout:(NSString *)inviteID inviteeList:(NSArray<NSString *> *)inviteeList NS_SWIFT_NAME(onInvitationTimeout(inviteID:inviteeList:));
/// 邀请被修改6.7 及其以上版本支持)
-(void)onInvitationModified:(NSString *)inviteID data:(NSString * _Nullable)data NS_SWIFT_NAME(onInvitationModified(inviteID: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,nullable) NSString *inviteID;
@property(nonatomic,strong,nullable) NSString *groupID;
@property(nonatomic,strong,nullable) NSString *inviter;
@property(nonatomic,strong) NSMutableArray *inviteeList;
@property(nonatomic,strong,nullable) NSString *data;
@property(nonatomic,assign) uint32_t timeout;
@property(nonatomic,assign) SignalingActionType actionType;
@end

View File

@@ -0,0 +1,37 @@
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 IMSDK
//
// 模块名称V2TIMManager+VOIP
//
// 消息 VoIP 推送接口
//
/////////////////////////////////////////////////////////////////////
#import "V2TIMManager.h"
@class V2TIMVOIPConfig;
V2TIM_EXPORT @interface V2TIMManager (VOIP)
/**
* 1.1 设置 VoIP 推送
*/
- (void)setVOIP:(V2TIMVOIPConfig * _Nullable)config succ:(V2TIMSucc _Nullable)succ fail:(V2TIMFail _Nullable)fail NS_SWIFT_NAME(setVOIP(config:succ: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

View File

@@ -0,0 +1,843 @@
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 IMSDK
//
// 模块名称V2TIMManager
//
// TIM SDK 2.0 版的接口,相比于 1.0 版本更加简洁易用,接入速度更快,高级特性接口详见:
// - V2TIMManager+Message.h 消息相关的高级功能接口,比如图片消息,视频消息,消息撤回,消息已读等功能。
// - V2TIMManager+APNS.h 推送相关的高级功能接口,主要用于开启消息推送功能。
// - V2TIMManager+Conversation.h 会话相关的高级功能接口,一个会话对应一个聊天窗口。
// - V2TIMManager+Group.h 群组相关的高级功能接口,比如邀请人进群,处理加群请求等功能。
// - V2TIMManager+Friendship.h 关系链相关的高级功能接口,比如黑名单,好友列表等功能。
// - V2TIMManager+Community.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 V2TIMUserSearchParam;
@class V2TIMUserSearchResult;
@class V2TIMGroupMemberInfo;
@class V2TIMGroupMemberFullInfo;
@class V2TIMGroupChangeInfo;
@class V2TIMGroupMemberChangeInfo;
@class V2TIMUserReceiveMessageOptInfo;
@class V2TIMTopicInfo;
@class V2TIMUserStatus;
@class V2TIMReceiveMessageOptInfo;
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 * _Nullable desc);
/// 创建群组成功回调
typedef void (^V2TIMCreateGroupSucc)(NSString * _Nullable groupID);
/// 获取用户资料成功回调
typedef void (^V2TIMUserFullInfoListSucc)(NSArray <V2TIMUserFullInfo *> *infoList);
/// 搜索云端用户的结果回调
typedef void (^V2TIMUserSearchResultSucc)(V2TIMUserSearchResult *searchResult);
/// 实验性 API 接口成功回调
typedef void (^V2TIMCallExperimentalAPISucc)(NSObject * _Nullable 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 NS_ENUM(NSInteger, V2TIMKeywordListMatchType) {
V2TIM_KEYWORD_LIST_MATCH_TYPE_OR = 0,
V2TIM_KEYWORD_LIST_MATCH_TYPE_AND = 1
};
/// 日志回调
typedef void (^V2TIMLogListener)(V2TIMLogLevel logLevel, NSString * _Nullable 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 NS_SWIFT_NAME(addIMSDKListener(listener:));
/**
* 1.4 移除 IM 监听
*/
- (void)removeIMSDKListener:(id<V2TIMSDKListener>)listener NS_SWIFT_NAME(removeIMSDKListener(listener:));
/**
* 1.5 反初始化 SDK
*/
- (void)unInitSDK;
/**
* 1.6 获取版本号
*
* @return 返回版本号,字符串表示,例如 5.0.10
*/
- (NSString*)getVersion;
/**
* 1.7 获取服务器时间戳
*
* @return UTC 时间戳,单位 s
*/
- (uint64_t)getServerTime;
/**
* 初始化 SDK待废弃接口请使用 initSDK 和 addIMSDKListener 接口)
*/
- (BOOL)initSDK:(int)sdkAppID config:(V2TIMSDKConfig*)config listener:(_Nullable 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:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(login(userID:userSig:succ:fail:));
/**
* 2.2 登出
*
* 退出登录,如果切换账号,需要 logout 回调成功或者失败后才能再次 login否则 login 可能会失败。
*/
- (void)logout:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(logout(succ:fail:));
/**
* 2.3 获取登录用户
*/
- (NSString * _Nullable)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:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(sendC2CTextMessage(text:to:succ:fail:));
/**
* 3.4 发送单聊自定义(信令)消息(最大支持 12KB
*
* 自定义消息本质就是一端二进制 buffer您可以在其上自由组织自己的消息格式常用于发送信令但是自定义消息不支持云端敏感词过滤。
* @return 返回消息的唯一标识 ID
*
* @note 该接口发送的消息默认不会推送,如果需要推送,请调用 V2TIMManager+Message.h -> sendMessage 接口。
*/
- (NSString*)sendC2CCustomMessage:(NSData *)customData to:(NSString *)userID succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(sendC2CCustomMessage(customData:to:succ: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:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(sendGroupTextMessage(text:to:priority:succ: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:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(sendGroupCustomMessage(customData:to:priority:succ: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最长 100 字节,使用 UTF-8 编码1 个汉字占 3 个字节。
*
* @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* _Nullable)groupID groupName:(NSString *)groupName succ:(V2TIMCreateGroupSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(createGroup(groupType:groupID:groupName:succ: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* _Nullable)msg succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(joinGroup(groupID:msg:succ:fail:));
/**
* 4.5 退出群组
*
* @note 在公开群Public、会议Meeting和直播群AVChatRoom群主是不可以退群的群主只能调用 dismissGroup 解散群组。
*/
- (void)quitGroup:(NSString*)groupID succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(quitGroup(groupID:succ:fail:));
/**
* 4.6 解散群组
*
* @note 请注意如下特殊逻辑:
* - 好友工作群Work的解散最为严格即使群主也不能随意解散只能由您的业务服务器调用 [解散群组 REST API](https://cloud.tencent.com/document/product/269/1624) 解散。
* - 其他类型群的群主可以解散群组。
*/
- (void)dismissGroup:(NSString*)groupID succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(dismissGroup(groupID:succ: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:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setSelfInfo(info:succ:fail:));
/**
* 5.3 订阅用户资料,从 7.4 版本开始支持
*
* @param userIDList 待订阅的用户 ID
*
* @note
* - 该接口用于订阅陌生人的资料变更事件,订阅成功后,当订阅用户资料发生变更,您可以通过监听 onUserInfoChanged 回调来感知
* - 订阅列表最多允许订阅 200 个,超过限制后,会自动淘汰最先订阅的用户
* - 自己的资料变更通知不需要订阅,默认会通过 onSelfInfoUpdated 回调通知给您
* - 好友的资料变更通知不需要订阅,默认会通过 onFriendInfoChange 回调通知给您
* - 该功能为 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)subscribeUserInfo:(NSArray *)userIDList succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(subscribeUserInfo(userIDList:succ:fail:));
/**
* 5.4 取消订阅用户资料,从 7.4 版本开始支持
*
* @param userIDList 需要取消订阅的用户 ID
*
* @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)。
*/
- (void)unsubscribeUserInfo:(NSArray * _Nullable)userIDList succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(unsubscribeUserInfo(userIDList:succ:fail:));
/**
* 5.5 搜索云端用户资料8.4 及以上版本支持)
* @param searchParam 用户搜索参数,详见 V2TIMUserSearchParam 的定义
* @note
* - 该功能为 IM 增值功能,详见[价格说明](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)
* - 如果您没有开通该服务,调用接口会返回 60020 错误码
* - 该接口返回的是云端存储的用户资料,包括好友和非好友资料,您可以调用 checkFriend 接口来判断是否为好友。
*/
- (void)searchUsers:(V2TIMUserSearchParam *)searchParam succ:(V2TIMUserSearchResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(searchUsers(searchParam:succ:fail:));
/**
* 5.6 查询用户状态,从 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 NS_SWIFT_NAME(getUserStatus(userIDList:succ:fail:));
/**
* 5.7 设置自己的状态,从 6.3 版本开始支持
*
* @param status 待设置的自定义状态
*
* @note 该接口只支持设置自己的自定义状态,即 V2TIMUserStatus.customStatus
*/
- (void)setSelfStatus:(V2TIMUserStatus *)status succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setSelfStatus(status:succ:fail:));
/**
* 5.8 订阅用户状态,从 6.3 版本开始支持
*
* @param userIDList 待订阅的用户 ID
*
* @note
* - 当成功订阅用户状态后,当对方的状态(包含在线状态、自定义状态)发生变更后,您可以监听 @onUserStatusChanged 回调来感知
* - 如果您需要订阅好友列表的状态,您只需要在控制台上打开开关即可,无需调用该接口
* - 该接口不支持订阅自己,您可以通过监听 @onUserStatusChanged 回调来感知自身的自定义状态的变更
* - 订阅列表最多允许订阅 200 个,超过限制后,会自动淘汰最先订阅的用户
* - 该功能为 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:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(subscribeUserStatus(userIDList:succ:fail:));
/**
* 5.9 取消订阅用户状态,从 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 * _Nullable)userIDList succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(unsubscribeUserStatus(userIDList:succ:fail:));
// 5.10 更多功能,详见 V2TIMManager+Friendship.h
/////////////////////////////////////////////////////////////////////////////////
// 扩展接口
/////////////////////////////////////////////////////////////////////////////////
/**
* 6.1 实验性 API 接口
*
* @param api 接口名称
* @param param 接口参数
*
* @note 该接口提供一些实验性功能
*/
- (void)callExperimentalAPI:(NSString *)api
param:(NSObject * _Nullable)param
succ:(V2TIMCallExperimentalAPISucc)succ
fail:(V2TIMFail)fail NS_SWIFT_NAME(callExperimentalAPI(api:param:succ:fail:));
@end
/////////////////////////////////////////////////////////////////////////////////
//
// IMSDK 主核心回调,帮助您时刻关注 IMSDK 的在线状态
//
/////////////////////////////////////////////////////////////////////////////////
/// IMSDK 主核心回调
V2TIM_EXPORT @protocol V2TIMSDKListener <NSObject>
@optional
/// SDK 正在连接到服务器
- (void)onConnecting;
/// SDK 已经成功连接到服务器
- (void)onConnectSuccess;
/// SDK 连接服务器失败
- (void)onConnectFailed:(int)code err:(NSString* _Nullable)err;
/// 当前用户被踢下线,此时可以 UI 提示用户,并再次调用 V2TIMManager 的 login() 函数重新登录。
- (void)onKickedOffline;
/// 在线时票据过期:此时您需要生成新的 userSig 并再次调用 V2TIMManager 的 login() 函数重新登录。
- (void)onUserSigExpired;
/// 当前用户的资料发生了更新
- (void)onSelfInfoUpdated:(V2TIMUserFullInfo *)Info NS_SWIFT_NAME(onSelfInfoUpdated(info:));
/**
* 用户状态变更通知
*
* @note 收到通知的情况:
* 1. 订阅过的用户发生了状态变更(包括在线状态和自定义状态),会触发该回调
* 2. 在 IM 控制台打开了好友状态通知开关,即使未主动订阅,当好友状态发生变更时,也会触发该回调
* 3. 同一个账号多设备登录,当其中一台设备修改了自定义状态,所有设备都会收到该回调
*/
- (void)onUserStatusChanged:(NSArray<V2TIMUserStatus *> *)userStatusList NS_SWIFT_NAME(onUserStatusChanged(userStatusList:));
/**
* 用户资料变更通知
*
* @note
* 仅当通过 subscribeUserInfo 成功订阅的用户(仅限非好友用户)的资料发生变更时,才会激活此回调函数
*/
- (void)onUserInfoChanged:(NSArray<V2TIMUserFullInfo *> *)userInfoList NS_SWIFT_NAME(onUserInfoChanged(userInfoList:));
/**
* 全局消息接收选项变更通知
*/
- (void)onAllReceiveMessageOptChanged:(V2TIMReceiveMessageOptInfo *)receiveMessageOptInfo NS_SWIFT_NAME(onAllReceiveMessageOptChanged(receiveMessageOptInfo:));
/**
* 实验性事件通知
*/
- (void)onExperimentalNotify:(NSString *)key param:(NSObject * _Nullable)param NS_SWIFT_NAME(onExperimentalNotify(key:param:));
@end
/////////////////////////////////////////////////////////////////////////////////
//
// IMSDK 基本消息回调 (高级消息请参考 V2TIMManager+Message.h -> V2TIMAdvancedMsgListener
//
/////////////////////////////////////////////////////////////////////////////////
/// IMSDK 基本消息回调
V2TIM_EXPORT @protocol V2TIMSimpleMsgListener <NSObject>
@optional
/// 收到 C2C 文本消息
- (void)onRecvC2CTextMessage:(NSString *)msgID sender:(V2TIMUserInfo *)info text:(NSString * _Nullable)text NS_SWIFT_NAME(onRecvC2CTextMessage(msgID:sender:text:));
/// 收到 C2C 自定义(信令)消息
- (void)onRecvC2CCustomMessage:(NSString *)msgID sender:(V2TIMUserInfo *)info customData:(NSData * _Nullable)data NS_SWIFT_NAME(onRecvC2CCustomMessage(msgID:sender:customData:));
/// 收到群文本消息
- (void)onRecvGroupTextMessage:(NSString *)msgID groupID:(NSString * _Nullable)groupID sender:(V2TIMGroupMemberInfo *)info text:(NSString * _Nullable)text NS_SWIFT_NAME(onRecvGroupTextMessage(msgID:groupID:sender:text:));
/// 收到群自定义(信令)消息
- (void)onRecvGroupCustomMessage:(NSString *)msgID groupID:(NSString * _Nullable)groupID sender:(V2TIMGroupMemberInfo *)info customData:(NSData * _Nullable)data NS_SWIFT_NAME(onRecvGroupCustomMessage(msgID:groupID:sender:customData:));
@end
/////////////////////////////////////////////////////////////////////////////////
//
// IMSDK 群组事件回调
//
/////////////////////////////////////////////////////////////////////////////////
/// IMSDK 群组事件回调
V2TIM_EXPORT @protocol V2TIMGroupListener <NSObject>
@optional
/////////////////////////////////////////////////////////////////////////////////
// 群成员相关通知
/////////////////////////////////////////////////////////////////////////////////
/// 有新成员加入群(该群所有的成员都能收到)
/// 会议群Meeting默认无此回调如需回调请前往 [控制台](https://console.cloud.tencent.com/im) (功能配置 -> 群组配置 -> 群系统通知配置 -> 群成员变更通知) 主动配置。
- (void)onMemberEnter:(NSString * _Nullable)groupID memberList:(NSArray<V2TIMGroupMemberInfo *>*)memberList NS_SWIFT_NAME(onMemberEnter(groupID:memberList:));
/// 有成员离开群(该群所有的成员都能收到)
/// 会议群Meeting默认无此回调如需回调请前往 [控制台](https://console.cloud.tencent.com/im) (功能配置 -> 群组配置 -> 群系统通知配置 -> 群成员变更通知) 主动配置。
- (void)onMemberLeave:(NSString * _Nullable)groupID member:(V2TIMGroupMemberInfo *)member NS_SWIFT_NAME(onMemberLeave(groupID:member:));
/// 某成员被拉入某群(该群所有的成员都能收到)
- (void)onMemberInvited:(NSString * _Nullable)groupID opUser:(V2TIMGroupMemberInfo *)opUser memberList:(NSArray<V2TIMGroupMemberInfo *>*)memberList NS_SWIFT_NAME(onMemberInvited(groupID:opUser:memberList:));
/// 有成员被踢出某群(该群所有的成员都能收到)
- (void)onMemberKicked:(NSString * _Nullable)groupID opUser:(V2TIMGroupMemberInfo *)opUser memberList:(NSArray<V2TIMGroupMemberInfo *>*)memberList NS_SWIFT_NAME(onMemberKicked(groupID:opUser:memberList:));
/// 某成员信息发生变更(该群所有的成员都能收到)
/// 会议群Meeting和直播群AVChatRoom默认无此回调如需回调请前往 [控制台](https://console.cloud.tencent.com/im) (功能配置 -> 群组配置 -> 群系统通知配置 -> 群成员资料变更通知) 主动配置。
- (void)onMemberInfoChanged:(NSString * _Nullable)groupID changeInfoList:(NSArray <V2TIMGroupMemberChangeInfo *> *)changeInfoList NS_SWIFT_NAME(onMemberInfoChanged(groupID:changeInfoList:));
/// 群组全体成员被禁言/解除禁言了(该群所有的成员都能收到)
/// 需要提前在 [控制台](https://console.cloud.tencent.com/im) 开启通知开关。开关路径:功能配置 -> 群组配置 -> 群系统通知配置 -> 群资料变更通知 -> 群禁言变更通知。
/// 7.5 及以上版本支持。
- (void)onAllGroupMembersMuted:(NSString * _Nullable)groupID isMute:(BOOL)isMute NS_SWIFT_NAME(onAllGroupMembersMuted(groupID:isMute:));
/// 有成员被标记(该群所有的成员都能收到)
/// 仅社群Community支持该回调。
/// 7.5 及以上版本支持,需要您购买旗舰版套餐。
- (void)onMemberMarkChanged:(NSString * _Nullable)groupID memberIDList:(NSArray<NSString *> *)memberIDList markType:(int)markType enableMark:(BOOL)enableMark NS_SWIFT_NAME(onMemberMarkChanged(groupID:memberIDList:markType:enableMark:));
/////////////////////////////////////////////////////////////////////////////////
// 群生命周期相关通知
/////////////////////////////////////////////////////////////////////////////////
/// 有新的群创建(创建者能收到,应用于多端消息同步的场景)
- (void)onGroupCreated:(NSString * _Nullable)groupID NS_SWIFT_NAME(onGroupCreated(groupID:));
/// 某个已加入的群被解散了(该群所有的成员都能收到)
- (void)onGroupDismissed:(NSString * _Nullable)groupID opUser:(V2TIMGroupMemberInfo *)opUser NS_SWIFT_NAME(onGroupDismissed(groupID:opUser:));
/// 某个已加入的群被回收了(该群所有的成员都能收到)
- (void)onGroupRecycled:(NSString * _Nullable)groupID opUser:(V2TIMGroupMemberInfo *)opUser NS_SWIFT_NAME(onGroupRecycled(groupID:opUser:));
/// 某个已加入的群的信息被修改了(该群所有的成员都能收到)
/// 以下字段的修改可能会引发该通知 groupName & introduction & notification & faceUrl & owner & allMute & custom
/// 控制指定字段 下发通知/存漫游 请前往 [控制台](https://console.cloud.tencent.com/im) (功能配置 -> 群组配置 -> 群系统通知配置 -> 群资料变更通知) 主动配置。
- (void)onGroupInfoChanged:(NSString * _Nullable)groupID changeInfoList:(NSArray <V2TIMGroupChangeInfo *> *)changeInfoList NS_SWIFT_NAME(onGroupInfoChanged(groupID:changeInfoList:));
/// 某个已加入的群的属性被修改了,会返回所在群组的所有属性(该群所有的成员都能收到)
- (void)onGroupAttributeChanged:(NSString *)groupID attributes:(NSMutableDictionary<NSString *,NSString *> *)attributes;
/// 某个已加入的群的计数器被修改了,会返回当前变更的群计数器(该群所有的成员都能收到)
- (void)onGroupCounterChanged:(NSString * _Nullable)groupID key:(NSString *)key newValue:(NSInteger)newValue NS_SWIFT_NAME(onGroupCounterChanged(groupID:key:newValue:));
/////////////////////////////////////////////////////////////////////////////////
// 加群申请相关通知
/////////////////////////////////////////////////////////////////////////////////
/// 有新的加群请求(只有群主和管理员会收到)
- (void)onReceiveJoinApplication:(NSString * _Nullable)groupID member:(V2TIMGroupMemberInfo *)member opReason:(NSString * _Nullable)opReason NS_SWIFT_NAME(onReceiveJoinApplication(groupID:member:opReason:));
/// 加群或者邀请加群请求已经被群主或管理员处理了(只有申请人能够收到)
- (void)onApplicationProcessed:(NSString * _Nullable)groupID opUser:(V2TIMGroupMemberInfo *)opUser opResult:(BOOL)isAgreeJoin opReason:(NSString * _Nullable)opReason NS_SWIFT_NAME(onApplicationProcessed(groupID:opUser:opResult:opReason:));
/////////////////////////////////////////////////////////////////////////////////
// 其他相关通知
/////////////////////////////////////////////////////////////////////////////////
/// 指定管理员身份
- (void)onGrantAdministrator:(NSString * _Nullable)groupID opUser:(V2TIMGroupMemberInfo *)opUser memberList:(NSArray <V2TIMGroupMemberInfo *> *)memberList NS_SWIFT_NAME(onGrantAdministrator(groupID:opUser:memberList:));
/// 取消管理员身份
- (void)onRevokeAdministrator:(NSString * _Nullable)groupID opUser:(V2TIMGroupMemberInfo *)opUser memberList:(NSArray <V2TIMGroupMemberInfo *> *)memberList NS_SWIFT_NAME(onRevokeAdministrator(groupID:opUser:memberList:));
/// 自己主动退出群组(主要用于多端同步)
- (void)onQuitFromGroup:(NSString * _Nullable)groupID NS_SWIFT_NAME(onQuitFromGroup(groupID:));
/// 收到 RESTAPI 下发的自定义系统消息
- (void)onReceiveRESTCustomData:(NSString * _Nullable)groupID data:(NSData * _Nullable)data NS_SWIFT_NAME(onReceiveRESTCustomData(groupID:data:));
/////////////////////////////////////////////////////////////////////////////////
// 话题事件监听回调
/////////////////////////////////////////////////////////////////////////////////
/// 话题创建回调
- (void)onTopicCreated:(NSString * _Nullable)groupID topicID:(NSString * _Nullable)topicID NS_SWIFT_NAME(onTopicCreated(groupID:topicID:));
/// 话题被删除回调
- (void)onTopicDeleted:(NSString * _Nullable)groupID topicIDList:(NSArray<NSString *> *)topicIDList NS_SWIFT_NAME(onTopicDeleted(groupID:topicIDList:));
/// 话题更新回调
- (void)onTopicChanged:(NSString * _Nullable)groupID topicInfo:(V2TIMTopicInfo *)topicInfo NS_SWIFT_NAME(onTopicChanged(groupID:topicInfo:));
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 用户资料
//
/////////////////////////////////////////////////////////////////////////////////
/// 用户基本资料
V2TIM_EXPORT @interface V2TIMUserInfo : NSObject
/// 用户 ID
@property(nonatomic,strong,readonly,nullable) NSString* userID;
/// 用户昵称
@property(nonatomic,strong,nullable) NSString* nickName;
/// 用户头像
@property(nonatomic,strong,nullable) NSString* faceURL;
@end
/// 用户详细资料
V2TIM_EXPORT @interface V2TIMUserFullInfo : V2TIMUserInfo
/// 用户签名
@property(nonatomic,strong,nullable) 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,nullable) NSDictionary<NSString *,NSData *> * customInfo;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 用户搜索
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMUserSearchParam : NSObject
/// 搜索的关键字列表,关键字列表最多支持 5 个keyword 会自动匹配用户 ID、昵称。
@property(nonatomic, strong,nullable) NSArray<NSString *> *keywordList;
/// 指定关键字列表匹配类型,可设置为“或”关系搜索或者“与”关系搜索。
/// 取值分别为 V2TIM_KEYWORD_LIST_MATCH_TYPE_OR 和 V2TIM_KEYWORD_LIST_MATCH_TYPE_AND默认为“或”关系搜索。
@property(nonatomic,assign) V2TIMKeywordListMatchType keywordListMatchType;
/// 用户性别(如果不设置,默认男性和女性都会返回)
@property(nonatomic,assign) V2TIMGender gender;
/// 用户最小生日(如果不设置,默认值为 0
@property(nonatomic,assign) uint32_t minBirthday;
/// 用户最大生日(如果不设置,默认 birthday >= minBirthday 的用户都会返回)
@property(nonatomic,assign) uint32_t maxBirthday;
/// 每次云端搜索返回结果的条数(必须大于 0最大支持 100默认 20
@property(nonatomic,assign) NSUInteger searchCount;
/// 每次云端搜索的起始位置。第一次填空字符串,续拉时填写 V2TIMUserSearchResult 中的返回值。
@property(nonatomic,strong) NSString *searchCursor;
@end
V2TIM_EXPORT @interface V2TIMUserSearchResult : NSObject
/// 是否已经返回全部满足搜索条件的用户列表
@property(nonatomic,assign) BOOL isFinished;
/// 满足搜索条件的用户总数量
@property(nonatomic,assign) NSUInteger totalCount;
/// 下一次云端搜索的起始位置
@property(nonatomic,strong,nullable) NSString *nextCursor;
/// 当前一次云端搜索返回的用户列表
@property(nonatomic,strong) NSArray<V2TIMUserFullInfo *> *userList;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 用户状态
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMUserStatus : NSObject
/// 用户的 ID
@property (nonatomic, copy, readonly, nullable) NSString *userID;
/// 用户的状态
@property (nonatomic, assign, readonly) V2TIMUserStatusType statusType;
/// 用户的自定义状态, 最大 100 字节
@property (nonatomic, copy, nullable) NSString *customStatus;
/// 用户在线设备列表
@property (nonatomic, strong, readonly) NSMutableArray<NSString *> *onlineDevices;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 群成员资料
//
/////////////////////////////////////////////////////////////////////////////////
/// 群成员基本资料
V2TIM_EXPORT @interface V2TIMGroupMemberInfo : NSObject
/// 用户 ID
@property(nonatomic,strong,nullable) NSString* userID;
/// 用户昵称
@property(nonatomic,strong,readonly,nullable) NSString* nickName;
/// 用户好友备注
@property(nonatomic,strong,readonly,nullable) NSString* friendRemark;
/// 群成员名片
@property(nonatomic,strong,nullable) NSString* nameCard;
/// 用户头像
@property(nonatomic,strong,readonly,nullable) NSString* faceURL;
/// 群成员在线终端列表
@property(nonatomic,strong,readonly) NSMutableArray<NSString*>* onlineDevices;
@end
/// 群成员详细资料
V2TIM_EXPORT @interface V2TIMGroupMemberFullInfo : V2TIMGroupMemberInfo
/// 群成员自定义字段
/// 首先要在 [控制台](https://console.cloud.tencent.com/im) (功能配置 -> 群成员自定义字段) 配置用户自定义字段,然后再调用该接口进行设置。
@property(nonatomic,strong,nullable) 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;
/// 群成员是否在线
/// @note
/// - 不支持直播群 AVChatRoom
/// - 该字段仅在调用 - getGroupMemberList:filter:nextSeq:succ:fail: 接口时有效;
/// - 7.3 及其以上版本支持,需要您购买旗舰版套餐。
@property(nonatomic,assign,readonly) BOOL isOnline;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// SDK 配置参数表
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMSDKConfig : NSObject
/// 本地写 log 文件的等级,默认 DEBUG 等级, IMSDK 的日志默认存储于 /Library/Caches/ 目录下
@property(nonatomic,assign) V2TIMLogLevel logLevel;
/// log 监听回调(回调在主线程,日志回调可能比较频繁,请注意不要在回调里面同步处理太多耗时任务,可能会堵塞主线程)
@property(nonatomic,copy,nullable) V2TIMLogListener logListener;
@end
#endif

View File

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

View File

@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyCollectedDataTypes</key>
<array/>
<key>NSPrivacyTrackingDomains</key>
<array/>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategorySystemBootTime</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>35F9.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryDiskSpace</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>E174.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>C617.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string>
</array>
</dict>
</array>
</dict>
</plist>

View File

@@ -0,0 +1,19 @@
// Copyright (c) 2025 Tencent. All rights reserved.
#ifndef TIM_IM_SDK_PLUS_H_
#define TIM_IM_SDK_PLUS_H_
#import "TIMErrorCode.h"
#import "V2TIMManager.h"
#import "V2TIMManager+APNS.h"
#import "V2TIMManager+Friendship.h"
#import "V2TIMManager+Conversation.h"
#import "V2TIMManager+Group.h"
#import "V2TIMManager+Community.h"
#import "V2TIMManager+Message.h"
#import "V2TIMManager+Signaling.h"
#import "V2TIMManager+VOIP.h"
#import "V2TIMManager+LiveActivity.h"
#endif

View File

@@ -0,0 +1,446 @@
// 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_HTTP_NO_CLEARTEXT_TRAFFIC_PERMISSION = 6029, ///< 无 http 协议的访问权限iOS 9.0 和 Android P 开始默认限制 http 协议iOS 平台可配置 NSAppTransportSecurity 选项Android 平台可配置 cleartextTrafficPermitted 选项,取消 http 协议的限制。
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_BLOCKED_BY_SENSITIVE_WORD = 7015, ///< SDK 本地内容审核,命中敏感词
// 账号错误码
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_INVALID_MSG_RECEIVER = 6032, ///< 无效的消息接收方,请在 IM 控制台检查消息的接收方是否存在。
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_COMM_SENSITIVE_IMAGE = 80004, ///< 图片安全打击,图片中可能包含敏感内容。
// 账号错误码
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_LOW_SDK_VERSION = 70404, ///< 您的SDK版本过低请升级到最新版本.
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_PROFILE_SUBSCRIPTION_DISABLED = 72012, ///< 用户资料变更订阅能力未开启,请参见 [订阅非好友用户资料](https://cloud.tencent.com/document/product/269/75416#53edea52-35ef-4d82-aae9-941ba690f051),登录 [IM 控制台](https://console.tencentcloud.com/im) 开启该功能。
// 关系链错误码
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_ALREADY_FRIENDS = 30015, ///< 已经存在好友关系。
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_FRIENDSHIP_SELF_FOLLOWING_COUNT_EXCEEDS_LIMIT = 32100, ///< 自己的关注数量到达上限。
ERR_SVR_FRIENDSHIP_PEER_FOLLOWERS_COUNT_EXCEEDS_LIMIT = 32101, ///< 对方的粉丝数量到达上限。
ERR_SVR_FRIENDSHIP_SELF_MUTUAL_FOLLOWERS_COUNT_EXCEEDS_LIMIT = 32102, ///< 自己的互关数量到达上限。
ERR_SVR_FRIENDSHIP_PEER_MUTUAL_FOLLOWERS_COUNT_EXCEEDS_LIMIT = 32103, ///< 对方的互关数量到达上限。
// 最近联系人错误码
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_REACTION_COUNT_LIMIT = 23005, ///< 单条消息 Reaction 数量超过最大限制。
ERR_SVR_MSG_REACTION_USER_COUNT_LIMIT = 23006, ///< 单个 Reaction 用户数量超过最大限制。
ERR_SVR_MSG_REACTION_ALREADY_CONTAIN_USER = 23007, ///< Reaction 已经包含当前操作用户。
ERR_SVR_MSG_REACTION_NOT_EXISTS = 23008, ///< Reaction 不存在。
ERR_SVR_MSG_REACTION_NOT_CONTAIN_USER = 23009, ///< Reaction 不包含当前操作用户。
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_GROUP_PINNED_MESSAGE_COUNT_LIMIT = 10070, ///< 置顶消息超出数量限制。
ERR_SVR_GROUP_MESSAGE_ALREADY_PINNED = 10071, ///< 消息已经被置顶。
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,111 @@
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 IMSDK
//
// 模块名称V2TIMManager+APNS
//
// 消息推送接口,里面包含了消息的推送的开启逻辑
//
/////////////////////////////////////////////////////////////////////
#import "V2TIMManager.h"
@class V2TIMAPNSConfig;
V2TIM_EXPORT @protocol V2TIMAPNSListener;
V2TIM_EXPORT @interface V2TIMManager (APNS)
/////////////////////////////////////////////////////////////////////////////////
//
// 设置 APNS 推送
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 1.1 设置 APNS 监听
*/
- (void)setAPNSListener:(_Nullable id<V2TIMAPNSListener>)apnsListener NS_SWIFT_NAME(setAPNSListener(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* _Nullable)config succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setAPNS(config:succ: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,482 @@
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 IMSDK
//
// 模块名称V2TIMManager+Community
//
// 社群接口,里面包含了创建话题、删除话题、修改话题、获取话题列表等逻辑
//
/////////////////////////////////////////////////////////////////////
#import "V2TIMManager.h"
#import "V2TIMManager+Group.h"
V2TIM_EXPORT @protocol V2TIMCommunityListener;
@class V2TIMTopicInfo;
@class V2TIMTopicInfoResult;
@class V2TIMTopicOperationResult;
@class V2TIMPermissionGroupInfo;
@class V2TIMPermissionGroupOperationResult;
@class V2TIMPermissionGroupInfoResult;
@class V2TIMPermissionGroupMemberOperationResult;
@class V2TIMPermissionGroupMemberInfoResult;
@class V2TIMTopicPermissionOperationResult;
@class V2TIMTopicPermissionResult;
V2TIM_EXPORT @interface V2TIMManager (Community)
/// 操作话题列表结果
typedef void(^V2TIMTopicOperationResultSucc)(NSMutableArray<V2TIMTopicOperationResult *> *resultList);
/// 获取话题列表结果
typedef void(^V2TIMTopicInfoResultListSucc)(NSMutableArray<V2TIMTopicInfoResult *> *resultList);
/// 创建话题成功回调
typedef void (^V2TIMCreateTopicSucc)(NSString * _Nullable topicID);
/// 创建权限组成功回调
typedef void (^V2TIMCreatePermissionGroupSucc)(NSString * _Nullable permissionGroupID);
/// 操作权限组结果
typedef void (^V2TIMPermissionGroupOperationResultSucc)(NSMutableArray<V2TIMPermissionGroupOperationResult *> *resultList);
/// 获取权限组列表结果
typedef void (^V2TIMPermissionGroupInfoResultListSucc)(NSMutableArray<V2TIMPermissionGroupInfoResult *> *resultList);
/// 操作权限组成员结果
typedef void (^V2TIMPermissionGroupMemberOperationResultListSucc)(NSMutableArray<V2TIMPermissionGroupMemberOperationResult *> *resultList);
/// 获取权限组成员结果
typedef void (^V2TIMPermissionGroupMemberInfoResultListSucc)(NSString * _Nullable nextCursor, NSMutableArray<V2TIMGroupMemberFullInfo *> *resultList);
/// 获取话题权限结果
typedef void (^V2TIMTopicPermissionResultSucc)(NSMutableArray<V2TIMTopicPermissionResult *> *resultList);
/// 社群权限值
typedef NS_ENUM(NSInteger, V2TIMCommunityPermissionValue) {
V2TIM_COMMUNITY_PERMISSION_MANAGE_GROUP_INFO = 0x1, ///< 修改群资料权限。该位设置为0表示没有该权限设置为1表示有该权限。
V2TIM_COMMUNITY_PERMISSION_MANAGE_GROUP_MEMBER = 0x1 << 1, ///< 群成员管理权限包含踢人进群审核、修改成员资料等。该位设置为0表示没有该权限设置为1表示有该权限。
V2TIM_COMMUNITY_PERMISSION_MANAGE_PERMISSION_GROUP_INFO = 0x1 << 2, ///< 管理权限组资料权限。该位设置为0表示没有该权限设置为1表示有该权限。权限包含创建、修改、删除权限组在权限组中添加、修改、删除话题权限。
V2TIM_COMMUNITY_PERMISSION_MANAGE_PERMISSION_GROUP_MEMBER = 0x1 << 3, ///< 权限组成员管理权限包含邀请成员进权限组和把成员从权限组踢出等。该位设置为0表示没有该权限设置为1表示有该权限。
V2TIM_COMMUNITY_PERMISSION_MANAGE_TOPIC_IN_COMMUNITY = 0x1 << 4, ///< 话题管理权限包含创建、修改、删除话题等。该位设置为0表示没有该权限设置为1表示有该权限。
V2TIM_COMMUNITY_PERMISSION_MUTE_MEMBER = 0x1 << 5, ///< 对某群成员在社群下所有话题的禁言权限。该位设置为0表示没有该权限设置为1表示有该权限。
V2TIM_COMMUNITY_PERMISSION_SEND_MESSAGE = 0x1 << 6, ///< 群成员在社群下所有话题的发消息权限。该位设置为0表示没有该权限设置为1表示有该权限。
V2TIM_COMMUNITY_PERMISSION_AT_ALL = 0x1 << 7, ///< 在社群下所有话题发 at all 消息权限。该位设置为0表示没有该权限设置为1表示有该权限。
V2TIM_COMMUNITY_PERMISSION_GET_HISTORY_MESSAGE = 0x1 << 8, ///< 在社群下所有话题拉取入群前的历史消息权限。该位设置为0表示没有该权限设置为1表示有该权限。
V2TIM_COMMUNITY_PERMISSION_REVOKE_OTHER_MEMBER_MESSAGE = 0x1 << 9, ///< 在社群下所有话题撤回他人消息权限。该位设置为0表示没有该权限设置为1表示有该权限。
V2TIM_COMMUNITY_PERMISSION_BAN_MEMBER = 0x1 << 10, ///< 封禁社群成员权限。该位设置为0表示没有该权限设置为1表示有该权限。
};
/// 话题权限值
typedef NS_ENUM(NSInteger, V2TIMTopicPermissionValue) {
V2TIM_TOPIC_PERMISSION_MANAGE_TOPIC = 0x1, ///< 管理当前话题的权限包括修改当前话题的资料、删除当前话题。该位设置为0表示没有该权限设置为1表示有该权限
V2TIM_TOPIC_PERMISSION_MANAGE_TOPIC_PERMISSION = 0x1 << 1, ///< 在当前话题中管理话题权限包括添加、修改、移除话题权限。该位设置为0表示没有该权限设置为1表示有该权限
V2TIM_TOPIC_PERMISSION_MUTE_MEMBER = 0x1 << 2, ///< 在当前话题中禁言成员权限。该位设置为0表示没有该权限设置为1表示有该权限
V2TIM_TOPIC_PERMISSION_SEND_MESSAGE = 0x1 << 3, ///< 在当前话题中发消息权限。该位设置为0表示没有该权限设置为1表示有该权限
V2TIM_TOPIC_PERMISSION_GET_HISTORY_MESSAGE = 0x1 << 4, ///< 在当前话题中拉取入群前的历史消息权限。该位设置为0表示没有该权限设置为1表示有该权限
V2TIM_TOPIC_PERMISSION_REVOKE_OTHER_MEMBER_MESSAGE = 0x1 << 5, ///< 在当前话题中撤回他人消息权限。该位设置为0表示没有该权限设置为1表示有该权限
V2TIM_TOPIC_PERMISSION_AT_ALL = 0x1 << 6, ///< 在当前话题中发消息时有 at all 权限。该位设置为0表示没有该权限设置为1表示有该权限
};
/////////////////////////////////////////////////////////////////////////////////
//
// 社群监听器
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 1.1 添加社群监听器
*/
- (void)addCommunityListener:(id<V2TIMCommunityListener>)listener NS_SWIFT_NAME(addCommunityListener(listener:));
/**
* 1.2 移除社群监听器
*/
- (void)removeCommunityListener:(id<V2TIMCommunityListener>)listener NS_SWIFT_NAME(removeCommunityListener(listener:));
/////////////////////////////////////////////////////////////////////////////////
//
// 社群接口
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 2.1 创建支持话题的社群
*/
- (void)createCommunity:(V2TIMGroupInfo*)info memberList:(NSArray<V2TIMCreateGroupMemberInfo *>* _Nullable)memberList succ:(V2TIMCreateGroupSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(createCommunity(info:memberList:succ:fail:));
/**
* 2.1 获取当前用户已经加入的支持话题的社群列表
*/
- (void)getJoinedCommunityList:(V2TIMGroupInfoListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getJoinedCommunityList(succ:fail:));
/**
* 2.2 创建话题
*
* @param groupID 社群 ID必须以 @TGS#_ 开头。
*/
- (void)createTopicInCommunity:(NSString *)groupID topicInfo:(V2TIMTopicInfo *)topicInfo succ:(V2TIMCreateTopicSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(createTopicInCommunity(groupID:topicInfo:succ:fail:));
/**
* 2.3 删除话题
*/
- (void)deleteTopicFromCommunity:(NSString *)groupID topicIDList:(NSArray<NSString *>*)topicIDList succ:(V2TIMTopicOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(deleteTopicFromCommunity(groupID:topicIDList:succ:fail:));
/**
* 2.4 修改话题信息
*/
- (void)setTopicInfo:(V2TIMTopicInfo *)topicInfo succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setTopicInfo(topicInfo:succ:fail:));
/**
* 2.5 获取话题列表。
* @note: topicIDList 传空时,获取此社群下的所有话题列表
*/
- (void)getTopicInfoList:(NSString *)groupID topicIDList:(NSArray<NSString *>* _Nullable)topicIDList succ:(V2TIMTopicInfoResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getTopicInfoList(groupID:topicIDList:succ:fail:));
/////////////////////////////////////////////////////////////////////////////////
//
// 权限组接口
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 3.1 创建社群权限组7.8 及其以上版本支持)
* @note
* - 该功能为旗舰版功能,需要您购买旗舰版套餐。
*/
- (void)createPermissionGroupInCommunity:(V2TIMPermissionGroupInfo *)permissionGroupInfo succ:(V2TIMCreatePermissionGroupSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(createPermissionGroupInCommunity(permissionGroupInfo:succ:fail:));
/**
* 3.2 删除社群权限组7.8 及其以上版本支持)
* @note
* - 该功能为旗舰版功能,需要您购买旗舰版套餐。
*/
- (void)deletePermissionGroupFromCommunity:(NSString *)groupID permissionGroupIDList:(NSArray<NSString *>*)permissionGroupIDList succ:(V2TIMPermissionGroupOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(deletePermissionGroupFromCommunity(groupID:permissionGroupIDList:succ:fail:));
/**
* 3.3 修改社群权限组7.8 及其以上版本支持)
* @note
* - 该功能为旗舰版功能,需要您购买旗舰版套餐。
*/
- (void)modifyPermissionGroupInfoInCommunity:(V2TIMPermissionGroupInfo *)permissionGroupInfo succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(modifyPermissionGroupInfoInCommunity(permissionGroupInfo:succ:fail:));
/**
* 3.4 获取已加入的社群权限组列表7.8 及其以上版本支持)
* @note
* - 该功能为旗舰版功能,需要您购买旗舰版套餐。
*/
- (void)getJoinedPermissionGroupListInCommunity:(NSString *)groupID succ:(V2TIMPermissionGroupInfoResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getJoinedPermissionGroupListInCommunity(groupID:succ:fail:));
/**
* 3.5 获取社群权限组列表7.8 及其以上版本支持)
* @note
* - 该功能为旗舰版功能,需要您购买旗舰版套餐。
* - permissionGroupIDList 为空时,获取所有的权限组列表;不为空时,获取指定的权限组列表
*/
- (void)getPermissionGroupListInCommunity:(NSString *)groupID permissionGroupIDList:(NSArray<NSString *>* _Nullable)permissionGroupIDList succ:(V2TIMPermissionGroupInfoResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getPermissionGroupListInCommunity(groupID:permissionGroupIDList:succ:fail:));
/**
* 3.6 向社群权限组添加成员7.7 及其以上版本支持)
* @note
* - 该功能为旗舰版功能,需要您购买旗舰版套餐。
*/
- (void)addCommunityMembersToPermissionGroup:(NSString *)groupID permissionGroupID:(NSString *)permissionGroupID memberList:(NSArray<NSString *>*)memberList succ:(V2TIMPermissionGroupMemberOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(addCommunityMembersToPermissionGroup(groupID:permissionGroupID:memberList:succ:fail:));
/**
* 3.7 从社群权限组删除成员7.8 及其以上版本支持)
*/
- (void)removeCommunityMembersFromPermissionGroup:(NSString *)groupID permissionGroupID:(NSString *)permissionGroupID memberList:(NSArray<NSString *>*)memberList succ:(V2TIMPermissionGroupMemberOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(removeCommunityMembersFromPermissionGroup(groupID:permissionGroupID:memberList:succ:fail:));
/**
* 3.8 获取社群权限组成员列表7.8 及其以上版本支持)
* @note
* - 该功能为旗舰版功能,需要您购买旗舰版套餐。
*/
- (void)getCommunityMemberListInPermissionGroup:(NSString *)groupID permissionGroupID:(NSString *)permissionGroupID nextCursor:(NSString * _Nullable)nextCursor succ:(V2TIMPermissionGroupMemberInfoResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getCommunityMemberListInPermissionGroup(groupID:permissionGroupID:nextCursor:succ:fail:));
/**
* 3.9 向权限组添加话题权限7.8 及其以上版本支持)
* @note
* - 该功能为旗舰版功能,需要您购买旗舰版套餐。
*/
- (void)addTopicPermissionToPermissionGroup:(NSString *)groupID permissionGroupID:(NSString *)permissionGroupID topicPermissionMap:(NSDictionary<NSString *, NSNumber *>*)topicPermissionMap succ:(V2TIMTopicOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(addTopicPermissionToPermissionGroup(groupID:permissionGroupID:topicPermissionMap:succ:fail:));
/**
* 3.10 从权限组中删除话题权限7.8 及其以上版本支持)
* @note
* - 该功能为旗舰版功能,需要您购买旗舰版套餐。
*/
- (void)deleteTopicPermissionFromPermissionGroup:(NSString *)groupID permissionGroupID:(NSString *)permissionGroupID topicIDList:(NSArray<NSString *>*)topicIDList succ:(V2TIMTopicOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(deleteTopicPermissionFromPermissionGroup(groupID:permissionGroupID:topicIDList:succ:fail:));
/**
* 3.11 修改权限组中的话题权限7.8 及其以上版本支持)
* @note
* - 该功能为旗舰版功能,需要您购买旗舰版套餐。
*/
- (void)modifyTopicPermissionInPermissionGroup:(NSString *)groupID permissionGroupID:(NSString *)permissionGroupID topicPermissionMap:(NSDictionary<NSString *, NSNumber *>*)topicPermissionMap succ:(V2TIMTopicOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(modifyTopicPermissionInPermissionGroup(groupID:permissionGroupID:topicPermissionMap:succ:fail:));
/**
* 3.12 获取权限组中的话题权限7.8 及其以上版本支持)
* @note
* - 该功能为旗舰版功能,需要您购买旗舰版套餐。
*/
- (void)getTopicPermissionInPermissionGroup:(NSString *)groupID permissionGroupID:(NSString *)permissionGroupID topicIDList:(NSArray<NSString *>*)topicIDList succ:(V2TIMTopicPermissionResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getTopicPermissionInPermissionGroup(groupID:permissionGroupID:topicIDList:succ:fail:));
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 社群回调
//
/////////////////////////////////////////////////////////////////////////////////
/// 资料关系链回调
V2TIM_EXPORT @protocol V2TIMCommunityListener <NSObject>
@optional
/// 话题创建回调
- (void)onCreateTopic:(NSString * _Nullable)groupID topicID:(NSString * _Nullable)topicID NS_SWIFT_NAME(onCreateTopic(groupID:topicID:));
/// 话题被删除回调
- (void)onDeleteTopic:(NSString * _Nullable)groupID topicIDList:(NSArray<NSString *> *)topicIDList NS_SWIFT_NAME(onDeleteTopic(groupID:topicIDList:));
/// 话题更新回调
- (void)onChangeTopicInfo:(NSString * _Nullable)groupID topicInfo:(V2TIMTopicInfo *)topicInfo NS_SWIFT_NAME(onChangeTopicInfo(groupID:topicInfo:));
/// 收到 RESTAPI 下发的话题自定义系统消息
- (void)onReceiveTopicRESTCustomData:(NSString * _Nullable)topicID data:(NSData * _Nullable)data NS_SWIFT_NAME(onReceiveTopicRESTCustomData(topicID:data:));
/// 权限组创建通知
- (void)onCreatePermissionGroup:(NSString * _Nullable)groupID permissionGroupInfo:(V2TIMPermissionGroupInfo *)permissionGroupInfo NS_SWIFT_NAME(onCreatePermissionGroup(groupID:permissionGroupInfo:));
/// 权限组删除通知
- (void)onDeletePermissionGroup:(NSString * _Nullable)groupID permissionGroupIDList:(NSArray<NSString *> *)permissionGroupIDList NS_SWIFT_NAME(onDeletePermissionGroup(groupID:permissionGroupIDList:));
/// 权限组更新通知
- (void)onChangePermissionGroupInfo:(NSString * _Nullable)groupID permissionGroupInfo:(V2TIMPermissionGroupInfo *)permissionGroupInfo NS_SWIFT_NAME(onChangePermissionGroupInfo(groupID:permissionGroupInfo:));
/// 添加成员到权限组通知
- (void)onAddMembersToPermissionGroup:(NSString * _Nullable)groupID permissionGroupID:(NSString * _Nullable)permissionGroupID memberIDList:(NSArray<NSString *> *)memberIDList NS_SWIFT_NAME(onAddMembersToPermissionGroup(groupID:permissionGroupID:memberIDList:));
/// 从权限组中删除成员通知
- (void)onRemoveMembersFromPermissionGroup:(NSString * _Nullable)groupID permissionGroupID:(NSString * _Nullable)permissionGroupID memberIDList:(NSArray<NSString *> *)memberIDList NS_SWIFT_NAME(onRemoveMembersFromPermissionGroup(groupID:permissionGroupID:memberIDList:));
/// 话题权限添加通知
- (void)onAddTopicPermission:(NSString * _Nullable)groupID permissionGroupID:(NSString * _Nullable)permissionGroupID topicPermissionMap:(NSDictionary<NSString *, NSNumber *>*)topicPermissionMap NS_SWIFT_NAME(onAddTopicPermission(groupID:permissionGroupID:topicPermissionMap:));
/// 话题权限删除通知
- (void)onDeleteTopicPermission:(NSString * _Nullable)groupID permissionGroupID:(NSString * _Nullable)permissionGroupID topicIDList:(NSArray<NSString *>*)topicIDList NS_SWIFT_NAME(onDeleteTopicPermission(groupID:permissionGroupID:topicIDList:));
/// 话题权限修改通知
- (void)onModifyTopicPermission:(NSString * _Nullable)groupID permissionGroupID:(NSString * _Nullable)permissionGroupID topicPermissionMap:(NSDictionary<NSString *, NSNumber *>*)topicPermissionMap NS_SWIFT_NAME(onModifyTopicPermission(groupID:permissionGroupID:topicPermissionMap:));
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 话题基本资料
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMTopicInfo : NSObject
/// 话题 ID只能在创建话题或者修改话题信息的时候设置。组成方式为社群 ID + @TOPIC#_xxx例如社群 ID 为 @TGS#_123则话题 ID 为 @TGS#_123@TOPIC#_xxx
@property(nonatomic, strong, nullable) NSString *topicID;
/// 话题类型(默认为 Public 话题)(从 8.4 版本开始支持)
/// "Public" :公开话题,社群内成员可以自由进出发言。
/// "Private" :私密话题,有自己的成员列表(成员上限 10000 人),社群成员需要加入话题才能发言(私密话题需要购买企业版套餐包)。
@property(nonatomic, strong, nullable) NSString *topicType;
/// 话题名称,最长 150 字节,使用 UTF-8 编码
@property(nonatomic, strong, nullable) NSString *topicName;
/// 话题头像,最长 500 字节,使用 UTF-8 编码
@property(nonatomic, strong, nullable) NSString *topicFaceURL;
/// 话题介绍,最长 400 字节,使用 UTF-8 编码
@property(nonatomic, strong, nullable) NSString *introduction;
/// 话题公告,最长 400 字节,使用 UTF-8 编码
@property(nonatomic, strong, nullable) NSString *notification;
/// 话题全员禁言
@property(nonatomic, assign) BOOL isAllMuted;
/// 当前用户在话题中的禁言时间,单位:秒
@property(nonatomic, assign, readonly) uint32_t selfMuteTime;
/// 话题自定义字段
@property(nonatomic, strong, nullable) NSString *customString;
/// 话题消息接收选项,修改话题消息接收选项请调用 setGroupReceiveMessageOpt 接口
@property(nonatomic, assign, readonly) V2TIMReceiveMessageOpt recvOpt;
/// 话题草稿
@property(nonatomic, strong, nullable) NSString *draftText;
/// 话题消息未读数量
@property(nonatomic, assign, readonly) uint64_t unreadCount;
/// 话题 lastMessage
@property(nonatomic,strong,readonly, nullable) V2TIMMessage *lastMessage;
/// 话题已读消息的 sequence从 7.8 版本开始支持
@property(nonatomic, assign, readonly) uint64_t readSequence;
/// 话题 at 信息列表
@property(nonatomic, strong, readonly, nullable) NSArray<V2TIMGroupAtInfo *> *groupAtInfolist;
/// 话题创建时间,单位:秒
@property(nonatomic, assign, readonly) uint32_t createTime;
/// 申请加入话题是否需要管理员审批(私密话题有效,默认不需要审批,可以自由加入)(从 8.4 版本开始支持)
@property(nonatomic, assign) V2TIMGroupAddOpt topicAddOpt;
/// 邀请加入话题是否需要管理员审批(私密话题有效,默认不需要审批,可以自由加入)(从 8.4 版本开始支持)
@property(nonatomic, assign) V2TIMGroupAddOpt topicApproveOpt;
/// 话题默认群成员(私密话题有效,最大支持 100 个群成员,只能在创建话题的时候设置)(从 8.4 版本开始支持)
@property(nonatomic, strong, nullable) NSArray<V2TIMCreateGroupMemberInfo *> *memberList;
/// 话题成员的最大个数(私密话题有效,最大支持 10000默认 10000只能在创建话题的时候设置从 8.4 版本开始支持)
@property(nonatomic, assign) uint32_t memberMaxCount;
/// 话题默认权限7.8 版本开始支持
/// 群成员在没有加入任何权限组时的默认权限,仅在社群资料 V2TIMGroupInfo 中 enablePermissionGroup = true 打开权限组之后生效
@property(nonatomic, assign) uint64_t defaultPermissions;
/// 登录用户在话题中的消息接收选项是否继承社群。该功能仅增强版 SDK 8.1 及以上版本支持。
- (BOOL)isInheritMessageReceiveOptionFromCommunity;
/**
* 设置登录用户在话题中的消息接收选项是否继承社群。该功能仅增强版 SDK 8.1 及以上版本支持。
*/
- (void)setInheritMessageReceiveOptionFromCommunity:(BOOL)isInherit succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 话题处理结果
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMTopicOperationResult : NSObject
/// 结果 0成功非0失败
@property(nonatomic, assign) int errorCode;
/// 错误信息
@property(nonatomic, strong, nullable) NSString *errorMsg;
/// 话题 ID
@property(nonatomic, strong, nullable) NSString *topicID;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 话题资料获取结果
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMTopicInfoResult : NSObject
/// 结果 0成功非0失败
@property(nonatomic, assign) int errorCode;
/// 错误信息
@property(nonatomic, strong, nullable) NSString *errorMsg;
/// 话题资料
@property(nonatomic, strong) V2TIMTopicInfo *topicInfo;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 权限组信息
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMPermissionGroupInfo : NSObject
/// 群 ID
@property(nonatomic, strong, nullable) NSString *groupID;
/// 权限组 ID
@property(nonatomic, strong, nullable) NSString *permissionGroupID;
/// 权限组名称
@property(nonatomic, strong, nullable) NSString *permissionGroupName;
/// 群权限
@property(nonatomic, assign) uint64_t groupPermission;
/// 自定义数据
@property(nonatomic, strong, nullable) NSString *customData;
/// 成员人数
@property(nonatomic, assign, readonly) uint64_t memberCount;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 权限组信息获取结果
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMPermissionGroupInfoResult : NSObject
/// 结果 0成功非0失败
@property(nonatomic,assign) int resultCode;
/// 如果获取失败,会返回错误信息
@property(nonatomic,strong,nullable) NSString *resultMsg;
/// 如果获取成功,会返回对应的 info
@property(nonatomic,strong) V2TIMPermissionGroupInfo *info;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 权限组处理结果
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMPermissionGroupOperationResult : NSObject
/// 结果 0成功非0失败
@property(nonatomic,assign) int resultCode;
/// 如果获取失败,会返回错误信息
@property(nonatomic,strong,nullable) NSString *resultMsg;
/// 如果获取成功,会返回对应的 info
@property(nonatomic,strong,nullable) NSString *permissionGroupID;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 权限组成员处理结果
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMPermissionGroupMemberOperationResult : NSObject
/// 成员 userID
@property(nonatomic,strong,nullable) NSString *memberID;
/// 结果 0成功非0失败
@property(nonatomic,assign) int resultCode;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 话题权限获取结果
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMTopicPermissionResult : NSObject
/// 话题
@property(nonatomic,strong,nullable) NSString *topicID;
/// 结果 0成功非0失败
@property(nonatomic,assign) int resultCode;
/// 如果获取失败,会返回错误信息
@property(nonatomic,strong,nullable) NSString *resultMsg;
/// 话题权限
@property(nonatomic,assign) uint64_t topicPermission;
/// 社群 ID
@property(nonatomic,strong,nullable) NSString *groupID;
/// 权限组 ID
@property(nonatomic,strong,nullable) NSString *permissionGroupID;
@end

View File

@@ -0,0 +1,505 @@
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 IMSDK
//
// 模块名称V2TIMManager+Conversation
//
// 会话接口,里面包含了会话的获取,删除,更新的逻辑
//
/////////////////////////////////////////////////////////////////////
#import "V2TIMManager.h"
#import "V2TIMManager+Group.h"
#import "V2TIMManager+Message.h"
V2TIM_EXPORT @protocol V2TIMConversationListener;
@class V2TIMConversation;
@class V2TIMConversationListFilter;
@class V2TIMConversationOperationResult;
@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 NS_SWIFT_NAME(getConversationList(nextSeq:count:succ: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 NS_SWIFT_NAME(getConversation(conversationID:succ: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 NS_SWIFT_NAME(getConversationList(conversationIDList:succ: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 NS_SWIFT_NAME(getConversationListByFilter(filter:nextSeq:count:succ:fail:));
/**
* 1.7 删除会话以及该会话中的历史消息
*
* @param conversationID 会话唯一 IDC2C 单聊组成方式:[NSString stringWithFormat:@"c2c_%@",userID];群聊组成方式为 [NSString stringWithFormat:@"group_%@",groupID]
*
* @note
* - 该会话以及会话中的历史消息,会被 SDK 从本地和服务端一同删除掉,并且不可恢复。
*/
- (void)deleteConversation:(NSString *)conversationID succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(deleteConversation(conversation:succ: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 NS_SWIFT_NAME(deleteConversationList(conversationIDList:clearMessage:succ:fail:));
/**
* 1.9 设置会话草稿
*
* @param conversationID 会话唯一 IDC2C 单聊组成方式:[NSString stringWithFormat:@"c2c_%@",userID];群聊组成方式为 [NSString stringWithFormat:@"group_%@",groupID]
*
* 只在本地保存,不会存储 Server不能多端同步程序卸载重装会失效。
*/
- (void)setConversationDraft:(NSString *)conversationID draftText:(NSString * _Nullable)draftText succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setConversationDraft(conversationID:draftText:succ:fail:));
/**
* 1.10 设置会话自定义数据(从 6.5 版本开始支持)
*
* @param customData 自定义数据,最大支持 256 bytes
*/
- (void)setConversationCustomData:(NSArray<NSString *> *)conversationIDList customData:(NSData * _Nullable)customData succ:(V2TIMConversationOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(setConversationCustomData(conversationIDList:customData:succ: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:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(pinConversation(conversationID:isPinned:succ: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 NS_SWIFT_NAME(markConversation(conversationIDList:markType:enableMark:succ:fail:));
/**
* 1.13 获取所有会话的未读消息总数5.3.425 及以上版本支持)
* @note
* - 调用该接口以后任意会话的未读数发生变化时SDK 都会给您抛 onTotalUnreadMessageCountChanged 回调。
* - 未读总数会减去设置为免打扰的会话的未读数,即消息接收选项设置为 V2TIMMessage.V2TIM_NOT_RECEIVE_MESSAGE 或 V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE 或 V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE_EXCEPT_AT 的会话。
*/
- (void)getTotalUnreadMessageCount:(V2TIMTotalUnreadMessageCountSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getTotalUnreadMessageCount(succ:fail:));
/**
* 1.14 获取根据 filter 过滤的会话未读总数7.0 及以上版本支持)
*
* @param filter 会话 filter
*
* @note
* - 未读总数会减去设置为免打扰的会话的未读数,即消息接收选项设置为 V2TIMMessage.V2TIM_NOT_RECEIVE_MESSAGE 或 V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE 或 V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE_EXCEPT_AT 的会话。
*/
- (void)getUnreadMessageCountByFilter:(V2TIMConversationListFilter *)filter succ:(V2TIMTotalUnreadMessageCountSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getUnreadMessageCountByFilter(filter:succ:fail:));
/**
* 1.15 注册监听指定 filter 的会话未读总数变化7.0 及以上版本支持)
*
* @param filter 会话 filter
*
* @note
* - 当您调用这个接口以后,该 filter 下的未读数发生变化时SDK 会给您抛 onUnreadMessageCountChangedByFilter 回调。
*/
- (void)subscribeUnreadMessageCountByFilter:(V2TIMConversationListFilter *)filter NS_SWIFT_NAME(subscribeUnreadMessageCountByFilter(filter:));
/**
* 1.16 取消监听指定 filter 的会话未读总数变化7.0 及以上版本支持)
*
* @param filter 会话 filter
*
*/
- (void)unsubscribeUnreadMessageCountByFilter:(V2TIMConversationListFilter *)filter NS_SWIFT_NAME(unsubscribeUnreadMessageCountByFilter(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 * _Nullable)conversationID cleanTimestamp:(uint64_t)cleanTimestamp cleanSequence:(uint64_t)cleanSequence succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(cleanConversationUnreadMessageCount(conversationID:cleanTimestamp:cleanSequence:succ:fail:));
/**
* 1.18 设置会话监听器(待废弃接口,请使用 addConversationListener 和 removeConversationListener 接口)
*/
- (void)setConversationListener:(id<V2TIMConversationListener>)listener NS_SWIFT_NAME(setConversationListener(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 NS_SWIFT_NAME(createConversationGroup(groupName:conversationIDList:succ:fail:));
/**
* 2.2 获取会话分组列表
*
* @note 该接口获取的是本地缓存的会话分组,建议在 onSyncServerFinish 之后调用。
*/
- (void)getConversationGroupList:(V2TIMConversationGroupListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getConversationGroupList(succ:fail:));
/**
* 2.3 删除会话分组
*/
- (void)deleteConversationGroup:(NSString *)groupName succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(deleteConversationGroup(groupName:succ:fail:));
/**
* 2.4 重命名会话分组
*/
- (void)renameConversationGroup:(NSString*)oldName newName:(NSString*)newName succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(renameConversationGroup(oldName:newName:succ:fail:));
/**
* 2.5 添加会话到一个会话分组
*/
- (void)addConversationsToGroup:(NSString *)groupName conversationIDList:(NSArray<NSString *> *)conversationIDList succ:(V2TIMConversationOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(addConversationsToGroup(groupName:conversationIDList:succ:fail:));
/**
* 2.6 从一个会话分组中删除会话
*/
- (void)deleteConversationsFromGroup:(NSString *)groupName conversationIDList:(NSArray<NSString *> *)conversationIDList succ:(V2TIMConversationOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(deleteConversationsFromGroup(groupName:conversationIDList:succ:fail:));
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 会话变更监听器
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @protocol V2TIMConversationListener <NSObject>
@optional
/////////////////////////////////////////////////////////////////////////////////
// 会话基础通知
/////////////////////////////////////////////////////////////////////////////////
/**
* 同步服务器会话开始SDK 会在登录成功或者断网重连后自动同步服务器会话,您可以监听这个事件做一些 UI 进度展示操作。
*/
- (void)onSyncServerStart;
/**
* 同步服务器会话完成,如果会话有变更,会通过 onNewConversation | onConversationChanged 回调告知客户
*/
- (void)onSyncServerFinish;
/**
* 同步服务器会话失败
*/
- (void)onSyncServerFailed;
/**
* 有新的会话(比如收到一个新同事发来的单聊消息、或者被拉入了一个新的群组中),可以根据会话的 orderKey 重新对会话列表做排序。
*/
- (void)onNewConversation:(NSArray<V2TIMConversation*> *) conversationList NS_SWIFT_NAME(onNewConversation(conversationList:));
/**
* 某些会话的关键信息发生变化(未读计数发生变化、最后一条消息被更新等等),可以根据会话的 orderKey 重新对会话列表做排序。
*/
- (void)onConversationChanged:(NSArray<V2TIMConversation*> *) conversationList NS_SWIFT_NAME(onConversationChanged(conversationList:));
/**
* 会话被删除的通知7.2 及以上版本支持)
*
* @note
* conversationIDList 表示被删除的会话唯一 ID 列表。C2C 单聊组成方式:[NSString stringWithFormat:@"c2c_%@",userID];群聊组成方式为 [NSString stringWithFormat:@"group_%@",groupID]
*/
- (void)onConversationDeleted:(NSArray<NSString *> *)conversationIDList NS_SWIFT_NAME(onConversationDeleted(conversationIDList:));
/**
* 全部会话未读总数变更的通知5.3.425 及以上版本支持)
* @note
* - 当您调用 getTotalUnreadMessageCount 获取全部会话未读总数以后任意会话的未读数发生变化时SDK 都会通过该回调把最新的未读总数通知给您。
* - 未读总数会减去设置为免打扰的会话的未读数,即消息接收选项设置为 V2TIMMessage.V2TIM_NOT_RECEIVE_MESSAGE 或 V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE 或 V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE_EXCEPT_AT 的会话。
*/
- (void)onTotalUnreadMessageCountChanged:(UInt64)totalUnreadCount NS_SWIFT_NAME(onTotalUnreadMessageCountChanged(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 或 V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE_EXCEPT_AT 的会话。
*/
- (void)onUnreadMessageCountChangedByFilter:(V2TIMConversationListFilter *)filter totalUnreadCount:(UInt64)totalUnreadCount NS_SWIFT_NAME(onUnreadMessageCountChangedByFilter(filter:totalUnreadCount:));
/////////////////////////////////////////////////////////////////////////////////
// 会话分组相关通知(从 6.5 版本开始支持)
/////////////////////////////////////////////////////////////////////////////////
/**
* 会话分组被创建
*/
- (void)onConversationGroupCreated:(NSString * _Nullable)groupName conversationList:(NSArray<V2TIMConversation *> *)conversationList NS_SWIFT_NAME(onConversationGroupCreated(groupName:conversationList:));
/**
* 会话分组被删除
*/
- (void)onConversationGroupDeleted:(NSString * _Nullable)groupName NS_SWIFT_NAME(onConversationGroupDeleted(groupName:));
/**
* 会话分组名变更
*/
- (void)onConversationGroupNameChanged:(NSString * _Nullable)oldName newName:(NSString * _Nullable)newName NS_SWIFT_NAME(onConversationGroupNameChanged(oldName:newName:));
/**
* 会话分组新增会话
*/
- (void)onConversationsAddedToGroup:(NSString * _Nullable)groupName conversationList:(NSArray<V2TIMConversation *> *)conversationList NS_SWIFT_NAME(onConversationsAddedToGroup(groupName:conversationList:));
/**
* 会话分组删除会话
* @note
* - reason 表示会话从所在分组删除的原因,其取值有:
* - 当 reason 为 0 时,表示由用户主动调用 deleteConversationsFromGroup 触发
* - 当 reason 为 1 时,表示添加到分组的会话数量超过 1000最早添加进分组的会话被淘汰
*/
- (void)onConversationsDeletedFromGroup:(NSString * _Nullable)groupName conversationList:(NSArray<V2TIMConversation *> *)conversationList reason:(uint32_t)reason NS_SWIFT_NAME(onConversationsDeletedFromGroup(groupName:conversationList:reason:));
/**
* 会话分组删除会话(待废弃接口,请使用 onConversationsDeletedFromGroup:conversationList:reason: 接口)
*/
- (void)onConversationsDeletedFromGroup:(NSString * _Nullable)groupName conversationList:(NSArray<V2TIMConversation *> *)conversationList NS_SWIFT_NAME(onConversationsDeletedFromGroup(groupName:conversationList:)) __attribute__((deprecated("use onConversationsDeletedFromGroup:conversationList:reason: instead")));
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 会话对象 V2TIMConversation
//
/////////////////////////////////////////////////////////////////////////////////
/// 会话对象
V2TIM_EXPORT @interface V2TIMConversation : NSObject
/// 会话类型
@property(nonatomic,assign,readonly) V2TIMConversationType type;
/// 会话唯一 ID如果是 C2C 单聊,组成方式为 c2c_userID如果是群聊组成方式为 group_groupID
@property(nonatomic,strong,readonly,nullable) NSString *conversationID;
/// 如果会话类型为 C2C 单聊userID 会存储对方的用户ID否则为 nil
@property(nonatomic,strong,readonly,nullable) NSString *userID;
/// 如果会话类型为群聊groupID 会存储当前群的群 ID否则为 nil
@property(nonatomic,strong,readonly,nullable) NSString *groupID;
/// 如果会话类型为群聊groupType 为当前群类型,否则为 nil
@property(nonatomic,strong,readonly,nullable) NSString *groupType;
/// 会话展示名称(群组:群名称 >> 群 IDC2C对方好友备注 >> 对方昵称 >> 对方的 userID
@property(nonatomic,strong,readonly,nullable) NSString *showName;
/// 会话展示头像群组群头像C2C对方头像
@property(nonatomic,strong,readonly,nullable) 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,nullable) V2TIMMessage *lastMessage;
/// 群会话 @ 信息列表,用于展示 "有人@我" 或 "@所有人" 这两种提醒状态
@property(nonatomic,strong,readonly,nullable) NSArray<V2TIMGroupAtInfo *> *groupAtInfolist;
/// 草稿信息,设置草稿信息请调用 setConversationDraft() 接口
@property(nonatomic,strong,readonly,nullable) NSString *draftText;
/// 上次设置草稿时的 UTC 时间戳
@property(nonatomic,strong,readonly,nullable) 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,nullable) NSArray<NSNumber *> * markList;
/// 会话自定义数据(从 6.5 版本开始支持)
@property(nonatomic,strong,readonly,nullable) NSData *customData;
/// 会话所属分组列表(从 6.5 版本开始支持)
@property(nonatomic,strong,readonly,nullable) NSArray<NSString *> *conversationGroupList;
/// 最新已读消息的 UTC 时间戳,仅对单聊会话生效(从 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;
/// 会话分组名称
/// 不设置表示不过滤此项,设置为 @"" 代表过滤不属于任何分组的会话
@property(nonatomic,strong,nullable) NSString *conversationGroup;
/// 标记类型,取值详见 @V2TIMConversationMarkType
/// 不设置表示不过滤此项,设置为 0 代表过滤不含任何标记的会话
@property(nonatomic,assign) NSUInteger markType;
/// 会话未读数
/// 不设置表示不过滤此项,设置为 YES 代表过滤含未读数的会话;设置为 NO 代表过滤不含未读数的会话
@property(nonatomic,assign) BOOL hasUnreadCount;
/// 会话 @ 信息
/// 不设置表示不过滤此项,设置为 YES 代表过滤含群 @ 消息的会话;设置为 NO 代表过滤不含群 @ 消息的会话
@property(nonatomic,assign) BOOL hasGroupAtInfo;
@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,nullable) NSString* conversationID;
/// 返回码
@property(nonatomic,assign) NSInteger resultCode;
/// 返回信息
@property(nonatomic,strong,nullable) NSString *resultInfo;
@end

View File

@@ -0,0 +1,838 @@
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 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;
@class V2TIMOfficialAccountInfo;
@class V2TIMOfficialAccountInfoResult;
@class V2TIMFollowOperationResult;
@class V2TIMFollowInfo;
@class V2TIMFollowTypeCheckResult;
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 void (^V2TIMOfficialAccountInfoResultListSucc)(NSArray<V2TIMOfficialAccountInfoResult *> *resultList);
/// 关注/取关用户操作成功的回调
typedef void (^V2TIMFollowOperationResultListSucc)(NSArray<V2TIMFollowOperationResult *> *resultList);
/// 获取自己 关注/粉丝/互关 列表成功的回调
typedef void (^V2TIMUserInfoResultSucc)(NSString * _Nullable nextCursor, NSArray<V2TIMUserFullInfo *> *userInfoList);
/// 获取用户关注数量信息成功的回调
typedef void (^V2TIMFollowInfoResultListSucc)(NSArray<V2TIMFollowInfo *> *resultList);
/// 用户关注类型检查成功回调
typedef void (^V2TIMFollowTypeCheckResultListSucc)(NSArray<V2TIMFollowTypeCheckResult *> *resultList);
/// 好友申请类型
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, ///< 接受加好友并加对方为好友(建立双向好友)
};
/// 关注类型
typedef NS_ENUM(NSInteger, V2TIMFollowType) {
V2TIM_FOLLOW_TYPE_NONE = 0x0, ///< 无任何关注关系
V2TIM_FOLLOW_TYPE_IN_MY_FOLLOWING_LIST = 0x1, ///< 对方在我的关注列表中
V2TIM_FOLLOW_TYPE_IN_MY_FOLLOWERS_LIST = 0x2, ///< 对方在我的粉丝列表中
V2TIM_FOLLOW_TYPE_IN_BOTH_FOLLOWERS_LIST = 0x3, ///< 对方与我互相关注
};
/////////////////////////////////////////////////////////////////////////////////
//
// 关系链和用户资料监听器
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 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 NS_SWIFT_NAME(getFriendList(succ: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:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setFriendInfo(info:succ:fail:));
/**
* 2.4 搜索好友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)
* - 该接口返回的是本地存储的用户资料,包含好友和非好友资料,您可以根据 V2TIMFriendInfoResult 中的 getRelation 来判断是否为好友。
*/
- (void)searchFriends:(V2TIMFriendSearchParam *)searchParam succ:(V2TIMFriendInfoResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(searchFriends(searchParam:succ:fail:));
/**
* 2.5 添加好友
*/
- (void)addFriend:(V2TIMFriendAddApplication *)application succ:(V2TIMFriendOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(addFriend(application:succ:fail:));
/**
* 2.6 删除好友
* @param userIDList 要删除的好友 userID 列表
* - ID 建议一次最大 100 个,因为数量过多可能会导致数据包太大被后台拒绝,后台限制数据包最大为 1M。
* @param deleteType 删除类型(单向好友、双向好友)
*/
- (void)deleteFromFriendList:(NSArray *)userIDList deleteType:(V2TIMFriendType)deleteType succ:(V2TIMFriendOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(deleteFromFriendList(userIDList:deleteType:succ: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 NS_SWIFT_NAME(checkFriend(userIDList:checkType:succ:fail:));
/////////////////////////////////////////////////////////////////////////////////
//
// 好友申请、删除相关逻辑
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 3.1 获取好友申请列表
*
* @note
* - 好友申请列表包括发起的好友申请和收到的好友申请。
* - 最多支持100个。
*/
- (void)getFriendApplicationList:(V2TIMFriendApplicationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getFriendApplicationList(succ:fail:));
/**
* 3.2 同意好友申请
*
* @param application 好友申请信息getFriendApplicationList 成功后会返回
* @param acceptType 建立单向/双向好友关系
*/
- (void)acceptFriendApplication:(V2TIMFriendApplication *)application type:(V2TIMFriendAcceptType)acceptType succ:(V2TIMFriendOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(acceptFriendApplication(application:acceptType:succ:fail:));
/**
* 3.3 同意好友申请,并设置备注
*
* @param application 好友申请信息getFriendApplicationList 成功后会返回
* @param acceptType 建立单向/双向好友关系
* - @ref V2TIMFriendApplication.V2TIM_FRIEND_ACCEPT_AGREE同意添加单向好友
* - @ref V2TIMFriendApplication.V2TIM_FRIEND_ACCEPT_AGREE_AND_ADD同意并添加为双向好友
* @param remark 好友备注
*/
- (void)acceptFriendApplication:(V2TIMFriendApplication *)application type:(V2TIMFriendAcceptType)acceptType remark:(NSString* _Nullable)remark succ:(V2TIMFriendOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(acceptFriendApplication(application:acceptType:remark:succ:fail:));
/**
* 3.4 拒绝好友申请
*
* @param application 好友申请信息getFriendApplicationList 成功后会返回
*/
- (void)refuseFriendApplication:(V2TIMFriendApplication *)application succ:(V2TIMFriendOperationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(refuseFriendApplication(application:succ:fail:));
/**
* 3.5 删除好友申请
*
* @param application 好友申请信息getFriendApplicationList 成功后会返回
*/
- (void)deleteFriendApplication:(V2TIMFriendApplication *)application succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(deleteFriendApplication(application:succ:fail:));
/**
* 3.6 设置好友申请已读
*/
- (void)setFriendApplicationRead:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setFriendApplicationRead(succ:fail:));
/////////////////////////////////////////////////////////////////////////////////
//
// 黑名单
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 4.1 添加用户到黑名单
*/
- (void)addToBlackList:(NSArray *)userIDList succ:(V2TIMFriendOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(addToBlackList(userIDList:succ:fail:));
/**
* 4.2 把用户从黑名单中删除
*/
- (void)deleteFromBlackList:(NSArray *)userIDList succ:(V2TIMFriendOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(deleteFromBlackList(userIDList:succ:fail:));
/**
* 4.3 获取黑名单列表
*/
- (void)getBlackList:(V2TIMFriendInfoListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getBlackList(succ:fail:));
/////////////////////////////////////////////////////////////////////////////////
//
// 好友分组
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 5.1 新建好友分组
*
* @param groupName 分组名称
* @param userIDList 要添加到分组中的好友
*/
- (void)createFriendGroup:(NSString *)groupName userIDList:(NSArray * _Nullable)userIDList succ:(V2TIMFriendOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(createFriendGroup(groupName:userIDList:succ:fail:));
/**
* 5.2 获取分组信息
*
* @param groupNameList 要获取信息的好友分组名称列表,传入 nil 获得所有分组信息
*/
- (void)getFriendGroupList:(NSArray * _Nullable)groupNameList succ:(V2TIMFriendGroupListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getFriendGroupList(groupNameList:succ:fail:));
/**
* 5.3 删除好友分组
*/
- (void)deleteFriendGroup:(NSArray *)groupNameList succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(deleteFriendGroup(groupNameList:succ:fail:));
/**
* 5.4 修改好友分组的名称
*/
- (void)renameFriendGroup:(NSString*)oldName newName:(NSString*)newName succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(renameFriendGroup(oldName:newName:succ:fail:));
/**
* 5.5 添加好友到一个好友分组
*/
- (void)addFriendsToFriendGroup:(NSString *)groupName userIDList:(NSArray *)userIDList succ:(V2TIMFriendOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(addFriendsToFriendGroup(groupName:userIDList:succ:fail:));
/**
* 5.6 从好友分组中删除好友
*/
- (void)deleteFriendsFromFriendGroup:(NSString *)groupName userIDList:(NSArray *)userIDList succ:(V2TIMFriendOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(deleteFriendsFromFriendGroup(groupName:userIDList:succ:fail:));
/////////////////////////////////////////////////////////////////////////////////
//
// 公众号订阅、取消订阅、获取公众号列表接口
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 6.1 订阅公众号7.6 及其以上版本支持)
*/
- (void)subscribeOfficialAccount:(NSString *)officialAccountID succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(subscribeOfficialAccount(officialAccountID:succ:fail:));
/**
* 6.2 取消订阅公众号7.6 及其以上版本支持)
*/
- (void)unsubscribeOfficialAccount:(NSString *)officialAccountID succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(unsubscribeOfficialAccount(officialAccountID:succ:fail:));
/**
* 6.3 获取公众号列表7.6 及其以上版本支持)
* @note officialAccountIDList 传空时,获取订阅的公众号列表
*/
- (void)getOfficialAccountsInfo:(NSArray<NSString *> * _Nullable)officialAccountIDList succ:(V2TIMOfficialAccountInfoResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getOfficialAccountsInfo(officialAccountIDList:succ:fail:));
/////////////////////////////////////////////////////////////////////////////////
//
// 关注/粉丝 相关接口
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 7.1 关注用户(从 7.8 版本开始支持)
*
* @note
* - 一次最多支持关注 20 个用户。
* - 该功能为 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)followUser:(NSArray<NSString *> *)userIDList succ:(V2TIMFollowOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(followUser(userIDList:succ:fail:));
/**
* 7.2 取消关注用户(从 7.8 版本开始支持)
*
* @note
* - 一次最多支持取消关注 20 个用户。
* - 该功能为 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)unfollowUser:(NSArray<NSString *> *)userIDList succ:(V2TIMFollowOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(unfollowUser(userIDList:succ:fail:));
/**
* 7.3 获取我的关注列表(从 7.8 版本开始支持)
*
* @note
* - 该功能为 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)。
*
* @param nextCursor 分页拉取标志,第一次拉取填 nil 或 @"",回调成功如果 nextCursor 不为 @"",需要分页,可以传入该值再次拉取,直至 nextCursor 返回为 @""
*
* @note
* - 该功能为 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)getMyFollowingList:(NSString * _Nullable)nextCursor succ:(V2TIMUserInfoResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getMyFollowingList(nextCursor:succ:fail:));
/**
* 7.4 获取我的粉丝列表(从 7.8 版本开始支持)
*
* @param nextCursor 分页拉取标志,第一次拉取填 nil 或 @"",回调成功如果 nextCursor 不为 @"",需要分页,可以传入该值再次拉取,直至 nextCursor 返回为 @""
*
* @note
* - 该功能为 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)getMyFollowersList:(NSString * _Nullable)nextCursor succ:(V2TIMUserInfoResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getMyFollowersList(nextCursor:succ:fail:));
/**
* 7.5 获取我的互关列表(从 7.8 版本开始支持)
*
* @param nextCursor 分页拉取标志,第一次拉取填 nil 或 @"",回调成功如果 nextCursor 不为 @"",需要分页,可以传入该值再次拉取,直至 nextCursor 返回为 @""
*
* @note
* - 该功能为 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)getMutualFollowersList:(NSString * _Nullable)nextCursor succ:(V2TIMUserInfoResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getMutualFollowersList(nextCursor:succ:fail:));
/**
* 7.6 获取指定用户的 关注/粉丝/互关 数量信息(从 7.8 版本开始支持)
*
* @note
* - 该功能为 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)getUserFollowInfo:(NSArray *)userIDList succ:(V2TIMFollowInfoResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getUserFollowInfo(userIDList:succ:fail:));
/**
* 7.7 检查指定用户的关注类型(从 7.8 版本开始支持)
*
* @note
* - 该功能为 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)checkFollowType:(NSArray<NSString *> *)userIDList succ:(V2TIMFollowTypeCheckResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(checkFollowType(userIDList:succ:fail:));
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 资料关系链回调
//
/////////////////////////////////////////////////////////////////////////////////
/// 资料关系链回调
V2TIM_EXPORT @protocol V2TIMFriendshipListener <NSObject>
@optional
/**
* 好友申请新增通知,两种情况会收到这个回调:
* 1. 自己申请加别人好友
* 2. 别人申请加自己好友
*/
- (void)onFriendApplicationListAdded:(NSArray<V2TIMFriendApplication *> *)applicationList NS_SWIFT_NAME(onFriendApplicationListAdded(applicationList:));
/**
* 好友申请删除通知,四种情况会收到这个回调:
* 1. 调用 deleteFriendApplication 主动删除好友申请
* 2. 调用 refuseFriendApplication 拒绝好友申请
* 3. 调用 acceptFriendApplication 同意好友申请
* 4. 申请加别人好友被拒绝
*/
- (void)onFriendApplicationListDeleted:(NSArray *)userIDList NS_SWIFT_NAME(onFriendApplicationListDeleted(userIDList:));
/**
* 好友申请已读通知,如果调用 setFriendApplicationRead 设置好友申请列表已读,会收到这个回调(主要用于多端同步)
*/
- (void)onFriendApplicationListRead NS_SWIFT_NAME(onFriendApplicationListRead());
/**
* 好友新增通知
*/
- (void)onFriendListAdded:(NSArray<V2TIMFriendInfo *>*)infoList NS_SWIFT_NAME(onFriendListAdded(infoList:));
/**
* 好友删除通知,两种情况会收到这个回调:
* 1. 自己删除好友(单向和双向删除都会收到回调)
* 2. 好友把自己删除(双向删除会收到)
*/
- (void)onFriendListDeleted:(NSArray*)userIDList NS_SWIFT_NAME(onFriendListDeleted(userIDList:));
/**
* 黑名单新增通知
*/
- (void)onBlackListAdded:(NSArray<V2TIMFriendInfo *>*)infoList NS_SWIFT_NAME(onBlackListAdded(infoList:));
/**
* 黑名单删除通知
*/
- (void)onBlackListDeleted:(NSArray*)userIDList NS_SWIFT_NAME(onBlackListDeleted(userIDList:));
/**
* 好友资料变更通知
*/
- (void)onFriendProfileChanged:(NSArray<V2TIMFriendInfo *> *)infoList NS_SWIFT_NAME(onFriendProfileChanged(infoList:));
/**
* 好友分组被创建
*/
- (void)onFriendGroupCreated:(NSString * _Nullable)groupName friendInfoList:(NSArray<V2TIMFriendInfo *> *)friendInfoList NS_SWIFT_NAME(onFriendGroupCreated(groupName:friendInfoList:));
/**
* 好友分组被删除
*/
- (void)onFriendGroupDeleted:(NSArray<NSString *> *)groupNameList NS_SWIFT_NAME(onFriendGroupDeleted(groupNameList:));
/**
* 好友分组名变更
*/
- (void)onFriendGroupNameChanged:(NSString * _Nullable)oldGroupName newGroupName:(NSString * _Nullable)newGroupName NS_SWIFT_NAME(onFriendGroupNameChanged(oldGroupName:newGroupName:));
/**
* 好友分组新增好友
*/
- (void)onFriendsAddedToGroup:(NSString * _Nullable)groupName friendInfoList:(NSArray<V2TIMFriendInfo *> *)friendInfoList NS_SWIFT_NAME(onFriendsAddedToGroup(groupName:friendInfoList:));
/**
* 好友分组删除好友
*/
- (void)onFriendsDeletedFromGroup:(NSString * _Nullable)groupName friendIDList:(NSArray<NSString *> *)friendIDList NS_SWIFT_NAME(onFriendsDeletedFromGroup(groupName:friendIDList:));
/**
* 订阅公众号通知
*/
- (void)onOfficialAccountSubscribed:(V2TIMOfficialAccountInfo *)officialAccountInfo NS_SWIFT_NAME(onOfficialAccountSubscribed(officialAccountInfo:));
/**
* 取消订阅公众号通知
*/
- (void)onOfficialAccountUnsubscribed:(NSString * _Nullable)officialAccountID NS_SWIFT_NAME(onOfficialAccountUnsubscribed(officialAccountID:));
/**
* 订阅的公众号被删除通知
*/
- (void)onOfficialAccountDeleted:(NSString * _Nullable)officialAccountID NS_SWIFT_NAME(onOfficialAccountDeleted(officialAccountID:));
/**
* 订阅的公众号资料更新通知
*/
- (void)onOfficialAccountInfoChanged:(V2TIMOfficialAccountInfo *)officialAccountInfo NS_SWIFT_NAME(onOfficialAccountInfoChanged(officialAccountInfo:));
/**
* 关注列表变更通知
*/
- (void)onMyFollowingListChanged:(NSArray<V2TIMUserFullInfo *> *)userInfoList isAdd:(BOOL)isAdd NS_SWIFT_NAME(onMyFollowingListChanged(userInfoList:isAdd:));
/**
* 粉丝列表变更通知
*/
- (void)onMyFollowersListChanged:(NSArray<V2TIMUserFullInfo *> *)userInfoList isAdd:(BOOL)isAdd NS_SWIFT_NAME(onMyFollowersListChanged(userInfoList:isAdd:));
/**
* 互关列表变更通知
*/
- (void)onMutualFollowersListChanged:(NSArray<V2TIMUserFullInfo *> *)userInfoList isAdd:(BOOL)isAdd NS_SWIFT_NAME(onMutualFollowersListChanged(userInfoList:isAdd:));
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 好友资料获取结果
//
/////////////////////////////////////////////////////////////////////////////////
/// 好友资料获取结果
V2TIM_EXPORT @interface V2TIMFriendInfoResult : NSObject
/// 返回码
@property(nonatomic,assign) int resultCode;
/// 返结果表述
@property(nonatomic,strong,nullable) NSString *resultInfo;
/// 好友类型
@property(nonatomic,assign) V2TIMFriendRelationType relation;
/// 好友个人资料,如果不是好友,除了 userID 字段,其他字段都为空
@property(nonatomic,strong) V2TIMFriendInfo *friendInfo;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 好友资料
//
/////////////////////////////////////////////////////////////////////////////////
/// 好友资料
V2TIM_EXPORT @interface V2TIMFriendInfo : NSObject
/// 好友 ID
@property(nonatomic,strong,nullable) 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,nullable) NSString *friendRemark;
/// 添加好友的 UTC 时间戳
@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,nullable) NSString* friendRemark;
/// 预分组名最大96字节
@property (nonatomic,strong,nullable) NSString* friendGroup;
/// 请求说明最大120字节
@property (nonatomic,strong,nullable) NSString* addWording;
/// 添加来源
@property (nonatomic,strong,nullable) 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,nullable) NSString* userID;
/// 用户昵称
@property(nonatomic,strong,readonly,nullable) NSString* nickName;
/// 用户头像
@property(nonatomic,strong,readonly,nullable) NSString* faceUrl;
/// 添加好友的 UTC 时间戳
@property(nonatomic,assign,readonly) uint64_t addTime;
/// 来源
@property(nonatomic,strong,readonly,nullable) NSString* addSource;
/// 加好友附言
@property(nonatomic,strong,readonly,nullable) NSString* addWording;
/// 好友申请类型
@property(nonatomic,assign,readonly) V2TIMFriendApplicationType type;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 好友关系链检查结果
//
/////////////////////////////////////////////////////////////////////////////////
/// 好友关系链检查结果
V2TIM_EXPORT @interface V2TIMFriendCheckResult : NSObject
/// 用户id
@property(nonatomic,strong,nullable) NSString* userID;
/// 返回码
@property(nonatomic,assign) NSInteger resultCode;
/// 返回信息
@property(nonatomic,strong,nullable) NSString *resultInfo;
/// 检查结果
@property(nonatomic,assign) V2TIMFriendRelationType relationType;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 好友操作结果(添加、删除、加黑名单、添加分组等)
//
/////////////////////////////////////////////////////////////////////////////////
/// 好友操作结果(添加、删除、加黑名单、添加分组等)
V2TIM_EXPORT @interface V2TIMFriendOperationResult : NSObject
/// 用户Id
@property(nonatomic,strong,nullable) NSString* userID;
/// 返回码
@property(nonatomic,assign) NSInteger resultCode;
/// 返回信息
@property(nonatomic,strong,nullable) NSString *resultInfo;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 好友分组
//
/////////////////////////////////////////////////////////////////////////////////
/// 好友分组
V2TIM_EXPORT @interface V2TIMFriendGroup : NSObject
/// 好友分组名称
@property(nonatomic,strong,nullable) 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
/////////////////////////////////////////////////////////////////////////////////
//
// 公众号资料
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMOfficialAccountInfo : NSObject
/// 公众号 ID
@property(nonatomic,strong,readonly,nullable) NSString* officialAccountID;
/// 公众号名称
@property(nonatomic,strong,readonly,nullable) NSString* officialAccountName;
/// 公众号头像
@property(nonatomic,strong,readonly,nullable) NSString* faceUrl;
/// 公众号所有者
@property(nonatomic,strong,readonly,nullable) NSString* ownerUserID;
/// 公众号组织
@property(nonatomic,strong,readonly,nullable) NSString* organization;
/// 公众号简介
@property(nonatomic,strong,readonly,nullable) NSString* introduction;
/// 公众号自定义数据
@property(nonatomic,strong,readonly,nullable) NSString* customData;
/// 公众号创建时间,单位:秒
@property(nonatomic,assign,readonly) uint64_t createTime;
/// 公众号订阅者数量
@property(nonatomic,assign,readonly) uint64_t subscriberCount;
/// 订阅公众号的时间,单位:秒
@property(nonatomic,assign,readonly) uint64_t subscribeTime;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 公众号资料获取结果
//
/////////////////////////////////////////////////////////////////////////////////
/// 公众号资料获取结果
V2TIM_EXPORT @interface V2TIMOfficialAccountInfoResult : NSObject
/// 返回码
@property(nonatomic,assign) int resultCode;
/// 返回结果表述
@property(nonatomic,strong,nullable) NSString *resultInfo;
/// 公众号资料
@property(nonatomic,strong) V2TIMOfficialAccountInfo *officialAccountInfo;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 关注/取关用户的操作结果
//
/////////////////////////////////////////////////////////////////////////////////
/// 关注/取关用户的操作结果
V2TIM_EXPORT @interface V2TIMFollowOperationResult : NSObject
/// 用户 ID
@property(nonatomic,strong,nullable) NSString* userID;
/// 返回码
@property(nonatomic,assign) NSInteger resultCode;
/// 返回信息
@property(nonatomic,strong,nullable) NSString *resultInfo;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 用户关注数量信息获取结果
//
/////////////////////////////////////////////////////////////////////////////////
/// 用户关注数量信息获取结果
V2TIM_EXPORT @interface V2TIMFollowInfo : NSObject
/// 返回码
@property(nonatomic,assign) NSInteger resultCode;
/// 返回结果表述
@property(nonatomic,strong,nullable) NSString *resultInfo;
/// 用户 ID
@property(nonatomic,strong,nullable) NSString *userID;
/// 用户的关注数量
@property(nonatomic,assign) uint64_t followingCount;
/// 用户的粉丝数量
@property(nonatomic,assign) uint64_t followersCount;
/// 用户的互关数量
@property(nonatomic,assign) uint64_t mutualFollowersCount;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 指定用户的关注类型检查结果
//
/////////////////////////////////////////////////////////////////////////////////
/// 指定用户的关注类型检查结果
V2TIM_EXPORT @interface V2TIMFollowTypeCheckResult : NSObject
/// 用户 ID
@property(nonatomic,strong,nullable) NSString* userID;
/// 返回码
@property(nonatomic,assign) NSInteger resultCode;
/// 返回信息
@property(nonatomic,strong,nullable) NSString *resultInfo;
/// 关注类型
@property(nonatomic,assign) V2TIMFollowType followType;
@end

View File

@@ -0,0 +1,752 @@
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 IMSDK
//
// 模块名称V2TIMManager+Group
//
// 群组高级接口,里面包含了群组的高级功能,比如群成员邀请、非群成员申请进群等操作接口。
//
/////////////////////////////////////////////////////////////////////
#import "V2TIMManager.h"
#import "V2TIMManager+Message.h"
@class V2TIMGroupMemberOperationResult;
@class V2TIMGroupApplicationResult;
@class V2TIMCreateGroupMemberInfo;
@class V2TIMGroupInfo;
@class V2TIMGroupInfoResult;
@class V2TIMGroupApplication;
@class V2TIMGroupSearchParam;
@class V2TIMGroupSearchResult;
@class V2TIMGroupMemberSearchParam;
@class V2TIMGroupMemberSearchResult;
@class V2TIMGroupAtInfo;
/////////////////////////////////////////////////////////////////////////////////
//
// 群相关的高级接口
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMManager (Group)
/// 获取已加入群列表成功回调
typedef void (^V2TIMGroupInfoListSucc)(NSArray<V2TIMGroupInfo *> *groupList);
/// 获取指定群列表成功回调
typedef void (^V2TIMGroupInfoResultListSucc)(NSArray<V2TIMGroupInfoResult *> *groupResultList);
/// 云端搜索群组的结果回调
typedef void (^V2TIMGroupSearchResultSucc)(V2TIMGroupSearchResult *searchResult);
/// 获取群属性列表成功回调
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 (^V2TIMGroupMemberSearchResultSucc)(V2TIMGroupMemberSearchResult *searchResult);
/// 群成员操作成功回调
typedef void (^V2TIMGroupMemberOperationResultListSucc)(NSArray<V2TIMGroupMemberOperationResult*> * resultList);
/// 获取好友申请列表成功回调
typedef void (^V2TIMGroupApplicationResultSucc)(V2TIMGroupApplicationResult *result);
/// 获取群在线人数成功回调
typedef void (^V2TIMGroupOnlineMemberCountSucc)(NSInteger count);
/// 群计数器操作成功的回调
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
* - 后台限制邀请的群成员个数不能超过 20
* - 其他限制请参考 V2TIMManager.h -> createGroup 注释
*/
- (void)createGroup:(V2TIMGroupInfo*)info memberList:(NSArray<V2TIMCreateGroupMemberInfo *>* _Nullable )memberList succ:(V2TIMCreateGroupSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(createGroup(info:memberList:succ:fail:));
/**
* 1.2 获取当前用户已经加入的群列表
*
* @note
* - 直播群AVChatRoom不支持该 API
* - 该接口有频限检测SDK 限制调用频率为 1 秒 10 次,超过限制后会报 ERR_SDK_COMM_API_CALL_FREQUENCY_LIMIT 7008错误
*/
- (void)getJoinedGroupList:(V2TIMGroupInfoListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getJoinedGroupList(succ: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 NS_SWIFT_NAME(searchGroups(searchParam:succ:fail:));
/**
* 2.3 搜索云端群资料8.4 及以上版本支持)
* @note 该功能为 IM 增值功能,详见[价格说明](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)searchCloudGroups:(V2TIMGroupSearchParam *)searchParam succ:(V2TIMGroupSearchResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(searchCloudGroups(searchParam:succ:fail:));
/**
* 2.4 修改群资料
*/
- (void)setGroupInfo:(V2TIMGroupInfo *)info succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setGroupInfo(info:succ:fail:));
/**
* 2.5 初始化群属性,会清空原有的群属性列表
*
* @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:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(initGroupAttributes(groupID:attributes:succ:fail:));
/**
* 2.6 设置群属性,已有该群属性则更新其 value 值,没有该群属性则添加该群属性。
* @note
* - 6.7 及其以前版本,只支持 AVChatRoom 直播群;
* - 从 6.8 版本开始,同时支持 AVChatRoom、Public、Meeting、Work 四种群类型;
* - 从 7.0 版本开始,除了话题外,群属性支持所有的群类型。
*/
- (void)setGroupAttributes:(NSString*)groupID attributes:(NSDictionary<NSString *,NSString *> *)attributes succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setGroupAttributes(groupID:attributes:succ:fail:));
/**
* 2.7 删除群指定属性keys 传 nil 则清空所有群属性。
* @note
* - 6.7 及其以前版本,只支持 AVChatRoom 直播群;
* - 从 6.8 版本开始,同时支持 AVChatRoom、Public、Meeting、Work 四种群类型;
* - 从 7.0 版本开始,除了话题外,群属性支持所有的群类型。
*/
- (void)deleteGroupAttributes:(NSString*)groupID keys:(NSArray<NSString *> * _Nullable)keys succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(deleteGroupAttributes(groupID:keys:succ:fail:));
/**
* 2.8 获取群指定属性keys 传 nil 则获取所有群属性。
* @note
* - 6.7 及其以前版本,只支持 AVChatRoom 直播群;
* - 从 6.8 版本开始,同时支持 AVChatRoom、Public、Meeting、Work 四种群类型;
* - 从 7.0 版本开始,除了话题外,群属性支持所有的群类型。
*/
- (void)getGroupAttributes:(NSString*)groupID keys:(NSArray<NSString *> * _Nullable)keys succ:(V2TIMGroupAttributeListSucc)succ fail:(V2TIMFail)fail;
/**
* 2.9 获取指定群在线人数
*
* @param groupID 群id
* @param succ 成功回调
* @param fail 失败回调
*
* @note
* - IMSDK 7.3 以前的版本仅支持直播群( AVChatRoom
* - IMSDK 7.3 及其以后的版本支持所有群类型。
*/
- (void)getGroupOnlineMemberCount:(NSString*)groupID succ:(V2TIMGroupOnlineMemberCountSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getGroupOnlineMemberCount(groupID:succ:fail:));
/**
* 2.10 设置群计数器7.0 及其以上版本支持)
*
* @note
* - 该计数器的 key 如果存在,则直接更新计数器的 value 值;如果不存在,则添加该计数器的 key-value
* - 当群计数器设置成功后,在 succ 回调中会返回最终成功设置的群计数器信息;
* - 除了社群和话题,群计数器支持所有的群组类型。
*/
- (void)setGroupCounters:(NSString *)groupID counters:(NSDictionary<NSString *, NSNumber *> *)counters succ:(V2TIMGroupCounterResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(setGroupCounters(groupID:counters:succ:fail:));
/**
* 2.11 获取群计数器7.0 及其以上版本支持)
*
* @note
* - 如果 keys 为空,则表示获取群内的所有计数器;
* - 除了社群和话题,群计数器支持所有的群组类型。
*/
- (void)getGroupCounters:(NSString *)groupID keys:(NSArray<NSString *> * _Nullable)keys succ:(V2TIMGroupCounterResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getGroupCounters(groupID:keys:succ: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)increaseGroupCounter:(NSString *)groupID key:(NSString *)key value:(NSInteger)value succ:(V2TIMGroupCounterResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(increaseGroupCounter(groupID:key:value:succ:fail:));
/**
* 2.13 递减群计数器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 NS_SWIFT_NAME(decreaseGroupCounter(groupID:key:value:succ:fail:));
/////////////////////////////////////////////////////////////////////////////////
// 群成员管理
/////////////////////////////////////////////////////////////////////////////////
/**
* 3.1 获取群成员列表
*
* @param filter 指定群成员类型。
* @param nextSeq 分页拉取标志,第一次拉取填 0回调成功如果 nextSeq 不为零,需要分页,传入再次拉取,直至为 0。
*
* @note
* - 普通群(工作群、会议群、公开群)的限制:
* 1. filter 只能设置为 V2TIMGroupMemberFilter 定义的数值SDK 会返回指定角色的成员。
*
* - 直播群AVChatRoom的限制
* 1. 如果设置 filter 为 V2TIMGroupMemberFilter 定义的数值SDK 返回全部成员。返回的人数规则为:拉取最近入群群成员最多 1000 人,新进来的成员排在前面,需要升级旗舰版,并且在 [控制台](https://console.cloud.tencent.com/im) 开启“直播群在线成员列表”开关6.3 及以上版本支持)。
* 2. 如果设置 filter 为群成员自定义标记,旗舰版支持拉取指定标记的成员列表。标记群成员的设置请参考 markGroupMemberList:memberList:markType:enableMark:succ:fail: API。
* 3. 程序重启后,请重新加入群组,否则拉取群成员会报 10007 错误码。
* 4. 群成员资料信息仅支持 userID | nickName | faceURL | role 字段。
*
* - 社群Community的限制
* 1. 如果设置 filter 为 V2TIMGroupMemberFilter 定义的数值SDK 返回指定角色的成员。
* 2. 如果设置 filter 为群成员自定义标记,旗舰版支持拉取指定标记的成员列表(7.5 及以上版本支持)。标记群成员的设置请参考 markGroupMemberList:memberList:markType:enableMark:succ:fail: API。
*/
- (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 NS_SWIFT_NAME(getGroupMembersInfo(groupID:memberList:succ: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 NS_SWIFT_NAME(searchGroupMembers(searchParam:succ:fail:));
/**
* 3.4 搜索云端群成员资料8.4 及以上版本支持)
*
* @param searchParam 搜索参数
* @note 该功能为 IM 增值功能,详见[价格说明](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)searchCloudGroupMembers:(V2TIMGroupMemberSearchParam *)searchParam succ:(V2TIMGroupMemberSearchResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(searchCloudGroupMembers(searchParam:succ:fail:));
/**
* 3.5 修改指定的群成员资料
*/
- (void)setGroupMemberInfo:(NSString*)groupID info:(V2TIMGroupMemberFullInfo *)info succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setGroupMemberInfo(groupID:info:succ:fail:));
/**
* 3.6 禁言群成员(只有管理员或群主能够调用)
*
* @param seconds 禁言时间长度,单位秒,表示调用该接口成功后多少秒内不允许被禁言用户再发言。
*/
- (void)muteGroupMember:(NSString*)groupID member:(NSString*)userID muteTime:(uint32_t)seconds succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(muteGroupMember(groupID:memberUserID:muteTimeSeconds:succ:fail:));
/**
* 3.7 禁言全体群成员只有管理员或群主能够调用7.5 及以上版本支持)
*
* @param groupID 群组 ID
* @param isMute YES 表示禁言NO 表示解除禁言
*
* @note
* - 禁言全体群成员没有时间限制,设置 isMute 为 NO 则解除禁言。
* - 禁言或解除禁言后,会触发 V2TIMGroupListener 中的 onAllGroupMembersMuted:isMute: 回调。
* - 群主和管理员可以禁言普通成员。普通成员不能操作禁言/解除禁言。
*/
- (void)muteAllGroupMembers:(NSString*)groupID isMute:(BOOL)isMute succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(muteAllGroupMembers(groupID:isMute:succ:fail:));
/**
* 3.8 邀请他人入群
*
* @note 请注意不同类型的群有如下限制:
* - 工作群Work群里的任何人都可以邀请其他人进群。
* - 会议群Meeting和公开群Public默认不允许邀请加入群您可以修改群资料 V2TIMGroupInfo 的 groupApproveOpt 字段打开邀请入群方式。打开该选项之后,群里的任何人都可以邀请其他人进群。
* - 直播群AVChatRoom不支持此功能。
* - 后台限制单次邀请的群成员个数不能超过 20。
*/
- (void)inviteUserToGroup:(NSString*)groupID userList:(NSArray<NSString *>*)userList succ:(V2TIMGroupMemberOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(inviteUserToGroup(groupID:userList:succ:fail:));
/**
* 3.9 踢人
*
* @param groupID 群 id
* @param memberList 被踢用户的 userID 列表
* @param reason 被踢的原因
* @param duration 指定自被踢出群组开始算起,禁止被踢用户重新申请加群的时长,单位:秒
* @param succ 成功后的回调
* @param fail 失败后的回调
*
* @note
* - 从 7.2 版本开始,支持设置一个时长参数,用于指定用户从被踢出群组开始算起,禁止重新申请加群的时长;
* - 工作群Work只有群主或 APP 管理员可以踢人;
* - 公开群Public、会议群Meeting群主、管理员和 APP 管理员可以踢人;
* - 直播群AVChatRoom6.6 之前版本只支持禁言muteGroupMember不支持踢人。6.6 及以上版本支持禁言和踢人。需要您购买旗舰版套餐;
* - 该接口其他使用限制请查阅https://cloud.tencent.com/document/product/269/75400#.E8.B8.A2.E4.BA.BA。
*/
- (void)kickGroupMember:(NSString *)groupID memberList:(NSArray<NSString *> *)memberList reason:(NSString * _Nullable)reason duration:(uint32_t)duration succ:(V2TIMGroupMemberOperationResultListSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(kickGroupMember(groupID:memberList:reason:duration:succ:fail:));
/**
* 3.10 切换群成员的角色
*
* @note 请注意不同类型的群有如下限制:
* - 工作群Work不支持设置群成员角色。
* - 只有群主才能对群成员进行普通成员和管理员之间的角色切换。
* - 转让群组请调用 @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:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setGroupMemberRole(groupID:memberUserID:newRole:succ:fail:));
/**
* 3.11 标记群成员(需要您购买旗舰版套餐)
*
* @param groupID 群 ID。
* @param memberList 群成员 ID 列表。
* @param markType 标记类型。数字类型,大于等于 1000您可以自定义一个群组里最多允许定义 10 个标记。
* @param enableMark YES 表示添加标记NO 表示移除标记。
* @note
* - 直播群从 6.6 版本开始支持。
* - 社群从 7.5 版本开始支持。
* - 只有群主才有权限标记群组中其他人。
*/
- (void)markGroupMemberList:(NSString *)groupID memberList:(NSArray<NSString *> *)memberList markType:(uint32_t)markType enableMark:(BOOL)enableMark succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(markGroupMemberList(groupID:memberList:markType:enableMark:succ:fail:));
/**
* 3.12 转让群主
*
* @note 请注意不同类型的群有如下限制:
* - 普通类型的群Work、Public、Meeting只有群主才有权限进行群转让操作。
* - 直播群AVChatRoom不支持转让群主。
*/
- (void)transferGroupOwner:(NSString*)groupID member:(NSString*)userID succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(transferGroupOwner(groupID:memberUserID:succ:fail:));
/**
* 3.13 踢人(直播群踢人从 6.6 版本开始支持,需要您购买旗舰版套餐)
*
* @note 使用限制如下:
* - 待废弃接口,请使用 kickGroupMember:memberList:reason:duration:succ:fail: 接口;
* - 工作群Work只有群主或 APP 管理员可以踢人;
* - 公开群Public、会议群Meeting群主、管理员和 APP 管理员可以踢人;
* - 直播群AVChatRoom6.6 之前版本只支持禁言muteGroupMember不支持踢人。6.6 及以上版本支持禁言和踢人;
* - 该接口其他使用限制请查阅https://cloud.tencent.com/document/product/269/75400#.E8.B8.A2.E4.BA.BA。
*/
- (void)kickGroupMember:(NSString *)groupID memberList:(NSArray<NSString *> *)memberList reason:(NSString * _Nullable)reason succ:(V2TIMGroupMemberOperationResultListSucc)succ fail:(V2TIMFail)fail __attribute__((deprecated("use kickGroupMember:memberList:reason:succ:fail:")));
/////////////////////////////////////////////////////////////////////////////////
// 加群申请
/////////////////////////////////////////////////////////////////////////////////
/**
* 4.1 获取加群申请列表
* @note 最多支持50个
*/
- (void)getGroupApplicationList:(V2TIMGroupApplicationResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(getGroupApplicationList(succ:fail:));
/**
* 4.2 同意某一条加群申请
*/
- (void)acceptGroupApplication:(V2TIMGroupApplication *)application reason:(NSString* _Nullable)reason succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(acceptGroupApplication(application:reason:succ:fail:));
/**
* 4.3 拒绝某一条加群申请
*/
- (void)refuseGroupApplication:(V2TIMGroupApplication *)application reason:(NSString* _Nullable)reason succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(refuseGroupApplication(application:reason:succ:fail:));
/**
* 4.4 标记申请列表为已读
*/
- (void)setGroupApplicationRead:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setGroupApplicationRead(succ:fail:));
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 群基本资料(可以通过 getGroupInfo 获取,不支持由客户自行创建)
//
/////////////////////////////////////////////////////////////////////////////////
/// 群资料
V2TIM_EXPORT @interface V2TIMGroupInfo : NSObject
/**
* 群组 ID
*
* @note 自定义群组 ID 必须为可打印 ASCII 字符0x20-0x7e最长 48 个字节,且前缀不能为 @TGS#(避免与默认分配的群组 ID 混淆)
*/
@property(nonatomic,strong,nullable) NSString* groupID;
/// 群类型
@property(nonatomic,strong,nullable) NSString* groupType;
/**
* 社群是否支持创建话题
* @note 只在群类型为 Community 时有效
*/
@property(nonatomic,assign) BOOL isSupportTopic;
/**
* 群名称
*
* @note 群名称最长 100 字节,使用 UTF-8 编码
*/
@property(nonatomic,strong,nullable) NSString* groupName;
/**
* 群公告
*
* @note 群公告最长 400 字节,使用 UTF-8 编码
*/
@property(nonatomic,strong,nullable) NSString* notification;
/**
* 群简介
*
* @note 群简介最长 400 字节,使用 UTF-8 编码
*/
@property(nonatomic,strong,nullable) NSString* introduction;
/**
* 群头像
*
* @note 群头像 URL 最长 500 字节,使用 UTF-8 编码
*/
@property(nonatomic,strong,nullable) 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,nullable) NSString *owner;
/// 创建群组的 UTC 时间戳
@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;
/// 上次修改群信息的 UTC 时间戳
@property(nonatomic,assign,readonly) uint32_t lastInfoTime;
/// 群最近一次发消息时间
@property(nonatomic,assign,readonly) uint32_t lastMessageTime;
/// 已加入的群成员数量
@property(nonatomic,assign,readonly) uint32_t memberCount;
/// 在线的群成员数量(待废弃字段,请使用 getGroupOnlineMemberCount:succ:fail: 接口获取群在线人数)
@property(nonatomic,assign,readonly) uint32_t onlineCount __attribute__((deprecated("use getGroupOnlineMemberCount:succ:fail: instead")));
/// 最多允许加入的群成员数量
/// @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;
/// 当前用户加入此群的 UTC 时间戳,不支持设置,系统自动生成
@property(nonatomic,assign,readonly) uint32_t joinTime;
/// 是否开启权限组能力仅支持社群7.8 版本开始支持
/// 开启后,管理员角色的权限失效,用群权限、话题权限和权限组能力来对社群、话题进行管理。
@property(nonatomic,assign) BOOL enablePermissionGroup;
/// 群权限仅支持社群7.8 版本开始支持
/// 群成员在没有加入任何权限组时的默认权限,仅在 enablePermissionGroup = true 打开权限组之后生效
@property(nonatomic,assign) uint64_t defaultPermissions;
@end
/// 获取群组资料结果
V2TIM_EXPORT @interface V2TIMGroupInfoResult : NSObject
/// 结果 0成功非0失败
@property(nonatomic,assign) int resultCode;
/// 如果获取失败,会返回错误信息
@property(nonatomic,strong,nullable) NSString *resultMsg;
/// 如果获取成功,会返回对应的 info
@property(nonatomic,strong) V2TIMGroupInfo *info;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 群申请信息(可以通过 getGroupApplicationList 获取,不支持由客户自行创建)
//
/////////////////////////////////////////////////////////////////////////////////
/// 群申请信息
V2TIM_EXPORT @interface V2TIMGroupApplication : NSObject
/// 群组 ID
@property(nonatomic,strong,readonly,nullable) NSString* groupID;
/// 请求者 userID
@property(nonatomic,strong,readonly,nullable) NSString* fromUser;
/// 请求者昵称
@property(nonatomic,strong,readonly,nullable) NSString* fromUserNickName;
/// 请求者头像
@property(nonatomic,strong,readonly,nullable) NSString* fromUserFaceUrl;
/// 判决者id有人请求加群:0邀请其他人加群:被邀请人用户 ID
@property(nonatomic,strong,readonly,nullable) NSString* toUser;
/// 申请时间
@property(nonatomic,assign,readonly) uint64_t addTime;
/// 申请或邀请附加信息
@property(nonatomic,strong,readonly,nullable) NSString* requestMsg;
/// 审批信息:同意或拒绝信息
@property(nonatomic,strong,readonly,nullable) 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,nullable) NSString* userID;
/// 返回状态
@property(nonatomic,assign) V2TIMGroupMemberResult result;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 创建群时指定群成员
//
/////////////////////////////////////////////////////////////////////////////////
/// 创建群时指定群成员
V2TIM_EXPORT @interface V2TIMCreateGroupMemberInfo : NSObject
/// 被操作成员
@property(nonatomic,strong,nullable) 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个。
/// 如果是本地搜索,您需主动设置 keyword 是否匹配群 ID、群名称。
/// 如果是云端搜索keyword 会自动匹配群 ID、群名称。
@property(nonatomic, strong) NSArray<NSString *> *keywordList;
/// 设置是否搜索群 ID仅本地搜索有效
@property(nonatomic, assign) BOOL isSearchGroupID;
/// 设置是否搜索群名称(仅本地搜索有效)
@property(nonatomic, assign) BOOL isSearchGroupName;
/// 指定关键字列表匹配类型,可设置为“或”关系搜索或者“与”关系搜索(仅云端搜索有效)
/// 取值分别为 V2TIM_KEYWORD_LIST_MATCH_TYPE_OR 和 V2TIM_KEYWORD_LIST_MATCH_TYPE_AND默认为“或”关系搜索。
@property(nonatomic,assign) V2TIMKeywordListMatchType keywordListMatchType;
/// 设置每次云端搜索返回结果的条数(必须大于 0最大支持 100默认 20仅云端搜索有效
@property(nonatomic,assign) NSUInteger searchCount;
/// 设置每次云端搜索的起始位置。第一次填空字符串,续拉时填写 V2TIMGroupSearchResult 中的返回值(仅云端搜索有效)
@property(nonatomic,strong) NSString *searchCursor;
@end
V2TIM_EXPORT @interface V2TIMGroupSearchResult : NSObject
/// 满足搜索条件的群列表是否已经全部返回
@property(nonatomic,assign) BOOL isFinished;
/// 满足搜索条件的群总数量
@property(nonatomic,assign) NSUInteger totalCount;
/// 下一次云端搜索的起始位置
@property(nonatomic,strong,nullable) NSString *nextCursor;
/// 当前一次云端搜索返回的群列表
@property(nonatomic,strong) NSArray<V2TIMGroupInfo *> *groupList;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 群成员搜索
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMGroupMemberSearchParam : NSObject
/// 搜索关键字列表,最多支持 5 个
/// 如果是本地搜索,您需主动设置 keyword 是否匹配群成员 ID、昵称、备注、群名片。
/// 如果是云端搜索keyword 会自动匹配群成员 ID、昵称、群名片。
@property(nonatomic, strong) NSArray<NSString *> *keywordList;
/// 指定群 ID 列表,若为 null 则搜索全部群中的群成员
@property(nonatomic, strong,nullable) NSArray<NSString *> *groupIDList;
/// 设置是否搜索群成员 userID仅本地搜索有效
@property(nonatomic, assign) BOOL isSearchMemberUserID;
/// 设置是否搜索群成员昵称(仅本地搜索有效)
@property(nonatomic, assign) BOOL isSearchMemberNickName;
/// 设置是否搜索群成员备注(仅本地搜索有效)
@property(nonatomic, assign) BOOL isSearchMemberRemark;
/// 设置是否搜索群成员名片(仅本地搜索有效)
@property(nonatomic, assign) BOOL isSearchMemberNameCard;
/// 指定关键字列表匹配类型,可设置为“或”关系搜索或者“与”关系搜索(仅云端搜索有效)
/// 取值分别为 V2TIM_KEYWORD_LIST_MATCH_TYPE_OR 和 V2TIM_KEYWORD_LIST_MATCH_TYPE_AND默认为“或”关系搜索。
@property(nonatomic,assign) V2TIMKeywordListMatchType keywordListMatchType;
/// 设置每次云端搜索返回结果的条数(必须大于 0最大支持 100默认 20仅云端搜索有效
@property(nonatomic,assign) NSUInteger searchCount;
/// 设置每次云端搜索的起始位置。第一次填空字符串,续拉时填写 V2TIMGroupMemberSearchResult 中的返回值(仅云端搜索有效)
@property(nonatomic,strong) NSString *searchCursor;
@end
V2TIM_EXPORT @interface V2TIMGroupMemberSearchResult : NSObject
/// 满足搜索条件的群成员列表是否已经全部返回
@property(nonatomic,assign) BOOL isFinished;
/// 满足搜索条件的群成员总数量
@property(nonatomic,assign) NSUInteger totalCount;
/// 下一次云端搜索的起始位置
@property(nonatomic,strong,nullable) NSString *nextCursor;
/// 当前一次云端搜索返回的群成员列表
@property(nonatomic,strong) NSDictionary<NSString *, NSArray<V2TIMGroupMemberFullInfo *> *> *memberList;
@end

View File

@@ -0,0 +1,43 @@
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 IMSDK
//
// 模块名称V2TIMManager+LiveActivity
//
// 消息 LiveActivity 推送接口
//
/////////////////////////////////////////////////////////////////////
#import "V2TIMManager.h"
@class V2TIMLiveActivityConfig;
V2TIM_EXPORT @interface V2TIMManager (LiveActivity)
/**
* 1.1 设置 LiveActivity 远端推送配置;当 config 为 nil 时,清除所有的远端推送配置
*/
- (void)setLiveActivity:(V2TIMLiveActivityConfig * _Nullable)config succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setLiveActivity(config:succ:fail:));
@end
V2TIM_EXPORT @interface V2TIMLiveActivityConfig : NSObject
/**
* 创建 LiveActivity 时自定义的 activityID用来标识该 LiveActivity
*/
@property(nonatomic,strong) NSString *activityID;
/**
* LiveActivity token
*/
@property (nonatomic, strong, nullable) NSData *token;
/**
* IM 控制台上传的 P8 证书 ID
*/
@property (nonatomic, assign) int businessID;
@end

View File

@@ -0,0 +1,168 @@
#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* _Nullable)invite:(NSString *)invitee
data:(NSString * _Nullable)data
onlineUserOnly:(BOOL)onlineUserOnly
offlinePushInfo:(V2TIMOfflinePushInfo * _Nullable)offlinePushInfo
timeout:(int)timeout
succ:(_Nullable V2TIMSucc)succ
fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(invite(invitee:data:onlineUserOnly:offlinePushInfo:timeout:succ: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* _Nullable)inviteInGroup:(NSString *)groupID
inviteeList:(NSArray *)inviteeList
data:(NSString * _Nullable)data
onlineUserOnly:(BOOL)onlineUserOnly
timeout:(int)timeout
succ:(_Nullable V2TIMSucc)succ
fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(inviteInGroup(groupID:inviteeList:data:onlineUserOnly:timeout:succ:fail:));
/**
* 邀请方取消邀请
*
* @param inviteID 邀请 ID
*
* @note 如果所有被邀请人都已经处理了当前邀请(包含超时),不能再取消当前邀请。
*/
- (void)cancel:(NSString *)inviteID data:(NSString * _Nullable)data succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(cancel(inviteID:data:succ:fail:));
/**
* 接收方接受邀请
*
* @note 不能接受不是针对自己的邀请,请在收到 onReceiveNewInvitation 回调的时候先判断 inviteeList 有没有自己,如果没有自己,不能 accept 邀请。
*/
- (void)accept:(NSString *)inviteID data:(NSString * _Nullable)data succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(accept(inviteID:data:succ:fail:));
/**
* 接收方拒绝邀请
*
* @note 不能拒绝不是针对自己的邀请,请在收到 onReceiveNewInvitation 回调的时候先判断 inviteeList 有没有自己,如果没有自己,不能 reject 邀请。
*/
- (void)reject:(NSString *)inviteID data:(NSString * _Nullable)data succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(reject(inviteID:data:succ:fail:));
/**
* 获取信令信息
*
* 如果 invite 设置 onlineUserOnly 为 NO每次信令操作包括 invite、cancel、accept、reject、timeout都会产生一条自定义消息该消息会通过 V2TIMAdvancedMsgListener -> onRecvNewMessage 抛给用户,用户也可以通过历史消息拉取,如果需要根据信令信息做自定义化文本展示,可以调用下面接口获取信令信息。
*
* @param msg 消息对象
* @return V2TIMSignalingInfo 信令信息,如果为 nil则 msg 不是一条信令消息。
*/
- (V2TIMSignalingInfo * _Nullable)getSignallingInfo:(V2TIMMessage *)msg NS_SWIFT_NAME(getSignallingInfo(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:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(addInvitedSignaling(signallingInfo:succ:fail:));
/**
* 修改邀请信令6.7 及其以上版本支持)
*
* @note 仅支持修改邀请信令的自定义字段 data。只有在线用户才能收到的邀请信令不能被修改。
*/
- (void)modifyInvitation:(NSString *)inviteID data:(NSString *)data succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(modifyInvitation(inviteID:data:succ:fail:));
@end
V2TIM_EXPORT @protocol V2TIMSignalingListener <NSObject>
@optional
/// 收到邀请的回调
-(void)onReceiveNewInvitation:(NSString *)inviteID inviter:(NSString * _Nullable)inviter groupID:(NSString * _Nullable)groupID inviteeList:(NSArray<NSString *> *)inviteeList data:(NSString * _Nullable)data NS_SWIFT_NAME(onReceiveNewInvitation(inviteID:inviter:groupID:inviteeList:data:));
/// 被邀请者接受邀请
-(void)onInviteeAccepted:(NSString *)inviteID invitee:(NSString * _Nullable)invitee data:(NSString * _Nullable)data NS_SWIFT_NAME(onInviteeAccepted(inviteID:invitee:data:));
/// 被邀请者拒绝邀请
-(void)onInviteeRejected:(NSString *)inviteID invitee:(NSString * _Nullable)invitee data:(NSString * _Nullable)data NS_SWIFT_NAME(onInviteeRejected(inviteID:invitee:data:));
/// 邀请被取消
-(void)onInvitationCancelled:(NSString *)inviteID inviter:(NSString * _Nullable)inviter data:(NSString * _Nullable)data NS_SWIFT_NAME(onInvitationCancelled(inviteID:inviter:data:));
/// 邀请超时
-(void)onInvitationTimeout:(NSString *)inviteID inviteeList:(NSArray<NSString *> *)inviteeList NS_SWIFT_NAME(onInvitationTimeout(inviteID:inviteeList:));
/// 邀请被修改6.7 及其以上版本支持)
-(void)onInvitationModified:(NSString *)inviteID data:(NSString * _Nullable)data NS_SWIFT_NAME(onInvitationModified(inviteID: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,nullable) NSString *inviteID;
@property(nonatomic,strong,nullable) NSString *groupID;
@property(nonatomic,strong,nullable) NSString *inviter;
@property(nonatomic,strong) NSMutableArray *inviteeList;
@property(nonatomic,strong,nullable) NSString *data;
@property(nonatomic,assign) uint32_t timeout;
@property(nonatomic,assign) SignalingActionType actionType;
@end

View File

@@ -0,0 +1,37 @@
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 IMSDK
//
// 模块名称V2TIMManager+VOIP
//
// 消息 VoIP 推送接口
//
/////////////////////////////////////////////////////////////////////
#import "V2TIMManager.h"
@class V2TIMVOIPConfig;
V2TIM_EXPORT @interface V2TIMManager (VOIP)
/**
* 1.1 设置 VoIP 推送
*/
- (void)setVOIP:(V2TIMVOIPConfig * _Nullable)config succ:(V2TIMSucc _Nullable)succ fail:(V2TIMFail _Nullable)fail NS_SWIFT_NAME(setVOIP(config:succ: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

View File

@@ -0,0 +1,843 @@
/////////////////////////////////////////////////////////////////////
//
// 腾讯云通信服务 IMSDK
//
// 模块名称V2TIMManager
//
// TIM SDK 2.0 版的接口,相比于 1.0 版本更加简洁易用,接入速度更快,高级特性接口详见:
// - V2TIMManager+Message.h 消息相关的高级功能接口,比如图片消息,视频消息,消息撤回,消息已读等功能。
// - V2TIMManager+APNS.h 推送相关的高级功能接口,主要用于开启消息推送功能。
// - V2TIMManager+Conversation.h 会话相关的高级功能接口,一个会话对应一个聊天窗口。
// - V2TIMManager+Group.h 群组相关的高级功能接口,比如邀请人进群,处理加群请求等功能。
// - V2TIMManager+Friendship.h 关系链相关的高级功能接口,比如黑名单,好友列表等功能。
// - V2TIMManager+Community.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 V2TIMUserSearchParam;
@class V2TIMUserSearchResult;
@class V2TIMGroupMemberInfo;
@class V2TIMGroupMemberFullInfo;
@class V2TIMGroupChangeInfo;
@class V2TIMGroupMemberChangeInfo;
@class V2TIMUserReceiveMessageOptInfo;
@class V2TIMTopicInfo;
@class V2TIMUserStatus;
@class V2TIMReceiveMessageOptInfo;
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 * _Nullable desc);
/// 创建群组成功回调
typedef void (^V2TIMCreateGroupSucc)(NSString * _Nullable groupID);
/// 获取用户资料成功回调
typedef void (^V2TIMUserFullInfoListSucc)(NSArray <V2TIMUserFullInfo *> *infoList);
/// 搜索云端用户的结果回调
typedef void (^V2TIMUserSearchResultSucc)(V2TIMUserSearchResult *searchResult);
/// 实验性 API 接口成功回调
typedef void (^V2TIMCallExperimentalAPISucc)(NSObject * _Nullable 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 NS_ENUM(NSInteger, V2TIMKeywordListMatchType) {
V2TIM_KEYWORD_LIST_MATCH_TYPE_OR = 0,
V2TIM_KEYWORD_LIST_MATCH_TYPE_AND = 1
};
/// 日志回调
typedef void (^V2TIMLogListener)(V2TIMLogLevel logLevel, NSString * _Nullable 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 NS_SWIFT_NAME(addIMSDKListener(listener:));
/**
* 1.4 移除 IM 监听
*/
- (void)removeIMSDKListener:(id<V2TIMSDKListener>)listener NS_SWIFT_NAME(removeIMSDKListener(listener:));
/**
* 1.5 反初始化 SDK
*/
- (void)unInitSDK;
/**
* 1.6 获取版本号
*
* @return 返回版本号,字符串表示,例如 5.0.10
*/
- (NSString*)getVersion;
/**
* 1.7 获取服务器时间戳
*
* @return UTC 时间戳,单位 s
*/
- (uint64_t)getServerTime;
/**
* 初始化 SDK待废弃接口请使用 initSDK 和 addIMSDKListener 接口)
*/
- (BOOL)initSDK:(int)sdkAppID config:(V2TIMSDKConfig*)config listener:(_Nullable 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:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(login(userID:userSig:succ:fail:));
/**
* 2.2 登出
*
* 退出登录,如果切换账号,需要 logout 回调成功或者失败后才能再次 login否则 login 可能会失败。
*/
- (void)logout:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(logout(succ:fail:));
/**
* 2.3 获取登录用户
*/
- (NSString * _Nullable)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:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(sendC2CTextMessage(text:to:succ:fail:));
/**
* 3.4 发送单聊自定义(信令)消息(最大支持 12KB
*
* 自定义消息本质就是一端二进制 buffer您可以在其上自由组织自己的消息格式常用于发送信令但是自定义消息不支持云端敏感词过滤。
* @return 返回消息的唯一标识 ID
*
* @note 该接口发送的消息默认不会推送,如果需要推送,请调用 V2TIMManager+Message.h -> sendMessage 接口。
*/
- (NSString*)sendC2CCustomMessage:(NSData *)customData to:(NSString *)userID succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(sendC2CCustomMessage(customData:to:succ: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:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(sendGroupTextMessage(text:to:priority:succ: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:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(sendGroupCustomMessage(customData:to:priority:succ: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最长 100 字节,使用 UTF-8 编码1 个汉字占 3 个字节。
*
* @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* _Nullable)groupID groupName:(NSString *)groupName succ:(V2TIMCreateGroupSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(createGroup(groupType:groupID:groupName:succ: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* _Nullable)msg succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(joinGroup(groupID:msg:succ:fail:));
/**
* 4.5 退出群组
*
* @note 在公开群Public、会议Meeting和直播群AVChatRoom群主是不可以退群的群主只能调用 dismissGroup 解散群组。
*/
- (void)quitGroup:(NSString*)groupID succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(quitGroup(groupID:succ:fail:));
/**
* 4.6 解散群组
*
* @note 请注意如下特殊逻辑:
* - 好友工作群Work的解散最为严格即使群主也不能随意解散只能由您的业务服务器调用 [解散群组 REST API](https://cloud.tencent.com/document/product/269/1624) 解散。
* - 其他类型群的群主可以解散群组。
*/
- (void)dismissGroup:(NSString*)groupID succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(dismissGroup(groupID:succ: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:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setSelfInfo(info:succ:fail:));
/**
* 5.3 订阅用户资料,从 7.4 版本开始支持
*
* @param userIDList 待订阅的用户 ID
*
* @note
* - 该接口用于订阅陌生人的资料变更事件,订阅成功后,当订阅用户资料发生变更,您可以通过监听 onUserInfoChanged 回调来感知
* - 订阅列表最多允许订阅 200 个,超过限制后,会自动淘汰最先订阅的用户
* - 自己的资料变更通知不需要订阅,默认会通过 onSelfInfoUpdated 回调通知给您
* - 好友的资料变更通知不需要订阅,默认会通过 onFriendInfoChange 回调通知给您
* - 该功能为 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)subscribeUserInfo:(NSArray *)userIDList succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(subscribeUserInfo(userIDList:succ:fail:));
/**
* 5.4 取消订阅用户资料,从 7.4 版本开始支持
*
* @param userIDList 需要取消订阅的用户 ID
*
* @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)。
*/
- (void)unsubscribeUserInfo:(NSArray * _Nullable)userIDList succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(unsubscribeUserInfo(userIDList:succ:fail:));
/**
* 5.5 搜索云端用户资料8.4 及以上版本支持)
* @param searchParam 用户搜索参数,详见 V2TIMUserSearchParam 的定义
* @note
* - 该功能为 IM 增值功能,详见[价格说明](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)
* - 如果您没有开通该服务,调用接口会返回 60020 错误码
* - 该接口返回的是云端存储的用户资料,包括好友和非好友资料,您可以调用 checkFriend 接口来判断是否为好友。
*/
- (void)searchUsers:(V2TIMUserSearchParam *)searchParam succ:(V2TIMUserSearchResultSucc)succ fail:(V2TIMFail)fail NS_SWIFT_NAME(searchUsers(searchParam:succ:fail:));
/**
* 5.6 查询用户状态,从 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 NS_SWIFT_NAME(getUserStatus(userIDList:succ:fail:));
/**
* 5.7 设置自己的状态,从 6.3 版本开始支持
*
* @param status 待设置的自定义状态
*
* @note 该接口只支持设置自己的自定义状态,即 V2TIMUserStatus.customStatus
*/
- (void)setSelfStatus:(V2TIMUserStatus *)status succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(setSelfStatus(status:succ:fail:));
/**
* 5.8 订阅用户状态,从 6.3 版本开始支持
*
* @param userIDList 待订阅的用户 ID
*
* @note
* - 当成功订阅用户状态后,当对方的状态(包含在线状态、自定义状态)发生变更后,您可以监听 @onUserStatusChanged 回调来感知
* - 如果您需要订阅好友列表的状态,您只需要在控制台上打开开关即可,无需调用该接口
* - 该接口不支持订阅自己,您可以通过监听 @onUserStatusChanged 回调来感知自身的自定义状态的变更
* - 订阅列表最多允许订阅 200 个,超过限制后,会自动淘汰最先订阅的用户
* - 该功能为 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:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(subscribeUserStatus(userIDList:succ:fail:));
/**
* 5.9 取消订阅用户状态,从 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 * _Nullable)userIDList succ:(_Nullable V2TIMSucc)succ fail:(_Nullable V2TIMFail)fail NS_SWIFT_NAME(unsubscribeUserStatus(userIDList:succ:fail:));
// 5.10 更多功能,详见 V2TIMManager+Friendship.h
/////////////////////////////////////////////////////////////////////////////////
// 扩展接口
/////////////////////////////////////////////////////////////////////////////////
/**
* 6.1 实验性 API 接口
*
* @param api 接口名称
* @param param 接口参数
*
* @note 该接口提供一些实验性功能
*/
- (void)callExperimentalAPI:(NSString *)api
param:(NSObject * _Nullable)param
succ:(V2TIMCallExperimentalAPISucc)succ
fail:(V2TIMFail)fail NS_SWIFT_NAME(callExperimentalAPI(api:param:succ:fail:));
@end
/////////////////////////////////////////////////////////////////////////////////
//
// IMSDK 主核心回调,帮助您时刻关注 IMSDK 的在线状态
//
/////////////////////////////////////////////////////////////////////////////////
/// IMSDK 主核心回调
V2TIM_EXPORT @protocol V2TIMSDKListener <NSObject>
@optional
/// SDK 正在连接到服务器
- (void)onConnecting;
/// SDK 已经成功连接到服务器
- (void)onConnectSuccess;
/// SDK 连接服务器失败
- (void)onConnectFailed:(int)code err:(NSString* _Nullable)err;
/// 当前用户被踢下线,此时可以 UI 提示用户,并再次调用 V2TIMManager 的 login() 函数重新登录。
- (void)onKickedOffline;
/// 在线时票据过期:此时您需要生成新的 userSig 并再次调用 V2TIMManager 的 login() 函数重新登录。
- (void)onUserSigExpired;
/// 当前用户的资料发生了更新
- (void)onSelfInfoUpdated:(V2TIMUserFullInfo *)Info NS_SWIFT_NAME(onSelfInfoUpdated(info:));
/**
* 用户状态变更通知
*
* @note 收到通知的情况:
* 1. 订阅过的用户发生了状态变更(包括在线状态和自定义状态),会触发该回调
* 2. 在 IM 控制台打开了好友状态通知开关,即使未主动订阅,当好友状态发生变更时,也会触发该回调
* 3. 同一个账号多设备登录,当其中一台设备修改了自定义状态,所有设备都会收到该回调
*/
- (void)onUserStatusChanged:(NSArray<V2TIMUserStatus *> *)userStatusList NS_SWIFT_NAME(onUserStatusChanged(userStatusList:));
/**
* 用户资料变更通知
*
* @note
* 仅当通过 subscribeUserInfo 成功订阅的用户(仅限非好友用户)的资料发生变更时,才会激活此回调函数
*/
- (void)onUserInfoChanged:(NSArray<V2TIMUserFullInfo *> *)userInfoList NS_SWIFT_NAME(onUserInfoChanged(userInfoList:));
/**
* 全局消息接收选项变更通知
*/
- (void)onAllReceiveMessageOptChanged:(V2TIMReceiveMessageOptInfo *)receiveMessageOptInfo NS_SWIFT_NAME(onAllReceiveMessageOptChanged(receiveMessageOptInfo:));
/**
* 实验性事件通知
*/
- (void)onExperimentalNotify:(NSString *)key param:(NSObject * _Nullable)param NS_SWIFT_NAME(onExperimentalNotify(key:param:));
@end
/////////////////////////////////////////////////////////////////////////////////
//
// IMSDK 基本消息回调 (高级消息请参考 V2TIMManager+Message.h -> V2TIMAdvancedMsgListener
//
/////////////////////////////////////////////////////////////////////////////////
/// IMSDK 基本消息回调
V2TIM_EXPORT @protocol V2TIMSimpleMsgListener <NSObject>
@optional
/// 收到 C2C 文本消息
- (void)onRecvC2CTextMessage:(NSString *)msgID sender:(V2TIMUserInfo *)info text:(NSString * _Nullable)text NS_SWIFT_NAME(onRecvC2CTextMessage(msgID:sender:text:));
/// 收到 C2C 自定义(信令)消息
- (void)onRecvC2CCustomMessage:(NSString *)msgID sender:(V2TIMUserInfo *)info customData:(NSData * _Nullable)data NS_SWIFT_NAME(onRecvC2CCustomMessage(msgID:sender:customData:));
/// 收到群文本消息
- (void)onRecvGroupTextMessage:(NSString *)msgID groupID:(NSString * _Nullable)groupID sender:(V2TIMGroupMemberInfo *)info text:(NSString * _Nullable)text NS_SWIFT_NAME(onRecvGroupTextMessage(msgID:groupID:sender:text:));
/// 收到群自定义(信令)消息
- (void)onRecvGroupCustomMessage:(NSString *)msgID groupID:(NSString * _Nullable)groupID sender:(V2TIMGroupMemberInfo *)info customData:(NSData * _Nullable)data NS_SWIFT_NAME(onRecvGroupCustomMessage(msgID:groupID:sender:customData:));
@end
/////////////////////////////////////////////////////////////////////////////////
//
// IMSDK 群组事件回调
//
/////////////////////////////////////////////////////////////////////////////////
/// IMSDK 群组事件回调
V2TIM_EXPORT @protocol V2TIMGroupListener <NSObject>
@optional
/////////////////////////////////////////////////////////////////////////////////
// 群成员相关通知
/////////////////////////////////////////////////////////////////////////////////
/// 有新成员加入群(该群所有的成员都能收到)
/// 会议群Meeting默认无此回调如需回调请前往 [控制台](https://console.cloud.tencent.com/im) (功能配置 -> 群组配置 -> 群系统通知配置 -> 群成员变更通知) 主动配置。
- (void)onMemberEnter:(NSString * _Nullable)groupID memberList:(NSArray<V2TIMGroupMemberInfo *>*)memberList NS_SWIFT_NAME(onMemberEnter(groupID:memberList:));
/// 有成员离开群(该群所有的成员都能收到)
/// 会议群Meeting默认无此回调如需回调请前往 [控制台](https://console.cloud.tencent.com/im) (功能配置 -> 群组配置 -> 群系统通知配置 -> 群成员变更通知) 主动配置。
- (void)onMemberLeave:(NSString * _Nullable)groupID member:(V2TIMGroupMemberInfo *)member NS_SWIFT_NAME(onMemberLeave(groupID:member:));
/// 某成员被拉入某群(该群所有的成员都能收到)
- (void)onMemberInvited:(NSString * _Nullable)groupID opUser:(V2TIMGroupMemberInfo *)opUser memberList:(NSArray<V2TIMGroupMemberInfo *>*)memberList NS_SWIFT_NAME(onMemberInvited(groupID:opUser:memberList:));
/// 有成员被踢出某群(该群所有的成员都能收到)
- (void)onMemberKicked:(NSString * _Nullable)groupID opUser:(V2TIMGroupMemberInfo *)opUser memberList:(NSArray<V2TIMGroupMemberInfo *>*)memberList NS_SWIFT_NAME(onMemberKicked(groupID:opUser:memberList:));
/// 某成员信息发生变更(该群所有的成员都能收到)
/// 会议群Meeting和直播群AVChatRoom默认无此回调如需回调请前往 [控制台](https://console.cloud.tencent.com/im) (功能配置 -> 群组配置 -> 群系统通知配置 -> 群成员资料变更通知) 主动配置。
- (void)onMemberInfoChanged:(NSString * _Nullable)groupID changeInfoList:(NSArray <V2TIMGroupMemberChangeInfo *> *)changeInfoList NS_SWIFT_NAME(onMemberInfoChanged(groupID:changeInfoList:));
/// 群组全体成员被禁言/解除禁言了(该群所有的成员都能收到)
/// 需要提前在 [控制台](https://console.cloud.tencent.com/im) 开启通知开关。开关路径:功能配置 -> 群组配置 -> 群系统通知配置 -> 群资料变更通知 -> 群禁言变更通知。
/// 7.5 及以上版本支持。
- (void)onAllGroupMembersMuted:(NSString * _Nullable)groupID isMute:(BOOL)isMute NS_SWIFT_NAME(onAllGroupMembersMuted(groupID:isMute:));
/// 有成员被标记(该群所有的成员都能收到)
/// 仅社群Community支持该回调。
/// 7.5 及以上版本支持,需要您购买旗舰版套餐。
- (void)onMemberMarkChanged:(NSString * _Nullable)groupID memberIDList:(NSArray<NSString *> *)memberIDList markType:(int)markType enableMark:(BOOL)enableMark NS_SWIFT_NAME(onMemberMarkChanged(groupID:memberIDList:markType:enableMark:));
/////////////////////////////////////////////////////////////////////////////////
// 群生命周期相关通知
/////////////////////////////////////////////////////////////////////////////////
/// 有新的群创建(创建者能收到,应用于多端消息同步的场景)
- (void)onGroupCreated:(NSString * _Nullable)groupID NS_SWIFT_NAME(onGroupCreated(groupID:));
/// 某个已加入的群被解散了(该群所有的成员都能收到)
- (void)onGroupDismissed:(NSString * _Nullable)groupID opUser:(V2TIMGroupMemberInfo *)opUser NS_SWIFT_NAME(onGroupDismissed(groupID:opUser:));
/// 某个已加入的群被回收了(该群所有的成员都能收到)
- (void)onGroupRecycled:(NSString * _Nullable)groupID opUser:(V2TIMGroupMemberInfo *)opUser NS_SWIFT_NAME(onGroupRecycled(groupID:opUser:));
/// 某个已加入的群的信息被修改了(该群所有的成员都能收到)
/// 以下字段的修改可能会引发该通知 groupName & introduction & notification & faceUrl & owner & allMute & custom
/// 控制指定字段 下发通知/存漫游 请前往 [控制台](https://console.cloud.tencent.com/im) (功能配置 -> 群组配置 -> 群系统通知配置 -> 群资料变更通知) 主动配置。
- (void)onGroupInfoChanged:(NSString * _Nullable)groupID changeInfoList:(NSArray <V2TIMGroupChangeInfo *> *)changeInfoList NS_SWIFT_NAME(onGroupInfoChanged(groupID:changeInfoList:));
/// 某个已加入的群的属性被修改了,会返回所在群组的所有属性(该群所有的成员都能收到)
- (void)onGroupAttributeChanged:(NSString *)groupID attributes:(NSMutableDictionary<NSString *,NSString *> *)attributes;
/// 某个已加入的群的计数器被修改了,会返回当前变更的群计数器(该群所有的成员都能收到)
- (void)onGroupCounterChanged:(NSString * _Nullable)groupID key:(NSString *)key newValue:(NSInteger)newValue NS_SWIFT_NAME(onGroupCounterChanged(groupID:key:newValue:));
/////////////////////////////////////////////////////////////////////////////////
// 加群申请相关通知
/////////////////////////////////////////////////////////////////////////////////
/// 有新的加群请求(只有群主和管理员会收到)
- (void)onReceiveJoinApplication:(NSString * _Nullable)groupID member:(V2TIMGroupMemberInfo *)member opReason:(NSString * _Nullable)opReason NS_SWIFT_NAME(onReceiveJoinApplication(groupID:member:opReason:));
/// 加群或者邀请加群请求已经被群主或管理员处理了(只有申请人能够收到)
- (void)onApplicationProcessed:(NSString * _Nullable)groupID opUser:(V2TIMGroupMemberInfo *)opUser opResult:(BOOL)isAgreeJoin opReason:(NSString * _Nullable)opReason NS_SWIFT_NAME(onApplicationProcessed(groupID:opUser:opResult:opReason:));
/////////////////////////////////////////////////////////////////////////////////
// 其他相关通知
/////////////////////////////////////////////////////////////////////////////////
/// 指定管理员身份
- (void)onGrantAdministrator:(NSString * _Nullable)groupID opUser:(V2TIMGroupMemberInfo *)opUser memberList:(NSArray <V2TIMGroupMemberInfo *> *)memberList NS_SWIFT_NAME(onGrantAdministrator(groupID:opUser:memberList:));
/// 取消管理员身份
- (void)onRevokeAdministrator:(NSString * _Nullable)groupID opUser:(V2TIMGroupMemberInfo *)opUser memberList:(NSArray <V2TIMGroupMemberInfo *> *)memberList NS_SWIFT_NAME(onRevokeAdministrator(groupID:opUser:memberList:));
/// 自己主动退出群组(主要用于多端同步)
- (void)onQuitFromGroup:(NSString * _Nullable)groupID NS_SWIFT_NAME(onQuitFromGroup(groupID:));
/// 收到 RESTAPI 下发的自定义系统消息
- (void)onReceiveRESTCustomData:(NSString * _Nullable)groupID data:(NSData * _Nullable)data NS_SWIFT_NAME(onReceiveRESTCustomData(groupID:data:));
/////////////////////////////////////////////////////////////////////////////////
// 话题事件监听回调
/////////////////////////////////////////////////////////////////////////////////
/// 话题创建回调
- (void)onTopicCreated:(NSString * _Nullable)groupID topicID:(NSString * _Nullable)topicID NS_SWIFT_NAME(onTopicCreated(groupID:topicID:));
/// 话题被删除回调
- (void)onTopicDeleted:(NSString * _Nullable)groupID topicIDList:(NSArray<NSString *> *)topicIDList NS_SWIFT_NAME(onTopicDeleted(groupID:topicIDList:));
/// 话题更新回调
- (void)onTopicChanged:(NSString * _Nullable)groupID topicInfo:(V2TIMTopicInfo *)topicInfo NS_SWIFT_NAME(onTopicChanged(groupID:topicInfo:));
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 用户资料
//
/////////////////////////////////////////////////////////////////////////////////
/// 用户基本资料
V2TIM_EXPORT @interface V2TIMUserInfo : NSObject
/// 用户 ID
@property(nonatomic,strong,readonly,nullable) NSString* userID;
/// 用户昵称
@property(nonatomic,strong,nullable) NSString* nickName;
/// 用户头像
@property(nonatomic,strong,nullable) NSString* faceURL;
@end
/// 用户详细资料
V2TIM_EXPORT @interface V2TIMUserFullInfo : V2TIMUserInfo
/// 用户签名
@property(nonatomic,strong,nullable) 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,nullable) NSDictionary<NSString *,NSData *> * customInfo;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 用户搜索
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMUserSearchParam : NSObject
/// 搜索的关键字列表,关键字列表最多支持 5 个keyword 会自动匹配用户 ID、昵称。
@property(nonatomic, strong,nullable) NSArray<NSString *> *keywordList;
/// 指定关键字列表匹配类型,可设置为“或”关系搜索或者“与”关系搜索。
/// 取值分别为 V2TIM_KEYWORD_LIST_MATCH_TYPE_OR 和 V2TIM_KEYWORD_LIST_MATCH_TYPE_AND默认为“或”关系搜索。
@property(nonatomic,assign) V2TIMKeywordListMatchType keywordListMatchType;
/// 用户性别(如果不设置,默认男性和女性都会返回)
@property(nonatomic,assign) V2TIMGender gender;
/// 用户最小生日(如果不设置,默认值为 0
@property(nonatomic,assign) uint32_t minBirthday;
/// 用户最大生日(如果不设置,默认 birthday >= minBirthday 的用户都会返回)
@property(nonatomic,assign) uint32_t maxBirthday;
/// 每次云端搜索返回结果的条数(必须大于 0最大支持 100默认 20
@property(nonatomic,assign) NSUInteger searchCount;
/// 每次云端搜索的起始位置。第一次填空字符串,续拉时填写 V2TIMUserSearchResult 中的返回值。
@property(nonatomic,strong) NSString *searchCursor;
@end
V2TIM_EXPORT @interface V2TIMUserSearchResult : NSObject
/// 是否已经返回全部满足搜索条件的用户列表
@property(nonatomic,assign) BOOL isFinished;
/// 满足搜索条件的用户总数量
@property(nonatomic,assign) NSUInteger totalCount;
/// 下一次云端搜索的起始位置
@property(nonatomic,strong,nullable) NSString *nextCursor;
/// 当前一次云端搜索返回的用户列表
@property(nonatomic,strong) NSArray<V2TIMUserFullInfo *> *userList;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 用户状态
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMUserStatus : NSObject
/// 用户的 ID
@property (nonatomic, copy, readonly, nullable) NSString *userID;
/// 用户的状态
@property (nonatomic, assign, readonly) V2TIMUserStatusType statusType;
/// 用户的自定义状态, 最大 100 字节
@property (nonatomic, copy, nullable) NSString *customStatus;
/// 用户在线设备列表
@property (nonatomic, strong, readonly) NSMutableArray<NSString *> *onlineDevices;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// 群成员资料
//
/////////////////////////////////////////////////////////////////////////////////
/// 群成员基本资料
V2TIM_EXPORT @interface V2TIMGroupMemberInfo : NSObject
/// 用户 ID
@property(nonatomic,strong,nullable) NSString* userID;
/// 用户昵称
@property(nonatomic,strong,readonly,nullable) NSString* nickName;
/// 用户好友备注
@property(nonatomic,strong,readonly,nullable) NSString* friendRemark;
/// 群成员名片
@property(nonatomic,strong,nullable) NSString* nameCard;
/// 用户头像
@property(nonatomic,strong,readonly,nullable) NSString* faceURL;
/// 群成员在线终端列表
@property(nonatomic,strong,readonly) NSMutableArray<NSString*>* onlineDevices;
@end
/// 群成员详细资料
V2TIM_EXPORT @interface V2TIMGroupMemberFullInfo : V2TIMGroupMemberInfo
/// 群成员自定义字段
/// 首先要在 [控制台](https://console.cloud.tencent.com/im) (功能配置 -> 群成员自定义字段) 配置用户自定义字段,然后再调用该接口进行设置。
@property(nonatomic,strong,nullable) 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;
/// 群成员是否在线
/// @note
/// - 不支持直播群 AVChatRoom
/// - 该字段仅在调用 - getGroupMemberList:filter:nextSeq:succ:fail: 接口时有效;
/// - 7.3 及其以上版本支持,需要您购买旗舰版套餐。
@property(nonatomic,assign,readonly) BOOL isOnline;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// SDK 配置参数表
//
/////////////////////////////////////////////////////////////////////////////////
V2TIM_EXPORT @interface V2TIMSDKConfig : NSObject
/// 本地写 log 文件的等级,默认 DEBUG 等级, IMSDK 的日志默认存储于 /Library/Caches/ 目录下
@property(nonatomic,assign) V2TIMLogLevel logLevel;
/// log 监听回调(回调在主线程,日志回调可能比较频繁,请注意不要在回调里面同步处理太多耗时任务,可能会堵塞主线程)
@property(nonatomic,copy,nullable) V2TIMLogListener logListener;
@end
#endif

View File

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

View File

@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyCollectedDataTypes</key>
<array/>
<key>NSPrivacyTrackingDomains</key>
<array/>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategorySystemBootTime</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>35F9.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryDiskSpace</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>E174.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>C617.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string>
</array>
</dict>
</array>
</dict>
</plist>