2017-04-12 80 views
0

我有一個關於Alamofire及其與後臺任務配置的SessionManager的行爲的問題。我正在使用它在後臺上傳視頻。鏈接背景任務Alamofire

步驟一:將視頻上傳:
這部分是標準的,但是,當上傳完成後:

步驟二:完成上傳:
我需要發送一個DELETE請求到服務器讓它知道視頻上傳已完成。如果成功,響應將包含新上傳的視頻的位置標題。

第三步添加視頻元數據:
有了這個位置,我需要PATCH請求視頻元數據:標題和說明。

所以我的問題是關於覆蓋會話管理器委託關閉。我可以覆蓋sessionDidFinishEventsForBackgroundURLSessiontaskDidComplete,當我完全結束後臺時,我需要調用系統completionHandler,將其作爲SessionManager上的一個屬性存儲...因此,何時/應在哪裏觸發DELETE請求,然後何時/我應該在哪裏發起PATCH請求?

我應該創建3個不同的後臺會話配置標識符,以便我可以識別它們並確保按正確的順序鏈接它們嗎?因爲顯然我不能在封閉中說:第一次你被請求解僱了,但第二次解僱了這個請求? 2的哪個關閉是完成整個過程並調用系統completionHandler的正確方法?我不確定這是否正確,因爲我將與Alamofire上傳響應處理程序不同步。

另外我想知道Alamofire響應處理程序。如果應用程序一直在前臺?我會簡單地使用響應處理程序將alamofire請求鏈接在一起?但如果應用程序終止並在後臺運行,這些處理程序還會在哪裏?

任何有識之士將不勝感激。我意識到這裏有很多事情要做,蘋果前夕限制後臺任務,我只是想知道這是否可能,如果是的話,如何去做呢?

+0

通過將其分爲具有段落的部分使其更具可讀性。 –

回答

0

我應該創建3個不同的背景會話配置 標識符,這樣我就可以識別它們,並確保右 爲了我把它們連?

我不認爲你需要多個後臺會話來確定哪個請求完成塊被調用並鏈接下一個請求。你可以用

  1. 異步的NSOperation實現它: 您可以使用異步NSOperations與鏈的多個請求。在操作中添加依賴關係,並讓iOS處理調度和處理依賴關係。請注意:我提到異步 NSOperation。 NSOperations的性質是Synchronous

  2. 承諾套件: 如果異步NSOperations太複雜,您可以隨時使用Promise套件。只有在特定的請求完成後,Promise工具包纔會執行請求,如果頂部的一個失敗,整個依賴鏈將短路。

  3. 只需在上傳任務完成塊中創建新的數據任務即可上傳視頻。而不是在任務中使用委託模式使用完成塊。這樣,您不必確定代理被調用的是哪個請求,因爲每個任務都有自己的完成塊,您可以在編寫代碼時輕鬆鏈接它們。

如果應用程序終止,並在後臺運行時將這些 處理器仍然是圍繞?

我不是100%肯定,雖然,但據我所知,當您計劃後臺任務(背景會話),任務將繼續,即使應用程序是killed.After全部執行,這就是爲什麼我們使用背景會議。所以我相信即使你殺了應用程序,完成處理程序也會執行。