2017-04-03 75 views
0

我必須在iOS中使用Swift 3製作應用程序,每隔3或5分鐘通過API發送用戶位置,而應用程序則是背景。我不知道哪個是最好的方法,或者是因爲蘋果嚴格的背景規則,甚至有可能。該位置必須非常精確,應用程序需要長時間運行,可能不會消耗太多電量。 如果不可能,在這種情況下知道哪種方法最好。非常感謝你。在iOS中使用背景位置更新的最佳方式(Swift)

+0

您可以獲取有關後臺任務的一些信息,並實現位置管理器,但它是在Objective-C。可能對你有用。 http://stackoverflow.com/questions/21440190/ios-startmonitoringsignificantlocationchanges-sometimes-breaks-monitoring – Aashish1aug

回答

11

是通過API將用戶的位置,每隔3分鐘或5分鐘,而 應用被轉到後臺

並沒有太大的意義。如果用戶在同一位置站立5分鐘會怎麼樣?您會多次在服務器上輸入相同的位置信息?如果您可以在用戶的​​位置更改後用用戶位置更新您的服務器,是不是更好,而不是更新位置?

因此,使用locationManager,設置它的委託,並開始通過API更新您的服務器時,用戶位置更改,而不是定期間隔。

我不知道這是做到這一點的最好辦法,或者如果它甚至 可能的,因爲蘋果的嚴格背景規則

它絕對有可能的。你所要做的就是在Xcode中選擇Location Updates的功能。

現在最好的方法是什麼?它是一個相對術語。這取決於你的應用將如何使用用戶位置信息。如果您不必要地開始觀察用戶的位置,您將不必要地耗費用戶iPhone電池,因此蘋果會拒絕您的應用程序。

蘋果進程的應用程序如何使用位置更新功能?

它很簡單。位置更新功能與成本相關,如果您的應用在後臺準確觀察用戶位置更新,則會耗盡設備電池。因爲它的代價很大,所以蘋果希望你只有在你的應用程序需要時才使用它。例如:如果您正在製作一個地圖應用程序或應用程序,用於跟蹤用戶的位置變化,然後在地圖上繪製地圖或其他內容,並讓用戶瞭解他的移動情況(如正在運行的應用程序),那麼使用它絕對可以使用位置更新功能,因爲您正在爲用戶增加價值。

如果你試圖思考令人毛骨悚然!並嘗試使用位置更新只是爲了讓您的應用程序保持活躍狀態​​,並且在後臺應用程序中執行與位置更新無關的任何操作都會拒絕您的應用程序。就像少數開發人員試圖超過智能並使用位置更新來保持其應用與服務器同步或定期上傳/下載文件或類似與位置更新無關的內容一樣,蘋果將拒絕此類應用。

所以沒有辦法令人毛骨悚然?並使用位置更新來做一些與位置本身無關的有用信息?

是的,你可以。蘋果非常慷慨,可以做到這一點。例如:當您從一個位置移動到另一個位置時,Dropbox會在後臺上傳您的圖像。它所做的只是尋找用戶位置更改,一旦位置更改委託觸發器,使用後臺會話創建上傳任務並開始上傳文件。

如何做到這一點?

您仍然可以使用位置管理器。所有您需要做的是使用

locationManager.startMonitoringSignificantLocationChanges() 

這將觸發您的位置代表時,纔會有一個顯著的位置變化:)

在另一方面,如果你的應用程序實際上是利用用戶的位置和使用

startLocationUpdates() 

確保您不消耗不必要的位置更新。確保你根據你的應用需求正確放置距離過濾器。不貪和不必要的浪費不iOS的資源和蘋果將很樂意,也不會麻煩你:)

結論:

如果您的應用程序實際上是利用位置,並增加了一些價值,以用戶(如地圖應用程序/正在運行的應用程序/旅行應用程序),然後使用startLocationUpdates並正確使用距離過濾器(可選,但很好)。

如果您正在令人毛骨悚然始終使用startMonitoringSignificantLocationChanges其他應用必然要遭到拒絕

+0

非常感謝您的回答。事實上,我的僱主告訴我要每X分鐘監控一次,但如你所說,這不是一個好的選擇。我會盡力按照你說的說服他:) –

+0

@ luigi-piccoli:列梅以簡單的話結束。如果您的應用程序實際上使用了位置併爲用戶添加了一些值(如地圖應用程序),那麼請使用startLocationUpdates並正確使用距離過濾器(可選,但很好)。如果你是令人毛骨悚然,總是使用startMonitoringSignificantLocationChanges,否則應用程序將被拒絕。希望清楚:)。定期監控用戶位置不是一種選擇,因爲即使您選擇了後臺位置更新功能,也無法保證每分鐘觸發一次,如果用戶將他的手機放在桌面上並始終不移動,該怎麼辦? –

+0

這就是爲什麼蘋果提供了委託模式: ) –