GeoLocation not properly asking for permissions on iOS

Operating system Windows and macOS (Fuse version 1.2.1 on both)

It seems like GeoLocation.getLocation() isn’t working properly when executed on iOS. I am using the example from the documentation as example.

Expected behaviour

(On both Android and iOS)

  • GeoLocation.getLocation() is triggered in code at app-launch.
  • App will ask for permission to use location at app launch.
  • User accepts the permission.
  • Timeout-location text is filled in the app.
  • User clicks “Start Continous listener”-button
  • Continous listener starts and app detects changes and fills the Continous text.

Experienced behaviour

(Android)

  • Same as expected

(iOS)

  • GeoLocation.getLocation() is triggered in code at app-launch.
  • Nothing happens in the app.
  • User clicks “Start Continous listener”-button
  • NOW user is asked for permission to use location.
  • Continous listener starts and app detects changes and fills the Continous text.

Example code added for convienience. Practically identical to example-code in the documentation .

<App>
  <JavaScript>
    var Observable = require("FuseJS/Observable");
    var GeoLocation = require("FuseJS/GeoLocation");

    // Immediate
    var immediateLocation = JSON.stringify(GeoLocation.location);

    // Timeout
    var timeoutLocation = Observable("");
    var timeoutMs = 5000;
    GeoLocation.getLocation(timeoutMs).then(function(location) {
        timeoutLocation.value = JSON.stringify(location);
    }).catch(function(fail) {
        console.log("getLocation fail " + fail);
    });

    // Continuous
    var continuousLocation = GeoLocation.observe("changed").map(JSON.stringify);

    GeoLocation.on("error", function(fail) {
        console.log("GeoLocation error " + fail);
    });

    function startContinuousListener() {
        var intervalMs = 1000;
        var desiredAccuracyInMeters = 10;
        GeoLocation.startListening(intervalMs, desiredAccuracyInMeters);
    }

    function stopContinuousListener() {
        GeoLocation.stopListening();
    }

    module.exports = {
        immediateLocation: immediateLocation,
        timeoutLocation: timeoutLocation,
        continuousLocation: continuousLocation,

        startContinuousListener: startContinuousListener,
        stopContinuousListener: stopContinuousListener
    };
</JavaScript>

<StackPanel>
    <Text>Immediate:</Text>
    <Text Value="{immediateLocation}" />

    <Text>Timeout:</Text>
    <Text Value="{timeoutLocation}" />

    <Text>Continuous:</Text>
    <Text Value="{continuousLocation}" />

    <Button Text="Start continuous listener" Clicked="{startContinuousListener}" />
    <Button Text="Stop continuous listener" Clicked="{stopContinuousListener}" />
</StackPanel>
</App>

{
  "RootNamespace":"",
  "Packages": [
    "Fuse",
    "FuseJS",
    "Fuse.GeoLocation"
  ],
  "Includes": [
    "*"
  ]
}

It was also discovered trough discussion on Slack that your example-project on git is outdated. I would reccomend removing git-examples and only refer to documentation-exampels or visa versa.

I also find it wierd that the permission-dialoge pops up when you click the start button, but if you attempt to execute the very same function in code nothing happens…

Thanks for reporting! I’ve logged a ticket and you can follow its status there.

Hi @krister we’ve Closed the ticket and merged the fix to master on our GitHub