// // TXMicIMService.m // romantic // // Created by bj_szd on 2022/9/6. // Copyright © 2022 romantic. All rights reserved. // #import "TXMicIMService.h" static TXMicIMService *imService = nil; @interface TXMicIMService () @property(nonatomic, assign) NSInteger totalCount; @end @implementation TXMicIMService + (instancetype)sharedService { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ imService = [[TXMicIMService alloc] init]; }); return imService; } - (void)initTXIMWithAppID:(int)AppID userID:(NSString *)userID userSig:(NSString *)userSig { V2TIMSDKConfig *config = [[V2TIMSDKConfig alloc] init]; // 指定 log 输出级别。 config.logLevel = V2TIM_LOG_INFO; // 初始化 IM SDK,调用这个接口后,可以立即调用登录接口。 [[V2TIMManager sharedInstance] initSDK:AppID config:config]; [[V2TIMManager sharedInstance] login:userID userSig:userSig succ:^{ NSLog(@"success"); [self onUpdateSelfInfo]; //切换账号更新消息列表 [[NSNotificationCenter defaultCenter] postNotificationName:TXIMUnreadMessageNoti object:nil userInfo:nil]; [[NSNotificationCenter defaultCenter] postNotificationName:TXIMLogoutLoadMessageNoti object:nil userInfo:nil]; } fail:^(int code, NSString *desc) { // 如果返回以下错误码,表示使用 UserSig 已过期,请您使用新签发的 UserSig 进行再次登录。 // 1. ERR_USER_SIG_EXPIRED(6206) // 2. ERR_SVR_ACCOUNT_USERSIG_EXPIRED(70001) // 注意:其他的错误码,请不要在这里调用登录接口,避免 IM SDK 登录进入死循环。 NSLog(@"failure, code:%d, desc:%@", code, desc); }]; [[V2TIMManager sharedInstance] addIMSDKListener:self]; [[V2TIMManager sharedInstance] addConversationListener:self]; // 消息列表和会话页UI设置 [TUIConfig defaultConfig].defaultAvatarImage = kDefaultUserIcon; [TUIConfig defaultConfig].avatarType = TAvatarTypeRounded; [TUIConfig defaultConfig].displayOnlineStatusIcon = YES; // TUIChatConfig.defaultConfig.msgNeedReadReceipt = YES; // [TUIShareThemeManager applyTheme:@"dark" forModule:TUIThemeModuleAll]; } - (void)onUpdateSelfInfo { // 更新自己的头像和昵称 V2TIMUserFullInfo *info = [[V2TIMUserFullInfo alloc] init]; info.nickName = BJUserManager.userInfo.nick_name; info.faceURL = BJUserManager.userInfo.head_pic; [[V2TIMManager sharedInstance] setSelfInfo:info succ:^{ // 设置个人资料成功 } fail:^(int code, NSString *desc) { // 设置个人资料失败 }]; } - (void)addListener { // 设置事件监听器 [[V2TIMManager sharedInstance] addSimpleMsgListener:self]; } - (void)removeListener { // 移除事件监听器 [[V2TIMManager sharedInstance] removeSimpleMsgListener:self]; } - (void)onRecvC2CCustomMessage:(NSString *)msgID sender:(V2TIMUserInfo *)info customData:(NSData *)data { // 可解析消息并展示到 UI if ([self.delegate respondsToSelector:@selector(receiveTXIMMessage:type:groupID:)]) { [self.delegate receiveTXIMMessage:data.mj_JSONString type:1 groupID:@""]; } } - (void)onRecvGroupCustomMessage:(NSString *)msgID groupID:(NSString *)groupID sender:(V2TIMGroupMemberInfo *)info customData:(NSData *)data { // 可解析消息并展示到 UI if ([self.delegate respondsToSelector:@selector(receiveTXIMMessage:type:groupID:)]) { [self.delegate receiveTXIMMessage:data.mj_JSONString type:2 groupID:groupID]; } } - (void)joinChatRoom:(NSString *)roomId success:(void(^)(void))successBlock error:(void(^)(NSString *desc))errorBlock { if (roomId.length == 0) { return; } [self addListener]; // 加入群组 [[V2TIMManager sharedInstance] joinGroup:roomId msg:@"" succ:^{ // 加入群组成功 successBlock ? successBlock() : nil; } fail:^(int code, NSString *desc) { // 加入群组失败 errorBlock ? errorBlock(desc) : nil; }]; } - (void)quitChatRoom:(NSString *)roomId success:(void(^)(void))successBlock error:(void(^)(NSString *desc))errorBlock { if (roomId.length == 0) { return; } [self removeListener]; // 退出群组 [[V2TIMManager sharedInstance] quitGroup:roomId succ:^{ // 退出群组成功 successBlock ? successBlock() : nil; } fail:^(int code, NSString *desc) { // 退出群组失败 errorBlock ? errorBlock(desc) : nil; }]; } - (void)onGetUnreadCount:(void(^)(NSInteger count))successBlock { [[V2TIMManager sharedInstance] getTotalUnreadMessageCount:^(UInt64 totalCount) { successBlock ? successBlock(totalCount) : nil; } fail:^(int code, NSString *desc) { successBlock ? successBlock(0) : nil; }]; } // 未读消息数量更新 - (void)onTotalUnreadMessageCountChanged:(UInt64)totalUnreadCount { [[NSNotificationCenter defaultCenter] postNotificationName:TXIMUnreadMessageNoti object:nil userInfo:@{@"messageCount":@(totalUnreadCount)}]; } // 被顶号监听 - (void)onKickedOffline { [[NSNotificationCenter defaultCenter] postNotificationName:TXIMDinghaoNoti object:nil userInfo:nil]; } @end