263 lines
6.2 KiB
Objective-C
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
|
|
|
|
|
|
|