我正在構建一個位置跟蹤應用程序,它將本地用戶位置存儲並每隔x秒將它們發送到服務器。在後臺運行時每x秒重複執行一次任務
雖然應用程序在前臺,但我可以使用NSTimer安排服務器更新任務,但是當應用程序在後臺運行時,這是不可能的。
即使應用程序在後臺模式下運行,我如何每x秒重複一次任務?
我正在構建一個位置跟蹤應用程序,它將本地用戶位置存儲並每隔x秒將它們發送到服務器。在後臺運行時每x秒重複執行一次任務
雖然應用程序在前臺,但我可以使用NSTimer安排服務器更新任務,但是當應用程序在後臺運行時,這是不可能的。
即使應用程序在後臺模式下運行,我如何每x秒重複一次任務?
您不應該使用NSTimer
。您應該使用CLLocationManager
提供的功能。
使用CLLocationManager
時,您可以將屬性allowsBackgroundLocationUpdates
設置爲YES
。然後您需要將Info.plist中的UIBackgroundModes
密鑰設置爲YES
以獲得location
值。
現在您將能夠接收用戶位置的後臺更新。
startMonitoringSignificantLocationChanges
應該繼續在後臺調用。
幾個警告與背景的東西的話。 Apple在提交應用程序時非常重視這一點。如果他們認爲不需要後臺更新,他們會拒絕。同樣,如果你在後臺做的不是非常基本的東西,他們會拒絕它。
所以如果你想將用戶的背景位置同步到服務器,我不會在後臺執行此操作。相反,我會將用戶的背景位置存儲在NSUserDefaults
或核心數據或其他內容中,然後當應用程序再次變爲活動狀態時,使用背景位置執行服務器同步。
您可能更好地註冊後臺的重大位置更改,這意味着當用戶位置發生顯着變化時,您的應用程序將有少量時間來處理/發送它。
這可以使用apple docs輕鬆完成。
不,除非你欺騙iOS。 – zcui93