2014-10-07 98 views
3

我們正在開發音樂應用程序。該應用程序有可能下載音樂文件,即使用戶隱藏應用程序,但它只能運行約10分鐘,並停止。我們閱讀了很多關於它的文章,並發現如果你不是雜誌/報紙,它是不可能不斷下載的。 但我們有很多客戶抱怨它在iOS7/iOS8中10分鐘後無需停止下載文件

有沒有什麼新的方法可以在iOS7/iOS8中使用NSURLSession或其他方法來完成它?

某些應用程序使用CoreLocation獲取當前位置的更新並開始下載。但感覺這是一種黑客攻擊,對我們並不好。

編輯的一些意見後:

我們的下載週期:我們的任務隊列進行下載。每次我們從coredata啓動第一個隊列 - >從後端獲取url來下載跟蹤 - >使用NSURLConnection下載 - >加密文件,存儲並保存一些信息到coredata - >如果有的話啓動下一個。

因此,我們不知道要下載的網址,例如由於安全限制,在實際啓動之前的NSURLSessionDownloadTask

+0

你使用NSURLSessionDownloadTask使用NSURLSession嗎? – 2014-10-07 09:24:34

+0

你有成功的故事嗎?我們想嘗試,但問題是要創建此任務,您需要下載URL。但我們只有在我們開始下載時纔會獲得網址,因爲安全限制 – kabarga 2014-10-07 09:52:21

+0

您在調用某些Web服務後正在獲取網址? – 2014-10-07 09:57:19

回答

4

10分鐘後傳輸中斷的原因是iOS在後臺大約10分鐘後暫停您的應用。所以它實際上是一個預期的行爲。

是的,通過使用NSURLSession和後臺會話配置對象([NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:]),可以在iOS 7+中下載文件。在這種情況下,實際傳輸將在進程外執行,您的應用程序將通過代理方法([UIApplicationDelegate application:handleEventsForBackgroundURLSession:completionHandler:])得到結果通知。

這可能不適用於您的流量開箱即用,因爲要在後臺啓動下載任務,您需要知道實際的URL。但是,您可以嘗試將應用程序的服務器端部分重構爲例如將請求重定向到實際下載而不是返回URL - 在這種情況下,NSURLSession將適用於您(如果您也依賴於此,也可以傳遞任意數量的自定義HTTP標頭)。

另一種選擇是下載你的下載URL,處理它,並啓動另一個後臺下載。然而,這會使客戶的邏輯顯着複雜化(IMO),並使測試調試有點困難 - 後臺網絡傳輸不是最簡單的事情,也不是調試最簡單的事情。

+0

謝謝安德烈。感覺這是一條很好的路。我會嘗試實現最複雜的方式,因爲下載鏈接在某些分鐘過期(不可能改變),並且我們還有更多的服務。 – kabarga 2014-10-07 12:30:51

+0

我創建了相同的,但在iOS 9.1下載10分鐘後停止,任何解決方案,將不勝感激,Thnx – Murali 2015-11-23 14:06:06