簡體   English   中英

iOS-解鎖后第一個網絡請求失敗

[英]iOS - First network request fails after unlock

我有一個iOS應用程序,它從applicationDidBecomeActive的服務器中提取用戶數據。

如果用戶按下主頁按鈕,然后通過應用程序圖標或多任務屏幕返回到應用程序,則該功能可以正常工作。

如果用戶在此期間鎖定設備(無論是在仍在應用程序中還是在按下主屏幕,然后鎖定),則網絡請求將失敗。 我正在使用Alamofire。 響應對象為nil ,而result.data為空。 服務器上也沒有記錄任何請求。 故障立即發生。

蘋果技術說明TN2277表示,內核可以從應用程序下方回收套接字,而無需知道會發生什么情況。 這是相關的部分:

測試套接字回收

如果要編寫處理內核正在回收的套接字資源的代碼,則必須弄清楚如何對其進行測試。 有目的的沒有記錄系統可能回收套接字資源的確切情況; 這使我們能夠靈活地將來進行改進。 但是,在當前系統(iOS 4.0到iOS 4.3)上,您可以通過以下方式使系統從應用程序的套接字中回收資源:

  1. 將您的應用置於后台
  2. 確保該應用已暫停
  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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM