これに関するドキュメントが見つかりません。アプリケーションがバックグラウンドの位置情報サービスを使用できる場合、リソースの使用量が多すぎるためにデバイスがタスクを停止する前に、アプリケーションは実際にどの程度の処理を行うことができますか?
たとえば、場所が変更された場合、新しい場所でサーバーに ping を送信したいと考えています。
よろしく:
ジョン
これに関するドキュメントが見つかりません。アプリケーションがバックグラウンドの位置情報サービスを使用できる場合、リソースの使用量が多すぎるためにデバイスがタスクを停止する前に、アプリケーションは実際にどの程度の処理を行うことができますか?
たとえば、場所が変更された場合、新しい場所でサーバーに ping を送信したいと考えています。
よろしく:
ジョン
アプリがバックグラウンドで位置情報の更新を取得する権限を持っている場合、タスクの実行に制限はありません。アプリは一時停止中にコードを実行できるため、任意のコードを実行できます(これは、ナビゲーション)。ただし、この要件を正当化するアプリ(スポーツ追跡アプリ、ナビゲーションアプリなど)でない限り、Appleはバックグラウンドのロケーション更新権限でアプリを承認しないことに注意してください。
位置情報の更新をバックグラウンドモードで使用しなくても、地域の監視または重要な位置の変更から位置情報の更新を取得できます。
だから今、トリッキーな部分が来ます。リージョンモニタリングまたは重要な位置情報サービスによってアプリがバックグラウンドモードから開始されたときに、ユーザーの位置情報のサーバー更新を実行するのに十分な時間がありますか?
この記事で示唆されているように、答えはイエスのようです
私はこれを試していませんが、コードから判断すると、これが機能しない理由はわかりません!
アプリのサポートされているバックグラウンド タスクを info.plist で宣言する必要があります。
情報プロパティ リストの下に、以下の形式で指定された配列を追加します。
情報プロパティ リスト (辞書) -> 必要なバックグラウンド モード (配列) (1 アイテム) -> アイテム 0 (文字列) - アプリが位置情報の更新を登録します
info.plist でこれらの設定を行った後、AppDelegate のバックグラウンド プロセスで実行するコードを実行できます。
- (void)applicationDidBecomeActive:(UIApplication *)application
{ /* アプリケーションが非アクティブである間に一時停止された (またはまだ開始されていない) タスクを再開します。アプリケーションが以前にバックグラウンドにあった場合は、必要に応じてユーザー インターフェイスを更新します。*/ self.locationManager = [[CLLocationManager alloc] init]; _locationManager.delegate = 自己;
[_locationManager stopMonitoringSignificantLocationChanges];
[_locationManager startUpdatingLocation];
}
詳細については、以下をご覧ください。