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

iOS getCurrentLocation returns nothing after a few seconds #176

Open

Description

@RaisinBread42

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

  1. jlooper commented on Nov 27, 2018

    @jlooper

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

  2. RaisinBread42 commented on Nov 27, 2018

    @RaisinBread42
    Author

    @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":{}}'
    ...
    
  3. lini commented on Nov 28, 2018

    @lini
    Contributor

    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.

  4. RaisinBread42 commented on Nov 28, 2018

    @RaisinBread42
    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

  5. zbranzov commented on Nov 29, 2018

    @zbranzov
    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.

  6. Mflm commented on Jan 9, 2019

    @Mflm

    Hi

    Any solution?

    the location service in iOS doesn't run.

  7. RaisinBread42 commented on Feb 23, 2019

    @RaisinBread42
    Author

    Any progress with this issue @zbranzov ?

  8. de-raaf-media commented on Mar 29, 2019

    @de-raaf-media

    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)

  9. karo-dc commented on Oct 14, 2019

    @karo-dc

    @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 join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions