2017-10-17 164 views
0

我有一個用Swift編寫的應用程序,可以將統計數據上傳到我的服務器。我的問題很簡單,如下所示:什麼時候上傳我的統計信息的最佳時間?在應用程序退出前保存應用程序數據iOS

我想出的一種方法是,當應用程序退出時,本地保存所有統計數據。當應用程序將來打開時,我會上傳保存的統計數據並將其清除。

問題是applicationWillTerminate有時不會被調用,並且數據可能會丟失而不上傳。

那麼解決我的問題的最好方法是什麼?

謝謝。

+0

您是否有自己編寫的使用分析代碼?爲什麼不使用Firebase分析? – AlexWoe89

+0

@ AlexWoe89我被要求從我的應用程序獲取分析結果,將它們提交給特定的服務器。如果我可以使用Firebase,我會。 – krypton36

+0

我認爲當統計更新時,您應該實時將您的統計數據上傳到服務器。 – Zee

回答

0

保存您的數據在本地每當它生成。一旦啓動應用程序,發送它並清除本地緩存。您可以使用application:didFinishLaunchingWithOptions:來檢測啓動

它是一個很好的習慣來緩存您需要定期保持安全的信息,而不是一次全部保存。

+0

立即保存數據或在應用程序關閉後保存數據? – krypton36

+0

如果您等到應用程序關閉,則會將您的信息置於危險中(如果應用程序因任何原因在任何時候終止)。因此,當它在後臺線程中生成以避免UI塊時,立即保存它。然後,當您再次啓動您的應用程序或者您找到合適的時候,將其發送到服務器。您甚至可以定期發送,而無需用戶重新啓動應用程序。 – jvrmed

0

與@jvrmed類似,我建議您在任何時候想要記錄統計信息時都會將您的數據保存在本地。但是我建議當應用程序即將退出活動狀態時(即,當它是後臺時)將這些數據推送到您的服務器。

func applicationWillResignActive(_ application: UIApplication) { } 
+0

謝謝,但爲什麼我應該使用applicationWillResignActive推送我的數據?而不是didFinishLaunchingWithOptions? – krypton36

+2

@ krypton36'didFinishLaunching'僅在用戶重新啓動您的應用後纔會推送數據。使用'willResignActive'會在用戶退出應用程序時保存數據 - 比使用'didFinishLaunching'保存數據更快。此外,每當用戶退出時,都會觸發'willResignActive',而如果應用程序已經在內存中並且簡單地重新訪問,則'didFinishLaunching'不會觸發。 –