Repository navigation
iOS getCurrentLocation returns nothing after a few seconds #176
Description
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.
Activity
jlooper commentedon 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 commentedon 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
getCurrentLocationsplurges out the location based on the ones that failed in the background.So the console now looks like:
lini commentedon Nov 28, 2018
Do you have the
iosAllowsBackgroundLocationUpdatesoption set totruein 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 commentedon Nov 28, 2018
@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 commentedon Nov 29, 2018
@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.
Mflm commentedon Jan 9, 2019
Hi
Any solution?
the location service in iOS doesn't run.
RaisinBread42 commentedon Feb 23, 2019
Any progress with this issue @zbranzov ?
de-raaf-media commentedon Mar 29, 2019
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 commentedon Oct 14, 2019
@zbranzov hi, so I have enabled iosAllowsBackgroundLocationUpdates this property, but seems didn't detect locations in background. can you please help?