πŸ“¦ ionic-team / capacitor-geolocation

The Geolocation API provides simple methods for getting and tracking the current position of the device using GPS, along with altitude, heading, and speed information if available.

β˜… 10 stars β‘‚ 12 forks πŸ‘ 10 watching βš–οΈ MIT License
πŸ“₯ Clone https://github.com/ionic-team/capacitor-geolocation.git
HTTPS git clone https://github.com/ionic-team/capacitor-geolocation.git
SSH git clone git@github.com:ionic-team/capacitor-geolocation.git
CLI gh repo clone ionic-team/capacitor-geolocation
AndrΓ© Destro AndrΓ© Destro feat(ci): add publish-pod job to invoke CocoaPods publish workflow (#71) f9a4eca 4 days ago πŸ“ History
πŸ“‚ main View all commits β†’
πŸ“ .github
πŸ“ packages
πŸ“„ .gitignore
πŸ“„ CHANGELOG.md
πŸ“„ CONTRIBUTING.md
πŸ“„ LICENSE
πŸ“„ package.json
πŸ“„ README.md
πŸ“„ README.md

@capacitor/geolocation

The Geolocation API provides simple methods for getting and tracking the current position of the device using GPS, along with altitude, heading, and speed information if available.

Install

npm install @capacitor/geolocation
npx cap sync

iOS

Apple requires privacy descriptions to be specified in Info.plist for location information:

  • NSLocationAlwaysAndWhenInUseUsageDescription (Privacy - Location Always and When In Use Usage Description)
  • NSLocationWhenInUseUsageDescription (Privacy - Location When In Use Usage Description)
[!NOTE]
This Capacitor plugin does not support background geolocation directly. However, it relies on
ion-ios-geolocation, which can report
location in the background. As a result, Apple requires you to include a
NSLocationAlwaysAndWhenInUseUsageDescription entry in your Info.plist. Since this permission
prompt won’t appear to users, you can safely use the same description string as for
NSLocationWhenInUseUsageDescription.

Read about Configuring Info.plist in the iOS Guide for more information on setting iOS permissions in Xcode

Android

This plugin requires the following permissions be added to your AndroidManifest.xml:

<!-- Geolocation Plugin -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-feature android:name="android.hardware.location.gps" />

The first two permissions ask for location data, both fine and coarse, and the last line is optional but necessary if your app requires GPS to function. You may leave it out, though keep in mind that this may mean your app is installed on devices lacking GPS hardware.

Read about Setting Permissions in the Android Guide for more information on setting Android permissions.

API

For list of error codes, see Errors

getCurrentPosition(...)

getCurrentPosition(options?: PositionOptions | undefined) => Promise<Position>

Get the current GPS location of the device

ParamType
optionsPositionOptions
Returns: Promise<Position>

Since: 1.0.0


watchPosition(...)

watchPosition(options: PositionOptions, callback: WatchPositionCallback) => Promise<CallbackID>

Set up a watch for location changes. Note that watching for location changes can consume a large amount of energy. Be smart about listening only when you need to.

ParamType
optionsPositionOptions
callbackWatchPositionCallback
Returns: Promise<string>

Since: 1.0.0


clearWatch(...)

clearWatch(options: ClearWatchOptions) => Promise<void>

Clear a given watch

ParamType
optionsClearWatchOptions
Since: 1.0.0


checkPermissions()

checkPermissions() => Promise<PermissionStatus>

Check location permissions. Will throw if system location services are disabled.

Returns: Promise<PermissionStatus>

Since: 1.0.0


requestPermissions(...)

requestPermissions(permissions?: GeolocationPluginPermissions | undefined) => Promise<PermissionStatus>

Request location permissions. Will throw if system location services are disabled.

Not available on web.

ParamType
permissionsGeolocationPluginPermissions
Returns: Promise<PermissionStatus>

Since: 1.0.0


Interfaces

Position

PropTypeDescriptionSince
timestampnumberCreation timestamp for coords1.0.0
coords{ latitude: number; longitude: number; accuracy: number; altitudeAccuracy: number \null; altitude: number \null; speed: number \null; heading: number \null; }The GPS coordinates along with the accuracy of the data1.0.0

PositionOptions

PropTypeDescriptionDefaultSince
enableHighAccuracybooleanHigh accuracy mode (such as GPS, if available) On Android 12+ devices it will be ignored if users didn't grant ACCESSFINELOCATION permissions (can be checked with location alias).false1.0.0
timeoutnumberThe maximum wait time in milliseconds for location updates.100001.0.0
maximumAgenumberThe maximum age in milliseconds of a possible cached position that is acceptable to return01.0.0
minimumUpdateIntervalnumberThe minimum update interval for watchPosition. Not to be confused with interval. If location updates are available faster than this interval then an update will only occur if the minimum update interval has expired since the last location update. This parameter is only available for Android. It has no effect on iOS or Web platforms.50006.1.0
intervalnumberDesired interval in milliseconds to receive location updates in watchPosition. For very low values of interval (a couple seconds or less), the platform may not guarantee timely location updates - they may take longer than specified. The platform may also be able to provide location updates faster than interval. You may use minimumUpdateInterval to control that behavior. For backwards compatiblity with version 7.1.x, if no value is passed, the default value of this parameter is that of timeout. This parameter is only available for Android. It has no effect on iOS or Web platforms.timeout8.0.0
enableLocationFallbackbooleanWhether to fall back to the Android framework's LocationManager in case Google Play Service's location settings checks fail. This can happen for multiple reasons - e.g. device has no Play Services or device has no network connection (Airplane Mode) If set to false, failures are propagated to the caller. Note that LocationManager may not be as effective as Google Play Services implementation. If the device's in airplane mode, only the GPS provider is used, which may take longer to return a location, depending on GPS signal. This means that to receive location in such circumstances, you may need to provide a higher timeout. This parameter is only available for Android. It has no effect on iOS or Web platforms.true8.0.0

ClearWatchOptions

PropType
idCallbackID

PermissionStatus

PropTypeDescriptionSince
locationPermissionStatePermission state for location alias. On Android it requests/checks both ACCESSCOARSELOCATION and ACCESSFINELOCATION permissions. On iOS and web it requests/checks location permission.1.0.0
coarseLocationPermissionStatePermission state for coarseLocation alias. On Android it requests/checks ACCESSCOARSELOCATION. On Android 12+, users can choose between Approximate location (ACCESSCOARSELOCATION) or Precise location (ACCESSFINELOCATION), so this alias can be used if the app doesn't need high accuracy. On iOS and web it will have the same value as location alias.1.2.0

GeolocationPluginPermissions

PropType
permissionsGeolocationPermissionType[]

Type Aliases

WatchPositionCallback

(position: Position | null, err?: any): void

CallbackID

string

PermissionState

'prompt' | 'prompt-with-rationale' | 'granted' | 'denied'

GeolocationPermissionType

'location' | 'coarseLocation'

Errors

The plugin returns specific errors with specific codes on native Android and iOS. Web does not follow this standard for errors.

The following table list all the plugin errors:

Error codePlatform(s)Message
OS-PLUG-GLOC-0002Android, iOSThere was en error trying to obtain the location.
OS-PLUG-GLOC-0003Android, iOSLocation permission request was denied.
OS-PLUG-GLOC-0004iOSThe 'getCurrentPosition' input parameters aren't valid.
OS-PLUG-GLOC-0005iOSThe 'watchPosition' input parameters aren't valid.
OS-PLUG-GLOC-0006iOSThe 'clearWatch' input parameters aren't valid.
OS-PLUG-GLOC-0007Android, iOSLocation services are not enabled.
OS-PLUG-GLOC-0008iOSApplication's use of location services was restricted.
OS-PLUG-GLOC-0009AndroidRequest to enable location was denied.
OS-PLUG-GLOC-0010Android, iOSCould not obtain location in time. Try with a higher timeout.
OS-PLUG-GLOC-0011AndroidTimeout needs to be a positive value.
OS-PLUG-GLOC-0012AndroidWatchId not found.
OS-PLUG-GLOC-0013AndroidWatchId needs to be provided.
OS-PLUG-GLOC-0014AndroidGoogle Play Services error user resolvable.
OS-PLUG-GLOC-0015AndroidGoogle Play Services error.
OS-PLUG-GLOC-0016AndroidLocation settings error.
OS-PLUG-GLOC-0017AndroidUnable to retrieve location because device has both Network and Location turned off.