Browse Source

解决启动获取用户信息接口失败导致卡在启动页无法进入app问题

zwp 4 tháng trước cách đây
mục cha
commit
f184442827

+ 0 - 2
AIIM.xcodeproj/project.pbxproj

@@ -274,7 +274,6 @@
 				INFOPLIST_KEY_NSSpeechRecognitionUsageDescription = "需要语音识别权限以进行通话";
 				INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
 				INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen.storyboard;
-				INFOPLIST_KEY_UIMainStoryboardFile = Main;
 				INFOPLIST_KEY_UIStatusBarHidden = YES;
 				INFOPLIST_KEY_UIStatusBarStyle = UIStatusBarStyleLightContent;
 				INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
@@ -332,7 +331,6 @@
 				INFOPLIST_KEY_NSSpeechRecognitionUsageDescription = "需要语音识别权限以进行通话";
 				INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
 				INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen.storyboard;
-				INFOPLIST_KEY_UIMainStoryboardFile = Main;
 				INFOPLIST_KEY_UIStatusBarHidden = YES;
 				INFOPLIST_KEY_UIStatusBarStyle = UIStatusBarStyleLightContent;
 				INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;

+ 30 - 92
AIIM/AppDelegate.m

@@ -45,8 +45,6 @@
 @property (nonatomic) NSDictionary *msg;
 @property (strong, nonatomic) NSString *bgMark;
 
-@property (nonatomic) BOOL isTokenCleared;
-
 @property (strong, nonatomic) FloatingWindow *floatWindow;
 @property (nonatomic, strong) JSGController * _Nullable jsyuyinctr;
 
@@ -66,6 +64,17 @@
 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
     // Override point for customization after application launch.
     app = self;
+    
+    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
+    self.window.backgroundColor = UIColor.blackColor;
+    BOOL isLoggedIn = [LoginStateManager sharedManager].isLoggedIn;
+    if (isLoggedIn) {
+        [self initDataAfterLogin:YES];
+    } else {
+        [self openLoginController];
+    }
+    [self.window makeKeyAndVisible];
+    
     BuglyConfig *config = [[BuglyConfig alloc] init];
     config.reportLogLevel = BuglyLogLevelVerbose;
     [Bugly startWithAppId:@"1d9e6b546a" config:config];
@@ -77,11 +86,9 @@
     
     [self initJSMSDK];
     [self setupListener];
-    [self checkLoginState:launchOptions];
     [self registerPushright];
     [self setupCallProvider];
     [self startNetworkReachability];
-    _isTokenCleared=YES;
     
     _floatWindow = [[FloatingWindow alloc] initWithFrame:self.window.bounds];
     [_floatWindow hide];
@@ -212,7 +219,7 @@
 
 -(void)setupListener{
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onLoginSucc) name:nkonLoginSucc object:nil];
-    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onLogoutSucc) name:nkonLogoutSucc object:nil];
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onLogout) name:nkonLogoutSucc object:nil];
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(addFriend) name:nkonAddFriendNote object:nil];;
 }
 
@@ -264,31 +271,6 @@
     }
 }
 
