我正在编写一个涉及在初始屏幕上进行身份验证的应用程序,并允许在以后的屏幕上访问敏感数据。当 iPhone 被锁定时,无论是使用锁定按钮还是通过自动锁定,我希望应用程序自行关闭作为一项安全措施。有没有办法我可以做到这一点?
4 回答
您的 UIApplicationDelegate 将收到
– applicationWillResignActive:
屏幕锁定时的消息,以及
– applicationDidBecomeActive:
当它回来时。但是,它也可能在其他情况下收到这些消息(例如接到电话,用户在iOS 4.0及更高版本上关闭应用程序),我不知道如何区分原因。
我认为更好的用户体验是在应用程序返回时再次弹出身份验证。这样用户在手机解锁时不会感到困惑,他们运行的应用程序已经神秘退出。
为了消除任何混淆,我只是在装有 iOS 4.3.2 的设备上运行了一些测试:
当您启动您的应用程序时,您的应用程序会被发送: application:didFinishLaunchingWithOptions: applicationDidBecomeActive:
当您点击主页按钮时,您的应用会被发送:
applicationWillResignActive:
applicationDidEnterBackground:
当您稍后重新启动同一个应用程序时,您的应用程序会被发送:
applicationWillEnterForeground:
applicationDidBecomeActive:
当您点击锁定按钮时,您的应用会被发送:
applicationWillResignActive:
当您解锁时,您的应用会被发送:
applicationDidBecomeActive:
当您接到电话时,您的应用会收到以下信息:
applicationWillResignActive:
如果您不接听电话,您的应用会收到以下信息:
applicationDidBecomeActive:
当您接到电话时,您的应用会收到以下信息:
applicationWillResignActive:
如果您接听电话,您的应用会收到以下信息:
applicationDidEnterBackground:
当您挂断电话时,您的应用程序会被发送:
applicationWillEnterForeground:
applicationDidBecomeActive:
我会说当你得到一个applicationWillResignActive
: 然后你应该注销,取消身份验证,锁定或丢弃你的机密信息,当你得到一个applicationDidBecomeActive:
then re-authenticate 时。那个在启动时被调用,从后台返回并解锁设备。
此外,这两种方法对您来说可能很有趣,但它们并不能真正帮助您感兴趣的特定案例:
- (void)applicationProtectedDataWillBecomeUnavailable:(UIApplication *)application
- (void)applicationProtectedDataDidBecomeAvailable:(UIApplication *)application
如果我没记错的话,当手机被锁定时,应用程序会进入睡眠状态。
自从引入多任务处理以来,Apple 改变了行为,以便您的应用在解锁/切换到时会发送特定消息。
我建议只听那件事,然后在此时再次要求身份验证。
我不认为你可以退出你的应用程序(你也不应该),我不知道有什么应用程序会自杀......</p>
很抱歉在这里没有太具体,但我希望你现在知道该去哪里……</p>
“关闭您的应用程序”违反了 Apple 准则。虽然某些应用程序实际上会这样做,但这是可能导致您的应用程序被拒绝的原因之一。在多任务处理之前,它违反了 Apple 的指导方针,现在由于多任务处理而变得更加重要。用户体验是当他们在锁定或进入另一个应用程序后回到手机和您的应用程序时,您的应用程序应该仍在运行。“关闭你的应用”会让用户相信你的应用已经崩溃,他们很可能会为此写评论。
如果您希望在用户“离开”时保护应用程序中的信息,那么您应该查看UIApplicationDelegate 协议参考。特别
applicationDidEnterBackground:
是(您应该在哪里注销用户)和applicationDidBecomeActive:
(您应该在哪里让用户重新登录)。
最后一点,您可能希望默认为“自动注销”,但如果用户愿意,可以为用户提供一个设置选项以使他们保持登录状态。没那么难,少数想要它的人可以利用这个设置。