실제 시나리오에 맞게 위치 사용 최적화

이 섹션에서는 일반적인 위치 수집 시나리오를 설명하고 Geofencing 및 Fused Location Provider API를 최적으로 사용하는 방법을 추천합니다.

사용자에게 표시되는 업데이트 또는 포그라운드 업데이트

예: 지연 시간이 매우 적으면서 자주 정확하게 업데이트를 해야 하는 매핑 앱. 모든 업데이트가 포그라운드에서 발생합니다. 사용자가 활동을 시작하면 위치 데이터가 사용되고 잠시 후 활동이 중지됩니다.

PRIORITY_HIGH_ACCURACY 또는 PRIORITY_BALANCED_POWER_ACCURACY 값과 함께 setPriority() 메서드를 사용합니다.

setIntervalMillis() 메서드에 지정된 간격은 사용 사례에 따라 다릅니다. 실시간 시나리오의 경우 값을 몇 초로 설정하고, 그렇지 않으면 몇 분으로 제한합니다 (배터리 사용량을 최소화하려면 약 2분 이상이 권장됨).

기기의 위치 확인

예: 날씨 앱에서 기기의 위치를 알고 싶어 합니다.

가장 최근에 사용 가능한 위치를 반환하는 getLastLocation() 메서드를 사용합니다 (드물게 null일 수 있음). 이 메서드는 위치를 가져오는 간단한 방법을 제공하며 위치 업데이트를 적극적으로 요청하는 것과 관련된 비용이 발생하지 않습니다. getLastLocation()에서 반환된 위치가 상당히 최신 상태인 경우 true를 반환하는 isLocationAvailable() 메서드와 함께 사용합니다.

사용자가 특정 위치에 있을 때 업데이트 시작

예: 사용자가 직장, 집 또는 다른 위치에서 특정 거리 내에 있을 때 업데이트 요청

통합 위치 정보 제공자 업데이트와 함께 지오펜싱을 사용합니다. 앱이 지오펜스 진입 트리거를 수신하면 업데이트를 요청하고 앱이 지오펜스 이탈 트리거를 수신하면 업데이트를 삭제합니다. 이렇게 하면 사용자가 정의된 영역에 진입한 경우에만 앱이 더 세분화된 위치 업데이트를 가져옵니다.

이 시나리오의 일반적인 워크플로는 지오펜싱 진입 시 알림을 띄우고, 사용자가 알림을 탭할 때 업데이트를 요청하는 코드가 포함된 활동을 실행하는 것입니다.

사용자 활동 상태에 따라 업데이트 시작

예: 사용자가 운전 중이거나 자전거를 타고 있을 때만 업데이트를 요청합니다.

통합 위치 정보 제공자 업데이트와 함께 활동 감지 API를 사용합니다. 타겟팅된 활동이 감지되면 업데이트를 요청하고 사용자가 해당 활동을 중지하면 업데이트를 삭제합니다.

이 사용 사례의 일반적인 워크플로에는 감지된 활동에 대한 알림을 표시하고, 사용자가 알림을 탭할 때 업데이트를 요청하는 코드가 포함된 활동을 실행하는 것이 포함될 수 있습니다.

지역과 연결된 장기 실행 백그라운드 위치 업데이트

예: 사용자는 기기가 소매업체 근처에 있을 때 알림을 받으려고 합니다.

이는 지오펜싱의 모범적인 사용 사례입니다. 사용 사례에 백그라운드 위치 정보가 포함될 가능성이 높으므로 addGeofences(GeofencingRequest, PendingIntent) 메서드를 사용합니다.

다음과 같은 구성 옵션을 설정해야 합니다.

  • 체류 전환을 추적하는 경우 약 5분 이하의 값을 전달하는 setLoiteringDelay() 메서드를 사용합니다.

  • setNotificationResponsiveness()를 사용하여 약 5분의 값을 전달합니다. 그러나 앱의 응답이 더 지연되어도 괜찮다면 약 10분에 상응하는 값을 사용해도 됩니다.

앱은 한 번에 최대 100개의 지오펜싱만 등록할 수 있습니다. 앱이 많은 수의 소매업체 옵션을 추적하려는 사용 사례에서는 앱이 큰 지오펜싱 (도시 수준)을 등록하고 큰 지오펜싱 내의 매장에 대해 작은 지오펜싱 (도시 내 위치)을 동적으로 등록할 수 있습니다. 사용자가 큰 지오펜스에 진입하면 더 작은 지오펜스를 추가하고, 사용자가 큰 지오펜스를 벗어나면 더 작은 지오펜스를 삭제하고 새 영역의 지오펜스를 다시 등록합니다.

가시적 앱 구성요소가 없는 장기 실행 백그라운드 위치 업데이트

예: 위치를 수동적으로 추적하는 앱

setPriority() 메서드를 PRIORITY_PASSIVE 옵션과 함께 사용하면 배터리가 거의 소모되지 않으므로 가능하면 이 메서드를 사용합니다. PRIORITY_PASSIVE를 사용할 수 없는 경우 PRIORITY_BALANCED_POWER_ACCURACY 또는 PRIORITY_LOW_POWER를 사용하되, 지속적인 백그라운드 작업에는 PRIORITY_HIGH_ACCURACY를 사용하지 마세요. 이 옵션은 배터리를 상당히 많이 소모하기 때문입니다.

더 많은 위치 데이터가 필요한 경우 setIntervalMillis()에 전달하는 값보다 작은 값을 전달하는 setMinUpdateIntervalMillis() 메서드를 호출하여 수동 위치를 사용합니다. PRIORITY_PASSIVE 옵션과 결합하면 수동 위치는 추가 비용 없이 다른 앱에서 계산한 위치를 기회에 따라 제공할 수 있습니다.

setMaxUpdateDelayMillis() 메서드를 사용하여 지연 시간을 추가하여 빈도를 조정합니다. 예를 들어 setIntervalMillis() 메서드를 약 10분 값으로 사용하는 경우 30~60분 값으로 setMaxUpdateDelayMillis()를 호출하는 것이 좋습니다. 이러한 옵션을 사용하면 앱에서 위치가 약 10분마다 연산되지만 앱은 30~60분마다만 절전 모드에서 해제되며 일부 위치 데이터는 일괄 업데이트로 제공됩니다. 이 접근 방식은 지연 시간을 늘리는 대신 더 많은 데이터를 사용할 수 있고 배터리 성능을 개선합니다.

사용자가 다른 앱과 상호작용하는 동안 높은 정확성으로 자주 업데이트

예: 사용자가 화면을 끄거나 다른 앱을 열 때 계속 작동하는 내비게이션 또는 피트니스 앱

포그라운드 서비스를 사용합니다. 앱이 사용자를 대신하여 비용이 많이 드는 작업을 수행할 가능성이 있는 경우 사용자에게 해당 작업을 알리는 것이 권장사항입니다. 포그라운드 서비스는 지속적인 알림이 필요합니다. 자세한 내용은 알림 개요를 참고하세요.