概要
会社から、デバイスの位置を 2 時間ごとに確認できるアプリケーションのリリースを求められています。アプリは、TCP/IP ソケットを介してこれらの位置データをサーバーに送信し、これらのデータに応じて (同じ TCP/IP ソケットを介して) すぐに情報を受信します。したがって、アプリケーションを継続的にバックグラウンド モードで実行しようとしているわけではありません(実際、これは iOS で話題になっているようで、私のプロジェクトにも適していません)。
質問
信頼できるものにするために、これを達成するためのベストプラクティスは何ですか? だから、私は知りたいです:
- 私のアプリは中断されている (= 非アクティブ) ため、Apple はソケットを開いて位置情報を送信することを許可しています
didUpdateToLocation
か? - ソケットを介して送信/受信タスクを実行する必要がある時間はどれくらいですか?
- 実際のバックグラウンド タスクを作成し、
beginBackgroundTaskWithExpirationHandler
Cocoa で許可されている 10 分間を使用して送信/受信タスクを実行する必要がありますか? - 2 時間ごとに 10 分間のバックグラウンド タスクを人間の操作なしで (つまり、ユーザーがアプリを再度開く必要があるなど) 要求することは可能です (Apple によって許可されています)。
これまでに達成/発見したこと
- アプリが非アクティブなときにハンドラーを実行できるように、
location
キーを追加しました。Info.plist
didUpdateToLocation
- アプリケーションがフォアグラウンド (= アクティブ) のときに開いたソケットを介してデータを送受信できます。
backgroundTimeRemaining
いつdidUpdateToLocation
呼び出されるかを調べてみました。非常に大きな結果数が得られましたが、これは正常なようです。なぜなら、この時点でapplicationState
は ではなく にUIApplicationStateBackground
あるからUIApplicationStateActive
です。
これらの点は公式文書ではあまり明確ではなく、私の特定のケースに関連するトピックは見つかりませんでした。
ご協力いただきありがとうございます。