코어 위치를 사용하여 항상 사용자의 위치를 추적해야하는 iPhone 앱을 제작하려고합니다. 나는 startMonitoringSignificantLocationChanges을 사용하여 백그라운드에서 업데이트하고 중요한 변경 사항이있을 때마다 업데이트되는 정확성만큼 중요하지 않기 때문에.iOS 앱에서 온라인 백그라운드로 위치를 업데이트하는 방법은 무엇입니까?
현재 웹 서비스에 대한 HTTP 요청을 만들어 위치를 업데이트합니다. 이 앱을 실행할 때 완벽하게 작동합니다. 위치 정보가 MySQL 데이터베이스에 업데이트되어 위치 데이터가 저장됩니다.하지만 앱이 백그라운드로 들어올 때 휴대 전화의 오른쪽 상단에 위치 서비스 아이콘이 표시됩니다. 아직 실행 중이지만 데이터베이스로 돌아가서 내 위치를 전혀 업데이트하지 않았습니다. 나는 마을을 가로 지르는 운전, 앱을 실행하는 한 가지 방법, 백그라운드에서 앱을 사용하는 한 가지 방법으로이 사실을 테스트했습니다. 애플의 문서에서
: 새로운 위치 데이터가 도착하면이 서비스 실행을 떠나 응용 프로그램이 이후 중단 또는 종료 된 경우
는 서비스가 자동으로 응용 프로그램을 깨어. 웨이크 업 (wake-up) 시간에 응용 프로그램이 백그라운드로 들어가고 위치 데이터를 처리하는 데 약간의 시간이 소요됩니다. 응용 프로그램이 백그라운드에 있기 때문에 최소한의 작업 만 수행하고 할당 된 시간이 만료되기 전에 반환하지 못하는 작업 (예 : 네트워크 쿼리)을 피하십시오. 그렇지 않으면 신청서가 종료 될 수 있습니다.
정확히 "위치 데이터를 처리하는 데 소량의 시간"이 얼마나 걸립니까? 그리고 네트워크를 쿼리하는 것이 권장되지 않습니까? 아니면 그 시간에 네트워크를 쿼리 할 수 없습니까? 앱이 백그라운드에 있어도 여러 다른 사용자의 위치를 추적하는 더 좋은 방법이 있습니까?
굉장합니다. 이것은 효과가있다. 지금 조정하고 테스트하면 ... – unsunghero
위대한 일을했습니다. 빠른 질문 - 어떻게 백그라운드에서 실행할 코드 블록을 결정합니까? 백그라운드 작업이 시작된 전체 기능일까요? – unsunghero
백그라운드 작업을 시작할 때 기본적으로 시스템에 실행하려는 작업 (이 경우 HTTP 요청)이 있음을 알립니다. 시스템은 당신이 UIBackgroundTaskIdentifier를 제공하는 이유 때문에 당신이 작업 시작과 끝 사이에서 무엇을하는지 알지 못합니다. 그래서 당신은 작업이 끝났을 때 다시보고 할 수 있습니다. UIBackgroundTaskIdentifier를 로컬 변수로 선언하기 때문에 예제 코드가 약간 명확하지 않을 수 있습니다. 오히려 요청이 끝나고 endBackgroundTask :로 전달할 때 액세스 할 수있는 인스턴스 변수 여야합니다. –