Skip to content
This repository has been archived by the owner on Nov 8, 2023. It is now read-only.

iOS getCurrentLocation returns nothing after a few seconds #176

Open
RaisinBread42 opened this issue Nov 27, 2018 · 9 comments
Open

iOS getCurrentLocation returns nothing after a few seconds #176

RaisinBread42 opened this issue Nov 27, 2018 · 9 comments

Comments

@RaisinBread42
Copy link

RaisinBread42 commented Nov 27, 2018

Please, provide the following version numbers that your issue occurs with:

"nativescript": {
    "id": "org.nativescript.application",
    "tns-android": {
      "version": "5.0.0-rc-2018-10-18-172901-01"
    },
    "tns-ios": {
      "version": "5.0.0"
    }
  },
  "dependencies": {
    "http": "0.0.0",
    "https": "^1.0.0",
    "nativescript-geolocation": "^4.3.1",
    "nativescript-localstorage": "^2.0.0",
    "nativescript-mapbox": "^4.4.0",
    "nativescript-theme-core": "^1.0.4",
    "nativescript-ui-sidedrawer": "^4.3.0",
    "nativescript-vue": "^2.0.0",
    "querystring": "^0.2.0",
    "request": "^2.88.0",
    "tns-core-modules": "^4.2.0",
    "vuex": "^3.0.1"
  },

What I am trying to do is to send geolocation information via https to a server. This info will be sent when the app is pushed in the background. I've followed the sample app https://github.com/NativeScript/sample-ios-background-execution for implementing a background delegate.

However, after running the command tns run ios --bundle --emulator, and press the home button to push the app into the background, the getCurrentLocation function returns nothing after a few seconds.

Here's an example of my console:

CONSOLE LOG file:///app/bundle.js:1685:20: 'Enter background'
...
CONSOLE LOG file:///app/bundle.js:1712:20: 'Printing geolocation:'
CONSOLE LOG file:///app/bundle.js:1359:16: '{"latitude":37.785834,"longitude":-122.406417,"altitude":0,"horizontalAccuracy":5,"verticalAccuracy":-1,"speed":-1,"direction":-1,"timestamp":"2018-11-27T18:55:52.234Z","ios":{}}'
CONSOLE LOG file:///app/bundle.js:1712:20: 'Printing geolocation:'
CONSOLE LOG file:///app/bundle.js:1359:16: '{"latitude":37.785834,"longitude":-122.406417,"altitude":0,"horizontalAccuracy":5,"verticalAccuracy":-1,"speed":-1,"direction":-1,"timestamp":"2018-11-27T18:55:52.234Z","ios":{}}'
CONSOLE LOG file:///app/bundle.js:1712:20: 'Printing geolocation:'
CONSOLE LOG file:///app/bundle.js:1359:16: '{"latitude":37.785834,"longitude":-122.406417,"altitude":0,"horizontalAccuracy":5,"verticalAccuracy":-1,"speed":-1,"direction":-1,"timestamp":"2018-11-27T18:55:52.249Z","ios":{}}'
CONSOLE LOG file:///app/bundle.js:1712:20: 'Printing geolocation:'
CONSOLE LOG file:///app/bundle.js:1359:16: '{"latitude":37.785834,"longitude":-122.406417,"altitude":0,"horizontalAccuracy":5,"verticalAccuracy":-1,"speed":-1,"direction":-1,"timestamp":"2018-11-27T18:55:58.255Z","ios":{}}'
CONSOLE LOG file:///app/bundle.js:1712:20: 'Printing geolocation:'
CONSOLE LOG file:///app/bundle.js:1712:20: 'Printing geolocation:'
CONSOLE LOG file:///app/bundle.js:1712:20: 'Printing geolocation:'
CONSOLE LOG file:///app/bundle.js:1712:20: 'Printing geolocation:'
CONSOLE LOG file:///app/bundle.js:1712:20: 'Printing geolocation:'
CONSOLE LOG file:///app/bundle.js:1712:20: 'Printing geolocation:'
CONSOLE LOG file:///app/bundle.js:1712:20: 'Printing geolocation:'
CONSOLE LOG file:///app/bundle.js:1712:20: 'Printing geolocation:'
CONSOLE LOG file:///app/bundle.js:1712:20: 'Printing geolocation:'
CONSOLE LOG file:///app/bundle.js:1712:20: 'Printing geolocation:'
CONSOLE LOG file:///app/bundle.js:1712:20: 'Printing geolocation:'
CONSOLE LOG file:///app/bundle.js:1712:20: 'Printing geolocation:'
CONSOLE LOG file:///app/bundle.js:1712:20: 'Printing geolocation:'
CONSOLE LOG file:///app/bundle.js:1712:20: 'Printing geolocation:'
CONSOLE LOG file:///app/bundle.js:1712:20: 'Printing geolocation:'
CONSOLE LOG file:///app/bundle.js:1712:20: 'Printing geolocation:'
CONSOLE LOG file:///app/bundle.js:1712:20: 'Printing geolocation:'

I don't know what could be causing this? Could it be due to the geolocation module calling a native API, which is returning nothing?

Update
I included a check to see if the app has permission (Ie geolocation.isEnabled()), and it always returns true, I then call getCurrentLocation. Same result.

@jlooper
Copy link

jlooper commented Nov 27, 2018

@DimitarTodorov curious what could be causing this...I haven't experienced it but using it in the background may cause a problem?

@RaisinBread42
Copy link
Author

RaisinBread42 commented Nov 27, 2018

