iPhone - 获取用户交互事件和自动注销
Posted
技术标签:
【中文标题】iPhone - 获取用户交互事件和自动注销【英文标题】:iPhone - Get user interaction event and automatic logout 【发布时间】:2011-09-23 14:20:42 【问题描述】:在我的 iPhone 应用程序中,如果大约 2 分钟前没有任何反应(例如用户放下电话),我想注销用户。有人有这样的问题吗?实现此功能的最佳方法是什么?我想我将最后一个事件的日期保存到 NSUserDefaults,然后在下一个事件中首先检查当前日期。如果差异大于 2 分钟,则进入登录屏幕,否则刷新存储的日期。但是一般怎么才能获取到触摸事件呢?
谢谢,马迪克
【问题讨论】:
【参考方案1】:UIApplicationDelegate
中有一个方法:
- (void)applicationWillResignActive:(UIApplication *)application
/*
Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
*/
请注意,当应用程序进入后台状态时也会调用它。这将帮助您在应用程序进入非活动状态时存储数据。如果要检查是否经过了一定时间,则必须使用NSTimer
并存储最后一次触摸事件。我认为它无法完成,因为您无法拦截所有触摸事件(可能是系统管理的对象。状态栏就是一个例子)。我想最好让系统管理所有活动/不活动的东西并在必要时存储您的数据。
编辑:我第一次不明白你的意思。检查这个accepted answer,它完成了你所需要的。基本上你必须继承 UIApplication
并覆盖 sendEvent
方法。
【讨论】:
我想你不明白我的问题。我知道这个委托方法,但我不想等到它触发。想象一下,用户将自动锁定设置为 1 小时,但我想在 2 分钟不活动后注销她/他。或者想象一下,自动锁定是 1 分钟。一分钟后,手机锁定并触发此方法。但是,如果用户解锁手机并且在最后一次触摸后两分钟没有过去,我不想显示登录屏幕。我的问题是如何检测点击事件?我知道 UIGestureRecognizer 委托,但这是最好的方法吗? 好的,我现在明白了。我正在更新我的答案,向您展示我找到的几个解决方案。【参考方案2】:'NSTimer'
当您说“我一般如何获取触摸事件?”时,如果您的意思是如何判断用户是否空闲,则必须设置一些系统来收集更高的所有触摸事件您的应用程序中的级别。您可以更新您在NSUserDefaults
中提到的最后一次触摸时间,但这在应用程序运行期间可能效率低下,因此您可以将触摸事件发布到您的主应用程序委托并让它保存最后一次触摸时间。这也是您可以设置 2 分钟计时器的地方。
类似:
- (void) someAppDelegateMethodThatYouCallForAnyUserEvent
[self.idleTimer invalidate];
self.lastEvent = [NSDate now];
self.idleTimer = [NSTimer scheduledTimerWithTimeInterval:120 target:self selector:@selector(logoutAndGotoLogin) userInfo:nil repeats:NO];
...
如果您支持该行为,您还必须在应用程序进入后台等时在您的应用程序委托方法中进行一些清理。
【讨论】:
以上是关于iPhone - 获取用户交互事件和自动注销的主要内容,如果未能解决你的问题,请参考以下文章
上传 Facebook 照片和自动注销用户(自助服务终端应用程序)