@capacitor/geolocation 7.1.5-dev.8 → 7.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CapacitorGeolocation.podspec +2 -2
- package/Package.swift +2 -2
- package/README.md +7 -9
- package/android/build.gradle +4 -4
- package/android/src/main/kotlin/com/capacitorjs/plugins/geolocation/GeolocationErrors.kt +0 -5
- package/android/src/main/kotlin/com/capacitorjs/plugins/geolocation/GeolocationPlugin.kt +8 -14
- package/dist/docs.json +0 -16
- package/dist/esm/definitions.d.ts +0 -14
- package/dist/esm/definitions.js.map +1 -1
- package/ios/Sources/GeolocationPlugin/GeolocationCallbackManager.swift +0 -9
- package/ios/Sources/GeolocationPlugin/GeolocationConstants.swift +0 -1
- package/ios/Sources/GeolocationPlugin/GeolocationError.swift +1 -4
- package/ios/Sources/GeolocationPlugin/GeolocationPlugin.swift +6 -19
- package/package.json +3 -3
|
@@ -11,8 +11,8 @@ Pod::Spec.new do |s|
|
|
|
11
11
|
s.author = package['author']
|
|
12
12
|
s.source = { :git => package['repository']['url'], :tag => s.version.to_s }
|
|
13
13
|
s.source_files = 'ios/Sources/**/*.{swift,h,m,c,cc,mm,cpp}'
|
|
14
|
-
s.ios.deployment_target = '
|
|
14
|
+
s.ios.deployment_target = '14.0'
|
|
15
15
|
s.dependency 'Capacitor'
|
|
16
|
-
s.dependency 'IONGeolocationLib', spec='
|
|
16
|
+
s.dependency 'IONGeolocationLib', spec='1.0.1'
|
|
17
17
|
s.swift_version = '5.1'
|
|
18
18
|
end
|
package/Package.swift
CHANGED
|
@@ -3,7 +3,7 @@ import PackageDescription
|
|
|
3
3
|
|
|
4
4
|
let package = Package(
|
|
5
5
|
name: "CapacitorGeolocation",
|
|
6
|
-
platforms: [.iOS(.
|
|
6
|
+
platforms: [.iOS(.v14)],
|
|
7
7
|
products: [
|
|
8
8
|
.library(
|
|
9
9
|
name: "CapacitorGeolocation",
|
|
@@ -11,7 +11,7 @@ let package = Package(
|
|
|
11
11
|
],
|
|
12
12
|
dependencies: [
|
|
13
13
|
.package(url: "https://github.com/ionic-team/capacitor-swift-pm.git", from: "7.0.0"),
|
|
14
|
-
.package(url: "https://github.com/ionic-team/ion-ios-geolocation.git", from: "
|
|
14
|
+
.package(url: "https://github.com/ionic-team/ion-ios-geolocation.git", from: "1.0.2")
|
|
15
15
|
],
|
|
16
16
|
targets: [
|
|
17
17
|
.target(
|
package/README.md
CHANGED
|
@@ -167,13 +167,12 @@ Not available on web.
|
|
|
167
167
|
|
|
168
168
|
#### PositionOptions
|
|
169
169
|
|
|
170
|
-
| Prop
|
|
171
|
-
|
|
|
172
|
-
| **`enableHighAccuracy`**
|
|
173
|
-
| **`timeout`**
|
|
174
|
-
| **`maximumAge`**
|
|
175
|
-
| **`minimumUpdateInterval`**
|
|
176
|
-
| **`enableLocationFallback`** | <code>boolean</code> | This option applies to Android only. Whether 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. | <code>true</code> | 8.0.0 |
|
|
170
|
+
| Prop | Type | Description | Default | Since |
|
|
171
|
+
| --------------------------- | -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | ----- |
|
|
172
|
+
| **`enableHighAccuracy`** | <code>boolean</code> | High accuracy mode (such as GPS, if available) On Android 12+ devices it will be ignored if users didn't grant ACCESS_FINE_LOCATION permissions (can be checked with location alias). | <code>false</code> | 1.0.0 |
|
|
173
|
+
| **`timeout`** | <code>number</code> | The maximum wait time in milliseconds for location updates. In Android, since version 7.1.0 of the plugin, it is also used to determine the interval of location updates for `watchPosition`. | <code>10000</code> | 1.0.0 |
|
|
174
|
+
| **`maximumAge`** | <code>number</code> | The maximum age in milliseconds of a possible cached position that is acceptable to return | <code>0</code> | 1.0.0 |
|
|
175
|
+
| **`minimumUpdateInterval`** | <code>number</code> | The minumum update interval for location updates. 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. | <code>5000</code> | 6.1.0 |
|
|
177
176
|
|
|
178
177
|
|
|
179
178
|
#### ClearWatchOptions
|
|
@@ -238,11 +237,10 @@ The following table list all the plugin errors:
|
|
|
238
237
|
| OS-PLUG-GLOC-0007 | Android, iOS | Location services are not enabled. |
|
|
239
238
|
| OS-PLUG-GLOC-0008 | iOS | Application's use of location services was restricted. |
|
|
240
239
|
| OS-PLUG-GLOC-0009 | Android | Request to enable location was denied. |
|
|
241
|
-
| OS-PLUG-GLOC-0010 | Android
|
|
240
|
+
| OS-PLUG-GLOC-0010 | Android | Could not obtain location in time. Try with a higher timeout. |
|
|
242
241
|
| OS-PLUG-GLOC-0011 | Android | Timeout needs to be a positive value. |
|
|
243
242
|
| OS-PLUG-GLOC-0012 | Android | WatchId not found. |
|
|
244
243
|
| OS-PLUG-GLOC-0013 | Android | WatchId needs to be provided. |
|
|
245
244
|
| OS-PLUG-GLOC-0014 | Android | Google Play Services error user resolvable. |
|
|
246
245
|
| OS-PLUG-GLOC-0015 | Android | Google Play Services error. |
|
|
247
246
|
| OS-PLUG-GLOC-0016 | Android | Location settings error. |
|
|
248
|
-
| OS-PLUG-GLOC-0017 | Android | Unable to retrieve location because device has both Network and Location turned off. |
|
package/android/build.gradle
CHANGED
|
@@ -23,10 +23,10 @@ apply plugin: 'kotlin-android'
|
|
|
23
23
|
|
|
24
24
|
android {
|
|
25
25
|
namespace "com.capacitorjs.plugins.geolocation"
|
|
26
|
-
compileSdk project.hasProperty('compileSdkVersion') ? rootProject.ext.compileSdkVersion :
|
|
26
|
+
compileSdk project.hasProperty('compileSdkVersion') ? rootProject.ext.compileSdkVersion : 35
|
|
27
27
|
defaultConfig {
|
|
28
|
-
minSdkVersion project.hasProperty('minSdkVersion') ? rootProject.ext.minSdkVersion :
|
|
29
|
-
targetSdkVersion project.hasProperty('targetSdkVersion') ? rootProject.ext.targetSdkVersion :
|
|
28
|
+
minSdkVersion project.hasProperty('minSdkVersion') ? rootProject.ext.minSdkVersion : 23
|
|
29
|
+
targetSdkVersion project.hasProperty('targetSdkVersion') ? rootProject.ext.targetSdkVersion : 35
|
|
30
30
|
versionCode 1
|
|
31
31
|
versionName "1.0"
|
|
32
32
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
|
@@ -58,7 +58,7 @@ repositories {
|
|
|
58
58
|
|
|
59
59
|
dependencies {
|
|
60
60
|
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
|
61
|
-
implementation("io.ionic.libs:iongeolocation-android:
|
|
61
|
+
implementation("io.ionic.libs:iongeolocation-android:1.0.0")
|
|
62
62
|
implementation project(':capacitor-android')
|
|
63
63
|
implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion"
|
|
64
64
|
|
|
@@ -68,9 +68,4 @@ object GeolocationErrors {
|
|
|
68
68
|
code = formatErrorCode(16),
|
|
69
69
|
message = "Location settings error."
|
|
70
70
|
)
|
|
71
|
-
|
|
72
|
-
val NETWORK_LOCATION_DISABLED_ERROR = ErrorInfo(
|
|
73
|
-
code = formatErrorCode(17),
|
|
74
|
-
message = "Unable to retrieve location because device has both Network and Location turned off."
|
|
75
|
-
)
|
|
76
71
|
}
|
|
@@ -54,7 +54,11 @@ class GeolocationPlugin : Plugin() {
|
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
this.controller = IONGLOCController(
|
|
57
|
+
this.controller = IONGLOCController(
|
|
58
|
+
LocationServices.getFusedLocationProviderClient(context),
|
|
59
|
+
activityLauncher
|
|
60
|
+
)
|
|
61
|
+
|
|
58
62
|
}
|
|
59
63
|
|
|
60
64
|
override fun handleOnDestroy() {
|
|
@@ -78,7 +82,7 @@ class GeolocationPlugin : Plugin() {
|
|
|
78
82
|
* @param onLocationEnabled lambda function to use in case location services are enabled
|
|
79
83
|
*/
|
|
80
84
|
private fun checkLocationState(call: PluginCall, onLocationEnabled: () -> Unit) {
|
|
81
|
-
if (controller.areLocationServicesEnabled()) {
|
|
85
|
+
if (controller.areLocationServicesEnabled(context)) {
|
|
82
86
|
onLocationEnabled()
|
|
83
87
|
} else {
|
|
84
88
|
call.sendError(GeolocationErrors.LOCATION_DISABLED)
|
|
@@ -275,9 +279,6 @@ class GeolocationPlugin : Plugin() {
|
|
|
275
279
|
is IONGLOCException.IONGLOCSettingsException -> {
|
|
276
280
|
call.sendError(GeolocationErrors.LOCATION_SETTINGS_ERROR)
|
|
277
281
|
}
|
|
278
|
-
is IONGLOCException.IONGLOCLocationAndNetworkDisabledException -> {
|
|
279
|
-
call.sendError(GeolocationErrors.NETWORK_LOCATION_DISABLED_ERROR)
|
|
280
|
-
}
|
|
281
282
|
is IONGLOCException.IONGLOCInvalidTimeoutException -> {
|
|
282
283
|
call.sendError(GeolocationErrors.INVALID_TIMEOUT)
|
|
283
284
|
}
|
|
@@ -329,15 +330,8 @@ class GeolocationPlugin : Plugin() {
|
|
|
329
330
|
val maximumAge = call.getNumber("maximumAge", 0)
|
|
330
331
|
val enableHighAccuracy = call.getBoolean("enableHighAccuracy", false) ?: false
|
|
331
332
|
val minimumUpdateInterval = call.getNumber("minimumUpdateInterval", 5000)
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
val locationOptions = IONGLOCLocationOptions(
|
|
335
|
-
timeout,
|
|
336
|
-
maximumAge,
|
|
337
|
-
enableHighAccuracy,
|
|
338
|
-
enableLocationFallback,
|
|
339
|
-
minimumUpdateInterval
|
|
340
|
-
)
|
|
333
|
+
|
|
334
|
+
val locationOptions = IONGLOCLocationOptions(timeout, maximumAge, enableHighAccuracy, minimumUpdateInterval)
|
|
341
335
|
|
|
342
336
|
return locationOptions
|
|
343
337
|
}
|
package/dist/docs.json
CHANGED
|
@@ -230,22 +230,6 @@
|
|
|
230
230
|
"docs": "The minumum update interval for location updates.\n\nIf location updates are available faster than this interval then an update\nwill only occur if the minimum update interval has expired since the last location update.\n\nThis parameter is only available for Android. It has no effect on iOS or Web platforms.",
|
|
231
231
|
"complexTypes": [],
|
|
232
232
|
"type": "number | undefined"
|
|
233
|
-
},
|
|
234
|
-
{
|
|
235
|
-
"name": "enableLocationFallback",
|
|
236
|
-
"tags": [
|
|
237
|
-
{
|
|
238
|
-
"text": "true",
|
|
239
|
-
"name": "default"
|
|
240
|
-
},
|
|
241
|
-
{
|
|
242
|
-
"text": "8.0.0",
|
|
243
|
-
"name": "since"
|
|
244
|
-
}
|
|
245
|
-
],
|
|
246
|
-
"docs": "This option applies to Android only.\n\nWhether to fall back to the Android framework's `LocationManager` in case Google Play Service's location settings checks fail.\nThis can happen for multiple reasons - e.g. device has no Play Services or device has no network connection (Airplane Mode)\nIf set to `false`, failures are propagated to the caller.\nNote that `LocationManager` may not be as effective as Google Play Services implementation.\nIf the device's in airplane mode, only the GPS provider is used, which may take longer to return a location, depending on GPS signal.\nThis means that to receive location in such circumstances, you may need to provide a higher timeout.",
|
|
247
|
-
"complexTypes": [],
|
|
248
|
-
"type": "boolean | undefined"
|
|
249
233
|
}
|
|
250
234
|
]
|
|
251
235
|
},
|
|
@@ -168,20 +168,6 @@ export interface PositionOptions {
|
|
|
168
168
|
* @since 6.1.0
|
|
169
169
|
*/
|
|
170
170
|
minimumUpdateInterval?: number;
|
|
171
|
-
/**
|
|
172
|
-
* This option applies to Android only.
|
|
173
|
-
*
|
|
174
|
-
* Whether to fall back to the Android framework's `LocationManager` in case Google Play Service's location settings checks fail.
|
|
175
|
-
* This can happen for multiple reasons - e.g. device has no Play Services or device has no network connection (Airplane Mode)
|
|
176
|
-
* If set to `false`, failures are propagated to the caller.
|
|
177
|
-
* Note that `LocationManager` may not be as effective as Google Play Services implementation.
|
|
178
|
-
* 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.
|
|
179
|
-
* This means that to receive location in such circumstances, you may need to provide a higher timeout.
|
|
180
|
-
*
|
|
181
|
-
* @default true
|
|
182
|
-
* @since 8.0.0
|
|
183
|
-
*/
|
|
184
|
-
enableLocationFallback?: boolean;
|
|
185
171
|
}
|
|
186
172
|
export type WatchPositionCallback = (position: Position | null, err?: any) => void;
|
|
187
173
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"","sourcesContent":["import type { PermissionState } from '@capacitor/core';\n\nexport type CallbackID = string;\n\nexport interface PermissionStatus {\n /**\n * Permission state for location alias.\n *\n * On Android it requests/checks both ACCESS_COARSE_LOCATION and\n * ACCESS_FINE_LOCATION permissions.\n *\n * On iOS and web it requests/checks location permission.\n *\n * @since 1.0.0\n */\n location: PermissionState;\n\n /**\n * Permission state for coarseLocation alias.\n *\n * On Android it requests/checks ACCESS_COARSE_LOCATION.\n *\n * On Android 12+, users can choose between Approximate location (ACCESS_COARSE_LOCATION) or\n * Precise location (ACCESS_FINE_LOCATION), so this alias can be used if the app doesn't\n * need high accuracy.\n *\n * On iOS and web it will have the same value as location alias.\n *\n * @since 1.2.0\n */\n coarseLocation: PermissionState;\n}\n\nexport type GeolocationPermissionType = 'location' | 'coarseLocation';\n\nexport interface GeolocationPluginPermissions {\n permissions: GeolocationPermissionType[];\n}\n\nexport interface GeolocationPlugin {\n /**\n * Get the current GPS location of the device\n *\n * @since 1.0.0\n */\n getCurrentPosition(options?: PositionOptions): Promise<Position>;\n\n /**\n * Set up a watch for location changes. Note that watching for location changes\n * can consume a large amount of energy. Be smart about listening only when you need to.\n *\n * @since 1.0.0\n */\n watchPosition(options: PositionOptions, callback: WatchPositionCallback): Promise<CallbackID>;\n\n /**\n * Clear a given watch\n *\n * @since 1.0.0\n */\n clearWatch(options: ClearWatchOptions): Promise<void>;\n\n /**\n * Check location permissions. Will throw if system location services are disabled.\n *\n * @since 1.0.0\n */\n checkPermissions(): Promise<PermissionStatus>;\n\n /**\n * Request location permissions. Will throw if system location services are disabled.\n *\n * Not available on web.\n *\n * @since 1.0.0\n */\n requestPermissions(permissions?: GeolocationPluginPermissions): Promise<PermissionStatus>;\n}\n\nexport interface ClearWatchOptions {\n id: CallbackID;\n}\n\nexport interface Position {\n /**\n * Creation timestamp for coords\n *\n * @since 1.0.0\n */\n timestamp: number;\n\n /**\n * The GPS coordinates along with the accuracy of the data\n *\n * @since 1.0.0\n */\n coords: {\n /**\n * Latitude in decimal degrees\n *\n * @since 1.0.0\n */\n latitude: number;\n\n /**\n * longitude in decimal degrees\n *\n * @since 1.0.0\n */\n longitude: number;\n\n /**\n * Accuracy level of the latitude and longitude coordinates in meters\n *\n * @since 1.0.0\n */\n accuracy: number;\n\n /**\n * Accuracy level of the altitude coordinate in meters, if available.\n *\n * Available on all iOS versions and on Android 8.0+.\n *\n * @since 1.0.0\n */\n altitudeAccuracy: number | null | undefined;\n\n /**\n * The altitude the user is at (if available)\n *\n * @since 1.0.0\n */\n altitude: number | null;\n\n /**\n * The speed the user is traveling (if available)\n *\n * @since 1.0.0\n */\n speed: number | null;\n\n /**\n * The heading the user is facing (if available)\n *\n * @since 1.0.0\n */\n heading: number | null;\n };\n}\n\nexport interface PositionOptions {\n /**\n * High accuracy mode (such as GPS, if available)\n *\n * On Android 12+ devices it will be ignored if users didn't grant\n * ACCESS_FINE_LOCATION permissions (can be checked with location alias).\n *\n * @default false\n * @since 1.0.0\n */\n enableHighAccuracy?: boolean;\n\n /**\n * The maximum wait time in milliseconds for location updates.\n *\n * In Android, since version 7.1.0 of the plugin, it is also used to determine the\n * interval of location updates for `watchPosition`.\n *\n * @default 10000\n * @since 1.0.0\n */\n timeout?: number;\n\n /**\n * The maximum age in milliseconds of a possible cached position that is acceptable to return\n *\n * @default 0\n * @since 1.0.0\n */\n maximumAge?: number;\n\n /**\n * The minumum update interval for location updates.\n *\n * If location updates are available faster than this interval then an update\n * will only occur if the minimum update interval has expired since the last location update.\n *\n * This parameter is only available for Android. It has no effect on iOS or Web platforms.\n *\n * @default 5000\n * @since 6.1.0\n */\n minimumUpdateInterval?: number;\n
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"","sourcesContent":["import type { PermissionState } from '@capacitor/core';\n\nexport type CallbackID = string;\n\nexport interface PermissionStatus {\n /**\n * Permission state for location alias.\n *\n * On Android it requests/checks both ACCESS_COARSE_LOCATION and\n * ACCESS_FINE_LOCATION permissions.\n *\n * On iOS and web it requests/checks location permission.\n *\n * @since 1.0.0\n */\n location: PermissionState;\n\n /**\n * Permission state for coarseLocation alias.\n *\n * On Android it requests/checks ACCESS_COARSE_LOCATION.\n *\n * On Android 12+, users can choose between Approximate location (ACCESS_COARSE_LOCATION) or\n * Precise location (ACCESS_FINE_LOCATION), so this alias can be used if the app doesn't\n * need high accuracy.\n *\n * On iOS and web it will have the same value as location alias.\n *\n * @since 1.2.0\n */\n coarseLocation: PermissionState;\n}\n\nexport type GeolocationPermissionType = 'location' | 'coarseLocation';\n\nexport interface GeolocationPluginPermissions {\n permissions: GeolocationPermissionType[];\n}\n\nexport interface GeolocationPlugin {\n /**\n * Get the current GPS location of the device\n *\n * @since 1.0.0\n */\n getCurrentPosition(options?: PositionOptions): Promise<Position>;\n\n /**\n * Set up a watch for location changes. Note that watching for location changes\n * can consume a large amount of energy. Be smart about listening only when you need to.\n *\n * @since 1.0.0\n */\n watchPosition(options: PositionOptions, callback: WatchPositionCallback): Promise<CallbackID>;\n\n /**\n * Clear a given watch\n *\n * @since 1.0.0\n */\n clearWatch(options: ClearWatchOptions): Promise<void>;\n\n /**\n * Check location permissions. Will throw if system location services are disabled.\n *\n * @since 1.0.0\n */\n checkPermissions(): Promise<PermissionStatus>;\n\n /**\n * Request location permissions. Will throw if system location services are disabled.\n *\n * Not available on web.\n *\n * @since 1.0.0\n */\n requestPermissions(permissions?: GeolocationPluginPermissions): Promise<PermissionStatus>;\n}\n\nexport interface ClearWatchOptions {\n id: CallbackID;\n}\n\nexport interface Position {\n /**\n * Creation timestamp for coords\n *\n * @since 1.0.0\n */\n timestamp: number;\n\n /**\n * The GPS coordinates along with the accuracy of the data\n *\n * @since 1.0.0\n */\n coords: {\n /**\n * Latitude in decimal degrees\n *\n * @since 1.0.0\n */\n latitude: number;\n\n /**\n * longitude in decimal degrees\n *\n * @since 1.0.0\n */\n longitude: number;\n\n /**\n * Accuracy level of the latitude and longitude coordinates in meters\n *\n * @since 1.0.0\n */\n accuracy: number;\n\n /**\n * Accuracy level of the altitude coordinate in meters, if available.\n *\n * Available on all iOS versions and on Android 8.0+.\n *\n * @since 1.0.0\n */\n altitudeAccuracy: number | null | undefined;\n\n /**\n * The altitude the user is at (if available)\n *\n * @since 1.0.0\n */\n altitude: number | null;\n\n /**\n * The speed the user is traveling (if available)\n *\n * @since 1.0.0\n */\n speed: number | null;\n\n /**\n * The heading the user is facing (if available)\n *\n * @since 1.0.0\n */\n heading: number | null;\n };\n}\n\nexport interface PositionOptions {\n /**\n * High accuracy mode (such as GPS, if available)\n *\n * On Android 12+ devices it will be ignored if users didn't grant\n * ACCESS_FINE_LOCATION permissions (can be checked with location alias).\n *\n * @default false\n * @since 1.0.0\n */\n enableHighAccuracy?: boolean;\n\n /**\n * The maximum wait time in milliseconds for location updates.\n *\n * In Android, since version 7.1.0 of the plugin, it is also used to determine the\n * interval of location updates for `watchPosition`.\n *\n * @default 10000\n * @since 1.0.0\n */\n timeout?: number;\n\n /**\n * The maximum age in milliseconds of a possible cached position that is acceptable to return\n *\n * @default 0\n * @since 1.0.0\n */\n maximumAge?: number;\n\n /**\n * The minumum update interval for location updates.\n *\n * If location updates are available faster than this interval then an update\n * will only occur if the minimum update interval has expired since the last location update.\n *\n * This parameter is only available for Android. It has no effect on iOS or Web platforms.\n *\n * @default 5000\n * @since 6.1.0\n */\n minimumUpdateInterval?: number;\n}\n\nexport type WatchPositionCallback = (position: Position | null, err?: any) => void;\n\n/**\n * @deprecated Use `PositionOptions`.\n * @since 1.0.0\n */\nexport type GeolocationOptions = PositionOptions;\n\n/**\n * @deprecated Use `WatchPositionCallback`.\n * @since 1.0.0\n */\nexport type GeolocationWatchCallback = WatchPositionCallback;\n\n/**\n * @deprecated Use `Position`.\n * @since 1.0.0\n */\nexport type GeolocationPosition = Position;\n"]}
|
|
@@ -24,7 +24,6 @@ final class GeolocationCallbackManager {
|
|
|
24
24
|
private(set) var requestPermissionsCallbacks: [CAPPluginCall]
|
|
25
25
|
private(set) var locationCallbacks: [CAPPluginCall]
|
|
26
26
|
private(set) var watchCallbacks: [String: CAPPluginCall]
|
|
27
|
-
private(set) var timeout: Int?
|
|
28
27
|
private let capacitorBridge: CAPBridgeProtocol?
|
|
29
28
|
|
|
30
29
|
private var allCallbackGroups: [GeolocationCallbackGroup] {
|
|
@@ -53,15 +52,11 @@ final class GeolocationCallbackManager {
|
|
|
53
52
|
func addLocationCallback(capacitorCall call: CAPPluginCall) {
|
|
54
53
|
capacitorBridge?.saveCall(call)
|
|
55
54
|
locationCallbacks.append(call)
|
|
56
|
-
let timeout = call.getInt(Constants.Arguments.timeout)
|
|
57
|
-
self.timeout = timeout
|
|
58
55
|
}
|
|
59
56
|
|
|
60
57
|
func addWatchCallback(_ watchId: String, capacitorCall call: CAPPluginCall) {
|
|
61
58
|
capacitorBridge?.saveCall(call)
|
|
62
59
|
watchCallbacks[watchId] = call
|
|
63
|
-
let timeout = call.getInt(Constants.Arguments.timeout)
|
|
64
|
-
self.timeout = timeout
|
|
65
60
|
}
|
|
66
61
|
|
|
67
62
|
func clearRequestPermissionsCallbacks() {
|
|
@@ -114,10 +109,6 @@ final class GeolocationCallbackManager {
|
|
|
114
109
|
|
|
115
110
|
func sendError(_ error: GeolocationError) {
|
|
116
111
|
createPluginResult(status: .error(error.toCodeMessagePair()))
|
|
117
|
-
|
|
118
|
-
if case .timeout = error {
|
|
119
|
-
watchCallbacks.keys.forEach { clearWatchCallbackIfExists($0) }
|
|
120
|
-
}
|
|
121
112
|
}
|
|
122
113
|
}
|
|
123
114
|
|
|
@@ -10,7 +10,6 @@ enum GeolocationError: Error {
|
|
|
10
10
|
case permissionRestricted
|
|
11
11
|
case positionUnavailable
|
|
12
12
|
case inputArgumentsIssue(target: GeolocationMethod)
|
|
13
|
-
case timeout
|
|
14
13
|
|
|
15
14
|
func toCodeMessagePair() -> (String, String) {
|
|
16
15
|
("OS-PLUG-GLOC-\(String(format: "%04d", code))", description)
|
|
@@ -30,18 +29,16 @@ private extension GeolocationError {
|
|
|
30
29
|
case .watchPosition: 5
|
|
31
30
|
case .clearWatch: 6
|
|
32
31
|
}
|
|
33
|
-
case .timeout: 10
|
|
34
32
|
}
|
|
35
33
|
}
|
|
36
34
|
|
|
37
35
|
var description: String {
|
|
38
36
|
switch self {
|
|
39
|
-
case .positionUnavailable: "There was
|
|
37
|
+
case .positionUnavailable: "There was en error trying to obtain the location."
|
|
40
38
|
case .permissionDenied: "Location permission request was denied."
|
|
41
39
|
case .locationServicesDisabled: "Location services are not enabled."
|
|
42
40
|
case .permissionRestricted: "Application's use of location services was restricted."
|
|
43
41
|
case .inputArgumentsIssue(let target): "The '\(target.rawValue)' input parameters aren't valid."
|
|
44
|
-
case .timeout: "Could not obtain location in time. Try with a higher timeout."
|
|
45
42
|
}
|
|
46
43
|
}
|
|
47
44
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import Capacitor
|
|
2
2
|
import IONGeolocationLib
|
|
3
3
|
import UIKit
|
|
4
|
+
|
|
4
5
|
import Combine
|
|
5
6
|
|
|
6
7
|
@objc(GeolocationPlugin)
|
|
@@ -18,7 +19,6 @@ public class GeolocationPlugin: CAPPlugin, CAPBridgedPlugin {
|
|
|
18
19
|
private var locationService: (any IONGLOCService)?
|
|
19
20
|
private var cancellables = Set<AnyCancellable>()
|
|
20
21
|
private var locationCancellable: AnyCancellable?
|
|
21
|
-
private var timeoutCancellable: AnyCancellable?
|
|
22
22
|
private var callbackManager: GeolocationCallbackManager?
|
|
23
23
|
private var statusInitialized = false
|
|
24
24
|
private var locationInitialized: Bool = false
|
|
@@ -26,7 +26,7 @@ public class GeolocationPlugin: CAPPlugin, CAPBridgedPlugin {
|
|
|
26
26
|
override public func load() {
|
|
27
27
|
self.locationService = IONGLOCManagerWrapper()
|
|
28
28
|
self.callbackManager = .init(capacitorBridge: bridge)
|
|
29
|
-
|
|
29
|
+
|
|
30
30
|
NotificationCenter.default.addObserver(
|
|
31
31
|
self,
|
|
32
32
|
selector: #selector(appDidBecomeActive),
|
|
@@ -40,10 +40,8 @@ public class GeolocationPlugin: CAPPlugin, CAPBridgedPlugin {
|
|
|
40
40
|
print("App became active. Restarting location monitoring for watch callbacks.")
|
|
41
41
|
locationCancellable?.cancel()
|
|
42
42
|
locationCancellable = nil
|
|
43
|
-
timeoutCancellable?.cancel()
|
|
44
|
-
timeoutCancellable = nil
|
|
45
43
|
locationInitialized = false
|
|
46
|
-
|
|
44
|
+
|
|
47
45
|
locationService?.stopMonitoringLocation()
|
|
48
46
|
locationService?.startMonitoringLocation()
|
|
49
47
|
bindLocationPublisher()
|
|
@@ -79,8 +77,6 @@ public class GeolocationPlugin: CAPPlugin, CAPBridgedPlugin {
|
|
|
79
77
|
locationService?.stopMonitoringLocation()
|
|
80
78
|
locationCancellable?.cancel()
|
|
81
79
|
locationCancellable = nil
|
|
82
|
-
timeoutCancellable?.cancel()
|
|
83
|
-
timeoutCancellable = nil
|
|
84
80
|
locationInitialized = false
|
|
85
81
|
}
|
|
86
82
|
|
|
@@ -149,7 +145,7 @@ private extension GeolocationPlugin {
|
|
|
149
145
|
locationCancellable = locationService?.currentLocationPublisher
|
|
150
146
|
.catch { [weak self] error -> AnyPublisher<IONGLOCPositionModel, Never> in
|
|
151
147
|
print("An error was found while retrieving the location: \(error)")
|
|
152
|
-
|
|
148
|
+
|
|
153
149
|
if case IONGLOCLocationError.locationUnavailable = error {
|
|
154
150
|
print("Location unavailable (likely due to backgrounding). Keeping watch callbacks alive.")
|
|
155
151
|
self?.callbackManager?.sendError(.positionUnavailable)
|
|
@@ -164,15 +160,6 @@ private extension GeolocationPlugin {
|
|
|
164
160
|
.sink(receiveValue: { [weak self] position in
|
|
165
161
|
self?.callbackManager?.sendSuccess(with: position)
|
|
166
162
|
})
|
|
167
|
-
|
|
168
|
-
timeoutCancellable = locationService?.locationTimeoutPublisher
|
|
169
|
-
.sink(receiveValue: { [weak self] error in
|
|
170
|
-
if case .timeout = error {
|
|
171
|
-
self?.callbackManager?.sendError(.timeout)
|
|
172
|
-
} else {
|
|
173
|
-
self?.callbackManager?.sendError(.positionUnavailable)
|
|
174
|
-
}
|
|
175
|
-
})
|
|
176
163
|
}
|
|
177
164
|
|
|
178
165
|
func requestLocationAuthorisation(type requestType: IONGLOCAuthorisationRequestType) {
|
|
@@ -213,10 +200,10 @@ private extension GeolocationPlugin {
|
|
|
213
200
|
callbackManager?.sendRequestPermissionsSuccess(Constants.AuthorisationStatus.Status.granted)
|
|
214
201
|
}
|
|
215
202
|
if shouldRequestCurrentPosition {
|
|
216
|
-
locationService?.requestSingleLocation(
|
|
203
|
+
locationService?.requestSingleLocation()
|
|
217
204
|
}
|
|
218
205
|
if shouldRequestLocationMonitoring {
|
|
219
|
-
locationService?.startMonitoringLocation(
|
|
206
|
+
locationService?.startMonitoringLocation()
|
|
220
207
|
}
|
|
221
208
|
}
|
|
222
209
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@capacitor/geolocation",
|
|
3
|
-
"version": "7.1.
|
|
3
|
+
"version": "7.1.6",
|
|
4
4
|
"description": "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.",
|
|
5
5
|
"main": "dist/plugin.cjs.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"prepublishOnly": "npm run build"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@capacitor/synapse": "^1.0.
|
|
49
|
+
"@capacitor/synapse": "^1.0.3"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
52
|
"@capacitor/android": "next",
|
|
@@ -72,7 +72,7 @@
|
|
|
72
72
|
"typescript": "~5.4.5"
|
|
73
73
|
},
|
|
74
74
|
"peerDependencies": {
|
|
75
|
-
"@capacitor/core": ">=
|
|
75
|
+
"@capacitor/core": ">=7.0.0"
|
|
76
76
|
},
|
|
77
77
|
"prettier": "@ionic/prettier-config",
|
|
78
78
|
"swiftlint": "@ionic/swiftlint-config",
|