@jlooper that is my impression. I am running the app now. When I open the app again from the background, you can see the getCurrentLocation splurges out the location based on the ones that failed in the background.

So the console now looks like:

... few seconds after runs in background... 
CONSOLE LOG file:///app/bundle.js:1909:20: 'Printing geolocation:'
CONSOLE LOG 'Location Service enabled: true'
CONSOLE LOG file:///app/bundle.js:1909:20: 'Printing geolocation:'
CONSOLE LOG 'Location Service enabled: true'
CONSOLE LOG file:///app/bundle.js:1909:20: 'Printing geolocation:'
CONSOLE LOG 'Location Service enabled: true'
CONSOLE LOG file:///app/bundle.js:1909:20: 'Printing geolocation:'
CONSOLE LOG 'Location Service enabled: true'
CONSOLE LOG file:///app/bundle.js:1909:20: 'Printing geolocation:'
CONSOLE LOG 'Location Service enabled: true'
CONSOLE LOG file:///app/bundle.js:1909:20: 'Printing geolocation:'
CONSOLE LOG 'Location Service enabled: true'
CONSOLE LOG file:///app/bundle.js:1909:20: 'Printing geolocation:'
CONSOLE LOG 'Location Service enabled: true'
CONSOLE LOG file:///app/bundle.js:1909:20: 'Printing geolocation:'
CONSOLE LOG 'Location Service enabled: true'
CONSOLE LOG file:///app/bundle.js:1909:20: 'Printing geolocation:'
CONSOLE LOG 'Location Service enabled: true'
... opening the app again gives...
CONSOLE LOG file:///app/bundle.js:1483:16: '{"latitude":37.785834,"longitude":-122.406417,"altitude":0,"horizontalAccuracy":5,"verticalAccuracy":-1,"speed":-1,"direction":-1,"timestamp":"2018-11-27T22:23:36.058Z","ios":{}}'
CONSOLE LOG file:///app/bundle.js:1483:16: '{"latitude":37.785834,"longitude":-122.406417,"altitude":0,"horizontalAccuracy":5,"verticalAccuracy":-1,"speed":-1,"direction":-1,"timestamp":"2018-11-27T22:23:36.058Z","ios":{}}'
CONSOLE LOG file:///app/bundle.js:1483:16: '{"latitude":37.785834,"longitude":-122.406417,"altitude":0,"horizontalAccuracy":5,"verticalAccuracy":-1,"speed":-1,"direction":-1,"timestamp":"2018-11-27T22:23:36.058Z","ios":{}}'
CONSOLE LOG file:///app/bundle.js:1483:16: '{"latitude":37.785834,"longitude":-122.406417,"altitude":0,"horizontalAccuracy":5,"verticalAccuracy":-1,"speed":-1,"direction":-1,"timestamp":"2018-11-27T22:23:36.058Z","ios":{}}'
CONSOLE LOG file:///app/bundle.js:1483:16: '{"latitude":37.785834,"longitude":-122.406417,"altitude":0,"horizontalAccuracy":5,"verticalAccuracy":-1,"speed":-1,"direction":-1,"timestamp":"2018-11-27T22:23:36.058Z","ios":{}}'
CONSOLE LOG file:///app/bundle.js:1483:16: '{"latitude":37.785834,"longitude":-122.406417,"altitude":0,"horizontalAccuracy":5,"verticalAccuracy":-1,"speed":-1,"direction":-1,"timestamp":"2018-11-27T22:23:36.058Z","ios":{}}'
CONSOLE LOG file:///app/bundle.js:1483:16: '{"latitude":37.785834,"longitude":-122.406417,"altitude":0,"horizontalAccuracy":5,"verticalAccuracy":-1,"speed":-1,"direction":-1,"timestamp":"2018-11-27T22:23:36.058Z","ios":{}}'
...

@lini
Copy link
Contributor

lini commented Nov 28, 2018

Do you have the iosAllowsBackgroundLocationUpdates option set to true in the .watchLocation() call options?

If possible, provide a sample app (https://play.nativescript.org/ works great for this) so we can review the code.

@RaisinBread42
Copy link
Author

@lini the playground doesn't allow me to add typescript files, which is what the background delegate is coded in.

Instead, I created a basic project and uploaded it as its own repo: https://github.com/RaisinBread42/nativescript-vue-background-geolocation, the instructions for running is in the README.md

@zbranzov
Copy link
Contributor

@RaisinBread42
I tried your code on iOS device and what I found is that when the app is in the background the location service does not work (no icon on the status bar) or at least the the geolocation api can't use it as all attempts to get location fail with Error: Timeout while searching for location!
Additional research should be made on the topic to find whether the plugin supports background mode on iOS so keep an eye on this issue.

@zbranzov zbranzov added bug and removed question labels Nov 30, 2018
@Mflm
Copy link

Mflm commented Jan 9, 2019

Hi

Any solution?

the location service in iOS doesn't run.

@RaisinBread42
Copy link
Author

Any progress with this issue @zbranzov ?

@de-raaf-media
Copy link

A few years ago I started developing a gps tracker in Cordova. A huge problem was geolocation updates in the background behaving unpredictable. Unfortunately it seems this is still an issue in 2019. I will monitor this issue and hope that a solution will be found (y)

@karo-dc
Copy link

karo-dc commented Oct 14, 2019

@zbranzov hi, so I have enabled iosAllowsBackgroundLocationUpdates this property, but seems didn't detect locations in background. can you please help?

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

7 participants