需求:前段时间在开发项目的时候,有一个需求,因为APP的一些信息比较敏感,所以如果用户在操作APP的过程中按下home键退到后台,超过指定的时间然后再切换到前台时,需要验证用户设置过的指纹或者是手势来对用户进行身份验证
方案一:
当APP进入前台的时候将
rootViewController
设置为指定的校验界面.
但是有一个问题:当用户验证成功之后呢? 如何回到用户之前操作过的界面呢? 暂时我没有好的解决方案, 如果你想到了好的idea,咱们可以一起探讨下~
方案二:
当APP进入前台的时候在当前界面上覆盖一个
UIWindow
,并设置UIWindowLevel
,当用户验证成功之后在将该Window
对象隐藏或者是移除即可
代码如下:
func applicationDidEnterBackground(_ application: UIApplication) {
leaveTime = Date()
}
func applicationWillEnterForeground(_ application: UIApplication) {
let interval = Int(Date().timeIntervalSince(leaveTime))
//这里假如超过20秒后就让用户去验证
if interval > 20
{
let validateVC = ValidationVC()
//当用户验证成功之后重新设置下windowLevel即可;
validateVC.closeCallBack = {
self.gestureWindow?.windowLevel = -1
}
let window = UIWindow(frame: UIScreen.main.bounds)
window.windowLevel = UIWindowLevelAlert + 1
window.rootViewController = validateVC
window.makeKeyAndVisible()
self.gestureWindow = window
}
}