react-native-geolocation-service
react-native-geolocation-service
react-native-geolocation-service
iOS 및 안드로이드용 리액트 네이티브 위치 서비스입니다.
왜 이것을 사용하나요?
이 라이브러리는 react-native의 현재 구현인 Geolocation API의 안드로이드 위치 타임아웃 문제를 해결하기 위해 만들어졌습니다. Google은 안드로이드의 기본 프레임워크 위치 API보다 강력하게 권장하는 Google Play Service의 새로운 'FusedLocationProviderClient' API를 사용하여 이 문제를 해결하려고 노력합니다. 이는 요청 구성에 따라 자동으로 사용할 위치 프로바이더를 결정하고 요청 구성을 충족시키지 못하면 위치 모드를 변경하도록 안내합니다.
참고: 많은 안드로이드 기기에서 하드웨어/시스템 수준에서 GPS 문제가 있기 때문에 위치 요청이 여전히 타임아웃 될 수 있습니다. 자세한 내용은 FAQ를 참조하십시오.
설치
yarn
yarn add react-native-geolocation-service
npm
npm install react-native-geolocation-service
호환성
| RN 버전 | 패키지 버전 |
| ------- | ----------- |
| >=0.60 | >=3.0.0 |
| <0.60 | 2.0.0 |
| <0.57 | 1.1.0 |
설정
- docs/setup.md 참조
- 예제 프로젝트 확인
사용 방법
이 라이브러리는 RN의 Geolocation API를 대체하기 위해 만들어졌으므로 사용법은 매우 간단합니다. 그러나 추가적인 오류 상황도 처리해야합니다.
안드로이드의 경우이 라이브러리는 위치 권한이 이미 사용자에 의해 부여되었다고 가정하므로 위치 요청 전에 PermissionsAndroid를 사용하여 권한을 요청해야합니다.
...
import Geolocation from 'react-native-geolocation-service';
...
componentDidMount() {
if (hasLocationPermission) {
Geolocation.getCurrentPosition(
(position) => {
console.log(position);
},
(error) => {
// See error code charts below.
console.log(error.code, error.message);
},
{ enableHighAccuracy: true, timeout: 15000, maximumAge: 10000 }
);
}
}
API
async requestAuthorization(authorizationLevel) (iOS only)
authorizationLevel 매개 변수에 따라 위치 권한을 요청합니다. "whenInUse" 또는 "always" 중 하나 일 수 있습니다. 설정 중 plist 키를 구성해야합니다.
Promise가 해결되면 권한 상태를 반환합니다.
disabled
- 위치 서비스가 비활성화됨granted
- 권한이 부여 됨denied
- 권한이 거부 됨restricted
- 권한이 제한 됨
getCurrentPosition(successCallback, ?errorCallback, ?options)
- **successCallback**: 최신 위치 정보와 함께 호출됩니다.
- **errorCallback**: 오류가 발생 할 때마다 호출됩니다.
- **options**:
| 이름 | 유형 | 기본값 | 설명 |
| -------------------- | ------ | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| timeout | ms | 무한대 | 요청 시간 초과 |
| maximumAge | ms | 무한대 | 이전 위치가 캐시 될 기간 |
| accuracy | object | -- | {<br/> android: notion://www.notion.so/docs/accuracy.md#android,<br/> ios: notion://www.notion.so/docs/accuracy.md#ios<br/>}<br /><br /> 제공되지 않거나 잘못된 값으로 제공되면 enableHighAccuracy를 대신 사용합니다. |
| enableHighAccuracy | bool | false | 고정밀 모드 사용 |
| distanceFilter | m | 100 | 최소 이동 거리 (미터) |
| showLocationDialog | bool | true | 위치를 활성화 할 것인지 묻는지 여부 (안드로이드 전용) |
| forceRequestLocation | bool | false | 정확도 향상 대화 상자를 거부 한 후에도 위치 요청을 강제로 수행합니다 (안드로이드 전용) |
| forceLocationManager | bool | false | true로 설정하면 안드로이드의 기본 LocationManager API를 사용합니다 (안드로이드 전용) |
watchPosition(successCallback, ?errorCallback, ?options)
- **successCallback**: 최신 위치 정보와 함께 호출됩니다.
- **errorCallback**: 오류가 발생 할 때마다 호출됩니다.
- **options**:
| 이름 | 유형 | 기본값 | 설명 |
| -------------------------------- | ------ | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| accuracy | object | -- | {<br/> android: notion://www.notion.so/docs/accuracy.md#android,<br/> ios: notion://www.notion.so/docs/accuracy.md#ios<br/>}<br /><br /> 제공되지 않거나 잘못된 값으로 제공되면 enableHighAccuracy를 대신 사용합니다. |
| enableHighAccuracy | bool | false | 고정밀 모드 사용 |
| distanceFilter | m | 100 | 위치 업데이트 간 최소 이동 거리 (미터) |
| interval | ms | 10000 | 활성 위치 업데이트 간격 (안드로이드 전용) |
| fastestInterval | ms | 5000 | 최대 빈도율, 몇 가지 경우에는 간격보다 빠르게 위치 업데이트를 받을 수 있습니다 (예 : 다른 애플리케이션이 위치 업데이트를 트리거하는 경우) (안드로이드 전용) |
| showLocationDialog | bool | true | 위치를 활성화 할 것인지 묻는지 여부 (안드로이드 전용) |
| forceRequestLocation | bool | false | 정확도 향상 대화 상자를 거부 한 후에도 위치 요청을 강제로 수행합니다 (안드로이드 전용) |
| forceLocationManager | bool | false | true로 설정하면 안드로이드의 기본 LocationManager API를 사용합니다 (안드로이드 전용) |
| useSignificantChanges | bool | false | 배터리 효율적인 네이티브 중요한 변경 API를 사용하여 위치를 반환합니다. 장치가 중요한 거리가 초과되었음을 감지 할 때만 위치가 반환됩니다 (iOS 전용) |
| showsBackgroundLocationIndicator | bool | false | 이 설정은 iOS의 상태 표시 줄에 파란색 막대 또는 블루필을 활성화합니다. 앱이 백그라운드로 이동하면이 속성을 사용하여 위치 서비스가 사용 중임을 나타내도록 상태 표시 줄 모양을 변경합니다. 사용자는 표시기를 탭하여 앱으로 돌아갈 수 있습니다. (iOS 전용) |
clearWatch(watchId)
- watchId (
watchPosition
에서 반환 된 ID)
stopObserving()
기기 위치 변경 관찰을 중지합니다. 또한 이전에 등록된 모든 리스너를 제거합니다.
오류 코드
이름 | 코드 | 설명 |
---|---|---|
PERMISSION_DENIED | 1 | 위치 권한이 부여되지 않음 |
POSITION_UNAVAILABLE | 2 | 위치 제공자를 사용할 수 없음 |
TIMEOUT | 3 | 위치 요청이 시간 초과됨 |
PLAY_SERVICE_NOT_AVAILABLE | 4 | Google Play 서비스가 설치되어 있지 않거나 이전 버전입니다 (안드로이드 전용) |
SETTINGS_NOT_SATISFIED | 5 | 위치 서비스가 활성화되어 있지 않거나 위치 모드가 현재 요청에 적합하지 않습니다 (안드로이드 전용) |
INTERNAL_ERROR | -1 | 라이브러리가 어떤 이유로 충돌하거나 getCurrentActivity ()가 null을 반환했습니다 (안드로이드 전용) |
FAQ
-
위치 타임아웃이 여전히 발생합니까?
다음 단계를 시도해보십시오: (여기에서 가져옴)
- 전화를 껐다 켜십시오.
- GPS를 끄고 켜십시오.
- 전원 절약 모드, 배터리 관리 또는 제 3자 앱을 비롯한 모든 배터리 절약 설정을 비활성화하십시오.
- "AGPS 재설정"을 수행하십시오. App GPS Status & Toolbox를 설치 한 다음 해당 앱으로 이동하여 메뉴> 도구> A-GPS 상태 관리> 재설정
다른 기기에서 배터리 절약 설정 조정:
- HTC: 전화 설정> 배터리> 전원 절약 모드> 배터리 최적화> 앱 선택> 최적화하지 마십시오> 저장
- Huawei: Energy Settings를 Normal로 변경하고 앱을 "보호 된 앱"에 추가하십시오.
- LG Android 6 이상을 실행하는 경우: 설정> 배터리 및 전원 절약> 배터리 사용량> 최적화하지 않음> 모든 앱> 앱 선택> 최적화하지 마십시오.
- 모토로라 Android 6 이상을 실행하는 경우: 배터리> 오른쪽 상단 모서리 메뉴 선택> 배터리 최적화> 최적화하지 않음> 모든 앱> 앱 선택> 최적화하지 마십시오.
- OnePlus (OxygenOS 설정 사용) : 배터리> 배터리 최적화> "모든 앱"으로 전환> 앱 선택> 최적화하지 마십시오.
- 삼성: 배터리 설정에 액세스> 앱 전원 절약> 세부 정보> 앱 선택> 사용 안 함
- 소니 Android 6 이상을 실행하는 경우: 배터리> 오른쪽 상단 모서리에서 메뉴> 배터리 최적화> 앱> 앱 선택
- Xiaomi (MIUI OS) Android 6 이상을 실행하는 경우: 전화 설정> 기타 설정> 배터리 및 성능> 배터리 사용 관리> 앱> 앱 선택