KSLoginManager.m 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. //
  2. // KSLoginManager.m
  3. // KulexiuForTeacher
  4. //
  5. // Created by 王智 on 2023/8/7.
  6. //
  7. #import "KSLoginManager.h"
  8. #import "LoginViewController.h"
  9. #import "JPUSHService.h"
  10. #import "CustomNavViewController.h"
  11. #import "UserInfoManager.h"
  12. #import "TXIMLinsenter.h"
  13. #import <KSToolLibrary/UIDevice+TFDevice.h>
  14. #import "AppDelegate+AppService.h"
  15. #import "CoursewareDownloadManager.h"
  16. @interface KSLoginManager ()
  17. @property (nonatomic, assign) BOOL isQuitting; // 是否正在退出
  18. @end
  19. @implementation KSLoginManager
  20. + (instancetype)shareInstance {
  21. static KSLoginManager *manager = nil;
  22. static dispatch_once_t onceToken;
  23. dispatch_once(&onceToken, ^{
  24. manager = [[KSLoginManager alloc] init];
  25. });
  26. return manager;
  27. }
  28. - (instancetype)init {
  29. self = [super init];
  30. if (self) {
  31. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(otherLogin) name:@"otherLogin" object:nil];
  32. }
  33. return self;
  34. }
  35. - (void)configSetting {
  36. NSLog(@"------configSetting ");
  37. }
  38. - (void)otherLogin {
  39. dispatch_main_async_safe(^{
  40. UIWindow *window = [NSObject getKeyWindow];
  41. UIViewController *vc = [UIApplication sharedApplication].keyWindow.rootViewController;
  42. if ([vc isKindOfClass:[UITabBarController class]]) {
  43. UITabBarController *tab = (UITabBarController *)window.rootViewController;
  44. CustomNavViewController *ctrl = (CustomNavViewController *)tab.selectedViewController;
  45. if ([ctrl.visibleViewController isKindOfClass:NSClassFromString(@"TXClassroomViewController")]) {
  46. [[NSNotificationCenter defaultCenter] postNotificationName:@"classroomLogout" object:nil];
  47. return;
  48. }
  49. else if ([vc.presentedViewController isKindOfClass:NSClassFromString(@"CustomNavViewController")]) {
  50. CustomNavViewController *nav = (CustomNavViewController *)vc.presentedViewController;
  51. if ([nav.visibleViewController isKindOfClass:NSClassFromString(@"TXLiveRoomViewController")]) {
  52. [[NSNotificationCenter defaultCenter] postNotificationName:@"liveroomLogout" object:nil];
  53. return;
  54. }
  55. }
  56. [self logoutActionWithMsg:@"登录过期,请重新登录"];
  57. }
  58. });
  59. }
  60. - (void)clearUMCount {
  61. [USER_MANAGER sendUMEvent:@"klx_logout"];
  62. [USER_MANAGER stopCountUMEvent];
  63. }
  64. - (void)closeDownload {
  65. if (COURSEWARE_MANAGER.isDownloading) { // 如果在下载 取消
  66. [COURSEWARE_MANAGER cancleDownloadCourseware];
  67. }
  68. }
  69. - (void)logoutActionWithMsg:(NSString *)msg {
  70. if (self.isQuitting) {
  71. NSLog(@"----1");
  72. return;
  73. }
  74. self.isQuitting = YES;
  75. [self closeDownload];
  76. [self clearUMCount];
  77. [KSNetworkingManager cancelAllRequest];
  78. [KSNetworkingManager clearRequestHeader];
  79. // 取消推送别名
  80. [JPUSHService deleteAlias:nil seq:0];
  81. // 退出IM连接
  82. [TXIM_LINSENTER logoutTXIM];
  83. // 清除数据
  84. [UIApplication sharedApplication].applicationIconBadgeNumber = 0;
  85. [[NSUserDefaults standardUserDefaults] removeObjectForKey:TokenKey];
  86. [[NSUserDefaults standardUserDefaults] removeObjectForKey:Token_type];
  87. [[NSUserDefaults standardUserDefaults] removeObjectForKey:RefreshToken];
  88. [[NSUserDefaults standardUserDefaults] removeObjectForKey:IM_TOKEN];
  89. [[NSUserDefaults standardUserDefaults] removeObjectForKey:TENANT_ID];
  90. // 返回登录页面
  91. UIViewController *vc = [UIApplication sharedApplication].keyWindow.rootViewController;
  92. if ([vc isKindOfClass:[UITabBarController class]]) {
  93. UITabBarController *tab = (UITabBarController *)[UIApplication sharedApplication].keyWindow.rootViewController;
  94. CustomNavViewController *ctrl = (CustomNavViewController *)tab.selectedViewController;
  95. if (ctrl.presentedViewController) {
  96. UIViewController *presentCtrl = ctrl.presentedViewController;
  97. [presentCtrl dismissViewControllerAnimated:YES completion:^{
  98. [ctrl popToRootViewControllerAnimated:NO];
  99. [self performSelector:@selector(resetToLoginViewController:) withObject:msg afterDelay:0.1];
  100. }];
  101. }
  102. else {
  103. [ctrl popToRootViewControllerAnimated:NO];
  104. [self performSelector:@selector(resetToLoginViewController:) withObject:msg afterDelay:0.1];
  105. }
  106. }
  107. else if ([vc isKindOfClass:NSClassFromString(@"CustomNavViewController")]) {
  108. if (vc.presentedViewController) {
  109. UIViewController *presentCtrl = vc.presentedViewController;
  110. [presentCtrl dismissViewControllerAnimated:YES completion:^{
  111. CustomNavViewController *ctrl = (CustomNavViewController *)vc;
  112. [ctrl popToRootViewControllerAnimated:NO];
  113. self.isQuitting = NO;
  114. }];
  115. }
  116. else {
  117. CustomNavViewController *ctrl = (CustomNavViewController *)vc;
  118. [ctrl popToRootViewControllerAnimated:NO];
  119. self.isQuitting = NO;
  120. }
  121. }
  122. }
  123. - (void)resetToLoginViewController:(NSString *)tipsMsg {
  124. LoginViewController *logonVC = [[LoginViewController alloc] init];
  125. CustomNavViewController *navCtrl = [[CustomNavViewController alloc] initWithRootViewController:logonVC];
  126. [AppDelegate shareAppDelegate].window.rootViewController = navCtrl;
  127. // 切换到横屏
  128. AppDelegate* delegate = [AppDelegate shareAppDelegate];
  129. if (delegate.allowAutoRotate) {
  130. delegate.allowAutoRotate = NO;
  131. if (IS_IPAD) {
  132. logonVC.zh_statusBarHidden = NO;
  133. }
  134. [UIDevice switchNewOrientation:UIInterfaceOrientationPortrait inController:logonVC];
  135. }
  136. if (![NSString isEmptyString:tipsMsg]) {
  137. [LOADING_MANAGER MBShowAUTOHidingInWindow:tipsMsg];
  138. }
  139. self.isQuitting = NO;
  140. }
  141. - (NSString *)getVisableControllerName {
  142. UIViewController *vc = [AppDelegate shareAppDelegate].window.rootViewController;
  143. if ([vc isKindOfClass:[UITabBarController class]]) {
  144. UITabBarController *tab = (UITabBarController *)vc;
  145. CustomNavViewController *ctrl = (CustomNavViewController *)tab.selectedViewController;
  146. return NSStringFromClass(ctrl.visibleViewController.class);
  147. }
  148. else if ([vc isKindOfClass:[CustomNavViewController class]]) {
  149. CustomNavViewController *ctrl = (CustomNavViewController *)vc;
  150. return NSStringFromClass(ctrl.visibleViewController.class);
  151. }
  152. else {
  153. return NSStringFromClass(vc.class);
  154. }
  155. }
  156. @end