Files
peko-ios/YuMi/Modules/YMMessage/Tool/NIMSDKManager.h

263 lines
6.2 KiB
Objective-C

//
// NIMSDKManager.h
// YUMI
//
// Created by YUMI on 2024/12/19.
//
#import <Foundation/Foundation.h>
#import <NIMSDK/NIMSDK.h>
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 <NSObject>
@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<NIMMessage *> *)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<NIMCustomAttachmentCoding>)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<NIMSDKManagerDelegate>)delegate;
/**
移除代理
@param delegate 代理对象
*/
- (void)removeDelegate:(id<NIMSDKManagerDelegate>)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<NIMRecentSession *> *)allRecentSessions;
// MARK: - 用户管理
/**
获取用户信息
@param userId 用户ID
@return 用户信息
*/
- (NIMUser *)userInfo:(NSString *)userId;
/**
获取用户信息(异步)
@param userIds 用户ID数组
@param completion 完成回调
*/
- (void)fetchUserInfos:(NSArray<NSString *> *)userIds
completion:(void(^)(NSArray<NIMUser *> * _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<NIMCustomAttachment>)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