LoginStateManager.m 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. //
  2. // LoginStateManager.m
  3. // AIIM
  4. //
  5. // Created by qitewei on 2025/6/15.
  6. //
  7. #import "LoginStateManager.h"
  8. #import "GLoginController.h"
  9. #import "UserNetApi.h"
  10. #import "UDManager.h"
  11. #import "APPLocker.h"
  12. #import "GWebSocket.h"
  13. @implementation LoginStateManager
  14. + (instancetype)sharedManager {
  15. static LoginStateManager *instance = nil;
  16. static dispatch_once_t onceToken;
  17. dispatch_once(&onceToken, ^{
  18. instance = [[LoginStateManager alloc] init];
  19. [instance loadLoginStatusFromStorage];
  20. });
  21. return instance;
  22. }
  23. - (instancetype)init {
  24. self = [super init];
  25. if (self) {
  26. // 初始化时自动加载存储的登录状态
  27. _loggedIn = NO;
  28. }
  29. return self;
  30. }
  31. #pragma mark - 登录登出方法
  32. - (void)loginWithAccountInfo:(NSDictionary *)info{
  33. NSLog(@"version:%@",info[@"version"]);
  34. [UserNetApi login:info succ:^(int code, NSDictionary * res) {
  35. NSLog(@"%@",res);
  36. NSString *codes = res[@"code"];
  37. if(codes.intValue!=200){
  38. // [AppAlter showAlertWithContent:res[@"msg"] cancelTitle:@"取消" cancelBlock:nil];
  39. // [AlertHelper showAlertWithTitle:@"" message:res[@"msg"] cancelButtonTitle:NSLocalizedString(@"Common_cancel", @"") confirmButtonTitle:nil completion:nil];
  40. return;
  41. }
  42. NSString *token =res[@"token"];
  43. if(token){
  44. [UDManager.shareInstance setSDManager:res[@"token"] key:gkeytoken];
  45. [UDManager.shareInstance setSDManager:info[@"username"] key:dkuserloginId];
  46. [self getUserInfo];
  47. }
  48. } fail:^(NSError * _Nonnull error) {
  49. NSLog(@"--%@",error);
  50. }];
  51. }
  52. - (void)getUserInfo{
  53. NSString *token = [UDManager.shareInstance getSDManager:gkeytoken];
  54. NSLog(@"getUserinfo:%@",token);
  55. if([token isKindOfClass:[NSString class]]&&token.length>10){
  56. [UserNetApi getUserinfo:^(int code, NSDictionary * res) {
  57. //NSLog(@"%@", res[@"code"]);
  58. NSNumber *gcode=res[@"code"];
  59. NSDictionary *data=res[@"data"];
  60. // NSLog(@"%@", data);
  61. if([gcode intValue]!=200){
  62. NSLog(@"%@",res[@"msg"]);
  63. [self clearLoginStatus];
  64. return;
  65. }
  66. NSDictionary *ps = @{@"avatar": data[@"avatar"]?:@"",
  67. @"deptId": data[@"deptId"]?:@"",
  68. //@"domainId":data[@"domainId"],
  69. @"email":data[@"email"]?:@"",
  70. @"id":data[@"id"]?:@"",
  71. @"mobile":data[@"mobile"]?:@"",
  72. @"name":data[@"name"]?:@"",
  73. //@"platformType":data[@"platformType"]?:@"",
  74. //@"registrationId":data[@"registrationId"]?:@"",
  75. @"sex":data[@"sex"]?:@"",
  76. //@"tgbotAdmin":data[@"tgbotAdmin"],
  77. //@"tgbotName":data[@"tgbotName"],
  78. //@"tgbotTk":data[@"tgbotTk"]?:@"",
  79. @"username":data[@"username"]?:@"",
  80. //@"uuid":data[@"uuid"],
  81. //@"voipTk":data[@"voipTk"]?:@""
  82. };
  83. if(code==200){
  84. self->_loggedIn = YES;
  85. [UDManager.shareInstance setDDManager:ps key:dkuserinfo];
  86. [UDManager.shareInstance setSDManager:ps[@"id"] key:dkuserId];
  87. !self.checkLoginState ?: self.checkLoginState(YES);
  88. }
  89. } fail:^(NSError * _Nonnull error) {
  90. NSLog(@"%@", error);
  91. // self->_loggedIn = NO;
  92. // [self clearLoginStatus];
  93. // !self.checkLoginState ?: self.checkLoginState(NO);
  94. }];
  95. }
  96. else{
  97. self->_loggedIn = NO;
  98. [self clearLoginStatus];
  99. [self showLoginViewController];
  100. // !self.checkLoginState ?: self.checkLoginState(NO);
  101. }
  102. }
  103. - (void)logout {
  104. // 这里应该是实际的登出网络请求
  105. [UserNetApi logout:nil succ:^(int code, NSDictionary * res) {
  106. [self logoutSet];
  107. // [self showLoginViewController];
  108. } fail:^(NSError * _Nonnull error) {
  109. NSLog(@"");
  110. }];
  111. }
  112. - (void)logoutSet{
  113. [[GWebSocket shareInstance] closeWebSocket];
  114. [UDManager.shareInstance removeUDManager:gkeytoken];
  115. [UDManager.shareInstance removeUDManager:dkuserloginId];
  116. [UDManager.shareInstance removeUDManager:dkuserinfo];
  117. [APPLocker.sharedLocker removePasswordWithError:nil];
  118. [self clearLoginStatus];
  119. self->_loggedIn = NO;
  120. }
  121. #pragma mark - 辅助方法
  122. - (BOOL)checkLoginStatus {
  123. if (!self.isLoggedIn) {
  124. // 这里可以弹出登录界面
  125. [self showLoginViewController];
  126. return NO;
  127. }
  128. return YES;
  129. }
  130. #pragma mark - 本地存储管理
  131. - (void)saveLoginStatusToStorage {
  132. }
  133. - (void)loadLoginStatusFromStorage {
  134. }
  135. - (void)clearLoginStatus {
  136. [UDManager.shareInstance removeUDManager:gkeytoken];
  137. NSString *voiptoken = [UDManager.shareInstance getSDManager:dkvoiptoken];
  138. [self showLoginViewController];
  139. NSLog(@"voiptoken:%@",voiptoken);
  140. if([voiptoken isKindOfClass:[NSString class]]&&voiptoken.length>10){
  141. NSDictionary *dic = @{
  142. @"voipTk":voiptoken
  143. };
  144. [UserNetApi clearVoipTk:dic succ:^(int code, NSDictionary * res) {
  145. NSLog(@"clearVoipTk:%@",res);
  146. } fail:^(NSError * _Nonnull error) {
  147. }];
  148. }
  149. NSString *pushtoken = [UDManager.shareInstance getSDManager:dkpushtoken];
  150. NSLog(@"voiptoken:%@",pushtoken);
  151. if([pushtoken isKindOfClass:[NSString class]]&&pushtoken.length>10){
  152. NSDictionary *dic = @{
  153. @"registrationId":pushtoken
  154. };
  155. [UserNetApi clearRegistrationId:dic succ:^(int code, NSDictionary * res) {
  156. NSLog(@"clearRegistrationId:%@",res);
  157. } fail:^(NSError * _Nonnull error) {
  158. }];
  159. }
  160. }
  161. #pragma mark - 私有方法
  162. - (void)showLoginViewController {
  163. // 这里实现弹出登录界面的逻辑
  164. NSLog(@"需要显示登录界面");
  165. UIStoryboard *board = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
  166. GLoginController *login = [board instantiateViewControllerWithIdentifier:@"LoginController"];
  167. UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:login];
  168. [UIApplication sharedApplication].delegate.window.rootViewController = nav;
  169. }
  170. @end