我的应用程序有一个"主屏幕"使用登录和注册选项。当用户完成上述之一时,数据存储在共享实例中。现在出于安全原因,我正在考虑使用applicationDidBecomeActive
定期检查以确保用户在服务器上仍处于活动状态,或者通过调用共享实例中的方法来阻止用户。如果用户未处于活动状态,则应用会通过提示将其踢到主屏幕。
然而,我的问题是当第一次加载app时,调用了applicationDidBecomeActive,并且由于用户未登录,最终会出现循环。
处理此问题的正确方法是什么?理想情况下,我想使用applicationDidBecomeActive,但我只想在应用程序的帐户部分执行检查。
任何帮助都会很棒。
感谢。
答案 0 :(得分:0)
有几种实现方法。
方法1:使用$file = $request->file('file1');
$accepts = ['jpeg', 'png', 'pdf'];
$ext = $file->getClientOriginalExtension();
$filename = $file->getClientOriginalName();
if( !in_array($ext, $accepts) )
{
return view('your-view')->withErrors('Invalid File Format');
}
else
{
//File has one of the correct extensions,
//return the filename to the view so it can be
//re-displayed in the input
return view('your-view', ['filename' => $filename]);
}
触发通知并在Accounts-ViewController中实现一个侦听器。
方式2:在你的AppDelegate中,获取活动的ViewController(取决于你正在使用的rootViewController)以及该ViewController是否具有类型NotificationCenter.default
触发公共函数。
方式3:在另一个对象中组合或使用Way1和Way2,并以您喜欢的方式通知您的ViewController。
还有更多。 发布一些代码以获得更具体的帮助:)
答案 1 :(得分: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) {
}];
答案 2 :(得分: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];
}