[英]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.