Files
yuyin_ios/SweetParty/主类/TXIM消息/TXMicIMService.m
2025-08-08 11:05:33 +08:00

155 lines
5.3 KiB
Objective-C
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// 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 () <V2TIMSDKListener, V2TIMSimpleMsgListener, V2TIMConversationListener>
@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_EXPIRED6206
// 2. ERR_SVR_ACCOUNT_USERSIG_EXPIRED70001
// 注意:其他的错误码,请不要在这里调用登录接口,避免 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