IOSアプリのジオフェンシングに関する多くのチュートリアルを読みました(つまり、 here )が、iOSがアプリを閉じたときにiOSがアプリ固有の位置データを処理できるかどうかについて言及していません。
たとえば、アプリがバックグラウンドにある場合、これらのサービスは(正しくコーディングされていれば)維持されますが、ユーザーがホームボタンをダブルタップしてアプリを閉じるとどうなりますか?位置データはまだ取得できますか?
Apple Documentation によると、リージョンの使用による境界交差の監視セクション:
IOSでは、ロケーションマネージャーに登録するリージョンは、アプリケーションの起動間で保持されます。 iOSアプリの実行中にリージョンの交差が発生した場合、システムはイベントを処理できるようにバックグラウンドで自動的にウェイクアップ(または再起動)します。再起動すると、以前に構成したすべてのリージョンが、作成するロケーションマネージャーオブジェクトのmonitoredRegionsプロパティで使用可能になります。
そのため、システムの場所が(設定に応じて)目的の地域への入場/退場を検出すると、アプリケーションが起動(または再起動)します。したがって、これはもちろんアプリが実行されていない場合でも同様です。アプリケーションが再起動されると、オプション辞書のUIApplicationLaunchOptionsLocationKey
キーが渡されるので、アプリケーションデリゲートで正しく処理する必要があります。詳細については、以下のドキュメントリンクを参照してください。
-startMonitoringForRegion:desiredAccuracy:
メソッドはiOS 6では非推奨になっているため、使用しないでください。代わりに-startMonitoringForRegion
を使用してください。
ロケーションイベントに続いてアプリが再起動されたときの処理方法を知るには、ドキュメントを参照してください here 、表示される情報は非推奨のメソッドの議論にありますが、それでも関連するはずです= Apple古いメソッドを非推奨にしたときに、この情報を新しいメソッドに移行するのを忘れていました。それについてバグを報告しました。
[〜#〜] update [〜#〜]
Appleは、バグレポートに続いてCLLocationManagerのドキュメントを更新しました。ドキュメントでは、終了後にアプリを起動する場所としない場所を指定しています。 バックグラウンドでの位置情報サービスの使用 を参照してください
ロケーション更新の形式によっては、アプリをバックグラウンドで実行する必要がある場合と、そうでない場合があります。 「一定の」位置情報の更新が必要な場合は、アプリをバックグラウンドで実行する必要があります。重要な変更のみが必要な場合(ドキュメントはそれほど明確ではありませんが、地域の監視でも機能すると思います)、アプリが終了した場合は再起動されます:
このサービスを開始し、その後アプリケーションが終了した場合、新しいイベントが到着すると、システムは自動的にアプリケーションをバックグラウンドで再起動します...
( CLLocationManager docs )から
リージョンモニタリング機能を使用すると、通常ローカル通知を作成することで、閉じられた場合でも何らかの方法でアプリを再開できます。この方法では、-applicationDidFinishLaunchingWithOptions: