apache / apache/cordova-plugin-geolocation

iOS 14: Changing authorization in Settings (suspended App) fails to transmit PositionError

Open
#226 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
JavaScript
Stars
646
Forks
654
PR merge metrics
No merged PRs in 30d

Description

# Problem

Changing authorization in Settings to denied (when the App is suspended) fails to transmit PositionError to the WebView
(found this while testing #224 as I noticed the PERMISSION_DENIED message was not transmitted to the WebView)

### What is expected to happen?

navigator.geolocation.watchPosition() the error handler is called with PositionError.PERMISSION_DENIED

### What does actually happen?

navigator.geolocation.watchPosition() the error handler is not called at all.

## Diagnosis

1. `- locationManager: didFailWithError:` is correctly called, but it is called **while the app is in the background**!
2. `[CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:posError]` executes without error
2. The CDVWebView does not seem to receive anything or JS does not work while in background
3. CDVWebViewEngine shouldReloadWebView:: is executed after the app has resumed (not sure what that does)
4. geolocation is stopped without notice/error to the web-view code as errors are not delivered

This is quite difficult to fix.
**Is there a way to send command-results delayed after the app resumes?**

### Environment, Platform, Device
cordova-plugin-geolocation HEAD, iOS 14

Contributor guide

Open the contributing guide

Research direction

Start at locationManager:didFailWithError: and trace how CDVPluginResult is delivered while the app is suspended, then inspect CDVWebViewEngine shouldReloadWebView:: during resume. Reproduce the iOS 14 authorization change and determine how the PositionError can reach the WebView after resumption; done means the watchPosition error handler receives PERMISSION_DENIED.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript, objective-c
Domain
mobile-dev
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.