V2TIMManager.h 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694
  1. /////////////////////////////////////////////////////////////////////
  2. //
  3. // 腾讯云通信服务 IMSDK
  4. //
  5. // 模块名称:V2TIMManager
  6. //
  7. // TIM SDK 2.0 版的接口,相比于 1.0 版本更加简洁易用,接入速度更快,高级特性接口详见:
  8. // - V2TIMManager+Message.h 消息相关的高级功能接口,比如图片消息,视频消息,消息撤回,消息已读等功能。
  9. // - V2TIMManager+APNS.h 推送相关的高级功能接口,主要用于开启消息推送功能。
  10. // - V2TIMManager+Conversation.h 会话相关的高级功能接口,一个会话对应一个聊天窗口。
  11. // - V2TIMManager+Group.h 群组相关的高级功能接口,比如邀请人进群,处理加群请求等功能。
  12. // - V2TIMManager+Friendship.h 关系链相关的高级功能接口,比如黑名单,好友列表等功能。
  13. //
  14. /////////////////////////////////////////////////////////////////////
  15. #ifndef ImSDK_V2TIMManager_h
  16. #define ImSDK_V2TIMManager_h
  17. #import <Foundation/Foundation.h>
  18. @class V2TIMSDKConfig;
  19. @class V2TIMUserInfo;
  20. @class V2TIMUserFullInfo;
  21. @class V2TIMGroupMemberInfo;
  22. @class V2TIMGroupMemberFullInfo;
  23. @class V2TIMGroupChangeInfo;
  24. @class V2TIMGroupMemberChangeInfo;
  25. @class V2TIMUserReceiveMessageOptInfo;
  26. @class V2TIMTopicInfo;
  27. @class V2TIMUserStatus;
  28. @protocol V2TIMSDKListener;
  29. @protocol V2TIMSimpleMsgListener;
  30. @protocol V2TIMGroupListener;
  31. extern NSString *const GroupType_Work;
  32. extern NSString *const GroupType_Public;
  33. extern NSString *const GroupType_Meeting;
  34. extern NSString *const GroupType_AVChatRoom;
  35. extern NSString *const GroupType_Community;
  36. /////////////////////////////////////////////////////////////////////////////////
  37. //
  38. // V2TIMManager
  39. //
  40. // IMSDK 主核心类,负责 IMSDK 的初始化、登录、消息收发,建群退群等功能
  41. //
  42. /////////////////////////////////////////////////////////////////////////////////
  43. @interface V2TIMManager : NSObject
  44. /// 成功通用回调
  45. typedef void (^V2TIMSucc)(void);
  46. /// 失败通用回调
  47. typedef void (^V2TIMFail)(int code, NSString * desc);
  48. /// 创建群组成功回调
  49. typedef void (^V2TIMCreateGroupSucc)(NSString * groupID);
  50. /// 获取用户资料成功回调
  51. typedef void (^V2TIMUserFullInfoListSucc)(NSArray <V2TIMUserFullInfo *> * infoList);
  52. /// 实验性 API 接口成功回调
  53. typedef void (^V2TIMCallExperimentalAPISucc)(NSObject *result);
  54. /// 获取用户状态列表成功回调
  55. typedef void (^V2TIMUserStatusListSucc)(NSArray<V2TIMUserStatus *> *result);
  56. /// 登录状态
  57. typedef NS_ENUM(NSInteger, V2TIMLoginStatus) {
  58. V2TIM_STATUS_LOGINED = 1, ///< 已登录
  59. V2TIM_STATUS_LOGINING = 2, ///< 登录中
  60. V2TIM_STATUS_LOGOUT = 3, ///< 无登录
  61. };
  62. /// 日志级别
  63. typedef NS_ENUM(NSInteger, V2TIMLogLevel) {
  64. V2TIM_LOG_NONE = 0, ///< 不输出任何 sdk log
  65. V2TIM_LOG_DEBUG = 3, ///< 输出 DEBUG,INFO,WARNING,ERROR 级别的 log
  66. V2TIM_LOG_INFO = 4, ///< 输出 INFO,WARNING,ERROR 级别的 log
  67. V2TIM_LOG_WARN = 5, ///< 输出 WARNING,ERROR 级别的 log
  68. V2TIM_LOG_ERROR = 6, ///< 输出 ERROR 级别的 log
  69. };
  70. /// 消息优先级
  71. typedef NS_ENUM(NSInteger, V2TIMMessagePriority) {
  72. V2TIM_PRIORITY_DEFAULT = 0, ///< 默认
  73. V2TIM_PRIORITY_HIGH = 1, ///< 高优先级,一般用于礼物等重要消息
  74. V2TIM_PRIORITY_NORMAL = 2, ///< 常规优先级,一般用于普通消息
  75. V2TIM_PRIORITY_LOW = 3, ///< 低优先级,一般用于点赞消息
  76. };
  77. /// 性别
  78. typedef NS_ENUM(NSInteger, V2TIMGender) {
  79. V2TIM_GENDER_UNKNOWN = 0, ///< 未知性别
  80. V2TIM_GENDER_MALE = 1, ///< 男性
  81. V2TIM_GENDER_FEMALE = 2, ///< 女性
  82. };
  83. /// 好友验证方式
  84. typedef NS_ENUM(NSInteger, V2TIMFriendAllowType) {
  85. V2TIM_FRIEND_ALLOW_ANY = 0, ///< 同意任何用户加好友
  86. V2TIM_FRIEND_NEED_CONFIRM = 1, ///< 需要验证
  87. V2TIM_FRIEND_DENY_ANY = 2, ///< 拒绝任何人加好友
  88. };
  89. /// 群成员角色
  90. typedef NS_ENUM(NSInteger, V2TIMGroupMemberRole) {
  91. V2TIM_GROUP_MEMBER_UNDEFINED = 0, ///< 未定义(没有获取该字段)
  92. V2TIM_GROUP_MEMBER_ROLE_MEMBER = 200, ///< 群成员
  93. V2TIM_GROUP_MEMBER_ROLE_ADMIN = 300, ///< 群管理员
  94. V2TIM_GROUP_MEMBER_ROLE_SUPER = 400, ///< 群主
  95. };
  96. /// 用户状态类型
  97. typedef NS_ENUM(NSInteger, V2TIMUserStatusType) {
  98. V2TIM_USER_STATUS_UNKNOWN = 0, ///< 未知状态
  99. V2TIM_USER_STATUS_ONLINE = 1, ///< 在线状态
  100. V2TIM_USER_STATUS_OFFLINE = 2, ///< 离线状态
  101. V2TIM_USER_STATUS_UNLOGINED = 3, ///< 未登录(如主动调用 logout 接口,或者账号注册后还未登录)
  102. };
  103. /// 日志回调
  104. typedef void (^V2TIMLogListener)(V2TIMLogLevel logLevel, NSString * logContent);
  105. /////////////////////////////////////////////////////////////////////////////////
  106. // 初始化
  107. /////////////////////////////////////////////////////////////////////////////////
  108. /**
  109. * 1.1 获取 V2TIMManager 管理器实例
  110. */
  111. + (V2TIMManager*)sharedInstance;
  112. /**
  113. * 1.2 初始化 SDK
  114. *
  115. * @param sdkAppID 应用 ID,必填项,可以在 [控制台](https://console.cloud.tencent.com/im) 中获取
  116. * @param config 配置信息
  117. * @return YES:成功;NO:失败
  118. */
  119. - (BOOL)initSDK:(int)sdkAppID config:(V2TIMSDKConfig*)config;
  120. /**
  121. * 1.3 添加 IM 监听
  122. */
  123. - (void)addIMSDKListener:(id<V2TIMSDKListener>)listener;
  124. /**
  125. * 1.4 移除 IM 监听
  126. */
  127. - (void)removeIMSDKListener:(id<V2TIMSDKListener>)listener;
  128. /**
  129. * 1.5 反初始化 SDK
  130. */
  131. - (void)unInitSDK;
  132. /**
  133. * 1.6 获取版本号
  134. *
  135. * @return 返回版本号,字符串表示,例如 5.0.10
  136. */
  137. - (NSString*)getVersion;
  138. /**
  139. * 1.7 获取服务器时间戳
  140. *
  141. * @return 服务器时间时间戳,单位 s
  142. */
  143. - (uint64_t)getServerTime;
  144. /**
  145. * 初始化 SDK(待废弃接口,请使用 initSDK 和 addIMSDKListener 接口)
  146. */
  147. - (BOOL)initSDK:(int)sdkAppID config:(V2TIMSDKConfig*)config listener:(id<V2TIMSDKListener>)listener __attribute__((deprecated("use initSDK:config: and addIMSDKListener: instead")));
  148. /////////////////////////////////////////////////////////////////////////////////
  149. // 登录登出
  150. /////////////////////////////////////////////////////////////////////////////////
  151. /**
  152. * 2.1 登录
  153. *
  154. * 登录需要设置用户名 userID 和用户签名 userSig,userSig 生成请参考 [UserSig 后台 API](https://cloud.tencent.com/document/product/269/32688)。
  155. *
  156. * @note 请注意如下特殊逻辑:
  157. * - 登陆时票据过期:login 函数的 V2TIMFail 会返回 ERR_USER_SIG_EXPIRED(6206)或者 ERR_SVR_ACCOUNT_USERSIG_EXPIRED(70001) 错误码,此时请您生成新的 userSig 重新登录。
  158. * - 在线时票据过期:用户在线期间也可能收到 V2TIMSDKListener -> onUserSigExpired 回调,此时也是需要您生成新的 userSig 并重新登录。
  159. * - 在线时被踢下线:用户在线情况下被踢,SDK 会通过 V2TIMSDKListener -> onKickedOffline 回调通知给您,此时可以 UI 提示用户,并再次调用 login() 重新登录。
  160. * - 同平台多设备在线:该功能为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)。
  161. */
  162. - (void)login:(NSString *)userID userSig:(NSString *)userSig succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
  163. /**
  164. * 2.2 登出
  165. *
  166. * 退出登录,如果切换账号,需要 logout 回调成功或者失败后才能再次 login,否则 login 可能会失败。
  167. */
  168. - (void)logout:(V2TIMSucc)succ fail:(V2TIMFail)fail;
  169. /**
  170. * 2.3 获取登录用户
  171. */
  172. - (NSString *)getLoginUser;
  173. /**
  174. * 2.4 获取登录状态
  175. *
  176. * 如果用户已经处于已登录和登录中状态,请勿再频繁调用登录接口登录。
  177. */
  178. - (V2TIMLoginStatus)getLoginStatus;
  179. /////////////////////////////////////////////////////////////////////////////////
  180. // 消息收发
  181. /////////////////////////////////////////////////////////////////////////////////
  182. /**
  183. * 3.1 设置基本消息(文本消息和自定义消息)的事件监听器
  184. *
  185. * @note 图片消息、视频消息、语音消息等高级消息的监听,请参考 V2TIMManager+Message.h -> addAdvancedMsgListener 接口。
  186. */
  187. - (void)addSimpleMsgListener:(id<V2TIMSimpleMsgListener>)listener NS_SWIFT_NAME(addSimpleMsgListener(listener:));
  188. /**
  189. * 3.2 移除基本消息(文本消息和自定义消息)的事件监听器
  190. */
  191. - (void)removeSimpleMsgListener:(id<V2TIMSimpleMsgListener>)listener NS_SWIFT_NAME(removeSimpleMsgListener(listener:));
  192. /**
  193. * 3.3 发送单聊普通文本消息(最大支持 12KB)
  194. *
  195. * 文本消息支持云端的脏词过滤,如果用户发送的消息中有敏感词,V2TIMFail 回调将会返回 80001 错误码。
  196. * @return 返回消息的唯一标识 ID
  197. *
  198. * @note 该接口发送的消息默认会推送(前提是在 V2TIMManager+APNS.h 开启了推送),如果需要自定义推送(自定义推送声音,推送 Title 等),请调用 V2TIMManager+Message.h -> sendMessage 接口。
  199. */
  200. - (NSString*)sendC2CTextMessage:(NSString *)text to:(NSString *)userID succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
  201. /**
  202. * 3.4 发送单聊自定义(信令)消息(最大支持 12KB)
  203. *
  204. * 自定义消息本质就是一端二进制 buffer,您可以在其上自由组织自己的消息格式(常用于发送信令),但是自定义消息不支持云端敏感词过滤。
  205. * @return 返回消息的唯一标识 ID
  206. *
  207. * @note 该接口发送的消息默认不会推送,如果需要推送,请调用 V2TIMManager+Message.h -> sendMessage 接口。
  208. */
  209. - (NSString*)sendC2CCustomMessage:(NSData *)customData to:(NSString *)userID succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
  210. /**
  211. * 3.5 发送群聊普通文本消息(最大支持 12KB)
  212. *
  213. * @param priority 设置消息的优先级,我们没有办法所有消息都能 100% 送达每一个用户,但高优先级的消息会有更高的送达成功率。
  214. * - HIGH :云端会优先传输,适用于在群里发送重要消息,比如主播发送的文本消息等。
  215. * - NORMAL :云端按默认优先级传输,适用于在群里发送普通消息,比如观众发送的弹幕消息等。
  216. * @return 返回消息的唯一标识 ID
  217. *
  218. * @note 该接口发送的消息默认会推送(前提是在 V2TIMManager+APNS.h 开启了推送),如果需要自定义推送(自定义推送声音,推送 Title 等),请调用 V2TIMManager+Message.h -> sendMessage 接口。
  219. */
  220. - (NSString*)sendGroupTextMessage:(NSString *)text to:(NSString *)groupID priority:(V2TIMMessagePriority)priority succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
  221. /**
  222. * 3.6 发送群聊自定义(信令)消息(最大支持 12KB)
  223. *
  224. * @param priority 设置消息的优先级,我们没有办法所有消息都能 100% 送达每一个用户,但高优先级的消息会有更高的送达成功率。
  225. * - HIGH :云端会优先传输,适用于在群里发送重要信令,比如连麦邀请,PK邀请、礼物赠送等关键性信令。
  226. * - NORMAL :云端按默认优先级传输,适用于在群里发送非重要信令,比如观众的点赞提醒等等。
  227. * @return 返回消息的唯一标识 ID
  228. *
  229. * @note 该接口发送的消息默认不会推送,如果需要推送,请调用 V2TIMManager+Message.h -> sendMessage 接口。
  230. */
  231. - (NSString*)sendGroupCustomMessage:(NSData *)customData to:(NSString *)groupID priority:(V2TIMMessagePriority)priority succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
  232. // 3.7 更多功能,详见 V2TIMManager+Message.h
  233. /////////////////////////////////////////////////////////////////////////////////
  234. // 群相关操作
  235. /////////////////////////////////////////////////////////////////////////////////
  236. /**
  237. * 4.1 设置群组监听器
  238. */
  239. - (void)addGroupListener:(id<V2TIMGroupListener>)listener NS_SWIFT_NAME(addGroupListener(listener:));
  240. /**
  241. * 4.2 设置群组监听器
  242. */
  243. - (void)removeGroupListener:(id<V2TIMGroupListener>)listener NS_SWIFT_NAME(removeGroupListener(listener:));
  244. /**
  245. * 4.3 创建群组
  246. *
  247. * @param groupType 群类型,我们为您预定义好了几种常用的群类型,您也可以在控制台定义自己需要的群类型:
  248. * - "Work" :工作群,成员上限 200 人,不支持由用户主动加入,需要他人邀请入群,适合用于类似微信中随意组建的工作群(对应老版本的 Private 群)。
  249. * - "Public" :公开群,成员上限 2000 人,任何人都可以申请加群,但加群需群主或管理员审批,适合用于类似 QQ 中由群主管理的兴趣群。
  250. * - "Meeting" :会议群,成员上限 6000 人,任何人都可以自由进出,且加群无需被审批,适合用于视频会议和在线培训等场景(对应老版本的 ChatRoom 群)。
  251. * - "Community" :社群,成员上限 100000 人,任何人都可以自由进出,且加群无需被审批,适合用于知识分享和游戏交流等超大社区群聊场景。5.8 版本开始支持,需要您购买旗舰版套餐。
  252. * - "AVChatRoom" :直播群,人数无上限,任何人都可以自由进出,消息吞吐量大,适合用作直播场景中的高并发弹幕聊天室。
  253. *
  254. * @param groupID 自定义群组 ID,可以传 nil。传 nil 时系统会自动分配 groupID,并通过 succ 回调返回。
  255. * "Community" 类型自定义群组 ID 必须以 "@TGS#_" 作为前缀。
  256. * @param groupName 群名称,不能为 nil,最长30字节
  257. *
  258. * @note 请注意如下特殊逻辑:
  259. * - 不支持在同一个 SDKAPPID 下创建两个相同 groupID 的群。
  260. * - 社群(Community)功能仅 5.8.1668 增强版及以上版本支持,需[购买旗舰版套餐包](https://buy.cloud.tencent.com/avc?from=17213)并[申请开通](https://cloud.tencent.com/document/product/269/3916?from=17215)后方可使用。
  261. * - 直播群(AVChatRoom):在进程重启或重新登录之后,如果想继续接收直播群的消息,请您调用 joinGroup 重新加入直播群。
  262. */
  263. - (void)createGroup:(NSString *)groupType groupID:(NSString*)groupID groupName:(NSString *)groupName succ:(V2TIMCreateGroupSucc)succ fail:(V2TIMFail)fail;
  264. /**
  265. * 4.4 加入群组
  266. *
  267. * @note 请注意如下特殊逻辑:
  268. * - 工作群(Work):不能主动入群,只能通过群成员调用 V2TIMManager+Group.h -> inviteUserToGroup 接口邀请入群。
  269. * - 公开群(Public):申请入群后,需要管理员审批,管理员在收到 V2TIMGroupListener -> onReceiveJoinApplication 回调后调用 V2TIMManager+Group.h -> getGroupApplicationList 接口处理加群请求。
  270. * - 其他群:可以直接入群。
  271. * - 直播群(AVChatRoom):在进程重启或重新登录之后,如果想继续接收直播群的消息,请您调用 joinGroup 重新加入直播群。
  272. * - 直播群(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)
  273. */
  274. - (void)joinGroup:(NSString*)groupID msg:(NSString*)msg succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
  275. /**
  276. * 4.5 退出群组
  277. *
  278. * @note 在公开群(Public)、会议(Meeting)和直播群(AVChatRoom)中,群主是不可以退群的,群主只能调用 dismissGroup 解散群组。
  279. */
  280. - (void)quitGroup:(NSString*)groupID succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
  281. /**
  282. * 4.6 解散群组
  283. *
  284. * @note 请注意如下特殊逻辑:
  285. * - 好友工作群(Work)的解散最为严格,即使群主也不能随意解散,只能由您的业务服务器调用 [解散群组 REST API](https://cloud.tencent.com/document/product/269/1624) 解散。
  286. * - 其他类型群的群主可以解散群组。
  287. */
  288. - (void)dismissGroup:(NSString*)groupID succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
  289. // 4.7 更多功能,详见 V2TIMManager+Group.h
  290. /**
  291. * 设置群组监听器(待废弃接口,请使用 addGroupListener 和 removeGroupListener 接口)
  292. */
  293. - (void)setGroupListener:(id<V2TIMGroupListener>)listener __attribute__((deprecated("use addGroupListener: instead")));
  294. /////////////////////////////////////////////////////////////////////////////////
  295. // 资料相关操作
  296. /////////////////////////////////////////////////////////////////////////////////
  297. /**
  298. * 5.1 获取用户资料
  299. * @note 请注意:
  300. * - 获取自己的资料,传入自己的 ID 即可。
  301. * - userIDList 建议一次最大 100 个,因为数量过多可能会导致数据包太大被后台拒绝,后台限制数据包最大为 1M。
  302. */
  303. - (void)getUsersInfo:(NSArray<NSString *> *)userIDList succ:(V2TIMUserFullInfoListSucc)succ fail:(V2TIMFail)fail;
  304. /**
  305. * 5.2 修改个人资料
  306. */
  307. - (void)setSelfInfo:(V2TIMUserFullInfo *)Info succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
  308. /**
  309. * 5.3 查询用户状态,从 6.3 版本开始支持
  310. *
  311. * @param userIDList 需要获取的用户 ID
  312. *
  313. * @note 请注意:
  314. * - 如果您想查询自己的自定义状态,您只需要传入自己的 userID 即可
  315. * - 当您批量查询时,接口只会返回查询成功的用户状态信息;当所有用户均查询失败时,接口会报错
  316. * - 查询其他用户状态为 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)。
  317. */
  318. - (void)getUserStatus:(NSArray *)userIDList succ:(V2TIMUserStatusListSucc)succ fail:(V2TIMFail)fail;
  319. /**
  320. * 5.4 设置自己的状态,从 6.3 版本开始支持
  321. *
  322. * @param status 待设置的自定义状态
  323. *
  324. * @note 请注意,该接口只支持设置自己的自定义状态,即 V2TIMUserStatus.customStatus
  325. */
  326. - (void)setSelfStatus:(V2TIMUserStatus *)status succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
  327. /**
  328. * 5.5 订阅用户状态,从 6.3 版本开始支持
  329. *
  330. * @param userIDList 待订阅的用户 ID
  331. *
  332. * @note 请注意
  333. * - 当成功订阅用户状态后,当对方的状态(包含在线状态、自定义状态)发生变更后,您可以监听 @onUserStatusChanged 回调来感知
  334. * - 如果您需要订阅好友列表的状态,您只需要在控制台上打开开关即可,无需调用该接口
  335. * - 该接口不支持订阅自己,您可以通过监听 @onUserStatusChanged 回调来感知自身的自定义状态的变更
  336. * - 订阅列表有个数限制,超过限制后,会自动淘汰最先订阅的用户
  337. * - 该功能为 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)。
  338. */
  339. - (void)subscribeUserStatus:(NSArray *)userIDList succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
  340. /**
  341. * 5.6 取消订阅用户状态,从 6.3 版本开始支持
  342. *
  343. * @note
  344. * - 当 userIDList 为空或者 nil 时,取消当前所有的订阅
  345. * - 该功能为 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)。
  346. */
  347. - (void)unsubscribeUserStatus:(NSArray *)userIDList succ:(V2TIMSucc)succ fail:(V2TIMFail)fail;
  348. // 5.7 更多功能,详见 V2TIMManager+Friendship.h
  349. /////////////////////////////////////////////////////////////////////////////////
  350. // 扩展接口
  351. /////////////////////////////////////////////////////////////////////////////////
  352. /**
  353. * 6.1 实验性 API 接口
  354. *
  355. * @param api 接口名称
  356. * @param param 接口参数
  357. *
  358. * @note 该接口提供一些实验性功能
  359. */
  360. - (void)callExperimentalAPI:(NSString *)api
  361. param:(NSObject *)param
  362. succ:(V2TIMCallExperimentalAPISucc)succ
  363. fail:(V2TIMFail)fail;
  364. @end
  365. /////////////////////////////////////////////////////////////////////////////////
  366. //
  367. // IMSDK 主核心回调,帮助您时刻关注 IMSDK 的在线状态
  368. //
  369. /////////////////////////////////////////////////////////////////////////////////
  370. /// IMSDK 主核心回调
  371. @protocol V2TIMSDKListener <NSObject>
  372. @optional
  373. /// SDK 正在连接到服务器
  374. - (void)onConnecting;
  375. /// SDK 已经成功连接到服务器
  376. - (void)onConnectSuccess;
  377. /// SDK 连接服务器失败
  378. - (void)onConnectFailed:(int)code err:(NSString*)err;
  379. /// 当前用户被踢下线,此时可以 UI 提示用户,并再次调用 V2TIMManager 的 login() 函数重新登录。
  380. - (void)onKickedOffline;
  381. /// 在线时票据过期:此时您需要生成新的 userSig 并再次调用 V2TIMManager 的 login() 函数重新登录。
  382. - (void)onUserSigExpired;
  383. /// 当前用户的资料发生了更新
  384. - (void)onSelfInfoUpdated:(V2TIMUserFullInfo *)Info;
  385. /**
  386. * 用户状态变更通知
  387. *
  388. * @note 收到通知的情况:
  389. * 1. 订阅过的用户发生了状态变更(包括在线状态和自定义状态),会触发该回调
  390. * 2. 在 IM 控制台打开了好友状态通知开关,即使未主动订阅,当好友状态发生变更时,也会触发该回调
  391. * 3. 同一个账号多设备登录,当其中一台设备修改了自定义状态,所有设备都会收到该回调
  392. */
  393. - (void)onUserStatusChanged:(NSArray<V2TIMUserStatus *> *)userStatusList;
  394. @end
  395. /////////////////////////////////////////////////////////////////////////////////
  396. //
  397. // IMSDK 基本消息回调 (高级消息请参考 V2TIMManager+Message.h -> V2TIMAdvancedMsgListener)
  398. //
  399. /////////////////////////////////////////////////////////////////////////////////
  400. /// IMSDK 基本消息回调
  401. @protocol V2TIMSimpleMsgListener <NSObject>
  402. @optional
  403. /// 收到 C2C 文本消息
  404. - (void)onRecvC2CTextMessage:(NSString *)msgID sender:(V2TIMUserInfo *)info text:(NSString *)text;
  405. /// 收到 C2C 自定义(信令)消息
  406. - (void)onRecvC2CCustomMessage:(NSString *)msgID sender:(V2TIMUserInfo *)info customData:(NSData *)data;
  407. /// 收到群文本消息
  408. - (void)onRecvGroupTextMessage:(NSString *)msgID groupID:(NSString *)groupID sender:(V2TIMGroupMemberInfo *)info text:(NSString *)text;
  409. /// 收到群自定义(信令)消息
  410. - (void)onRecvGroupCustomMessage:(NSString *)msgID groupID:(NSString *)groupID sender:(V2TIMGroupMemberInfo *)info customData:(NSData *)data;
  411. @end
  412. /////////////////////////////////////////////////////////////////////////////////
  413. //
  414. // IMSDK 群组事件回调
  415. //
  416. /////////////////////////////////////////////////////////////////////////////////
  417. /// IMSDK 群组事件回调
  418. @protocol V2TIMGroupListener <NSObject>
  419. @optional
  420. /////////////////////////////////////////////////////////////////////////////////
  421. // 群成员相关通知
  422. /////////////////////////////////////////////////////////////////////////////////
  423. /// 有新成员加入群(该群所有的成员都能收到,会议群(Meeting)默认无此回调,如需回调请提交工单配置)
  424. - (void)onMemberEnter:(NSString *)groupID memberList:(NSArray<V2TIMGroupMemberInfo *>*)memberList;
  425. /// 有成员离开群(该群所有的成员都能收到,会议群(Meeting)默认无此回调,如需回调请提交工单配置)
  426. - (void)onMemberLeave:(NSString *)groupID member:(V2TIMGroupMemberInfo *)member;
  427. /// 某成员被拉入某群(该群所有的成员都能收到)
  428. - (void)onMemberInvited:(NSString *)groupID opUser:(V2TIMGroupMemberInfo *)opUser memberList:(NSArray<V2TIMGroupMemberInfo *>*)memberList;
  429. /// 有成员被踢出某群(该群所有的成员都能收到)
  430. - (void)onMemberKicked:(NSString *)groupID opUser:(V2TIMGroupMemberInfo *)opUser memberList:(NSArray<V2TIMGroupMemberInfo *>*)memberList;
  431. /// 某成员信息发生变更(该群所有的成员都能收到)
  432. /// 会议群(Meeting)和直播群(AVChatRoom)默认无此回调,如需回调,请前往 [控制台](https://console.cloud.tencent.com/im) (功能配置 -> 群组配置 -> 群系统通知配置 -> 群成员资料变更通知) 主动配置。
  433. - (void)onMemberInfoChanged:(NSString *)groupID changeInfoList:(NSArray <V2TIMGroupMemberChangeInfo *> *)changeInfoList;
  434. /////////////////////////////////////////////////////////////////////////////////
  435. // 群生命周期相关通知
  436. /////////////////////////////////////////////////////////////////////////////////
  437. /// 有新的群创建(创建者能收到,应用于多端消息同步的场景)
  438. - (void)onGroupCreated:(NSString *)groupID;
  439. /// 某个已加入的群被解散了(该群所有的成员都能收到)
  440. - (void)onGroupDismissed:(NSString *)groupID opUser:(V2TIMGroupMemberInfo *)opUser;
  441. /// 某个已加入的群被回收了(该群所有的成员都能收到)
  442. - (void)onGroupRecycled:(NSString *)groupID opUser:(V2TIMGroupMemberInfo *)opUser;
  443. /// 某个已加入的群的信息被修改了(该群所有的成员都能收到)
  444. - (void)onGroupInfoChanged:(NSString *)groupID changeInfoList:(NSArray <V2TIMGroupChangeInfo *> *)changeInfoList;
  445. /// 某个已加入的群的属性被修改了,会返回所在群组的所有属性(该群所有的成员都能收到)
  446. - (void)onGroupAttributeChanged:(NSString *)groupID attributes:(NSMutableDictionary<NSString *,NSString *> *)attributes;
  447. /// 某个已加入的群的计数器被修改了,会返回当前变更的群计数器(该群所有的成员都能收到)
  448. - (void)onGroupCounterChanged:(NSString *)groupID key:(NSString *)key newValue:(NSInteger)newValue;
  449. /////////////////////////////////////////////////////////////////////////////////
  450. // 加群申请相关通知
  451. /////////////////////////////////////////////////////////////////////////////////
  452. /// 有新的加群请求(只有群主和管理员会收到)
  453. - (void)onReceiveJoinApplication:(NSString *)groupID member:(V2TIMGroupMemberInfo *)member opReason:(NSString *)opReason;
  454. /// 加群请求已经被群主或管理员处理了(只有申请人能够收到)
  455. - (void)onApplicationProcessed:(NSString *)groupID opUser:(V2TIMGroupMemberInfo *)opUser opResult:(BOOL)isAgreeJoin opReason:(NSString *)opReason;
  456. /////////////////////////////////////////////////////////////////////////////////
  457. // 其他相关通知
  458. /////////////////////////////////////////////////////////////////////////////////
  459. /// 指定管理员身份
  460. - (void)onGrantAdministrator:(NSString *)groupID opUser:(V2TIMGroupMemberInfo *)opUser memberList:(NSArray <V2TIMGroupMemberInfo *> *)memberList;
  461. /// 取消管理员身份
  462. - (void)onRevokeAdministrator:(NSString *)groupID opUser:(V2TIMGroupMemberInfo *)opUser memberList:(NSArray <V2TIMGroupMemberInfo *> *)memberList;
  463. /// 自己主动退出群组(主要用于多端同步,直播群(AVChatRoom)不支持)
  464. - (void)onQuitFromGroup:(NSString *)groupID;
  465. /// 收到 RESTAPI 下发的自定义系统消息
  466. - (void)onReceiveRESTCustomData:(NSString *)groupID data:(NSData *)data;
  467. /////////////////////////////////////////////////////////////////////////////////
  468. // 话题事件监听回调
  469. /////////////////////////////////////////////////////////////////////////////////
  470. /// 话题创建回调
  471. - (void)onTopicCreated:(NSString *)groupID topicID:(NSString *)topicID;
  472. /// 话题被删除回调
  473. - (void)onTopicDeleted:(NSString *)groupID topicIDList:(NSArray<NSString *> *)topicIDList;
  474. /// 话题更新回调
  475. - (void)onTopicChanged:(NSString *)groupID topicInfo:(V2TIMTopicInfo *)topicInfo;
  476. @end
  477. /////////////////////////////////////////////////////////////////////////////////
  478. //
  479. // 用户资料
  480. //
  481. /////////////////////////////////////////////////////////////////////////////////
  482. /// 用户基本资料
  483. @interface V2TIMUserInfo : NSObject
  484. /// 用户 ID
  485. @property(nonatomic,strong,readonly) NSString* userID;
  486. /// 用户昵称
  487. @property(nonatomic,strong) NSString* nickName;
  488. /// 用户头像
  489. @property(nonatomic,strong) NSString* faceURL;
  490. @end
  491. /// 用户详细资料
  492. @interface V2TIMUserFullInfo : V2TIMUserInfo
  493. /// 用户签名
  494. @property(nonatomic,strong) NSString *selfSignature;
  495. /// 用户性别
  496. @property(nonatomic,assign) V2TIMGender gender;
  497. /// 用户角色
  498. @property(nonatomic,assign) uint32_t role;
  499. /// 用户等级
  500. @property(nonatomic,assign) uint32_t level;
  501. /// 出生日期
  502. @property(nonatomic,assign) uint32_t birthday;
  503. /// 用户好友验证方式
  504. @property(nonatomic,assign) V2TIMFriendAllowType allowType;
  505. /// 用户自定义字段
  506. /// 首先要在 [控制台](https://console.cloud.tencent.com/im) (功能配置 -> 用户自定义字段) 配置用户自定义字段,然后再调用该接口进行设置,key 值不需要加 Tag_Profile_Custom_ 前缀。
  507. @property(nonatomic,strong) NSDictionary<NSString *,NSData *> * customInfo;
  508. @end
  509. /////////////////////////////////////////////////////////////////////////////////
  510. //
  511. // 用户状态
  512. //
  513. /////////////////////////////////////////////////////////////////////////////////
  514. @interface V2TIMUserStatus : NSObject
  515. /// 用户的 ID
  516. @property (nonatomic, copy, readonly) NSString *userID;
  517. /// 用户的状态
  518. @property (nonatomic, assign, readonly) V2TIMUserStatusType statusType;
  519. /// 用户的自定义状态, 最大 50 字节
  520. @property (nonatomic, copy) NSString *customStatus;
  521. @end
  522. /////////////////////////////////////////////////////////////////////////////////
  523. //
  524. // 群成员资料
  525. //
  526. /////////////////////////////////////////////////////////////////////////////////
  527. /// 群成员基本资料
  528. @interface V2TIMGroupMemberInfo : NSObject
  529. /// 用户 ID
  530. @property(nonatomic,strong) NSString* userID;
  531. /// 用户昵称
  532. @property(nonatomic,strong,readonly) NSString* nickName;
  533. /// 用户好友备注
  534. @property(nonatomic,strong,readonly) NSString* friendRemark;
  535. /// 群成员名片
  536. @property(nonatomic,strong) NSString* nameCard;
  537. /// 用户头像
  538. @property(nonatomic,strong,readonly) NSString* faceURL;
  539. @end
  540. /// 群成员详细资料
  541. @interface V2TIMGroupMemberFullInfo : V2TIMGroupMemberInfo
  542. /// 群成员自定义字段
  543. /// 首先要在 [控制台](https://console.cloud.tencent.com/im) (功能配置 -> 群成员自定义字段) 配置用户自定义字段,然后再调用该接口进行设置。
  544. @property(nonatomic,strong) NSDictionary<NSString *,NSData *> * customInfo;
  545. /// 群成员角色(V2TIMGroupMemberRole),修改群成员角色请调用 V2TIMManager+Group.h -> setGroupMemberRole 接口
  546. @property(nonatomic,assign,readonly) uint32_t role;
  547. /// 群成员禁言结束时间戳,禁言用户请调用 V2TIMManager+Group.h -> muteGroupMember 接口
  548. @property(nonatomic,assign,readonly) uint32_t muteUntil;
  549. /// 群成员入群时间,自动生成,不可修改
  550. @property(nonatomic,assign,readonly) time_t joinTime;
  551. @end
  552. /////////////////////////////////////////////////////////////////////////////////
  553. //
  554. // SDK 配置参数表
  555. //
  556. /////////////////////////////////////////////////////////////////////////////////
  557. @interface V2TIMSDKConfig : NSObject
  558. /// 本地写 log 文件的等级,默认 DEBUG 等级, IMSDK 的日志默认存储于 /Library/Caches/ 目录下
  559. @property(nonatomic,assign) V2TIMLogLevel logLevel;
  560. /// log 监听回调(回调在主线程,日志回调可能比较频繁,请注意不要在回调里面同步处理太多耗时任务,可能会堵塞主线程)
  561. @property(nonatomic,copy) V2TIMLogListener logListener;
  562. @end
  563. #endif