2015-12-11 29 views
0

我正在尋找一個很好的方法來讓我的應用程序「upToDate」。這些是我的要求:如何將我的應用程序「最新」 - 後臺獲取?

我有一個RESTful Webservice,爲不同的用戶提供任務。每個用戶都有一個iOS應用程序,當服務器/服務爲該用戶分配任務時應該自動更新。

因此,第一個虐待創建了一個手動「同步」按鈕,它檢查新的任務。用Alamofire獲取數據,並更新UI。

但是,如果有新任務,我的目標會自動同步。

所以,生病的猜測有兩種不同的方式來解決:

1.後臺取(用的NSTimer?)每xx分鐘,並檢查是否有新的任務。

這裏檢查教程後: http://www.raywenderlich.com/92428/background-modes-ios-swift-tutorial我不知道,如果後臺抓取是爲了解決一個好辦法。在這種情況下,應用程序使用調度程序來檢查一次新的更新,而不是每隔xx分鐘。

所以在我的情況下,我將創建一個AppDelegate中(也許在applicationDidEnterBackground)一個NSTimer並檢查新數據每隔二十分鐘(不過當有已經過期3天沒有任何新的任務,這將是不必要的電池消耗,或?)

2.使用推送通知。

我的另一個想法是使用推送通知,所以當有新任務時,發送推送通知和手動啓動同步。在我看來,會使用更少的電池,因爲他只會在有新任務時開始同步。

有關使用後臺服務

這樣就OK了Generaly問題,如果用戶完成任務,一些數據應該會自動上傳到服務器。通常不會有問題,手動同步檢查是否需要上傳。但是,如果在沒有互聯網連接的情況下(如果在上傳之前檢查是否存在)並且用戶不按「手動同步」。

所以我寧願檢查我的「後臺服務」,如果生病了互聯網連接,如果是的話 - 開始上傳一些數據。

我不知道這不是一個具體的問題,但我認爲有很多用戶具有相同的要求,如果有人能夠幫助我以最好和實用的方式解決問題,最好的辦法是什麼。

在此先感謝!

回答

1

後臺更新聽起來很美妙,直到你意識到Apple嚴重扼殺它們:你可以要求儘可能頻繁地更新,但是iOS根據用戶打開你的應用的頻率以及他們這樣做的時間來決定該值的實際含義。 Apple認爲後臺更新應該在用戶打開應用程序之前發生的事情,以便最新的內容就在那裏,而不是在後臺運行。

您的推送通知解決方案是更好的解決方案,特別是在您使用CloudKit訂閱記錄更改事件時使用CKSubscriptionCKNotificationInfo。如果你這樣做,你會在你的應用中自動獲得推送消息,這樣你就可以在很少的工作中得到你想要的東西。 You can read my tutorial for more information on subscribing to CloudKit to get push messages.

+0

感謝您的回答!我需要使用CloudKit嗎?它是一個私人服務器,我想在那裏安裝Notification Service(它是一個Laravel REST服務) - 之前從未使用通知。所以你更喜歡在這種情況下使用通知,並在收到我的Notifcation後更新我的數據?也許你有更多關於上傳的第二個問題嗎?在我的情況下,它可能高達10兆字節的數據應該在後臺上傳,當病得到互聯網連接。 – derdida

+0

你不需要*使用CloudKit,但是自己與APNS進行通信需要一點研究 - 蘋果公司並沒有讓它變得很容易,即使有一些圖書館在最糟糕的情況下仍然順利謹慎工作以確保您正確使用該服務。 – TwoStraws

+0

好的alreay檢查了蘋果關於使用推送通知從我自己的服務器的信息。所以生病猜測這是我第一次嘗試解決這些要求。 Laravel 5有多個模塊可以處理來自我的REST服務的推送通知,因此看起來很實用,可以爲我解決這個問題。感謝您指出我的方向! – derdida

相關問題