2017-02-14 5 views
0

У меня есть приложение, которое имеет «Домашний экран» с параметрами входа и регистрации. Когда пользователь завершает одно из указанных выше, данные хранятся в общем экземпляре. Теперь из соображений безопасности я искал использование applicationDidBecomeActive для периодической проверки, чтобы убедиться, что пользователь по-прежнему активен на сервере или не заблокирован вызовом метода в совместно используемом экземпляре. Если пользователь неактивен, приложение отправляет их на главный экран с подсказкой.Использование applicationDidBecomeActive для проверки, если пользователь зарегистрирован

Моя проблема заключается в том, что когда приложение загружается в первый раз, вызывается «applicationDidBecomeActive», и поскольку пользователь не входит в систему, вы заканчиваете цикл.

Каков правильный подход к решению этой проблемы? В идеале я хочу использовать applicationDidBecomeActive, но я хочу выполнить проверку только в разделе учетной записи приложения.

Любая помощь будет отличной.

Спасибо.

+0

пожалуйста показать код, как вы проверяете в методе applicationDidBecomeActive. –

ответ

0

Существует несколько способов реализации этого.

Способ 1: Опорожнить уведомление с помощью NotificationCenter.default и реализовать прослушиватель в вашем Accounts-ViewController.

Путь 2: В вашем AppDelegate, активизируйте ViewController (зависит от того, какой rootViewController вы используете), и если этот ViewController имеет тип AccountVC, запускает публичную функцию.

Способ 3: объединить или использовать Way1 и Way2 в другом объекте и уведомлять ваш ViewController по-своему.

И многое другое. Опубликовать код для получения более конкретной справки :)

0

Для решения проблемы вы можете использовать любой из следующих способов.

подход 1

- (void)checkWhetherAppIsActive { 

    UIApplicationState appState = [[UIApplication sharedApplication] applicationState]; 
    if (appState == UIApplicationStateActive) { 

    }else if (appState == UIApplicationStateInactive) { 

    }else if (appState == UIApplicationStateBackground) { 

    } 
} 

подход 2

[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationWillResignActiveNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) { 

}]; 

[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationWillEnterForegroundNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) { 

}]; 

[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationWillTerminateNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) { 

}]; 
0

Когда пользователь входит в систему, генерировать expiryTimeStamp. И всякий раз, когда приложение активно, вы можете проверить currentTimestamp на expiryTimeStamp. Если currentTimestamp находится перед expiryTimeStamp, рассмотрите его как активную сессию!

- (void)applicationDidBecomeActive:(UIApplication *)application { 
    //compare current NSDate with expiryDate 
    if(current date is before expiry date){ 
     //active session 
     }else{ 
    //log out the user 
    } 
} 

Вы можете генерировать срок действия, как:

-(void)generateExpiryTimeStamp{ 
    [[NSUserDefaults standardUserDefaults]setObject:[NSDate dateWithTimeIntervalSinceNow:900] forKey:@"tokenExpiry"]; //Expiry date Set to 15mins 
    [[NSUserDefaults standardUserDefaults]synchronize]; 
} 
Смежные вопросы