cordova-plugin-geolocation icon indicating copy to clipboard operation
cordova-plugin-geolocation copied to clipboard

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

Open katzlbt opened this issue 4 years ago • 0 comments

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
  3. The CDVWebView does not seem to receive anything or JS does not work while in background
  4. CDVWebViewEngine shouldReloadWebView:: is executed after the app has resumed (not sure what that does)
  5. 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

katzlbt avatar May 02 '21 14:05 katzlbt