-#pragma mark login sttate
-- (void)checkLoginState:(NSDictionary *)launchOptions{
-    [[LoginStateManager sharedManager] getUserInfo];
-    [LoginStateManager sharedManager].checkLoginState = ^(BOOL isLogin) {
-        if (isLogin) {
-            self.isLogin =TRUE;
-            
-            [self updivicetoken];
-            [self updiviceVoIPtoken];
-            [self sartWebsocket];
-            [self openFMDB];
-            [self openMainController];
-            // 检查是否需要显示启动锁屏
-            if ([[APPLocker sharedLocker] isPasswordSet] && [[APPLocker sharedLocker] isLockEnabled]) {
-                [self showLockScreen];
-            }
-            else{
-                self.shouldShowLock = NO;
-            }
-        }else{
-            [self openLoginController];
-        }
-    };
-}
-
 -(void)updivicetoken{
     NSString *token =[UDManager.shareInstance getSDManager:dkpushtoken];
     NSDictionary *usinfo = [UDManager.shareInstance getDDManager:dkuserinfo];
@@ -301,7 +283,6 @@
     NSString *bgMark = [NSString stringWithFormat:@"上传推送token:%ld",token.length];
     [Bugly reportException:[NSException exceptionWithName:bgMark reason:@"" userInfo:nil]];
     [UserNetApi setUserinfo:ud succ:^(int code, NSDictionary * res) {
-        self->_isTokenCleared=NO;
         NSData *jsonData = [NSJSONSerialization dataWithJSONObject:res options:0 error:nil];
         if (!jsonData) {
             NSLog(@"Got an error:");
@@ -330,7 +311,6 @@
     
     [UserNetApi setUserinfo:ud succ:^(int code, NSDictionary * res) {
         NSLog(@"updiviceVoIPtoken:%@",[res description]);
-        self->_isTokenCleared=NO;
     } fail:^(NSError * _Nonnull error) {
         NSLog(@"--%@",error);
     }];
@@ -808,63 +788,36 @@
 #pragma mark -user state and note
 
 -(void)onLoginSucc{
-    self.isLogin =TRUE;
-    [self openFMDB];
-    [self openMainController];
-    [self updivicetoken];
-    [self updiviceVoIPtoken];
-    [self sartWebsocket];
+    [self initDataAfterLogin:NO];
 }
--(void)onLogoutSucc{
+-(void)onLogout{
     self.isLogin =false;
-    NSLog(@"1-----------------1");
-//        [GDBManager.shareInstance delLocalmsglistTable:userid];
-//        [GDBManager.shareInstance delchatlistTable:nil fail:nil];
-//        [GDBManager.shareInstance deleteDB];
-    [UDManager.shareInstance removeUDManager:gkeytoken];
-    [UDManager.shareInstance removeUDManager:dkuserloginId];
-    [UDManager.shareInstance removeUDManager:dkuserinfo];
-    [UDManager.shareInstance removeUDManager:dkuserId];
-    [self clearVoipToken];
+    [[LoginStateManager sharedManager] cleanLoginState];
     [self openLoginController];
-    [self endWebsocket];
     [self resetBadgeCount];
     [self resetAddFriendBadgeCount];
 }
 
--(void)clearVoipToken{
-    
-    NSString *voiptoken = [UDManager.shareInstance getSDManager:dkvoiptoken];
-    NSLog(@"voiptoken:%@",voiptoken);
-    if([voiptoken isKindOfClass:[NSString class]]&&voiptoken.length>10){
-        NSDictionary *dic = @{
-            @"voipTk":voiptoken
-        };
-        [UserNetApi clearVoipTk:dic succ:^(int code, NSDictionary * res) {
-            NSLog(@"clearVoipTk:%@",res);
-            self->_isTokenCleared=YES;
-        } fail:^(NSError * _Nonnull error) {
-            
-        }];
+- (void)initDataAfterLogin:(BOOL)needRequest {
+    self.isLogin =TRUE;
+    [self openFMDB];
+    [self openMainController];
+    [self updivicetoken];
+    [self updiviceVoIPtoken];
+    [self sartWebsocket];
+    if ([[APPLocker sharedLocker] isPasswordSet] && [[APPLocker sharedLocker] isLockEnabled]) {
+        [self showLockScreen];
+    } else{
+        self.shouldShowLock = NO;
     }
-    
-    NSString *pushtoken = [UDManager.shareInstance getSDManager:dkpushtoken];
-    NSLog(@"voiptoken:%@",pushtoken);
-    if([pushtoken isKindOfClass:[NSString class]]&&pushtoken.length>10){
-        NSDictionary *dic = @{
-            @"registrationId":pushtoken
-        };
-        [UserNetApi clearRegistrationId:dic succ:^(int code, NSDictionary * res) {
-            NSLog(@"clearRegistrationId:%@",res);
-            self->_isTokenCleared=YES;
-        } fail:^(NSError * _Nonnull error) {
+    if (needRequest) {
+        [[LoginStateManager sharedManager] requestUserInfoWith:^(BOOL isSuccess) {
             
         }];
     }
 }
 
 
-
 #pragma mark mainControllor Manager
 -(void)openMainController{
     NSLog(@"openMainController");
@@ -951,25 +904,10 @@
     [[GWebSocket shareInstance] connectWebSocket];
 }
 
--(void)endWebsocket{
-    [[GWebSocket shareInstance] closeWebSocket];
-}
 
 #pragma mark init DB
--(void)openFMDB{
-    [GDBManager.shareInstance createDatabase:^(NSArray * _Nullable array) {
-        [GDBManager.shareInstance createLocalMSGtable:^(NSArray * _Nullable array) {
-        } fail:^(NSString * _Nullable error) {
-        }];
-        [GDBManager.shareInstance createChattable:^(NSArray * _Nullable array) {
-        } fail:^(NSString * _Nullable error) {
-        }];
-        [GDBManager.shareInstance createLastreadtimetable:^(NSArray * _Nullable array) {
-        } fail:^(NSString * _Nullable error) {
-        }];
-    } fail:^(NSString * _Nullable error) {
-        
-    }];
+-(void)openFMDB {
+    [[GDBManager shareInstance] initDataBase];
 }
 
 

+ 3 - 3
AIIM/Base.lproj/Main.storyboard

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="23727" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="23727" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
     <device id="retina4_7" orientation="portrait" appearance="light"/>
     <dependencies>
         <deployment identifier="iOS"/>
@@ -390,7 +390,7 @@
                                 <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
                             </imageView>
                             <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="KsI-pH-yTv">
-                                <rect key="frame" x="145" y="114" width="86" height="86"/>
+                                <rect key="frame" x="144.5" y="114" width="86" height="86"/>
                                 <constraints>
                                     <constraint firstAttribute="width" constant="86" id="EiX-0f-gks"/>
                                     <constraint firstAttribute="height" constant="86" id="h9S-Om-RcC"/>
@@ -407,7 +407,7 @@
                                 <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                             </tableView>
                             <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="uNa-st-MT6">
-                                <rect key="frame" x="167" y="249" width="42" height="21"/>
+                                <rect key="frame" x="166.5" y="249" width="42" height="21"/>
                                 <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                 <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                 <nil key="highlightedColor"/>

+ 11 - 8
AIIM/Common/Network/GBaseNetApi.m

@@ -96,15 +96,18 @@
     }
     NSLog(@"%@",acUrl);
     [manager GET:acUrl parameters:parameters  headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
-        //
-        if (succ) {
-            succ(200,responseObject);
-        }
+        dispatch_main_async_safe(^{
+            if (succ) {
+                succ(200,responseObject);
+            }
+        })
+        
     } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
-        //
-        if (fail) {
-            fail(error);
-        }
+        dispatch_main_async_safe(^{
+            if (fail) {
+                fail(error);
+            }
+        })
     }];
 }
 

+ 4 - 5
AIIM/Common/Network/GDBManager.h

@@ -12,6 +12,8 @@
 #endif /* GDBManager_h */
 #import "GIMobj.h"
 
+#define kOnDatabaseReadyNotice @"kOnDatabaseReadyNotice"
+
 typedef void (^DBFail)(NSString * _Nullable error);
 typedef void (^DBSucc)(NSArray * _Nullable array);
 
@@ -23,18 +25,17 @@ typedef void (^DBSucc)(NSArray * _Nullable array);
 
 
 @interface GDBManager : NSObject
+@property (nonatomic, readonly) BOOL isReadey;
 
 + (GDBManager *_Nonnull)shareInstance;
 @property (nonatomic,weak) id <GDBManagerDelegate> delegate;
 
-
+-(BOOL)initDataBase;
 -(void)replayAllData;
 
 
 //消息表
--(void)createDatabase:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail;
 -(void)deleteDB;
--(void)createLocalMSGtable:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail;
 -(void)delLocalmsglistTable:(NSString *_Nullable)userid;
 -(void)insertLocalmsg:(NSDictionary *_Nonnull)msg succ:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail;
 - (void)batchInsertLocalMessages:(NSArray<NSDictionary *> *_Nullable)messages success:(DBSucc _Nullable)succ failure:(DBFail _Nullable)fail;
@@ -62,14 +63,12 @@ typedef void (^DBSucc)(NSArray * _Nullable array);
 
 
 //聊天窗表
--(void)createChattable:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail;
 -(void)delchatlistTable:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail;//删除聊天窗表lcChatlist_
 -(void)insertLocalchat:(NSDictionary *_Nonnull)msg succ:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail;
 -(void)selectLocalchats:(NSString *_Nullable)top succ:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail;
 ///删除单个聊天
 - (void)deleteChatListItem:(NSDictionary *_Nonnull)item succ:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail;
 //聊天窗最后已读时间表
--(void)createLastreadtimetable:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail;
 -(void)insertLastreadtime:(NSDictionary *_Nonnull)msg succ:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail;
 -(void)selectchatLastreadtime:(NSString *_Nonnull)chatId succ:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail;
 //好友群组表

+ 36 - 39
AIIM/Common/Network/GDBManager.m

@@ -12,7 +12,9 @@
 #import "config.h"
 
 @interface GDBManager ()
-
+{
+    BOOL _isReadey;
+}
 @property (nonatomic, strong) FMDatabase *db;
 @property (nonatomic) BOOL isOpen;
 
@@ -29,6 +31,10 @@
     return gShareInstance;
 }
 
+- (BOOL)isReadey {
+    return _isReadey;
+}
+
 - (instancetype)init {
     if (self = [super init]) {
         self.isOpen = false;
@@ -36,10 +42,24 @@
     return self;
 }
 
+-(BOOL)initDataBase {
+    self.isOpen = [self createDatabase];
+    BOOL msgTable = [self createLocalMSGtable];
+    BOOL chatTable = [self createChatTable];
+    BOOL readTable = [self createLastreadTimeTable];
+    BOOL ret = self.isOpen && msgTable && chatTable && readTable;
+    _isReadey = ret;
+    if (ret) {
+        [[NSNotificationCenter defaultCenter] postNotificationName:kOnDatabaseReadyNotice
+                                                            object:nil
+                                                          userInfo:nil];
+    }
+    return ret;
+}
 
 #pragma mark - Public -
 
--(void)createDatabase:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail{
+-(BOOL)createDatabase{
     // 数据库文件路径,这里使用文档目录下的数据库文件,确保数据持久化
     NSString *docsDir;
     NSArray *dirPaths;
@@ -51,17 +71,11 @@
     // 创建数据库实例,如果数据库文件不存在,则会自动创建该文件
     self.db = [FMDatabase databaseWithPath:dbPath];
     if (![self.db open]) {
-        NSLog(@"数据库打开失败");
-        if(fail){
-            fail([NSString stringWithFormat:@"数据库打开失败: %@", [self.db lastErrorMessage]]);
-        }
-    } else {
-        NSLog(@"数据库打开成功");
-        if(succ){
-            succ(nil);
-        }
-        self.isOpen = true;
+        NSLog(@"数据库打开失败: %@", [self.db lastErrorMessage]);
+        return NO;
     }
+    self.isOpen = true;
+    return YES;
 }
 
 
@@ -99,7 +113,7 @@
     
     for (NSInteger i = 0; i<randomInt; i++) {
         [self delLocalmsglistTable:userid];
-        [self createLocalMSGtable:nil fail:nil];
+        [self createLocalMSGtable];
         NSUUID *uid = [NSUUID UUID];
         NSDate *now = [NSDate date];
         NSTimeInterval trt = [now timeIntervalSince1970];
@@ -132,7 +146,7 @@
     randomInt = lowerBound + arc4random() % (upperBound - lowerBound + 1);
     for (NSInteger i = 0; i<randomInt; i++) {
         [self delchatlistTable:nil fail:nil];
-        [self createChattable:nil fail:nil];
+        [self createChatTable];
         
         NSUUID *uid = [NSUUID UUID];
         NSDate *now = [NSDate date];
@@ -159,7 +173,7 @@
 
     randomInt = lowerBound + arc4random() % (upperBound - lowerBound + 1);
     for (NSInteger i = 0; i<randomInt; i++) {
-        [self createLastreadtimetable:nil fail:nil];
+        [self createLastreadTimeTable];
         [self deleatLastreadtimetable];
         NSLog(@"deleatLastreadtimetable:%ld",(long)i);
     }
@@ -167,7 +181,7 @@
     randomInt = lowerBound + arc4random() % (upperBound - lowerBound + 1);
     for (NSInteger i = 0; i<randomInt; i++) {
         [self deleteDB];
-        [self createDatabase:nil fail:nil];
+        [self createDatabase];
         NSLog(@"deleteDB:%ld",(long)i);
     }
     
@@ -175,7 +189,7 @@
 }
 
 //创建消息表
--(void)createLocalMSGtable:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail;{
+-(BOOL)createLocalMSGtable{
    
     // 创建表语句
     NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
@@ -186,15 +200,10 @@
     BOOL success = [self.db executeUpdate:sql];
     if (!success) {
         NSLog(@"创建消息表失败: %@", [self.db lastErrorMessage]);
-        if(fail){
-            fail([NSString stringWithFormat:@"创建消息表失败: %@", [self.db lastErrorMessage]]);
-        }
     } else {
         NSLog(@"创建消息表成功");
-        if (succ) {
-            succ(nil);
-        }
     }
+    return success;
 }
 
 -(void)delLocalmsglistTable:(NSString *)userid{//删除消息表
@@ -685,25 +694,19 @@
 
 
 //聊天窗表lcChatlist_
--(void)createChattable:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail{
+-(BOOL)createChatTable {
     // 创建表语句
     NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
     NSString *sql1=@"create table if not exists lcChatlist_";
     NSString *tablejg = @"(id CHAR PRIMARY KEY,name CHAR,avatar CHAR,type CHAR,lastMessage TEXT,lastTime BIGINT,unreadCount int,loaded int,loading int,top int)";
     NSString *sql = [NSString stringWithFormat:@"%@%@ %@",sql1,userid,tablejg];
-    //NSLog(@"sql:%@",sql);
     BOOL success = [self.db executeUpdate:sql];
     if (!success) {
         NSLog(@"创建lcChatlist_表失败: %@", [self.db lastErrorMessage]);
-        if(fail){
-            fail([NSString stringWithFormat:@"创建消息表失败: %@", [self.db lastErrorMessage]]);
-        }
     } else {
         NSLog(@"创建lcChatlist_表成功");
-        if (succ) {
-            succ(nil);
-        }
     }
+    return success;
 }
 
 -(void)delchatlistTable:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail{//删除聊天窗表lcChatlist_
@@ -819,24 +822,18 @@
 }
 
 //聊天窗最后已读时间表
--(void)createLastreadtimetable:(DBSucc _Nullable )succ fail:(DBFail _Nullable )fail{
+-(BOOL)createLastreadTimeTable {
     NSString *userid = [UDManager.shareInstance getSDManager:dkuserId];
     NSString *sql1=@"create table if not exists lcChatlasttime_";
     NSString *tablejg = @"(chatId CHAR PRIMARY KEY,userId CHAR,timestamp BIGINT,type CHAR)";
     NSString *sql = [NSString stringWithFormat:@"%@%@ %@",sql1,userid,tablejg];
-    //NSLog(@"sql:%@",sql);
     BOOL success = [self.db executeUpdate:sql];
     if (!success) {
         NSLog(@"创建lcChatlasttime_表失败: %@", [self.db lastErrorMessage]);
-        if(fail){
-            fail([NSString stringWithFormat:@"创建消息表失败: %@", [self.db lastErrorMessage]]);
-        }
     } else {
         NSLog(@"创建lcChatlasttime_表成功");
-        if (succ) {
-            succ(nil);
-        }
     }
+    return success;
 }
 
 

+ 2 - 7
AIIM/Common/Network/GWebSocket.m

@@ -15,7 +15,7 @@
 #import "ChatsStore.h"
 #import "WebRTCStore.h"
 #import "UserNetApi.h"
-
+#import "LoginStateManager.h"
 
 static int const kHeartbeatDuration = 1;
 static int const timeoutError = 5;
@@ -417,12 +417,7 @@ static NSString *redeady = @"{\"code\":1}";
 //异地登录
 -(void)logoutAct{
     NSLog(@"logoutAct");
-    [UserNetApi logout:nil succ:^(int code, NSDictionary * res) {
-//        NSLog(@"res:%@",res);
-        [[NSNotificationCenter defaultCenter] postNotificationName: nkonLogoutSucc object:nil];
-    } fail:^(NSError * _Nonnull error) {
-        NSLog(@"");
-    }];
+    [[LoginStateManager sharedManager] logout];
 }
 
 

+ 5 - 16
AIIM/Common/Store/LoginStateManager.h

@@ -11,32 +11,21 @@ NS_ASSUME_NONNULL_BEGIN
 
 @interface LoginStateManager : NSObject
 // 登录状态
-@property (nonatomic, assign, readonly, getter=isLoggedIn) BOOL loggedIn;
+@property (nonatomic, assign, readonly) BOOL isLoggedIn;
 // 当前用户ID
-@property (nonatomic, copy, readonly, nullable) NSString *currentUserID;
+@property (readonly) NSString *currentUserID;
 // 当前用户Token
-@property (nonatomic, copy, readonly, nullable) NSString *currentUserToken;
+@property (readonly) NSString *currentUserToken;
 
 // 单例访问方法
 + (instancetype)sharedManager;
 
-@property (nonatomic,copy) void(^checkLoginState)(BOOL isLogin);
-
-/**
- 检查登录状态,如果未登录则自动弹出登录界面
- @return 是否已登录
- */
-- (BOOL)checkLoginStatus;
-
-- (void)loginWithAccountInfo:(NSDictionary *)info;
+- (void)cleanLoginState;
 
 - (void)logout;
 
-- (void)getUserInfo;
-
-- (void)clearLoginStatus;
+- (void)requestUserInfoWith:(nullable void(^)(BOOL isSuccess))completion;
 
-- (void)logoutSet;
 @end
 
 NS_ASSUME_NONNULL_END

+ 64 - 103
AIIM/Common/Store/LoginStateManager.m

@@ -6,17 +6,18 @@
 //
 
 #import "LoginStateManager.h"
-
-#import "GLoginController.h"
-
 #import "UserNetApi.h"
-
-
 #import "UDManager.h"
 #import "APPLocker.h"
 #import "GWebSocket.h"
+#import "GDBManager.h"
 
 @implementation LoginStateManager
+{
+    BOOL _loggedIn;
+    NSString *_currentUserToken;
+    NSString *_currentUserID;
+}
 + (instancetype)sharedManager {
     static LoginStateManager *instance = nil;
     static dispatch_once_t onceToken;
@@ -30,118 +31,91 @@
 - (instancetype)init {
     self = [super init];
     if (self) {
-        // 初始化时自动加载存储的登录状态
-        _loggedIn = NO;
+        _currentUserToken = [UDManager.shareInstance getSDManager:gkeytoken] ?: @"";
+        _currentUserID = [UDManager.shareInstance getSDManager:dkuserId] ?: @"";;
+        _loggedIn = _currentUserToken.length && _currentUserID.length;
     }
     return self;
 }
 
-#pragma mark - 登录登出方法
+- (BOOL)isLoggedIn {
+    return _loggedIn;
+}
+
+- (NSString *)currentUserToken {
+    return _currentUserToken;
+}
 
-- (void)loginWithAccountInfo:(NSDictionary *)info{
-    NSLog(@"version:%@",info[@"version"]);
-    [UserNetApi login:info succ:^(int code, NSDictionary * res) {
-        NSLog(@"%@",res);
-        NSString *codes = res[@"code"];
-        if(codes.intValue!=200){
-//            [AppAlter showAlertWithContent:res[@"msg"] cancelTitle:@"取消" cancelBlock:nil];
-//            [AlertHelper showAlertWithTitle:@"" message:res[@"msg"] cancelButtonTitle:NSLocalizedString(@"Common_cancel", @"") confirmButtonTitle:nil completion:nil];
+- (NSString *)currentUserID {
+    return _currentUserID;
+}
+
+- (void)requestUserInfoWith:(void(^)(BOOL isSuccess))completion {
+    [UserNetApi getUserinfo:^(int code, NSDictionary * res) {
+        //NSLog(@"%@", res[@"code"]);
+        NSNumber *gcode=res[@"code"];
+        NSDictionary *data=res[@"data"];
+       // NSLog(@"%@", data);
+        if([gcode intValue]!=200){
+            NSLog(@"%@",res[@"msg"]);
+            [self postLogout];
+            if (completion) {
+                completion(NO);
+            }
             return;
         }
-        NSString *token =res[@"token"];
-        if(token){
-            [UDManager.shareInstance setSDManager:res[@"token"] key:gkeytoken];
-            [UDManager.shareInstance setSDManager:info[@"username"] key:dkuserloginId];
-            [self getUserInfo];
+        NSDictionary *ps = @{@"avatar": data[@"avatar"]?:@"",
+                             @"deptId": data[@"deptId"]?:@"",
+                             @"email":data[@"email"]?:@"",
+                             @"id":data[@"id"]?:@"",
+                             @"mobile":data[@"mobile"]?:@"",
+                             @"name":data[@"name"]?:@"",
+                             @"sex":data[@"sex"]?:@"",
+                             @"username":data[@"username"]?:@"",
+                            };
+
+        self->_loggedIn = YES;
+        [UDManager.shareInstance setDDManager:ps key:dkuserinfo];
+        [UDManager.shareInstance setSDManager:ps[@"id"] key:dkuserId];
+        
+        if (completion) {
+            completion(YES);
         }
     } fail:^(NSError * _Nonnull error) {
-        NSLog(@"--%@",error);
+        NSLog(@"%@", error);
+        if (completion) {
+            completion(NO);
+        }
     }];
 }
 
-- (void)getUserInfo{
-    NSString *token = [UDManager.shareInstance getSDManager:gkeytoken];
-    NSLog(@"getUserinfo:%@",token);
-    if([token isKindOfClass:[NSString class]]&&token.length>10){
-        [UserNetApi getUserinfo:^(int code, NSDictionary * res) {
-            //NSLog(@"%@", res[@"code"]);
-            NSNumber *gcode=res[@"code"];
-            NSDictionary *data=res[@"data"];
-           // NSLog(@"%@", data);
-            if([gcode intValue]!=200){
-                NSLog(@"%@",res[@"msg"]);
-                [self clearLoginStatus];
-                return;
-            }
-            NSDictionary *ps = @{@"avatar": data[@"avatar"]?:@"",
-                                 @"deptId": data[@"deptId"]?:@"",
-                                 //@"domainId":data[@"domainId"],
-                                 @"email":data[@"email"]?:@"",
-                                 @"id":data[@"id"]?:@"",
-                                 @"mobile":data[@"mobile"]?:@"",
-                                 @"name":data[@"name"]?:@"",
-                                 //@"platformType":data[@"platformType"]?:@"",
-                                 //@"registrationId":data[@"registrationId"]?:@"",
-                                 @"sex":data[@"sex"]?:@"",
-                                 //@"tgbotAdmin":data[@"tgbotAdmin"],
-                                 //@"tgbotName":data[@"tgbotName"],
-                                 //@"tgbotTk":data[@"tgbotTk"]?:@"",
-                                 @"username":data[@"username"]?:@"",
-                                 //@"uuid":data[@"uuid"],
-                                 //@"voipTk":data[@"voipTk"]?:@""
-                                };
-            if(code==200){
-                self->_loggedIn = YES;
-                [UDManager.shareInstance setDDManager:ps key:dkuserinfo];
-                [UDManager.shareInstance setSDManager:ps[@"id"] key:dkuserId];
-                !self.checkLoginState ?: self.checkLoginState(YES);
-            }
-        } fail:^(NSError * _Nonnull error) {
-            NSLog(@"%@", error);
-//            self->_loggedIn = NO;
-//            [self clearLoginStatus];
-//            !self.checkLoginState ?: self.checkLoginState(NO);
-        }];
-    }
-    else{
-        self->_loggedIn = NO;
-        [self clearLoginStatus];
-        [self showLoginViewController];
-//        !self.checkLoginState ?: self.checkLoginState(NO);
-    }
-}
-
 - (void)logout {
     // 这里应该是实际的登出网络请求
     [UserNetApi logout:nil succ:^(int code, NSDictionary * res) {
-        [self logoutSet];
-//        [self showLoginViewController];
+        
     } fail:^(NSError * _Nonnull error) {
         NSLog(@"");
     }];
+    [self postLogout];
+}
+
+- (void)postLogout {
+    [[NSNotificationCenter defaultCenter] postNotificationName: nkonLogoutSucc object:nil];
 }
 
-- (void)logoutSet{
+- (void)cleanLoginState{
+    _currentUserToken = @"";
+    _currentUserID = @"";
     [[GWebSocket shareInstance] closeWebSocket];
     [UDManager.shareInstance removeUDManager:gkeytoken];
     [UDManager.shareInstance removeUDManager:dkuserloginId];
     [UDManager.shareInstance removeUDManager:dkuserinfo];
+    [UDManager.shareInstance removeUDManager:dkuserId];
     [APPLocker.sharedLocker removePasswordWithError:nil];
-    [self clearLoginStatus];
+    [self clearVOIP];
     self->_loggedIn = NO;
 }
 
-#pragma mark - 辅助方法
-
-- (BOOL)checkLoginStatus {
-    if (!self.isLoggedIn) {
-        // 这里可以弹出登录界面
-        [self showLoginViewController];
-        return NO;
-    }
-    return YES;
-}
-
 #pragma mark - 本地存储管理
 
 - (void)saveLoginStatusToStorage {
@@ -152,10 +126,8 @@
     
 }
 
-- (void)clearLoginStatus {
-    [UDManager.shareInstance removeUDManager:gkeytoken];
+- (void)clearVOIP {
     NSString *voiptoken = [UDManager.shareInstance getSDManager:dkvoiptoken];
-    [self showLoginViewController];
     NSLog(@"voiptoken:%@",voiptoken);
     if([voiptoken isKindOfClass:[NSString class]]&&voiptoken.length>10){
         NSDictionary *dic = @{
@@ -182,15 +154,4 @@
     }
 }
 
-#pragma mark - 私有方法
-
-- (void)showLoginViewController {
-    // 这里实现弹出登录界面的逻辑
-    NSLog(@"需要显示登录界面");
-    UIStoryboard *board = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
-    GLoginController *login = [board instantiateViewControllerWithIdentifier:@"LoginController"];
-    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:login];
-    [UIApplication sharedApplication].delegate.window.rootViewController = nav;
-}
-
 @end

+ 4 - 2
AIIM/Controller/chat/ChatIndexController.m

@@ -12,7 +12,7 @@
 #import "ChatController.h"
 #import "ChatNetApi.h"
 #import <Bugly/Bugly.h>
-
+#import "GDBManager.h"
 
 @interface ChatIndexController()<UITableViewDelegate,UITableViewDataSource,ChatListStoreDelegate>
 @property (weak, nonatomic) IBOutlet UITableView *_tableView;
@@ -44,7 +44,9 @@
 -(void)viewWillAppear:(BOOL)animated{
     [super viewWillAppear:animated];
     NSLog(@"ChatIndexController viewWillAppear");
-    [self reloadList];
+    if ([GDBManager shareInstance].isReadey) {
+        [self reloadList];
+    }
 }
 
 -(void)viewDidAppear:(BOOL)animated{

+ 28 - 86
AIIM/Controller/login/GLoginController.m

@@ -10,10 +10,9 @@
 #import "UDManager.h"
 #import "config.h"
 #import "GSignController.h"
-#import <AdSupport/AdSupport.h>
 #import "FilePreviewer.h"
 #import "GCoverController.h"
-
+#import "LoginStateManager.h"
 @interface GLoginController ()
 
 @property (weak, nonatomic) IBOutlet UITextField *userId;
@@ -26,8 +25,6 @@
 
 @property (nonatomic)  BOOL isagreed;
 
-@property (nonatomic)  NSInteger reLoginC;
-
 
 @end
 
@@ -50,8 +47,6 @@
         }
     }
     [self initsubView];
-    _reLoginC = 0;
-    [self getUserinfo];
 }
 
 
@@ -89,9 +84,6 @@
     _loginBt.layer.cornerRadius = 27;
     _loginBt.layer.masksToBounds = YES; // 防止子视图超出圆角边界
     
-    NSString *vendorIdentifier = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
-    NSLog(@"vendorIdentifier:%@",vendorIdentifier);
-    
     _wangjiBt.titleLabel.font = [UIFont systemFontOfSize: 14.0];
     [_wangjiBt setTitleColor:globalColor(GCTypeGreen) forState:UIControlStateNormal];
     [_wangjiBt setTitle:NSLocalizedString(@"login-wangjimm", @"忘记密码?") forState:UIControlStateNormal];
@@ -143,7 +135,6 @@
         
         return;
     }
-    [MBProgressHUD showLoadingWithText:@"" inView:self.view];
     [self loginAct];
     
 }
@@ -159,39 +150,37 @@
                          @"version":@"111",
                          @"uuid": @""};
     
-    
-    
+    [MBProgressHUD showLoadingWithText:@"" inView:self.view];
     [UserNetApi login:ps succ:^(int code, NSDictionary * res) {
-        NSLog(@"%@",res);
-        self->_reLoginC=4;
-        [MBProgressHUD hideAllTipsInView:self.view];
-        NSString *codes = res[@"code"];
-        if(codes.intValue!=200){
-            [MBProgressHUD showWithText:res[@"msg"]];
-            return;
-        }
-        NSLog(@"%@",res[@"token"]);
-        NSString *token =res[@"token"];
-        
-        if(token){
-            [UDManager.shareInstance setSDManager:res[@"token"] key:gkeytoken];
-            [UDManager.shareInstance setSDManager:userid key:dkuserloginId];
-            [self getUserinfo];
-        }
-        else{
-            [MBProgressHUD showWithText:@"数据异常"];
-        }
-    } fail:^(NSError * _Nonnull error) {
-        NSLog(@"--%@",error);
-        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
-            if(self->_reLoginC<3){
-                self->_reLoginC=self->_reLoginC+1;
-                [self loginAct];
+        dispatch_main_async_safe(^{
+            NSLog(@"%@",res);
+            NSString *codes = res[@"code"];
+            if(codes.intValue!=200){
+                [MBProgressHUD showWithText:res[@"msg"]];
+                return;
+            }
+            NSString *token =res[@"token"];
+            
+            if([token isKindOfClass:NSString.class]){
+                [UDManager.shareInstance setSDManager:token key:gkeytoken];
+                [UDManager.shareInstance setSDManager:userid key:dkuserloginId];
+                [[LoginStateManager sharedManager] requestUserInfoWith:^(BOOL isSuccess) {
+                    [MBProgressHUD hideAllTipsInView:self.view];
+                    if (isSuccess) {
+                        [[NSNotificationCenter defaultCenter] postNotificationName: nkonLoginSucc object:nil];
+                    }
+                }];
             }
             else{
-                [MBProgressHUD hideAllTipsInView:self.view];
+                [MBProgressHUD showWithText:@"数据异常"];
             }
-        });
+        })
+        
+    } fail:^(NSError * _Nonnull error) {
+        NSLog(@"--%@",error);
+        dispatch_main_async_safe(^{
+            [MBProgressHUD showWithText:error.localizedDescription];
+        })
     }];
 }
 
@@ -216,53 +205,6 @@
 
 #pragma mark private
 
--(void)getUserinfo{
-    NSString *token = [UDManager.shareInstance getSDManager:gkeytoken];
-    if([token isKindOfClass:[NSString class]]&&token.length>10){
-        [UserNetApi getUserinfo:^(int code, NSDictionary * res) {
-            NSLog(@"%d", code);
-            NSNumber *gcode=res[@"code"];
-            NSDictionary *data=res[@"data"];
-            NSLog(@"%@", res);
-            if([gcode intValue]!=200){
-                NSLog(@"%@",res[@"msg"]);
-                [MBProgressHUD showWithText:@"登录异常,请重新登录"];
-                return;
-            }
-            NSDictionary *ps = @{@"avatar": data[@"avatar"]?:@"",
-                                 @"deptId": data[@"deptId"]?:@"",
-                                 //@"domainId":data[@"domainId"],
-                                 @"email":data[@"email"]?:@"",
-                                 @"id":data[@"id"]?:@"",
-                                 @"mobile":data[@"mobile"]?:@"",
-                                 @"name":data[@"name"]?:@"",
-                                 //@"platformType":data[@"platformType"]?:@"",
-                                 //@"registrationId":data[@"registrationId"]?:@"",
-                                 @"sex":data[@"sex"]?:@"",
-                                 //@"tgbotAdmin":data[@"tgbotAdmin"],
-                                 //@"tgbotName":data[@"tgbotName"],
-                                 //@"tgbotTk":data[@"tgbotTk"]?:@"",
-                                 @"username":data[@"username"]?:@"",
-                                 //@"uuid":data[@"uuid"],
-                                 //@"voipTk":data[@"voipTk"]?:@""
-                                };
-            if([gcode intValue]==200){
-                NSLog(@"ps:%@",ps);
-                [MBProgressHUD showWithText:@"登录成功"];
-                [MBProgressHUD hideAllTipsInView:self.view];
-                [UDManager.shareInstance setSDManager:ps[@"id"] key:dkuserId];
-                [UDManager.shareInstance setDDManager:ps key:dkuserinfo];
-                [[NSNotificationCenter defaultCenter] postNotificationName: nkonLoginSucc object:nil];
-            }
-            
-        } fail:^(NSError * _Nonnull error) {
-            NSLog(@"%@", error);
-            // 使用GCD创建一个在3秒后执行的定时器
-            [MBProgressHUD hideAllTipsInView:self.view];
-        }];
-    }
-}
-
 - (IBAction)agreedAct:(id)sender {
     _isagreed=!_isagreed;
     if(_isagreed){

+ 2 - 10
AIIM/Controller/mine/UserConterController.m

@@ -18,8 +18,8 @@
 #import "ZhanghaoCntroller.h"
 #import "PersonalInfoController.h"
 #import "GDBManager.h"
-#import <AdSupport/AdSupport.h>
 #import "WebViewController.h"
+#import "LoginStateManager.h"
 
 @interface UserConterController()<UITableViewDelegate,UITableViewDataSource>
 @property (weak, nonatomic) IBOutlet UIImageView *avatar;
@@ -38,9 +38,6 @@
 -(void)viewDidLoad{
     [super viewDidLoad];
     
-    NSString *vendorIdentifier = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
-    NSLog(@"vendorIdentifier:%@",vendorIdentifier);
-    
     [self initCellData];
     [self initsubView];
     
@@ -277,12 +274,7 @@
     [self presentViewController:alert animated:YES completion:nil];
 }
 -(void)logoutAccaut{
-    [UserNetApi logout:nil succ:^(int code, NSDictionary * res) {
-        NSLog(@"res:%@",res);
-        [[NSNotificationCenter defaultCenter] postNotificationName: nkonLogoutSucc object:nil];
-    } fail:^(NSError * _Nonnull error) {
-        NSLog(@"");
-    }];
+    [[LoginStateManager sharedManager] logout];
 }