2016-10-30 50 views
4

我對iOS編程頗爲陌生,現在想要實現定期的後臺同步來同步我的服務器數據和客戶端數據。我想實現的目標與Androids SyncAdapter相媲美,您可以在其中定義一個時間間隔(例如每30分鐘),系統將在後臺自動觸發定義的任務。定期後臺同步

到目前爲止我無法找到Swift 3.0的這種機制,所以我需要問問somone是否對我有經驗或一些提示,我可以如何實現這一點。

我想要做什麼聽起來很簡單:

當應用程序啓動首次應用應該設置一個同步管理器,它會自動觸發一個後臺任務每次30分鐘。後臺任務負責同步服務器和客戶端數據(使用Alamofire)。

我該怎麼做?

回答

6

有一個叫BackgroundFetch在iOS功能,您可以從網絡

你可以設置一個minimumBackgroundFetchInterval成立

定期下載和處理少量的內容。

與上面提到的Android功能相反,這個間隔不能保證。

操作系統在黑匣子中進行一些啓發式操作。它會獎勵您使用「合理的」(對操作系統)CPU時間/功耗,並且經常由用戶使用。另一方面,你會因爲耗盡電池而受到懲罰,如果你的應用從未被使用過,則更糟。

請參見:Apple Documentation


另外,根據你的需要,你可以發佈Silent (push) Notification只要在服務器端的用戶數據的變化。靜默推送會在不通知用戶的情況下喚醒您的應用程序,因此您可以獲取數據並通過安排本地通知來通知用戶。

參見:Apple Documentation

+0

您受到的處罰是什麼意思? –

+0

@AkashRajput你會因爲獲得更少的時間而受到懲罰,即你的背景獲取次數會減少。 – shallowThought

1

你不行。 Apple不允許第三方應用程序具有這樣的常規背景時間。您需要提供另一種方法,例如在新內容可用時從您的服務器實施silent push notification

+0

WOW!你認真對待這個?這聽起來令人難以置信,因爲我沒有這樣的功能。我在谷歌上找到的'NSBackgroundActivityScheduler'怎麼樣,但在Swift 3.0中它不存在。 – Mulgard

+0

您可以從文檔 - https://developer.apple.com/reference/foundation/nsbackgroundactivityscheduler中看到 - 「NSBackgroundActivityScheduler」適用於MacOS,不適用於iOS。在iOS上,您需要使用後臺提取或服務器推送 – Paulw11