CoreLocationを使用してユーザーの位置を常に追跡する必要があるiPhoneアプリを作成しようとしています。startMonitoringSignificantLocationChangesを使用しているのは、バックグラウンドで更新され、大幅な変更があるたびに更新されるほど精度が重要ではないためです。
現在、場所を更新するためにWebサービスにHTTPリクエストを送信しています。これは、アプリを実行しているときに完全に機能します-位置データを保存しているMySQLデータベースで位置情報が更新されます。しかし、アプリがバックグラウンドに入ると、電話の右上隅に位置情報サービスのアイコンが表示されますまだ実行中ですが、戻ってデータベースを見ると、場所がまったく更新されませんでした。私はこれをテストするために、アプリを実行している状態とアプリをバックグラウンドで実行している状態で、街をドライブしました。
Appleのドキュメントから:
このサービスを実行したままにして、アプリケーションが後で一時停止または終了した場合、新しい位置データが到着すると、サービスはアプリケーションを自動的にウェイクアップします。ウェイクアップ時に、アプリケーションはバックグラウンドに置かれ、位置データを処理するために少し時間が与えられます。アプリケーションはバックグラウンドにあるため、最小限の作業を実行し、割り当てられた時間が経過する前にアプリケーションが戻るのを妨げる可能性のあるタスク(ネットワークのクエリなど)を回避する必要があります。そうでない場合、アプリケーションが終了する可能性があります。
この「位置データを処理するためのわずかな時間」は正確にどのくらいですか?また、ネットワークにクエリを実行することはお勧めしませんか、それともその時点でネットワークにクエリを実行することはできませんか?アプリがバックグラウンドにある場合でも、複数の異なるユーザーの場所を追跡するためのより良い方法はありますか?