apache / apache/cordova-plugin-geolocation
iOS 14: Changing authorization in Settings (suspended App) fails to transmit PositionError
- 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
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