簡體   English   中英

Alamofire 失效后如何重新驗證會話?

[英]How to revalidate the session once it is invalidated Alamofire?

invalidateAndCancel() 的使用帶來了另一個問題,即如果您需要再次使用它,則再次重新初始化會話。 在搜索這個問題后,我得到了 Cnoon 的Alamofire 后台服務,全球經理的答案 全局授權頭? . 嘗試創建管理器,但是當它被調用時,它永遠不會重新初始化值,為了預測這個問題,我做了一個小作弊,我嘗試每次給我的會話新名稱。

    func reset() -> Manager {

            let configuration: NSURLSessionConfiguration = {
                let identifier = "com.footbits.theartgallery2.background-session\(sessionCount)"
                let configuration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier(identifier)
                return configuration
            }()

            return Alamofire.Manager(configuration: configuration)
        }


func cancelAllRequests() {

   manager.session.invalidateAndCancel()
   sessionCount += 1
   manager = reset()

}

現在我很好奇背景中正在發生的事情,就像上一個會話仍然存在或已被 alamofire 刪除,因為如果它仍然存在,我可以創建多少會話,之后會產生什么影響? 因為我試過:

manager.session.resetWithCompletionHandler {

            print("Session reset")
        }

它不起作用。

我知道這個問題很舊,但是無論您是否使用 Alamofire,此信息都適用於您(讀者)。

您不能重新驗證 URLSession,這是有充分理由的:會話中的任務將在會話失效時被告知取消。 但是,這些任務可能需要一段時間才能真正取消並離開會話。 為了證明這一點,取消會話並在之后定期檢索其任務。 它們會慢慢下降到零。

您需要做的是使用新標識符創建一個新會話。 使用相同的標識符將導致舊會話被使用並在新任務被安排到它時崩潰!

對於那些尋求執行后台下載的人,可以考慮使用UUID().uuidString作為標識符的一部分並將 id 存儲在設備上的某處(想到 Userdefaults),並在每次調用后生成一個新的 uuid 以使當前會話無效。 然后使用新的 uuid 創建一個新的會話對象並引用它。 獎勵:這個新會話將立即有 0 個打開的任務,如果您的邏輯基於此,這證明是有用的。

我的項目中的示例:

@UserDefaultOptional(defaultValue: nil, "com.com.company.sessionid")
private var sessionID: String?

// MARK: - Init

private var session: URLSession!

private override init() {
    super.init()
    setupNewSession()
}

private func setupNewSession() {
    let id = sessionID ?? UUID().uuidString
    sessionID = id
    let configuration = URLSessionConfiguration.background(withIdentifier: id)
    session = URLSession(configuration: configuration, delegate: self, delegateQueue: nil)
}

private func invalidateSession() {
    session.invalidateAndCancel()
    sessionID = nil
    setupNewSession()
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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