[React Native] 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.602.0.0
<0.571.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 | – | {
    Β Β Β android: notion://www.notion.so/docs/accuracy.md#android,
    Β Β Β ios: notion://www.notion.so/docs/accuracy.md#ios
    }

    μ œκ³΅λ˜μ§€ μ•Šκ±°λ‚˜ 잘λͺ»λœ κ°’μœΌλ‘œ 제곡되면 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 | – | {
    Β Β Β android: notion://www.notion.so/docs/accuracy.md#android,
    Β Β Β ios: notion://www.notion.so/docs/accuracy.md#ios
    }

    μ œκ³΅λ˜μ§€ μ•Šκ±°λ‚˜ 잘λͺ»λœ κ°’μœΌλ‘œ 제곡되면 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_DENIED1μœ„μΉ˜ κΆŒν•œμ΄ λΆ€μ—¬λ˜μ§€ μ•ŠμŒ
POSITION_UNAVAILABLE2μœ„μΉ˜ 제곡자λ₯Ό μ‚¬μš©ν•  수 μ—†μŒ
TIMEOUT3μœ„μΉ˜ μš”μ²­μ΄ μ‹œκ°„ 초과됨
PLAY_SERVICE_NOT_AVAILABLE4Google Play μ„œλΉ„μŠ€κ°€ μ„€μΉ˜λ˜μ–΄ μžˆμ§€ μ•Šκ±°λ‚˜ 이전 λ²„μ „μž…λ‹ˆλ‹€ (μ•ˆλ“œλ‘œμ΄λ“œ μ „μš©)
SETTINGS_NOT_SATISFIED5μœ„μΉ˜ μ„œλΉ„μŠ€κ°€ ν™œμ„±ν™”λ˜μ–΄ μžˆμ§€ μ•Šκ±°λ‚˜ μœ„μΉ˜ λͺ¨λ“œκ°€ ν˜„μž¬ μš”μ²­μ— μ ν•©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ (μ•ˆλ“œλ‘œμ΄λ“œ μ „μš©)
INTERNAL_ERROR-1λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μ–΄λ–€ 이유둜 μΆ©λŒν•˜κ±°λ‚˜ getCurrentActivity ()κ°€ null을 λ°˜ν™˜ν–ˆμŠ΅λ‹ˆλ‹€ (μ•ˆλ“œλ‘œμ΄λ“œ μ „μš©)

FAQ

  1. μœ„μΉ˜ νƒ€μž„μ•„μ›ƒμ΄ μ—¬μ „νžˆ λ°œμƒν•©λ‹ˆκΉŒ?

    λ‹€μŒ 단계λ₯Ό μ‹œλ„ν•΄λ³΄μ‹­μ‹œμ˜€: (μ—¬κΈ°μ—μ„œ κ°€μ Έμ˜΄)

    • μ „ν™”λ₯Ό 껐닀 μΌœμ‹­μ‹œμ˜€.
    • 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 이상을 μ‹€ν–‰ν•˜λŠ” 경우: μ „ν™” μ„€μ •> 기타 μ„€μ •> 배터리 및 μ„±λŠ₯> 배터리 μ‚¬μš© 관리> μ•±> μ•± 선택