123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328 |
- //
- // UserInfoManager.m
- // KulexiuForTeacher
- //
- // Created by Kyle on 2022/3/20.
- //
- #import "UserInfoManager.h"
- #import "ArchiveTools.h"
- #import "JPUSHService.h"
- #import <Bugly/Bugly.h>
- #import "RCConnectionManager.h"
- #import "AppDelegate.h"
- #import "KSTipsAlert.h"
- @interface UserInfoManager ()
- @property (nonatomic, copy) UserInfoCallback callback;
- @property (nonatomic, copy) ConnectIMCallback IMConnCallback;
- @end
- @implementation UserInfoManager
- + (instancetype)shareInstance {
- static UserInfoManager *manager = nil;
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- manager = [[UserInfoManager alloc] init];
- });
- return manager;
- }
- - (instancetype)init {
- if (self = [super init]) {
- self.userInfo = [[UserInfo alloc] init];
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(otherLogin) name:@"otherLogin" object:nil];
- }
- return self;
- }
- - (void)otherLogin {
- dispatch_main_async_safe(^{
- UIViewController *vc = [UIApplication sharedApplication].keyWindow.rootViewController;
-
- if ([vc.presentedViewController isKindOfClass:NSClassFromString(@"NewClassRoomViewController")]) {
- [self checkTokenEnableCallback:^(BOOL enable) {
- if (enable) {
- [[NSNotificationCenter defaultCenter] postNotificationName:@"classroomQuit" object:nil];
- NSLog(@"-----classroomQuit");
- }
- else {
- [[NSNotificationCenter defaultCenter] postNotificationName:@"classroomLogout" object:nil];
- NSLog(@"-----classroomLogout");
- }
- }];
- }
- else if ([vc isKindOfClass:[UITabBarController class]]) {
- if ([vc.presentedViewController isKindOfClass:NSClassFromString(@"CustomNavViewController")]) {
- CustomNavViewController *nav = (CustomNavViewController *)vc.presentedViewController;
- if ([nav.visibleViewController isKindOfClass:NSClassFromString(@"LiveRoomViewController")]) {
- [self checkTokenEnableCallback:^(BOOL enable) {
- if (enable) {
- [[NSNotificationCenter defaultCenter] postNotificationName:@"liveroomQuit" object:nil];
- NSLog(@"-----liveroomQuit");
- }
- else {
- [[NSNotificationCenter defaultCenter] postNotificationName:@"liveroomLogout" object:nil];
- NSLog(@"-----liveroomLogout");
- }
- }];
- return;
- }
- }
- [self checkTokenEnableCallback:^(BOOL enable) {
- if (enable) {
- [self showTipsAlert];
- }
- else {
- [self showMessage:@"登录过期,请重新登录"];
- [KSNetworkingManager logoutAction];
- }
- }];
- }
- });
- }
- - (void)showTipsAlert {
- [KSTipsAlert shareInstanceWithTitle:@"提示" descMessage:@"聊天功能已断开,是否重新连接?" leftTitle:@"取消" rightTitle:@"连接" callback:^(BOOL isSure) {
- if (isSure) {
- [USER_MANAGER connectRongCloud];
- }
- }];
- }
- // 提示信息
- - (void)showMessage:(NSString *)message {
- MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:[[UIApplication sharedApplication].windows lastObject] animated:YES];
- hud.removeFromSuperViewOnHide =YES;
- hud.mode = MBProgressHUDModeText;
- hud.label.text = message;
- hud.minSize = CGSizeMake(132.f, 60.0f);
- hud.label.textColor = [UIColor whiteColor];
- hud.bezelView.style = MBProgressHUDBackgroundStyleSolidColor;
- hud.bezelView.backgroundColor = [UIColor colorWithHexString:@"#000000" alpha:0.8];
- [hud hideAnimated:YES afterDelay:2];
- }
- // 获取信息回调
- - (void)queryUserInfoCallback:(UserInfoCallback)callback {
- if (callback) {
- self.callback = callback;
- }
- [self queryUserInfoConnectRongCloud:NO];
- }
- - (void)checkTokenEnableCallback:(void(^)(BOOL enable))checkCallback {
- [KSNetworkingManager checkTokenRequest:KS_GET success:^(NSDictionary * _Nonnull dic) {
- if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
- checkCallback(YES);
- }
- else {
- checkCallback(NO);
- }
- } faliure:^(NSError * _Nonnull error) {
- checkCallback(NO);
- }];
- }
- - (void)queryUserInfoConnectRongCloud:(BOOL)connectRM {
- [KSNetworkingManager queryUserInfo:KS_GET success:^(NSDictionary * _Nonnull dic) {
- if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
- // 保存用户信息
- self.userInfo = [[UserInfo alloc] initWithDictionary:[dic dictionaryValueForKey:@"data"]];
- // 判断是否实名
- if (![NSString isEmptyString:self.userInfo.realName] && ![NSString isEmptyString:self.userInfo.idCardNo]) {
- self.hasAuth = YES;
- }
- else {
- self.hasAuth = NO;
- }
-
- NSString *uid = self.userInfo.userId;
- UserDefaultSet(uid, UIDKey);
- NSString *rongToken = UserDefault(RongTokenKey);
- BOOL needConnect = NO;
- if ([NSString isEmptyString:rongToken]) {
- needConnect = YES;
- }
- UserDefaultSet(self.userInfo.imToken, RongTokenKey);
- UserDefaultSet(self.userInfo.username, NicknameKey);
- UserDefaultSet(self.userInfo.avatar, AvatarUrlKey);
- [[NSUserDefaults standardUserDefaults] synchronize];
- if (connectRM) {
- // 设置推送别名
- [JPUSHService setAlias:UserDefault(UIDKey) completion:nil seq:0];
- [Bugly setUserIdentifier:UserDefault(UIDKey)];
- [self connectRongCloud];
- }
- else if (self.callback) {
- if (needConnect) {
- [self connectRongCloud];
- }
- self.callback(self.userInfo);
- self.callback = nil;
- }
- }
- else {
- if (self.callback) {
- self.callback(self.userInfo);
- self.callback = nil;
- }
- }
- } faliure:^(NSError * _Nonnull error) {
- if (self.callback) {
- self.callback(self.userInfo);
- self.callback = nil;
- }
- }];
- }
- - (void)checkTokenEnableConnectRongCloud {
- [self checkTokenEnableCallback:^(BOOL enable) {
- if (enable) {
- [self connectRongCloud];
- }
- }];
- }
- - (BOOL)checkIMConnected {
- RCConnectionStatus connStatus = [[RCIM sharedRCIM] getConnectionStatus];
- if (connStatus == ConnectionStatus_Connected) {
- return YES;
- }
- else {
- return NO;
- }
- }
- - (void)connectionIMCallback:(ConnectIMCallback)callback {
- if (callback) {
- self.IMConnCallback = callback;
- }
- [self delayCheckIMConnection];
- }
- - (void)delayCheckIMConnection {
- __block BOOL isConnected = [self checkIMConnected];
- if (isConnected) {
- if (self.IMConnCallback) {
- self.IMConnCallback(YES);
- }
- return;
- }
- else {
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
- isConnected = [self checkIMConnected];
- if (isConnected) {
- if (self.IMConnCallback) {
- self.IMConnCallback(YES);
- }
- }
- else {
- [self delayCheckIMConnection];
- }
- });
- }
- }
- - (void)connectRongCloud {
- NSString *rongToken = UserDefault(RongTokenKey);
- if ([NSString isEmptyString:rongToken]) {
- return;
- }
-
- // 融云登录
- [[RCIM sharedRCIM] connectWithToken:UserDefault(RongTokenKey) dbOpened:^(RCDBErrorCode code) {
-
- } success:^(NSString *userId) {
-
- [RCConnectionManager shareManager].isConnected = YES;
- // 设置个人信息
- RCUserInfo *currentUserInfo =
- [[RCUserInfo alloc] initWithUserId:userId name:UserDefault(NicknameKey) portrait:UserDefault(AvatarUrlKey)];
- [RCIM sharedRCIM].currentUserInfo = currentUserInfo;
- } error:^(RCConnectErrorCode errorCode) {
-
- if (errorCode == RC_CONN_TOKEN_INCORRECT) {
-
- dispatch_async(dispatch_get_main_queue(), ^{
- // 再次获取token
- AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
- [appDelegate requestRongCloudToken];
- });
- }
- else {
-
- if (errorCode == RC_CONNECTION_EXIST) {
- [RCConnectionManager shareManager].isConnected = YES;
-
- return;
- }
- NSString *message = [NSString stringWithFormat:@"IM连接错误%zd",errorCode];
- dispatch_main_async_safe(^{
- [self showMessage:message];
- });
- }
- }];
- }
- - (NSString *)getCurrentVersion {
- return [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
- }
- - (void)requsetconfigCallback:(void(^)(BOOL success))callback {
- [KSNetworkingManager appVersionInfoRequest:KS_GET success:^(NSDictionary * _Nonnull dic) {
- if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
- NSString *serviceVersion = [[dic dictionaryValueForKey:@"data"] stringValueForKey:@"version"];
- NSString *currentVersion = [self getCurrentVersion];
- if ([self isLowerVersionCompareLocalVersion:currentVersion serviceVersion:serviceVersion]) {
- callback(YES);
- }
- else {
- callback(NO);
- }
- }
- else {
- callback(NO);
- }
- } faliure:^(NSError * _Nonnull error) {
- callback(NO);
- }];
- }
- - (BOOL)isLowerVersionCompareLocalVersion:(NSString *)localVersion serviceVersion:(NSString *)version {
- localVersion = [localVersion stringByReplacingOccurrencesOfString:@"." withString:@""];
- if (localVersion.length == 3) {
- localVersion = [localVersion stringByAppendingString:@"0"];
- }
- else if (localVersion.length==2) {
- localVersion = [localVersion stringByAppendingString:@"00"];
- }else if (localVersion.length==1){
- localVersion = [localVersion stringByAppendingString:@"000"];
- }
-
- version = [version stringByReplacingOccurrencesOfString:@"." withString:@""];
- if (version.length == 3) {
- version = [version stringByAppendingString:@"0"];
- }
- else if (version.length==2) {
- version = [version stringByAppendingString:@"00"];
- }else if (version.length==1){
- version = [version stringByAppendingString:@"000"];
- }
- if (([localVersion floatValue] > [version floatValue])) {
- return NO;
- }
- else {
- return YES;
- }
- }
- - (void)dealloc {
- [[NSNotificationCenter defaultCenter] removeObserver:self];
- }
- @end
|