155 lines
5.3 KiB
Objective-C
Executable File
155 lines
5.3 KiB
Objective-C
Executable File
//
|
||
// 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_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
|