![](/img/trans.png)
[英]kSecAttrAccessibleAfterFirstUnlock not allowing access even after first unlock iOS
[英]iOS - First network request fails after unlock
我有一个iOS应用程序,它从applicationDidBecomeActive
的服务器中提取用户数据。
如果用户按下主页按钮,然后通过应用程序图标或多任务屏幕返回到应用程序,则该功能可以正常工作。
如果用户在此期间锁定设备(无论是在仍在应用程序中还是在按下主屏幕,然后锁定),则网络请求将失败。 我正在使用Alamofire。 响应对象为nil
,而result.data
为空。 服务器上也没有记录任何请求。 故障立即发生。
苹果技术说明TN2277表示,内核可以从应用程序下方回收套接字,而无需知道会发生什么情况。 这是相关的部分:
测试套接字回收
如果要编写处理内核正在回收的套接字资源的代码,则必须弄清楚如何对其进行测试。 有目的的没有记录系统可能回收套接字资源的确切情况; 这使我们能够灵活地将来进行改进。 但是,在当前系统(iOS 4.0到iOS 4.3)上,您可以通过以下方式使系统从应用程序的套接字中回收资源:
- 将您的应用置于后台
- 确保该应用已暂停
- 锁定屏幕
当您的应用恢复执行时,它将发现其套接字已被回收。
要解决此问题,请在每次调用AppDelegate的applicationWillEnterForeground时尝试创建新的Alamofire.Manager。 希望这对您有帮助。
在AppDelegate的applicationWillEnterForeground中,再次初始化您的Network Manager类,它将解决此问题。 出现此问题的原因是,当您锁定设备时,操作系统会锁定插槽,并且在解锁手机时不会释放它。 因此,请再次初始化您的网络管理员类,它将解决问题。
func applicationWillEnterForeground(_ application: UIApplication) {
WebServiceManager.sharedInstance.sessionManr = Alamofire.SessionManager.default
WebServiceManager.sharedInstance.sessionManr.session.configuration.requestCachePolicy = .reloadIgnoringLocalAndRemoteCacheData
WebServiceManager.sharedInstance.sessionManr.session.configuration.urlCache = nil
WebServiceManager.sharedInstance.sessionManr.session.configuration.timeoutIntervalForRequest = 180 //40
WebServiceManager.sharedInstance.sessionManr.session.configuration.httpShouldSetCookies = true
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.