// // NIMSDKManager.h // YUMI // // Created by YUMI on 2024/12/19. // #import #import NS_ASSUME_NONNULL_BEGIN // MARK: - NIMSDK配置模型 @interface NIMSDKConfigModel : NSObject @property (nonatomic, copy) NSString *appKey; // 云信AppKey @property (nonatomic, copy) NSString *apnsCername; // APNS证书名称 @property (nonatomic, assign) BOOL shouldConsiderRevokedMessageUnreadCount; // 撤回消息计入未读数 @property (nonatomic, assign) BOOL shouldSyncStickTopSessionInfos; // 同步置顶会话信息 @property (nonatomic, assign) BOOL enabledHttpsForInfo; // 启用HTTPS信息传输 @property (nonatomic, assign) BOOL enabledHttpsForMessage; // 启用HTTPS消息传输 @end // MARK: - NIMSDK登录状态枚举 typedef NS_ENUM(NSInteger, NIMSDKLoginStatus) { NIMSDKLoginStatusNotLogin = 0, // 未登录 NIMSDKLoginStatusLogging, // 登录中 NIMSDKLoginStatusLogined, // 已登录 NIMSDKLoginStatusLogout, // 已登出 NIMSDKLoginStatusKickout, // 被踢出 NIMSDKLoginStatusAutoLoginFailed // 自动登录失败 }; // MARK: - NIMSDK登录回调 typedef void(^NIMSDKLoginCompletion)(NSError * _Nullable error); typedef void(^NIMSDKLogoutCompletion)(NSError * _Nullable error); typedef void(^NIMSDKStatusChangeBlock)(NIMSDKLoginStatus status); // MARK: - NIMSDKManager代理协议 @protocol NIMSDKManagerDelegate @optional // 登录状态变化 - (void)nimSDKManager:(id)manager didChangeLoginStatus:(NIMSDKLoginStatus)status; // 自动登录失败 - (void)nimSDKManager:(id)manager didAutoLoginFailed:(NSError *)error; // 被踢出 - (void)nimSDKManager:(id)manager didKickout:(NIMLoginKickoutResult *)result; // 收到消息 - (void)nimSDKManager:(id)manager didReceiveMessages:(NSArray *)messages; // 收到广播消息 - (void)nimSDKManager:(id)manager didReceiveBroadcastMessage:(NIMBroadcastMessage *)broadcastMessage; @end // MARK: - NIMSDKManager主类 @interface NIMSDKManager : NSObject // MARK: - 单例方法 + (instancetype)sharedManager; // MARK: - 配置和初始化 /** 配置NIMSDK @param config 配置模型 */ - (void)configureWithConfig:(NIMSDKConfigModel *)config; /** 初始化NIMSDK @param completion 完成回调 */ - (void)initializeWithCompletion:(void(^)(NSError * _Nullable error))completion; /** 注册自定义消息解码器 @param decoder 解码器实例 */ - (void)registerCustomDecoder:(id)decoder; // MARK: - 登录管理 /** 登录 @param account 账号 @param token 登录token @param completion 完成回调 */ - (void)loginWithAccount:(NSString *)account token:(NSString *)token completion:(NIMSDKLoginCompletion)completion; /** 自动登录 @param data 自动登录数据 @param completion 完成回调 */ - (void)autoLoginWithData:(NSDictionary *)data completion:(NIMSDKLoginCompletion)completion; /** 登出 @param completion 完成回调 */ - (void)logoutWithCompletion:(NIMSDKLogoutCompletion)completion; /** 强制登出 @param completion 完成回调 */ - (void)forceLogoutWithCompletion:(NIMSDKLogoutCompletion)completion; // MARK: - 状态查询 /** 获取当前登录状态 @return 登录状态 */ - (NIMSDKLoginStatus)currentLoginStatus; /** 是否已登录 @return 是否已登录 */ - (BOOL)isLogined; /** 获取当前登录账号 @return 当前登录账号 */ - (NSString *)currentAccount; // MARK: - 推送管理 /** 更新APNS设备Token @param deviceToken 设备Token */ - (void)updateApnsToken:(NSData *)deviceToken; /** 处理推送消息 @param userInfo 推送消息内容 @return 是否处理成功 */ - (BOOL)handlePushNotification:(NSDictionary *)userInfo; // MARK: - 代理管理 /** 添加代理 @param delegate 代理对象 */ - (void)addDelegate:(id)delegate; /** 移除代理 @param delegate 代理对象 */ - (void)removeDelegate:(id)delegate; /** 设置登录状态变化回调 @param block 回调block */ - (void)setLoginStatusChangeBlock:(NIMSDKStatusChangeBlock)block; // MARK: - 消息管理 /** 发送消息 @param message 消息对象 @param session 会话对象 @param completion 完成回调 */ - (void)sendMessage:(NIMMessage *)message toSession:(NIMSession *)session completion:(void(^)(NSError * _Nullable error))completion; /** 获取未读消息数 @return 未读消息数 */ - (NSInteger)unreadMessageCount; /** 获取所有会话 @return 会话列表 */ - (NSArray *)allRecentSessions; // MARK: - 用户管理 /** 获取用户信息 @param userId 用户ID @return 用户信息 */ - (NIMUser *)userInfo:(NSString *)userId; /** 获取用户信息(异步) @param userIds 用户ID数组 @param completion 完成回调 */ - (void)fetchUserInfos:(NSArray *)userIds completion:(void(^)(NSArray * _Nullable users, NSError * _Nullable error))completion; // MARK: - 聊天室管理 /** 进入聊天室 @param roomId 房间ID @param completion 完成回调 */ - (void)enterChatroom:(NSString *)roomId completion:(void(^)(NSError * _Nullable error))completion; /** 退出聊天室 @param roomId 房间ID @param completion 完成回调 */ - (void)exitChatroom:(NSString *)roomId completion:(void(^)(NSError * _Nullable error))completion; // MARK: - 工具方法 /** 创建自定义消息 @param attachment 自定义附件 @return 消息对象 */ - (NIMMessage *)createCustomMessageWithAttachment:(id)attachment; /** 创建文本消息 @param text 文本内容 @return 消息对象 */ - (NIMMessage *)createTextMessage:(NSString *)text; /** 创建图片消息 @param image 图片对象 @return 消息对象 */ - (NIMMessage *)createImageMessage:(UIImage *)image; /** 创建音频消息 @param filePath 音频文件路径 @param duration 音频时长 @return 消息对象 */ - (NIMMessage *)createAudioMessage:(NSString *)filePath duration:(NSTimeInterval)duration; // MARK: - 清理方法 /** 清理资源 */ - (void)cleanup; @end NS_ASSUME_NONNULL_END