2017-03-02 73 views
0

我一直在調查爲我們的企業應用程序的iOS背景獲取。根據this這樣的文章,在應用程序終止前有30秒的下載限制,並且可能(未確認)是3次超時後應用程序被禁止進入後臺同步的懲罰。此外,如果用戶殺死該應用程序,提取停止發生 - noted hereiOS Backrground Sync企業應用的替代選擇?

目標是能夠在應用程序暫停/未運行時定期從我們的服務器檢索數據,但有時由於長時間運行的SQL,傳輸可能需要幾分鐘時間。我不想實現向所有用戶發送定期通知。

在我開始進行iOS背景同步開發之前,我需要做一些盡職調查和iOS背景同步的研究替代方案,但沒有找到任何東西。

有沒有人看到或開發出iOS後臺同步的替代方案,或者爲他們的企業應用處理了這個問題?

+2

也許緩存更新,所以更新不會因爲SQL緩慢而阻塞?也許把它分成更小的部分?電話「需要幾分鐘」的事實並不是一件好事。 – picciano

+0

您可否詳細說明:「應用程序暫停時,定期從服務器檢索數據」! –

+0

@nikdange_me,當用戶按下home並且應用程序進入後臺或被暫停時,我需要每隔30分鐘撥打一次我的API,以保持用戶本地數據保持最新狀態該應用程序未被使用(可以是幾天或幾個月)。一切爲了更好的用戶體驗。 – Barrett

回答

0

作爲一個企業應用程序,除了您可以使用任何您想要的背景模式(音頻,位置,voip等)而無需擁有合法理由這樣做外,您無需做任何額外的工作。

在哪裏,這可能有助於爲:

  • 你可以利用一個顯著位置的變化(相對於常規的位置變化)通知在後臺運行你的應用程序。這個問題當然取決於你的應用程序的用戶移動。但是,假設您的員工中的每個人都通過iPhone上下班,那麼您每天都有兩次機會在後臺運行應用程序。由於位置更改而運行的應用程序可以在後臺執行超過30秒。

  • voip推送:與常規推送通知不同,voip推送將啓動應用程序,即使用戶強制終止它。要使用此功能只比使用常規推送稍微多一點努力,您無需執行任何有關撥打或接收實際voip電話的任何內容,只需使用voip功能和voip證書即可,而不必使用普通的推送證書。

在該鏈接的評論是不正確的關於力戒菸和背景提取 - 強制用戶退出應用程序並不能使它沒有資格運行一個後臺抓取,我強制退出自己的應用程序,它使用背景但是它仍然會由操作系統啓動,但是會發生什麼情況是應用程序運行的頻率會減少很多,如果用戶再也不運行應用程序,則操作系統將停止啓動它。 強制退出應用程序的用戶將阻止其他事情發生,例如它會響應無聲推送通知(例如它的voip推送)在後臺運行。

還有30秒與下載時間無關,NSURLConnection將在30秒後停止,NSURLSession旨在繼續代表您的應用下載。但是,如果您正在下載並應用冗長的SQL處理,那將是一個問題。但處理時間的分鐘似乎過多,你確定它的全部優化?

+0

緩慢的SQL已修復,但其餘的調用仍然接近30秒後臺提取限制(在最壞的情況下)。我最終創建了一個測試應用程序,該應用程序通過一系列請求相應地觸發我的API。 我確實看到了不斷下調的電話來啓動我的應用程序。猜測時間間隔受CPU負載和完成下載所花費的時間的影響。 時間間隔接近12小時。如果您與應用程序進行互動,則會在一段時間內恢復較短的時間間隔。 [也看到這個](http://stackoverflow.com/questions/39197933/how-to-troubleshoot-ios-background-app-fetch-not-working) – Barrett

+0

此外,我可以實施每週或半周的靜默推送通知如果我遇到上述情況,操作系統最終會停止啓動應用程序。 – Barrett

0

我們的目標是能夠檢索從我們的服務器上的數據定期,當應用程序被暫停/不運行

  • 的唯一可靠的方式來實現這樣的行爲是實現遠程面向用戶的(推)通知框架在後端&應用程序。
    您可以在推送JSON有效負載中附加4kB(或5個用於VOIP的)數據,如果在握手機制中實施,則無需網絡獲取請求。
  • 您可以在Silent Remote Notifications評估使用,以增加內容更新用& 取少量內容機會主義,儘管它有一樣Background App Refresh
  • 你絕對可以改善的API,can take minutes due to long running SQL
  • 請記住,你需要有應用程序更新當用戶實際上火起來。評估實現一個吸引人的&平滑獲取內容屏幕,一旦所有數據被提取,轉換到實際屏幕。